@mnaoumov/obsidian-lib 3.3.0 → 3.4.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 (776) hide show
  1. package/README.md +6 -0
  2. package/dist/lib/cjs/@types/i18next.d.cts +1 -1
  3. package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +3 -3
  4. package/dist/lib/cjs/@types/original-fs.d.cts +2 -1
  5. package/dist/lib/cjs/__merged.cjs +2 -21
  6. package/dist/lib/cjs/__merged.d.cts +1 -1
  7. package/dist/lib/cjs/active-file-provider.cjs +1 -47
  8. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  9. package/dist/lib/cjs/app.cjs +1 -47
  10. package/dist/lib/cjs/app.d.cts +1 -1
  11. package/dist/lib/cjs/async-with-notice.cjs +2 -21
  12. package/dist/lib/cjs/async-with-notice.d.cts +2 -1
  13. package/dist/lib/cjs/attachment-path.cjs +2 -21
  14. package/dist/lib/cjs/attachment-path.d.cts +1 -1
  15. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -21
  16. package/dist/lib/cjs/attachment-unit-folder.d.cts +1 -1
  17. package/dist/lib/cjs/backlink-index.cjs +2 -21
  18. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  19. package/dist/lib/cjs/backlink.cjs +2 -21
  20. package/dist/lib/cjs/backlink.d.cts +1 -1
  21. package/dist/lib/cjs/bases-view-registrar.cjs +2 -21
  22. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  23. package/dist/lib/cjs/callout.cjs +2 -21
  24. package/dist/lib/cjs/callout.d.cts +2 -1
  25. package/dist/lib/cjs/canvas.cjs +2 -21
  26. package/dist/lib/cjs/canvas.d.cts +1 -1
  27. package/dist/lib/cjs/case-insensitive-file-index.cjs +2 -21
  28. package/dist/lib/cjs/case-insensitive-file-index.d.cts +1 -1
  29. package/dist/lib/cjs/code-block-markdown-information.cjs +1 -47
  30. package/dist/lib/cjs/code-block-markdown-information.d.cts +1 -1
  31. package/dist/lib/cjs/code-block-reg-exp.cjs +1 -47
  32. package/dist/lib/cjs/code-block-reg-exp.d.cts +1 -1
  33. package/dist/lib/cjs/codemirror/index.cjs +2 -48
  34. package/dist/lib/cjs/codemirror/index.d.cts +1 -1
  35. package/dist/lib/cjs/codemirror/state-field-spec.cjs +1 -47
  36. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -1
  37. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +2 -21
  38. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +1 -1
  39. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -21
  40. package/dist/lib/cjs/command-handlers/command-handler-component.d.cts +1 -1
  41. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -21
  42. package/dist/lib/cjs/command-handlers/command-handler.d.cts +1 -1
  43. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +2 -21
  44. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +1 -1
  45. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -24
  46. package/dist/lib/cjs/command-handlers/file-command-handler.d.cts +1 -1
  47. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -24
  48. package/dist/lib/cjs/command-handlers/folder-command-handler.d.cts +1 -1
  49. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +3 -22
  50. package/dist/lib/cjs/command-handlers/global-command-handler.d.cts +1 -1
  51. package/dist/lib/cjs/command-handlers/index.cjs +11 -57
  52. package/dist/lib/cjs/command-handlers/index.d.cts +1 -1
  53. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -21
  54. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.d.cts +1 -1
  55. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +1 -47
  56. package/dist/lib/cjs/command-handlers/open-settings-command-handler.d.cts +1 -1
  57. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -47
  58. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.d.cts +1 -1
  59. package/dist/lib/cjs/command-registrar.cjs +1 -47
  60. package/dist/lib/cjs/command-registrar.d.cts +1 -1
  61. package/dist/lib/cjs/community-plugins.cjs +2 -21
  62. package/dist/lib/cjs/community-plugins.d.cts +1 -1
  63. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -21
  64. package/dist/lib/cjs/components/abort-signal-component.d.cts +2 -1
  65. package/dist/lib/cjs/components/all-windows-event-component.cjs +1 -47
  66. package/dist/lib/cjs/components/all-windows-event-component.d.cts +2 -1
  67. package/dist/lib/cjs/components/async-error-handler-component.cjs +2 -21
  68. package/dist/lib/cjs/components/async-error-handler-component.d.cts +1 -1
  69. package/dist/lib/cjs/components/async-events-component.cjs +2 -21
  70. package/dist/lib/cjs/components/async-events-component.d.cts +1 -1
  71. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +1 -47
  72. package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +1 -1
  73. package/dist/lib/cjs/components/component-ex.cjs +3 -16
  74. package/dist/lib/cjs/components/component-ex.d.cts +1 -1
  75. package/dist/lib/cjs/components/console-debug-component.cjs +2 -21
  76. package/dist/lib/cjs/components/console-debug-component.d.cts +2 -2
  77. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -21
  78. package/dist/lib/cjs/components/core-plugin-toggle-component.d.cts +1 -1
  79. package/dist/lib/cjs/components/disposable-component.cjs +3 -16
  80. package/dist/lib/cjs/components/disposable-component.d.cts +1 -1
  81. package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -47
  82. package/dist/lib/cjs/components/embed-extensions-component.d.cts +1 -1
  83. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +1 -47
  84. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.d.cts +1 -1
  85. package/dist/lib/cjs/components/index.cjs +30 -76
  86. package/dist/lib/cjs/components/index.d.cts +1 -1
  87. package/dist/lib/cjs/components/layout-ready-component.cjs +2 -21
  88. package/dist/lib/cjs/components/layout-ready-component.d.cts +1 -1
  89. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +1 -47
  90. package/dist/lib/cjs/components/menu-event-registrar-component.d.cts +1 -1
  91. package/dist/lib/cjs/components/monkey-around-component.cjs +2 -21
  92. package/dist/lib/cjs/components/monkey-around-component.d.cts +1 -1
  93. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +2 -21
  94. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.d.cts +1 -1
  95. package/dist/lib/cjs/components/plugin-context-component.cjs +2 -21
  96. package/dist/lib/cjs/components/plugin-context-component.d.cts +1 -1
  97. package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -21
  98. package/dist/lib/cjs/components/plugin-gate-component.d.cts +2 -1
  99. package/dist/lib/cjs/components/plugin-notice-component.cjs +3 -16
  100. package/dist/lib/cjs/components/plugin-notice-component.d.cts +2 -1
  101. package/dist/lib/cjs/components/plugin-settings-component.cjs +2 -21
  102. package/dist/lib/cjs/components/plugin-settings-component.d.cts +1 -1
  103. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -21
  104. package/dist/lib/cjs/components/plugin-settings-tab-component.d.cts +1 -1
  105. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +2 -21
  106. package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +2 -1
  107. package/dist/lib/cjs/components/pointer-position-component.cjs +1 -47
  108. package/dist/lib/cjs/components/pointer-position-component.d.cts +1 -1
  109. package/dist/lib/cjs/components/registry-component.cjs +2 -21
  110. package/dist/lib/cjs/components/registry-component.d.cts +1 -1
  111. package/dist/lib/cjs/components/release-notes-component.cjs +2 -21
  112. package/dist/lib/cjs/components/release-notes-component.d.cts +2 -1
  113. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +3 -16
  114. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +1 -1
  115. package/dist/lib/cjs/components/rmdir-guard-component.cjs +1 -47
  116. package/dist/lib/cjs/components/rmdir-guard-component.d.cts +1 -1
  117. package/dist/lib/cjs/components/settings-migration-component.cjs +2 -21
  118. package/dist/lib/cjs/components/settings-migration-component.d.cts +1 -1
  119. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +2 -21
  120. package/dist/lib/cjs/components/syntax-highlighting-component.d.cts +1 -1
  121. package/dist/lib/cjs/components/templates-language-component.cjs +3 -49
  122. package/dist/lib/cjs/components/templates-language-component.d.cts +1 -1
  123. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +3 -16
  124. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.d.cts +1 -1
  125. package/dist/lib/cjs/constructors/index.cjs +2 -48
  126. package/dist/lib/cjs/constructors/index.d.cts +1 -1
  127. package/dist/lib/cjs/css-class.cjs +1 -47
  128. package/dist/lib/cjs/css-class.d.cts +1 -1
  129. package/dist/lib/cjs/data-handler.cjs +1 -47
  130. package/dist/lib/cjs/data-handler.d.cts +1 -1
  131. package/dist/lib/cjs/dataview-link.cjs +2 -21
  132. package/dist/lib/cjs/dataview-link.d.cts +1 -1
  133. package/dist/lib/cjs/dataview.cjs +2 -21
  134. package/dist/lib/cjs/dataview.d.cts +2 -1
  135. package/dist/lib/cjs/debug.cjs +2 -21
  136. package/dist/lib/cjs/debug.d.cts +1 -1
  137. package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -47
  138. package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
  139. package/dist/lib/cjs/demo-vault-helper.cjs +2 -21
  140. package/dist/lib/cjs/demo-vault-helper.d.cts +1 -1
  141. package/dist/lib/cjs/demo-vault-naming.cjs +1 -47
  142. package/dist/lib/cjs/demo-vault-naming.d.cts +1 -1
  143. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +3 -16
  144. package/dist/lib/cjs/desktop-demo-vault-opener.d.cts +1 -1
  145. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -21
  146. package/dist/lib/cjs/desktop-trusted-input.d.cts +2 -1
  147. package/dist/lib/cjs/editor-extension-registrar.cjs +2 -21
  148. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  149. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -21
  150. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  151. package/dist/lib/cjs/editor.cjs +2 -21
  152. package/dist/lib/cjs/editor.d.cts +1 -1
  153. package/dist/lib/cjs/events.cjs +2 -21
  154. package/dist/lib/cjs/events.d.cts +1 -1
  155. package/dist/lib/cjs/extensions-registrar.cjs +2 -21
  156. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  157. package/dist/lib/cjs/file-change.cjs +2 -21
  158. package/dist/lib/cjs/file-change.d.cts +2 -1
  159. package/dist/lib/cjs/file-explorer.cjs +2 -21
  160. package/dist/lib/cjs/file-explorer.d.cts +1 -1
  161. package/dist/lib/cjs/file-manager.cjs +2 -21
  162. package/dist/lib/cjs/file-manager.d.cts +2 -1
  163. package/dist/lib/cjs/file-system.cjs +2 -21
  164. package/dist/lib/cjs/file-system.d.cts +1 -1
  165. package/dist/lib/cjs/folder-note.cjs +2 -21
  166. package/dist/lib/cjs/folder-note.d.cts +1 -1
  167. package/dist/lib/cjs/frontmatter-formatting.cjs +2 -21
  168. package/dist/lib/cjs/frontmatter-formatting.d.cts +1 -1
  169. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +2 -21
  170. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +1 -1
  171. package/dist/lib/cjs/frontmatter.cjs +2 -21
  172. package/dist/lib/cjs/frontmatter.d.cts +1 -1
  173. package/dist/lib/cjs/generated-during-build.cjs +2 -48
  174. package/dist/lib/cjs/generated-during-build.d.cts +1 -1
  175. package/dist/lib/cjs/hover-link-source-registrar.cjs +2 -21
  176. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  177. package/dist/lib/cjs/html-element.cjs +1 -47
  178. package/dist/lib/cjs/html-element.d.cts +2 -1
  179. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -47
  180. package/dist/lib/cjs/i18n/custom-type-options.d.cts +1 -1
  181. package/dist/lib/cjs/i18n/default-translations.cjs +1 -47
  182. package/dist/lib/cjs/i18n/default-translations.d.cts +1 -1
  183. package/dist/lib/cjs/i18n/i18n.cjs +3 -22
  184. package/dist/lib/cjs/i18n/i18n.d.cts +2 -2
  185. package/dist/lib/cjs/i18n/index.cjs +5 -51
  186. package/dist/lib/cjs/i18n/index.d.cts +1 -1
  187. package/dist/lib/cjs/i18n/locales/en.cjs +1 -47
  188. package/dist/lib/cjs/i18n/locales/en.d.cts +1 -1
  189. package/dist/lib/cjs/i18n/locales/index.cjs +3 -49
  190. package/dist/lib/cjs/i18n/locales/index.d.cts +1 -1
  191. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -47
  192. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -1
  193. package/dist/lib/cjs/index.cjs +96 -142
  194. package/dist/lib/cjs/index.d.cts +1 -1
  195. package/dist/lib/cjs/is-in-obsidian.cjs +1 -47
  196. package/dist/lib/cjs/is-in-obsidian.d.cts +1 -1
  197. package/dist/lib/cjs/library-references.d.cts +2 -0
  198. package/dist/lib/cjs/library-styles.cjs +2 -21
  199. package/dist/lib/cjs/library-styles.d.cts +2 -1
  200. package/dist/lib/cjs/library.cjs +1 -47
  201. package/dist/lib/cjs/link-name.cjs +1 -47
  202. package/dist/lib/cjs/link-name.d.cts +1 -1
  203. package/dist/lib/cjs/link-update-progress.cjs +1 -47
  204. package/dist/lib/cjs/link-update-progress.d.cts +1 -1
  205. package/dist/lib/cjs/link.cjs +3 -16
  206. package/dist/lib/cjs/link.d.cts +2 -1
  207. package/dist/lib/cjs/logger.cjs +2 -21
  208. package/dist/lib/cjs/logger.d.cts +2 -1
  209. package/dist/lib/cjs/loop.cjs +3 -16
  210. package/dist/lib/cjs/loop.d.cts +2 -1
  211. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +2 -21
  212. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +2 -1
  213. package/dist/lib/cjs/markdown-code-block-processor.cjs +2 -21
  214. package/dist/lib/cjs/markdown-code-block-processor.d.cts +2 -1
  215. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -21
  216. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +2 -1
  217. package/dist/lib/cjs/markdown-view.cjs +1 -47
  218. package/dist/lib/cjs/markdown-view.d.cts +1 -1
  219. package/dist/lib/cjs/markdown.cjs +3 -16
  220. package/dist/lib/cjs/markdown.d.cts +2 -1
  221. package/dist/lib/cjs/menu-event-registrar.cjs +1 -47
  222. package/dist/lib/cjs/menu-event-registrar.d.cts +1 -1
  223. package/dist/lib/cjs/metadata-cache.cjs +3 -16
  224. package/dist/lib/cjs/metadata-cache.d.cts +1 -1
  225. package/dist/lib/cjs/mobile-trusted-input.cjs +1 -47
  226. package/dist/lib/cjs/mobile-trusted-input.d.cts +1 -1
  227. package/dist/lib/cjs/modals/alert.cjs +2 -21
  228. package/dist/lib/cjs/modals/alert.d.cts +2 -1
  229. package/dist/lib/cjs/modals/confirm.cjs +2 -21
  230. package/dist/lib/cjs/modals/confirm.d.cts +2 -1
  231. package/dist/lib/cjs/modals/index.cjs +10 -56
  232. package/dist/lib/cjs/modals/index.d.cts +1 -1
  233. package/dist/lib/cjs/modals/minimizable-modal.cjs +2 -21
  234. package/dist/lib/cjs/modals/minimizable-modal.d.cts +1 -1
  235. package/dist/lib/cjs/modals/modal-command-builder.cjs +2 -21
  236. package/dist/lib/cjs/modals/modal-command-builder.d.cts +2 -1
  237. package/dist/lib/cjs/modals/modal.cjs +2 -21
  238. package/dist/lib/cjs/modals/modal.d.cts +1 -1
  239. package/dist/lib/cjs/modals/prompt.cjs +2 -21
  240. package/dist/lib/cjs/modals/prompt.d.cts +2 -1
  241. package/dist/lib/cjs/modals/select-item.cjs +2 -21
  242. package/dist/lib/cjs/modals/select-item.d.cts +1 -1
  243. package/dist/lib/cjs/modals/select-option.cjs +2 -21
  244. package/dist/lib/cjs/modals/select-option.d.cts +2 -1
  245. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -47
  246. package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +1 -1
  247. package/dist/lib/cjs/note-priority.cjs +2 -21
  248. package/dist/lib/cjs/note-priority.d.cts +1 -1
  249. package/dist/lib/cjs/notebook-navigator.cjs +1 -47
  250. package/dist/lib/cjs/notebook-navigator.d.cts +1 -1
  251. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +2 -21
  252. package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +1 -1
  253. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +2 -21
  254. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  255. package/dist/lib/cjs/obsidian-settings.cjs +2 -21
  256. package/dist/lib/cjs/obsidian-settings.d.cts +1 -1
  257. package/dist/lib/cjs/parse-link.cjs +3 -22
  258. package/dist/lib/cjs/parse-link.d.cts +1 -1
  259. package/dist/lib/cjs/path-settings.cjs +2 -21
  260. package/dist/lib/cjs/path-settings.d.cts +1 -1
  261. package/dist/lib/cjs/pdf.cjs +2 -21
  262. package/dist/lib/cjs/pdf.d.cts +2 -1
  263. package/dist/lib/cjs/plugin/index.cjs +10 -56
  264. package/dist/lib/cjs/plugin/index.d.cts +1 -1
  265. package/dist/lib/cjs/plugin/plugin-api-schema.cjs +2 -21
  266. package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +1 -1
  267. package/dist/lib/cjs/plugin/plugin-api.cjs +2 -21
  268. package/dist/lib/cjs/plugin/plugin-api.d.cts +1 -1
  269. package/dist/lib/cjs/plugin/plugin-context.cjs +3 -22
  270. package/dist/lib/cjs/plugin/plugin-context.d.cts +2 -1
  271. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -47
  272. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  273. package/dist/lib/cjs/plugin/plugin-install-state.cjs +1 -47
  274. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +1 -1
  275. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -47
  276. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +1 -1
  277. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +2 -21
  278. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +2 -1
  279. package/dist/lib/cjs/plugin/plugin.cjs +2 -21
  280. package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
  281. package/dist/lib/cjs/plugin/settings-migration-api.cjs +2 -21
  282. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  283. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -21
  284. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  285. package/dist/lib/cjs/popovers/field-popover.cjs +2 -21
  286. package/dist/lib/cjs/popovers/field-popover.d.cts +1 -1
  287. package/dist/lib/cjs/popovers/index.cjs +4 -50
  288. package/dist/lib/cjs/popovers/index.d.cts +1 -1
  289. package/dist/lib/cjs/popovers/popover-anchor.cjs +2 -21
  290. package/dist/lib/cjs/popovers/popover-anchor.d.cts +2 -1
  291. package/dist/lib/cjs/popovers/popover.cjs +2 -21
  292. package/dist/lib/cjs/popovers/popover.d.cts +2 -1
  293. package/dist/lib/cjs/property-entry.cjs +1 -47
  294. package/dist/lib/cjs/property-entry.d.cts +1 -1
  295. package/dist/lib/cjs/queue.cjs +2 -21
  296. package/dist/lib/cjs/queue.d.cts +2 -1
  297. package/dist/lib/cjs/react/app-context.cjs +2 -21
  298. package/dist/lib/cjs/react/app-context.d.cts +1 -1
  299. package/dist/lib/cjs/react/index.cjs +2 -48
  300. package/dist/lib/cjs/react/index.d.cts +1 -1
  301. package/dist/lib/cjs/reference.cjs +2 -21
  302. package/dist/lib/cjs/reference.d.cts +1 -1
  303. package/dist/lib/cjs/resource-lock.cjs +2 -21
  304. package/dist/lib/cjs/resource-lock.d.cts +2 -1
  305. package/dist/lib/cjs/resource-url.cjs +2 -21
  306. package/dist/lib/cjs/resource-url.d.cts +1 -1
  307. package/dist/lib/cjs/ribbon-icon-registrar.cjs +2 -21
  308. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +2 -1
  309. package/dist/lib/cjs/setting-components/checkbox-component.cjs +2 -21
  310. package/dist/lib/cjs/setting-components/checkbox-component.d.cts +2 -1
  311. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +2 -21
  312. package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +2 -1
  313. package/dist/lib/cjs/setting-components/date-component.cjs +2 -21
  314. package/dist/lib/cjs/setting-components/date-component.d.cts +2 -1
  315. package/dist/lib/cjs/setting-components/date-time-component.cjs +2 -21
  316. package/dist/lib/cjs/setting-components/date-time-component.d.cts +2 -1
  317. package/dist/lib/cjs/setting-components/email-component.cjs +1 -47
  318. package/dist/lib/cjs/setting-components/email-component.d.cts +2 -1
  319. package/dist/lib/cjs/setting-components/file-component.cjs +1 -47
  320. package/dist/lib/cjs/setting-components/file-component.d.cts +2 -1
  321. package/dist/lib/cjs/setting-components/index.cjs +27 -73
  322. package/dist/lib/cjs/setting-components/index.d.cts +1 -1
  323. package/dist/lib/cjs/setting-components/month-component.cjs +2 -21
  324. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -1
  325. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +2 -21
  326. package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +3 -1
  327. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +1 -47
  328. package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +2 -1
  329. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +2 -21
  330. package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +2 -1
  331. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +2 -21
  332. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +2 -1
  333. package/dist/lib/cjs/setting-components/number-component.cjs +1 -47
  334. package/dist/lib/cjs/setting-components/number-component.d.cts +2 -1
  335. package/dist/lib/cjs/setting-components/password-component.cjs +1 -47
  336. package/dist/lib/cjs/setting-components/password-component.d.cts +2 -1
  337. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +2 -21
  338. package/dist/lib/cjs/setting-components/setting-component-wrapper.d.cts +2 -1
  339. package/dist/lib/cjs/setting-components/telephone-component.cjs +1 -47
  340. package/dist/lib/cjs/setting-components/telephone-component.d.cts +2 -1
  341. package/dist/lib/cjs/setting-components/text-based-component.cjs +2 -21
  342. package/dist/lib/cjs/setting-components/text-based-component.d.cts +1 -1
  343. package/dist/lib/cjs/setting-components/time-component.cjs +2 -21
  344. package/dist/lib/cjs/setting-components/time-component.d.cts +2 -1
  345. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +2 -21
  346. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +2 -1
  347. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +2 -21
  348. package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +3 -1
  349. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +2 -21
  350. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +3 -1
  351. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -47
  352. package/dist/lib/cjs/setting-components/typed-range-text-component.d.cts +1 -1
  353. package/dist/lib/cjs/setting-components/typed-text-component.cjs +2 -21
  354. package/dist/lib/cjs/setting-components/typed-text-component.d.cts +2 -1
  355. package/dist/lib/cjs/setting-components/url-component.cjs +1 -47
  356. package/dist/lib/cjs/setting-components/url-component.d.cts +2 -1
  357. package/dist/lib/cjs/setting-components/validator-component.cjs +2 -21
  358. package/dist/lib/cjs/setting-components/validator-component.d.cts +1 -1
  359. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +1 -47
  360. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.d.cts +1 -1
  361. package/dist/lib/cjs/setting-components/week-component.cjs +2 -21
  362. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -1
  363. package/dist/lib/cjs/setting-ex.cjs +2 -21
  364. package/dist/lib/cjs/setting-ex.d.cts +2 -1
  365. package/dist/lib/cjs/setting-group-ex.cjs +2 -21
  366. package/dist/lib/cjs/setting-group-ex.d.cts +2 -1
  367. package/dist/lib/cjs/status-bar-item-registrar.cjs +2 -21
  368. package/dist/lib/cjs/status-bar-item-registrar.d.cts +2 -1
  369. package/dist/lib/cjs/templater.cjs +1 -47
  370. package/dist/lib/cjs/templater.d.cts +1 -1
  371. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -21
  372. package/dist/lib/cjs/transformers/duration-transformer.d.cts +1 -1
  373. package/dist/lib/cjs/transformers/index.cjs +2 -48
  374. package/dist/lib/cjs/transformers/index.d.cts +1 -1
  375. package/dist/lib/cjs/trusted-input.cjs +2 -21
  376. package/dist/lib/cjs/trusted-input.d.cts +1 -1
  377. package/dist/lib/cjs/validation.cjs +2 -21
  378. package/dist/lib/cjs/validation.d.cts +1 -1
  379. package/dist/lib/cjs/vault-delete.cjs +2 -21
  380. package/dist/lib/cjs/vault-delete.d.cts +1 -1
  381. package/dist/lib/cjs/vault-transaction.cjs +3 -16
  382. package/dist/lib/cjs/vault-transaction.d.cts +1 -1
  383. package/dist/lib/cjs/vault.cjs +3 -16
  384. package/dist/lib/cjs/vault.d.cts +1 -1
  385. package/dist/lib/cjs/view-registrar.cjs +2 -21
  386. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  387. package/dist/lib/cjs/workspace.cjs +2 -21
  388. package/dist/lib/cjs/workspace.d.cts +2 -1
  389. package/dist/lib/esm/@types/i18next.d.mts +1 -1
  390. package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +3 -3
  391. package/dist/lib/esm/@types/original-fs.d.mts +2 -1
  392. package/dist/lib/esm/__merged.d.mts +1 -1
  393. package/dist/lib/esm/__merged.mjs +2 -11
  394. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  395. package/dist/lib/esm/active-file-provider.mjs +1 -37
  396. package/dist/lib/esm/app.d.mts +1 -1
  397. package/dist/lib/esm/app.mjs +1 -37
  398. package/dist/lib/esm/async-with-notice.d.mts +2 -1
  399. package/dist/lib/esm/async-with-notice.mjs +2 -11
  400. package/dist/lib/esm/attachment-path.d.mts +1 -1
  401. package/dist/lib/esm/attachment-path.mjs +2 -11
  402. package/dist/lib/esm/attachment-unit-folder.d.mts +1 -1
  403. package/dist/lib/esm/attachment-unit-folder.mjs +2 -11
  404. package/dist/lib/esm/backlink-index.d.mts +1 -1
  405. package/dist/lib/esm/backlink-index.mjs +2 -11
  406. package/dist/lib/esm/backlink.d.mts +1 -1
  407. package/dist/lib/esm/backlink.mjs +2 -11
  408. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  409. package/dist/lib/esm/bases-view-registrar.mjs +2 -11
  410. package/dist/lib/esm/callout.d.mts +2 -1
  411. package/dist/lib/esm/callout.mjs +2 -11
  412. package/dist/lib/esm/canvas.d.mts +1 -1
  413. package/dist/lib/esm/canvas.mjs +2 -11
  414. package/dist/lib/esm/case-insensitive-file-index.d.mts +1 -1
  415. package/dist/lib/esm/case-insensitive-file-index.mjs +2 -11
  416. package/dist/lib/esm/code-block-markdown-information.d.mts +1 -1
  417. package/dist/lib/esm/code-block-markdown-information.mjs +0 -36
  418. package/dist/lib/esm/code-block-reg-exp.d.mts +1 -1
  419. package/dist/lib/esm/code-block-reg-exp.mjs +1 -37
  420. package/dist/lib/esm/codemirror/index.d.mts +1 -1
  421. package/dist/lib/esm/codemirror/index.mjs +1 -37
  422. package/dist/lib/esm/codemirror/state-field-spec.d.mts +1 -1
  423. package/dist/lib/esm/codemirror/state-field-spec.mjs +0 -36
  424. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +1 -1
  425. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +2 -11
  426. package/dist/lib/esm/command-handlers/command-handler-component.d.mts +1 -1
  427. package/dist/lib/esm/command-handlers/command-handler-component.mjs +2 -11
  428. package/dist/lib/esm/command-handlers/command-handler.d.mts +1 -1
  429. package/dist/lib/esm/command-handlers/command-handler.mjs +2 -11
  430. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +1 -1
  431. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +2 -11
  432. package/dist/lib/esm/command-handlers/file-command-handler.d.mts +1 -1
  433. package/dist/lib/esm/command-handlers/file-command-handler.mjs +5 -14
  434. package/dist/lib/esm/command-handlers/folder-command-handler.d.mts +1 -1
  435. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +5 -14
  436. package/dist/lib/esm/command-handlers/global-command-handler.d.mts +1 -1
  437. package/dist/lib/esm/command-handlers/global-command-handler.mjs +3 -12
  438. package/dist/lib/esm/command-handlers/index.d.mts +1 -1
  439. package/dist/lib/esm/command-handlers/index.mjs +1 -37
  440. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.d.mts +1 -1
  441. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +2 -11
  442. package/dist/lib/esm/command-handlers/open-settings-command-handler.d.mts +1 -1
  443. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +1 -37
  444. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.d.mts +1 -1
  445. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +1 -37
  446. package/dist/lib/esm/command-registrar.d.mts +1 -1
  447. package/dist/lib/esm/command-registrar.mjs +1 -37
  448. package/dist/lib/esm/community-plugins.d.mts +1 -1
  449. package/dist/lib/esm/community-plugins.mjs +2 -11
  450. package/dist/lib/esm/components/abort-signal-component.d.mts +2 -1
  451. package/dist/lib/esm/components/abort-signal-component.mjs +2 -11
  452. package/dist/lib/esm/components/all-windows-event-component.d.mts +2 -1
  453. package/dist/lib/esm/components/all-windows-event-component.mjs +1 -37
  454. package/dist/lib/esm/components/async-error-handler-component.d.mts +1 -1
  455. package/dist/lib/esm/components/async-error-handler-component.mjs +2 -11
  456. package/dist/lib/esm/components/async-events-component.d.mts +1 -1
  457. package/dist/lib/esm/components/async-events-component.mjs +2 -11
  458. package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +1 -1
  459. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +1 -37
  460. package/dist/lib/esm/components/component-ex.d.mts +1 -1
  461. package/dist/lib/esm/components/component-ex.mjs +3 -6
  462. package/dist/lib/esm/components/console-debug-component.d.mts +2 -2
  463. package/dist/lib/esm/components/console-debug-component.mjs +2 -11
  464. package/dist/lib/esm/components/core-plugin-toggle-component.d.mts +1 -1
  465. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +2 -11
  466. package/dist/lib/esm/components/disposable-component.d.mts +1 -1
  467. package/dist/lib/esm/components/disposable-component.mjs +3 -6
  468. package/dist/lib/esm/components/embed-extensions-component.d.mts +1 -1
  469. package/dist/lib/esm/components/embed-extensions-component.mjs +1 -37
  470. package/dist/lib/esm/components/generate-markdown-link-default-params-component.d.mts +1 -1
  471. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +1 -37
  472. package/dist/lib/esm/components/index.d.mts +1 -1
  473. package/dist/lib/esm/components/index.mjs +1 -37
  474. package/dist/lib/esm/components/layout-ready-component.d.mts +1 -1
  475. package/dist/lib/esm/components/layout-ready-component.mjs +2 -11
  476. package/dist/lib/esm/components/menu-event-registrar-component.d.mts +1 -1
  477. package/dist/lib/esm/components/menu-event-registrar-component.mjs +1 -37
  478. package/dist/lib/esm/components/monkey-around-component.d.mts +1 -1
  479. package/dist/lib/esm/components/monkey-around-component.mjs +2 -11
  480. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.d.mts +1 -1
  481. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +2 -11
  482. package/dist/lib/esm/components/plugin-context-component.d.mts +1 -1
  483. package/dist/lib/esm/components/plugin-context-component.mjs +2 -11
  484. package/dist/lib/esm/components/plugin-gate-component.d.mts +2 -1
  485. package/dist/lib/esm/components/plugin-gate-component.mjs +2 -11
  486. package/dist/lib/esm/components/plugin-notice-component.d.mts +2 -1
  487. package/dist/lib/esm/components/plugin-notice-component.mjs +3 -6
  488. package/dist/lib/esm/components/plugin-settings-component.d.mts +1 -1
  489. package/dist/lib/esm/components/plugin-settings-component.mjs +2 -11
  490. package/dist/lib/esm/components/plugin-settings-tab-component.d.mts +1 -1
  491. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +2 -11
  492. package/dist/lib/esm/components/plugin-suggestion-component.d.mts +2 -1
  493. package/dist/lib/esm/components/plugin-suggestion-component.mjs +2 -11
  494. package/dist/lib/esm/components/pointer-position-component.d.mts +1 -1
  495. package/dist/lib/esm/components/pointer-position-component.mjs +1 -37
  496. package/dist/lib/esm/components/registry-component.d.mts +1 -1
  497. package/dist/lib/esm/components/registry-component.mjs +2 -11
  498. package/dist/lib/esm/components/release-notes-component.d.mts +2 -1
  499. package/dist/lib/esm/components/release-notes-component.mjs +2 -11
  500. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +1 -1
  501. package/dist/lib/esm/components/rename-delete-handler-component.mjs +3 -6
  502. package/dist/lib/esm/components/rmdir-guard-component.d.mts +1 -1
  503. package/dist/lib/esm/components/rmdir-guard-component.mjs +1 -37
  504. package/dist/lib/esm/components/settings-migration-component.d.mts +1 -1
  505. package/dist/lib/esm/components/settings-migration-component.mjs +2 -11
  506. package/dist/lib/esm/components/syntax-highlighting-component.d.mts +1 -1
  507. package/dist/lib/esm/components/syntax-highlighting-component.mjs +2 -11
  508. package/dist/lib/esm/components/templates-language-component.d.mts +1 -1
  509. package/dist/lib/esm/components/templates-language-component.mjs +3 -39
  510. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.d.mts +1 -1
  511. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +3 -6
  512. package/dist/lib/esm/constructors/index.d.mts +1 -1
  513. package/dist/lib/esm/constructors/index.mjs +1 -37
  514. package/dist/lib/esm/css-class.d.mts +1 -1
  515. package/dist/lib/esm/css-class.mjs +1 -37
  516. package/dist/lib/esm/data-handler.d.mts +1 -1
  517. package/dist/lib/esm/data-handler.mjs +1 -37
  518. package/dist/lib/esm/dataview-link.d.mts +1 -1
  519. package/dist/lib/esm/dataview-link.mjs +2 -11
  520. package/dist/lib/esm/dataview.d.mts +2 -1
  521. package/dist/lib/esm/dataview.mjs +2 -11
  522. package/dist/lib/esm/debug.d.mts +1 -1
  523. package/dist/lib/esm/debug.mjs +2 -11
  524. package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
  525. package/dist/lib/esm/demo-vault-helper-settings.mjs +0 -36
  526. package/dist/lib/esm/demo-vault-helper.d.mts +1 -1
  527. package/dist/lib/esm/demo-vault-helper.mjs +2 -11
  528. package/dist/lib/esm/demo-vault-naming.d.mts +1 -1
  529. package/dist/lib/esm/demo-vault-naming.mjs +1 -37
  530. package/dist/lib/esm/desktop-demo-vault-opener.d.mts +1 -1
  531. package/dist/lib/esm/desktop-demo-vault-opener.mjs +3 -6
  532. package/dist/lib/esm/desktop-trusted-input.d.mts +2 -1
  533. package/dist/lib/esm/desktop-trusted-input.mjs +2 -11
  534. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  535. package/dist/lib/esm/editor-extension-registrar.mjs +2 -11
  536. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  537. package/dist/lib/esm/editor-suggest-registrar.mjs +2 -11
  538. package/dist/lib/esm/editor.d.mts +1 -1
  539. package/dist/lib/esm/editor.mjs +2 -11
  540. package/dist/lib/esm/events.d.mts +1 -1
  541. package/dist/lib/esm/events.mjs +2 -11
  542. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  543. package/dist/lib/esm/extensions-registrar.mjs +2 -11
  544. package/dist/lib/esm/file-change.d.mts +2 -1
  545. package/dist/lib/esm/file-change.mjs +2 -11
  546. package/dist/lib/esm/file-explorer.d.mts +1 -1
  547. package/dist/lib/esm/file-explorer.mjs +2 -11
  548. package/dist/lib/esm/file-manager.d.mts +2 -1
  549. package/dist/lib/esm/file-manager.mjs +2 -11
  550. package/dist/lib/esm/file-system.d.mts +1 -1
  551. package/dist/lib/esm/file-system.mjs +2 -11
  552. package/dist/lib/esm/folder-note.d.mts +1 -1
  553. package/dist/lib/esm/folder-note.mjs +2 -11
  554. package/dist/lib/esm/frontmatter-formatting.d.mts +1 -1
  555. package/dist/lib/esm/frontmatter-formatting.mjs +2 -11
  556. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +1 -1
  557. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +2 -11
  558. package/dist/lib/esm/frontmatter.d.mts +1 -1
  559. package/dist/lib/esm/frontmatter.mjs +2 -11
  560. package/dist/lib/esm/generated-during-build.d.mts +1 -1
  561. package/dist/lib/esm/generated-during-build.mjs +2 -38
  562. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  563. package/dist/lib/esm/hover-link-source-registrar.mjs +2 -11
  564. package/dist/lib/esm/html-element.d.mts +2 -1
  565. package/dist/lib/esm/html-element.mjs +1 -37
  566. package/dist/lib/esm/i18n/custom-type-options.d.mts +1 -1
  567. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -37
  568. package/dist/lib/esm/i18n/default-translations.d.mts +1 -1
  569. package/dist/lib/esm/i18n/default-translations.mjs +1 -37
  570. package/dist/lib/esm/i18n/i18n.d.mts +2 -2
  571. package/dist/lib/esm/i18n/i18n.mjs +2 -11
  572. package/dist/lib/esm/i18n/index.d.mts +1 -1
  573. package/dist/lib/esm/i18n/index.mjs +1 -37
  574. package/dist/lib/esm/i18n/locales/en.d.mts +1 -1
  575. package/dist/lib/esm/i18n/locales/en.mjs +1 -37
  576. package/dist/lib/esm/i18n/locales/index.d.mts +1 -1
  577. package/dist/lib/esm/i18n/locales/index.mjs +1 -37
  578. package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -1
  579. package/dist/lib/esm/i18n/locales/translations-map.mjs +1 -37
  580. package/dist/lib/esm/index.d.mts +1 -1
  581. package/dist/lib/esm/index.mjs +1 -37
  582. package/dist/lib/esm/is-in-obsidian.d.mts +1 -1
  583. package/dist/lib/esm/is-in-obsidian.mjs +1 -37
  584. package/dist/lib/esm/library-references.d.mts +2 -0
  585. package/dist/lib/esm/library-styles.d.mts +2 -1
  586. package/dist/lib/esm/library-styles.mjs +2 -11
  587. package/dist/lib/esm/library.mjs +1 -37
  588. package/dist/lib/esm/link-name.d.mts +1 -1
  589. package/dist/lib/esm/link-name.mjs +1 -37
  590. package/dist/lib/esm/link-update-progress.d.mts +1 -1
  591. package/dist/lib/esm/link-update-progress.mjs +0 -36
  592. package/dist/lib/esm/link.d.mts +2 -1
  593. package/dist/lib/esm/link.mjs +3 -6
  594. package/dist/lib/esm/logger.d.mts +2 -1
  595. package/dist/lib/esm/logger.mjs +2 -11
  596. package/dist/lib/esm/loop.d.mts +2 -1
  597. package/dist/lib/esm/loop.mjs +3 -6
  598. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +2 -1
  599. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +2 -11
  600. package/dist/lib/esm/markdown-code-block-processor.d.mts +2 -1
  601. package/dist/lib/esm/markdown-code-block-processor.mjs +2 -11
  602. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +2 -1
  603. package/dist/lib/esm/markdown-post-processor-registrar.mjs +2 -11
  604. package/dist/lib/esm/markdown-view.d.mts +1 -1
  605. package/dist/lib/esm/markdown-view.mjs +1 -37
  606. package/dist/lib/esm/markdown.d.mts +2 -1
  607. package/dist/lib/esm/markdown.mjs +3 -6
  608. package/dist/lib/esm/menu-event-registrar.d.mts +1 -1
  609. package/dist/lib/esm/menu-event-registrar.mjs +0 -36
  610. package/dist/lib/esm/metadata-cache.d.mts +1 -1
  611. package/dist/lib/esm/metadata-cache.mjs +3 -6
  612. package/dist/lib/esm/mobile-trusted-input.d.mts +1 -1
  613. package/dist/lib/esm/mobile-trusted-input.mjs +1 -37
  614. package/dist/lib/esm/modals/alert.d.mts +2 -1
  615. package/dist/lib/esm/modals/alert.mjs +2 -11
  616. package/dist/lib/esm/modals/confirm.d.mts +2 -1
  617. package/dist/lib/esm/modals/confirm.mjs +2 -11
  618. package/dist/lib/esm/modals/index.d.mts +1 -1
  619. package/dist/lib/esm/modals/index.mjs +1 -37
  620. package/dist/lib/esm/modals/minimizable-modal.d.mts +1 -1
  621. package/dist/lib/esm/modals/minimizable-modal.mjs +2 -11
  622. package/dist/lib/esm/modals/modal-command-builder.d.mts +2 -1
  623. package/dist/lib/esm/modals/modal-command-builder.mjs +2 -11
  624. package/dist/lib/esm/modals/modal.d.mts +1 -1
  625. package/dist/lib/esm/modals/modal.mjs +2 -11
  626. package/dist/lib/esm/modals/prompt.d.mts +2 -1
  627. package/dist/lib/esm/modals/prompt.mjs +2 -11
  628. package/dist/lib/esm/modals/select-item.d.mts +1 -1
  629. package/dist/lib/esm/modals/select-item.mjs +2 -11
  630. package/dist/lib/esm/modals/select-option.d.mts +2 -1
  631. package/dist/lib/esm/modals/select-option.mjs +2 -11
  632. package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +1 -1
  633. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +1 -37
  634. package/dist/lib/esm/note-priority.d.mts +1 -1
  635. package/dist/lib/esm/note-priority.mjs +2 -11
  636. package/dist/lib/esm/notebook-navigator.d.mts +1 -1
  637. package/dist/lib/esm/notebook-navigator.mjs +1 -37
  638. package/dist/lib/esm/obsidian-dev-utils-state.d.mts +1 -1
  639. package/dist/lib/esm/obsidian-dev-utils-state.mjs +2 -11
  640. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  641. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +2 -11
  642. package/dist/lib/esm/obsidian-settings.d.mts +1 -1
  643. package/dist/lib/esm/obsidian-settings.mjs +2 -11
  644. package/dist/lib/esm/parse-link.d.mts +1 -1
  645. package/dist/lib/esm/parse-link.mjs +2 -11
  646. package/dist/lib/esm/path-settings.d.mts +1 -1
  647. package/dist/lib/esm/path-settings.mjs +2 -11
  648. package/dist/lib/esm/pdf.d.mts +2 -1
  649. package/dist/lib/esm/pdf.mjs +2 -11
  650. package/dist/lib/esm/plugin/index.d.mts +1 -1
  651. package/dist/lib/esm/plugin/index.mjs +1 -37
  652. package/dist/lib/esm/plugin/plugin-api-schema.d.mts +1 -1
  653. package/dist/lib/esm/plugin/plugin-api-schema.mjs +2 -11
  654. package/dist/lib/esm/plugin/plugin-api.d.mts +1 -1
  655. package/dist/lib/esm/plugin/plugin-api.mjs +2 -11
  656. package/dist/lib/esm/plugin/plugin-context.d.mts +2 -1
  657. package/dist/lib/esm/plugin/plugin-context.mjs +3 -12
  658. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  659. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -37
  660. package/dist/lib/esm/plugin/plugin-install-state.d.mts +1 -1
  661. package/dist/lib/esm/plugin/plugin-install-state.mjs +1 -37
  662. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +1 -1
  663. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -37
  664. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +2 -1
  665. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +2 -11
  666. package/dist/lib/esm/plugin/plugin.d.mts +1 -1
  667. package/dist/lib/esm/plugin/plugin.mjs +2 -11
  668. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  669. package/dist/lib/esm/plugin/settings-migration-api.mjs +2 -11
  670. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  671. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +2 -11
  672. package/dist/lib/esm/popovers/field-popover.d.mts +1 -1
  673. package/dist/lib/esm/popovers/field-popover.mjs +2 -11
  674. package/dist/lib/esm/popovers/index.d.mts +1 -1
  675. package/dist/lib/esm/popovers/index.mjs +1 -37
  676. package/dist/lib/esm/popovers/popover-anchor.d.mts +2 -1
  677. package/dist/lib/esm/popovers/popover-anchor.mjs +2 -11
  678. package/dist/lib/esm/popovers/popover.d.mts +2 -1
  679. package/dist/lib/esm/popovers/popover.mjs +2 -11
  680. package/dist/lib/esm/property-entry.d.mts +1 -1
  681. package/dist/lib/esm/property-entry.mjs +1 -37
  682. package/dist/lib/esm/queue.d.mts +2 -1
  683. package/dist/lib/esm/queue.mjs +2 -11
  684. package/dist/lib/esm/react/app-context.d.mts +1 -1
  685. package/dist/lib/esm/react/app-context.mjs +2 -11
  686. package/dist/lib/esm/react/index.d.mts +1 -1
  687. package/dist/lib/esm/react/index.mjs +1 -37
  688. package/dist/lib/esm/reference.d.mts +1 -1
  689. package/dist/lib/esm/reference.mjs +2 -11
  690. package/dist/lib/esm/resource-lock.d.mts +2 -1
  691. package/dist/lib/esm/resource-lock.mjs +2 -11
  692. package/dist/lib/esm/resource-url.d.mts +1 -1
  693. package/dist/lib/esm/resource-url.mjs +2 -11
  694. package/dist/lib/esm/ribbon-icon-registrar.d.mts +2 -1
  695. package/dist/lib/esm/ribbon-icon-registrar.mjs +2 -11
  696. package/dist/lib/esm/setting-components/checkbox-component.d.mts +2 -1
  697. package/dist/lib/esm/setting-components/checkbox-component.mjs +2 -11
  698. package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +2 -1
  699. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +2 -11
  700. package/dist/lib/esm/setting-components/date-component.d.mts +2 -1
  701. package/dist/lib/esm/setting-components/date-component.mjs +2 -11
  702. package/dist/lib/esm/setting-components/date-time-component.d.mts +2 -1
  703. package/dist/lib/esm/setting-components/date-time-component.mjs +2 -11
  704. package/dist/lib/esm/setting-components/email-component.d.mts +2 -1
  705. package/dist/lib/esm/setting-components/email-component.mjs +1 -37
  706. package/dist/lib/esm/setting-components/file-component.d.mts +2 -1
  707. package/dist/lib/esm/setting-components/file-component.mjs +1 -37
  708. package/dist/lib/esm/setting-components/index.d.mts +1 -1
  709. package/dist/lib/esm/setting-components/index.mjs +1 -37
  710. package/dist/lib/esm/setting-components/month-component.d.mts +2 -1
  711. package/dist/lib/esm/setting-components/month-component.mjs +2 -11
  712. package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +3 -1
  713. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +2 -11
  714. package/dist/lib/esm/setting-components/multiple-email-component.d.mts +2 -1
  715. package/dist/lib/esm/setting-components/multiple-email-component.mjs +1 -37
  716. package/dist/lib/esm/setting-components/multiple-file-component.d.mts +2 -1
  717. package/dist/lib/esm/setting-components/multiple-file-component.mjs +2 -11
  718. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +2 -1
  719. package/dist/lib/esm/setting-components/multiple-text-component.mjs +2 -11
  720. package/dist/lib/esm/setting-components/number-component.d.mts +2 -1
  721. package/dist/lib/esm/setting-components/number-component.mjs +1 -37
  722. package/dist/lib/esm/setting-components/password-component.d.mts +2 -1
  723. package/dist/lib/esm/setting-components/password-component.mjs +1 -37
  724. package/dist/lib/esm/setting-components/setting-component-wrapper.d.mts +2 -1
  725. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +2 -11
  726. package/dist/lib/esm/setting-components/telephone-component.d.mts +2 -1
  727. package/dist/lib/esm/setting-components/telephone-component.mjs +1 -37
  728. package/dist/lib/esm/setting-components/text-based-component.d.mts +1 -1
  729. package/dist/lib/esm/setting-components/text-based-component.mjs +2 -11
  730. package/dist/lib/esm/setting-components/time-component.d.mts +2 -1
  731. package/dist/lib/esm/setting-components/time-component.mjs +2 -11
  732. package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +2 -1
  733. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +2 -11
  734. package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +3 -1
  735. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +2 -11
  736. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +3 -1
  737. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +2 -11
  738. package/dist/lib/esm/setting-components/typed-range-text-component.d.mts +1 -1
  739. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +1 -37
  740. package/dist/lib/esm/setting-components/typed-text-component.d.mts +2 -1
  741. package/dist/lib/esm/setting-components/typed-text-component.mjs +2 -11
  742. package/dist/lib/esm/setting-components/url-component.d.mts +2 -1
  743. package/dist/lib/esm/setting-components/url-component.mjs +1 -37
  744. package/dist/lib/esm/setting-components/validator-component.d.mts +1 -1
  745. package/dist/lib/esm/setting-components/validator-component.mjs +2 -11
  746. package/dist/lib/esm/setting-components/value-component-with-change-tracking.d.mts +1 -1
  747. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +0 -36
  748. package/dist/lib/esm/setting-components/week-component.d.mts +2 -1
  749. package/dist/lib/esm/setting-components/week-component.mjs +2 -11
  750. package/dist/lib/esm/setting-ex.d.mts +2 -1
  751. package/dist/lib/esm/setting-ex.mjs +2 -11
  752. package/dist/lib/esm/setting-group-ex.d.mts +2 -1
  753. package/dist/lib/esm/setting-group-ex.mjs +2 -11
  754. package/dist/lib/esm/status-bar-item-registrar.d.mts +2 -1
  755. package/dist/lib/esm/status-bar-item-registrar.mjs +2 -11
  756. package/dist/lib/esm/templater.d.mts +1 -1
  757. package/dist/lib/esm/templater.mjs +1 -37
  758. package/dist/lib/esm/transformers/duration-transformer.d.mts +1 -1
  759. package/dist/lib/esm/transformers/duration-transformer.mjs +2 -11
  760. package/dist/lib/esm/transformers/index.d.mts +1 -1
  761. package/dist/lib/esm/transformers/index.mjs +1 -37
  762. package/dist/lib/esm/trusted-input.d.mts +1 -1
  763. package/dist/lib/esm/trusted-input.mjs +2 -11
  764. package/dist/lib/esm/validation.d.mts +1 -1
  765. package/dist/lib/esm/validation.mjs +2 -11
  766. package/dist/lib/esm/vault-delete.d.mts +1 -1
  767. package/dist/lib/esm/vault-delete.mjs +2 -11
  768. package/dist/lib/esm/vault-transaction.d.mts +1 -1
  769. package/dist/lib/esm/vault-transaction.mjs +3 -6
  770. package/dist/lib/esm/vault.d.mts +1 -1
  771. package/dist/lib/esm/vault.mjs +3 -6
  772. package/dist/lib/esm/view-registrar.d.mts +1 -1
  773. package/dist/lib/esm/view-registrar.mjs +2 -11
  774. package/dist/lib/esm/workspace.d.mts +2 -1
  775. package/dist/lib/esm/workspace.mjs +2 -11
  776. package/package.json +24 -8
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
- symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -33,10 +27,7 @@ function ensureBrowserProcess() {
33
27
  existingProcessRecord["browser"] = true;
34
28
  }
35
29
 
36
- (function initEsm() {
37
- ensureDisposeSymbols();
38
- ensureBrowserProcess();
39
- })();
30
+ ensureBrowserProcess();
40
31
  })();
41
32
 
42
33
  import { convertAsyncToSync } from "@mnaoumov/typescript-lib/async";
@@ -462,4 +453,4 @@ export {
462
453
  PluginConflictSeverity,
463
454
  PluginGateComponent
464
455
  };
465
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGx1Z2luLWdhdGUtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdhdGUgb24gYSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2U6IHdoYXQgbXVzdCBiZSBQUkVTRU5UIGZvciBpdCB0byBydW4sIGFuZCB3aGF0IG11c3QgTk9UIGJlLlxuICpcbiAqIEJvdGggaGFsdmVzIGFuc3dlciB0aGUgc2FtZSBxdWVzdGlvbiBcdTIwMTQgbWF5IHRoaXMgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIHJ1biByaWdodCBub3c/IFx1MjAxNCBzbyB0aGV5IGFyZSBvbmVcbiAqIGNvbXBvbmVudCByYXRoZXIgdGhhbiB0d28uIEEgc2Vjb25kLCBpbmRlcGVuZGVudCBnYXRlIHdvdWxkIGRvdWJsZS1sb2FkIHRoZSBzdXJmYWNlIGFuZCBzdGFjayBhIHNlY29uZFxuICogXCJibG9ja2VkXCIgc2V0dGluZ3MgdGFiIG9udG8gdGhlIHNhbWUgcGx1Z2luLCBhbmQgbmVpdGhlciBjb3VsZCBzZWUgdGhlIG90aGVyJ3MgcmVhc29uIGZvciByZWZ1c2luZy5cbiAqXG4gKiAjIyBEZXBlbmRlbmNpZXM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IGNhbm5vdCB3b3JrIHdpdGhvdXRcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdHJpY3Qgc2libGluZyBvZiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudGAsIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyB0aGUgd2hvbGUgcG9pbnQuIEFcbiAqIFNVR0dFU1RJT04gaXMgYW4gb2ZmZXIgXHUyMDE0IHRoZSBob3N0IGtlZXBzIHdvcmtpbmcgd2l0aG91dCBpdCBhbmQgc2ltcGx5IGNhbm5vdCBkbyBvbmUgdGhpbmcuIEEgREVQRU5ERU5DWVxuICogaXMgYSByZXF1aXJlbWVudDogYG9ubG9hZEltcGxgIG5ldmVyIHJ1bnMsIG5vIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCwgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQsIG5vdGhpbmcgaXNcbiAqIHBhdGNoZWQuIFJlYWNoIGZvciBhIHN1Z2dlc3Rpb24gd2hlbiB0aGUgb3RoZXIgcGx1Z2luIGFkZHMgc29tZXRoaW5nOyByZWFjaCBmb3IgYSBkZXBlbmRlbmN5IHdoZW4gdGhlXG4gKiBob3N0J3MgYWR2ZXJ0aXNlZCBiZWhhdmlvciBpcyBub3QgdGhlcmUgd2l0aG91dCBpdC5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gZGVwZW5kZW5jeSBmaWVsZCBpbiBhIG1hbmlmZXN0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9ibGVtIHRoaXMgY2xvc2VzLiBXaXRob3V0IG9uZSxcbiAqIGEgdXNlciBtZWV0aW5nIGFuIHVuZmFtaWxpYXIgcGx1Z2luIGluIHRoZWlyIGxpc3QgbW9udGhzIGxhdGVyIGhhcyBub3RoaW5nIHRlbGxpbmcgdGhlbSBpdCBpc1xuICogbG9hZC1iZWFyaW5nIFx1MjAxNCB0aGV5IHJlbW92ZSBpdCwgYW5kIHRoZSBicmVha2FnZSBzdXJmYWNlcyB3ZWVrcyBhZnRlciB0aGF0IGFzIGRhbWFnZSB0aGV5IGNhbm5vdCBjb25uZWN0XG4gKiB0byBhbnl0aGluZyB0aGV5IGRpZC4gU28gdGhlIHJlbGF0aW9uc2hpcCBpcyBtYWRlIHZpc2libGUgZnJvbSBib3RoIGVuZHMgYW5kIGVuZm9yY2VkIHdoaWxlIGl0IGhvbGRzOlxuICogdGhlIGRlcGVuZGVudCBleHBsYWlucyBpdHNlbGYgd2hlcmUgdGhlIHVzZXIgaXMgbG9va2luZywgcmVwYWlycyBpdHNlbGYgaW4gb25lIGNsaWNrLCBhbmQgcmVhY3RzIHRoZVxuICogSU5TVEFOVCB0aGUgZGVwZW5kZW5jeSBnb2VzIGF3YXkgcmF0aGVyIHRoYW4gZGVncmFkaW5nIHF1aWV0bHkuXG4gKlxuICogVGhyZWUgY2hvaWNlcyBhcmUgZGVsaWJlcmF0ZSBhbmQgd29ydGggc3RhdGluZywgYmVjYXVzZSBlYWNoIGhhcyBhbiBvYnZpb3VzLWxvb2tpbmcgYWx0ZXJuYXRpdmU6XG4gKlxuICogLSAqKkJsb2NrZWQgbWVhbnMgZW5hYmxlZC1idXQtaW5lcnQsIG5ldmVyIHNlbGYtZGlzYWJsZWQuKiogQ2FsbGluZyBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgIG9uIGl0c2VsZlxuICogICB3b3VsZCBiZSB0aGUgbGl0ZXJhbCByZWFkaW5nIG9mIFwicmVmdXNlcyB0byBsb2FkXCIsIGFuZCBpdCByZXdyaXRlcyBhIGNvbmZpZyB0aGF0IGJlbG9uZ3MgdG8gdGhlIHVzZXIgXHUyMDE0XG4gKiAgIHdobyB3b3VsZCB0aGVuIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIGl0IGFmdGVyIGZpeGluZyB0aGUgZGVwZW5kZW5jeS4gU3RheWluZyBlbmFibGVkIGFuZCBpbmVydFxuICogICBzYXlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSB1c2VyLCBjaGFuZ2VzIG5vdGhpbmcgdGhleSBvd24sIGFuZCBjYW4gdW5kbyBpdHNlbGYuXG4gKiAtICoqQmxvY2tlZCBpcyBub3QgYW4gZXJyb3IuKiogVGhyb3dpbmcgZnJvbSBgb25sb2FkYCBtYXJrcyB0aGUgcGx1Z2luIGZhaWxlZCBpbiBPYnNpZGlhbiBhbmQgaGFuZHMgdGhlXG4gKiAgIHVzZXIgYSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mIGEgc2VudGVuY2UgYW5kIGEgYnV0dG9uLlxuICogLSAqKkEgZGVwZW5kZW5jeSBtdXN0IHB1Ymxpc2ggYW4gQVBJLioqIFRoYXQgaXMgd2hhdCBtYWtlcyBwcmVzZW5jZSwgYWJzZW5jZSwgdmVyc2lvbiBhbmQgZGVwYXJ0dXJlIGFsbFxuICogICBvYnNlcnZhYmxlIHRocm91Z2ggb25lIG1lY2hhbmlzbSBcdTIwMTQgYHdhdGNoUGx1Z2luQXBpYCdzIHJlZmVyZW5jZSBpcyBsaXZlLCBpcyByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiAgIHVubG9hZHMsIGFuZCBhbHJlYWR5IGNsYXNzaWZpZXMgbm90LWluc3RhbGxlZCBhZ2FpbnN0IG5vdC1lbmFibGVkIGFnYWluc3QgdG9vLW9sZC4gQSBwcm92aWRlciB3aXRoXG4gKiAgIG5vdGhpbmcgdG8gZXhwb3NlIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb247IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZVxuICogICBhIHNlY29uZCwgd2Vha2VyIGRldGVjdGlvbiBwYXRoIHRvIG1haW50YWluIGJlc2lkZSBpdC5cbiAqXG4gKiAjIyBDb25mbGljdHM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IHJlZnVzZXMgdG8gcnVuIGJlc2lkZVxuICpcbiAqIFRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgYW5kIGl0IG5lZWRzIGl0cyBvd24gZGV0ZWN0aW9uIHBhdGggYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvbmUgZG9lcyBub3QgZml0LlxuICogQSBjb25mbGljdGluZyBwbHVnaW4gaXMgdHlwaWNhbGx5IGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgb3RoZXIgcGx1Z2luIHRoYXQgc3RpbGwgb3ducyBiZWhhdmlvciB0aGlzIG9uZVxuICogaGFzIHRha2VuIG92ZXIgXHUyMDE0IGl0IHB1Ymxpc2hlcyBubyBBUEkgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBgYXBpVmVyc2lvblJhbmdlYCB0byBjb21wYXJlIGFnYWluc3QuXG4gKlxuICogVGhlIGFyZ3VtZW50IGZvciByZWZ1c2luZyByYXRoZXIgdGhhbiBjb21wZXRpbmcgY29tZXMgZnJvbSB0aGUgY2FzZSB0aGlzIGdlbmVyYWxpemVzOiB0d28gcmVuYW1lL2RlbGV0ZVxuICogaGFuZGxlcnMgYWN0aW5nIG9uIG9uZSByZW5hbWUgY29ycnVwdCBsaW5rcyBhbmQgbW92ZSBhdHRhY2htZW50cyB0d2ljZSwgYW5kIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0b1xuICogd2luIHRoYXQgcmFjZSBcdTIwMTQgYSBoYW5kbGVyIGlzIGVsZWN0ZWQgYnkgcmVnaXN0cnkgb3JkZXIsIGJ1dCB0aGUgcGF0Y2hlcyB0aGF0IGRvIHRoZSB3b3JrIHNpdCBvdXRzaWRlXG4gKiB0aGF0IGVsZWN0aW9uLCBzbyB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLiBFdmVyeSBzY2hlbWUgZm9yIHNlaXppbmdcbiAqIGNvbnRyb2wgZnJvbSBpbnNpZGUgaXMgbG9hZC1vcmRlciBkZXBlbmRlbnQuIFJlZnVzaW5nIGlzIGRldGVybWluaXN0aWMgd2hlcmUgY29tcGV0aW5nIGlzIG5vdCwgYW5kIGFcbiAqIHZhdWx0IHRoYXQgYnJpZWZseSBoYXMgbm8gaGFuZGxlciBpcyBhIGZhciBiZXR0ZXIgb3V0Y29tZSB0aGFuIG9uZSB3aXRoIHR3by5cbiAqXG4gKiBUd28gZGV0YWlscyBvZiB0aGF0IGRldGVjdGlvbiBjYXJyeSBvdmVyIHZlcmJhdGltLCBiZWNhdXNlIGJvdGggYXJlIGxvYWQtYmVhcmluZzpcbiAqXG4gKiAtICoqVmVyc2lvbnMgYXJlIHJlYWQsIG5ldmVyIHRoZSByZWdpc3RyeS4qKiBBIHBsdWdpbiB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCBoYXMgcmVnaXN0ZXJlZCBub3RoaW5nLCBzb1xuICogICBhc2tpbmcgdGhlIHJlZ2lzdHJ5IGdpdmVzIGEgZGlmZmVyZW50IGFuc3dlciBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyBhc2tlZC4gYGFwcC5wbHVnaW5zLm1hbmlmZXN0c2AgaXNcbiAqICAgcG9wdWxhdGVkIGZvciBldmVyeSBpbnN0YWxsZWQgcGx1Z2luIGF0IHN0YXJ0dXAsIHdoYXRldmVyIHRoZSBsb2FkIG9yZGVyIHR1cm5zIG91dCB0byBiZS5cbiAqIC0gKipBbiB1bnBhcnNlYWJsZSB2ZXJzaW9uIGNvdW50cyBhcyBjb25mbGljdGluZy4qKiBGYWlsaW5nIGNsb3NlZCBpcyB0aGUgc2FmZSBkaXJlY3Rpb246IGEgZmFsc2UgYWxhcm1cbiAqICAgY29zdHMgYSBub3RpY2UsIGEgZmFsc2UgYWxsLWNsZWFyIGNvc3RzIGEgdmF1bHQuXG4gKlxuICogTm90IGV2ZXJ5IG92ZXJsYXAgaXMgdGhhdCBzZXZlcmUsIHdoaWNoIGlzIHdoeSBhIGNvbmZsaWN0IGRlY2xhcmVzIGEge0BsaW5rIFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHl9LlxuICogVHdvIHBsdWdpbnMgc2hpcHBpbmcgdGhlIHNhbWUgY29tbWFuZCBkdXBsaWNhdGUgYSBwYWxldHRlIGVudHJ5IGFuZCBkbyB0aGUgd29yayB0d2ljZSBcdTIwMTQgYW5ub3lpbmcsIG5vdFxuICogY29ycnVwdGluZyBcdTIwMTQgYW5kIHJlZnVzaW5nIHRvIGxvYWQgb3ZlciB0aGF0IHdvdWxkIGJlIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHRoZSBvdmVybGFwLiBUaG9zZSBkZWNsYXJlXG4gKiB7QGxpbmsgUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJufSBhbmQgYm90aCBrZWVwIHJ1bm5pbmcuXG4gKlxuICogIyMgV2hhdCB0aGlzIGNhbiBhbmQgY2Fubm90IHNlZVxuICpcbiAqIE9ic2lkaWFuIHJhaXNlcyBubyBldmVudCB3aGVuIEFOT1RIRVIgcGx1Z2luIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHNlZSBgcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHNgKSxcbiAqIHNvIGxpdmUgY29uZmxpY3QgZGV0ZWN0aW9uIGhhcyBhIHJlYWwgY2VpbGluZyBhbmQgaXQgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wbGllZCBhd2F5LiBBXG4gKiBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5IGFubm91bmNlcyBpdHNlbGYgdGhyb3VnaCB0aGUgbGlmZWN5Y2xlIGJyb2FkY2FzdCwgYW5kIGlzXG4gKiB0aGVyZWZvcmUgY2F1Z2h0IHRoZSBtb21lbnQgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gT25lIHRoYXQgaXMgbm90IFx1MjAxNCBhbiBvbGQgcmVsZWFzZSBwcmVkYXRpbmcgdGhlXG4gKiBicm9hZGNhc3QsIG9yIGEgcGx1Z2luIGJ5IGFub3RoZXIgYXV0aG9yIGVudGlyZWx5IFx1MjAxNCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgd2hpY2ggaXMgd2hlbiBpdHNcbiAqIG1hbmlmZXN0IGlzIHJlYWQuXG4gKlxuICogIyMgV2h5IGEgbG9zcyBpcyBhbm5vdW5jZWQgbGF0ZVxuICpcbiAqIE9ic2lkaWFuIHVwZGF0ZXMgYW4gZW5hYmxlZCBwbHVnaW4gYnkgcmVsb2FkaW5nIGl0OiB0aGUgb2xkIGNvcHkgdW5sb2FkcywgdGhlIG5ldyBvbmUgbG9hZHMuIEZvciB0aGVcbiAqIG1vbWVudCBpbiBiZXR3ZWVuIHRoZSBwcm92aWRlcidzIEFQSSBpcyByZXZva2VkLCBzbyBldmVyeSBkZXBlbmRlbnQgc2VlcyBpdHMgZGVwZW5kZW5jeSBnbyBhd2F5IGFuZFxuICogY29tZSBiYWNrLiBUaGUgZmVhdHVyZSBzdXJmYWNlIHN0aWxsIGNvbWVzIGRvd24gYXQgb25jZSBcdTIwMTQgdGhlIGRlcGVuZGVuY3kgcmVhbGx5IGlzIGdvbmUgZm9yIHRoYXRcbiAqIG1vbWVudCBcdTIwMTQgYnV0IHRoZSBub3RpY2Ugd2FpdHMge0BsaW5rIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFN9LCBhbmQgYSBsb3NzIHRoYXRcbiAqIGhlYWxlZCBpbiB0aGUgbWVhbnRpbWUgaXMgbmV2ZXIgYW5ub3VuY2VkLiBXaXRob3V0IHRoYXQsIHVwZGF0aW5nIG9uZSBwbHVnaW4gcHV0IGEgXCJubyBsb25nZXJcbiAqIGF2YWlsYWJsZVwiIG5vdGljZSBvbiBzY3JlZW4gaW4gZXZlcnkgcGx1Z2luIGRlcGVuZGluZyBvbiBpdCwgZGVzY3JpYmluZyBhIHN0YXRlIHRoYXQgbm8gbG9uZ2VyIGhlbGQgYnlcbiAqIHRoZSB0aW1lIHRoZSB1c2VyIHJlYWQgaXQuIEEgbG9zcyB0aGUgdXNlciBjYXVzZWQgb24gcHVycG9zZSBcdTIwMTQgZGlzYWJsaW5nIG9yIHVuaW5zdGFsbGluZyB0aGVcbiAqIGRlcGVuZGVuY3kgXHUyMDE0IG91dGxhc3RzIHRoZSB3aW5kb3cgYW5kIGlzIGFubm91bmNlZCBhcyBiZWZvcmUsIG9ubHkgYSBmZXcgc2Vjb25kcyBsYXRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IHNhdGlzZmllcyBhcyBzYXRpc2ZpZXNWZXJzaW9uIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIFBsdWdpblNldHRpbmdUYWJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbkFwaVJlZiB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lLFxuICBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWRcbn0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGRpc2FibGVDb21tdW5pdHlQbHVnaW4gfSBmcm9tICcuLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQge1xuICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lLFxuICBhc0NvZGVCbG9jayxcbiAgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc1xufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyB3YXRjaFBsdWdpbkFwaSB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7XG4gIGdldEluc3RhbGxlZFBsdWdpblN0YXRlLFxuICBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uLFxuICBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luLFxuICBJbnN0YWxsZWRQbHVnaW5TdGF0ZVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0V2ZW50IH0gZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSBnYXRlIHRoYXQgY2xvc2VkIHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcgd2FpdHMgYmVmb3JlIHNheWluZyBzby5cbiAqXG4gKiBMb25nIGVub3VnaCB0byBjb3ZlciBPYnNpZGlhbiByZWxvYWRpbmcgYSBwbHVnaW4gdG8gYXBwbHkgaXRzIHVwZGF0ZSwgc2hvcnQgZW5vdWdoIHRoYXQgYSB1c2VyIHdob1xuICogZGlzYWJsZWQgdGhlIGRlcGVuZGVuY3kgYnkgaGFuZCBzdGlsbCBjb25uZWN0cyB0aGUgbm90aWNlIHRvIHdoYXQgdGhleSBqdXN0IGRpZC5cbiAqL1xuY29uc3QgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGJhZGx5IHR3byBwbHVnaW5zIHJ1bm5pbmcgc2lkZSBieSBzaWRlIGdvZXMgd3JvbmcsIGFuZCB0aGVyZWZvcmUgd2hhdCB0aGlzIG9uZSBkb2VzIGFib3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Db25mbGljdFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBob3N0IHJlZnVzZXMgdG8gcnVuIGF0IGFsbCB3aGlsZSB0aGUgY29uZmxpY3QgaG9sZHM6IGBvbmxvYWRJbXBsYCBuZXZlciBydW5zLCBub3RoaW5nIGlzXG4gICAqIHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGx1Z2luIGV4cGxhaW5zIGl0c2VsZiB0aGUgd2F5IGEgbWlzc2luZyBkZXBlbmRlbmN5IGRvZXMuXG4gICAqXG4gICAqIEZvciBhbiBvdmVybGFwIHdoZXJlIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0LlxuICAgKi9cbiAgQmxvY2sgPSAnYmxvY2snLFxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBydW5zIGFueXdheSBhbmQgc2F5cyB0aGUgb3ZlcmxhcCBpcyB0aGVyZS5cbiAgICpcbiAgICogRm9yIGFuIG92ZXJsYXAgdGhhdCBpcyBhbm5veWluZyByYXRoZXIgdGhhbiBkZXN0cnVjdGl2ZSBcdTIwMTQgZHVwbGljYXRlIGNvbW1hbmRzLCB3b3JrIGRvbmUgdHdpY2UgXHUyMDE0IHdoZXJlXG4gICAqIHJlZnVzaW5nIHRvIGxvYWQgd291bGQgY29zdCB0aGUgdXNlciBtb3JlIHRoYW4gdGhlIG92ZXJsYXAgZG9lcy5cbiAgICovXG4gIFdhcm4gPSAnd2Fybidcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUsIG9yIHdhcm5zIGFib3V0IHJ1bm5pbmcgYmVzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZsaWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgdGhlIE9USEVSIHBsdWdpbidzIHZlcnNpb25zIHRoYXQgY29uZmxpY3QsIGUuZy4gYCc8MTIuMC4wJ2AgZm9yIFwiZXZlcnkgdmVyc2lvblxuICAgKiBiZWZvcmUgdGhlIG9uZSB0aGF0IGdhdmUgdGhpcyBiZWhhdmlvciB1cFwiLlxuICAgKlxuICAgKiBBIHJhbmdlIHJhdGhlciB0aGFuIGEgbWluaW11bSwgc28gYW4gb3ZlcmxhcCBjb25maW5lZCB0byBvbmUgbWFqb3IgKGAnPj0zIDw0J2ApIGlzIGV4cHJlc3NpYmxlLCBhbmQgc29cbiAgICogaXMgYSBwbHVnaW4gdGhhdCBjb25mbGljdHMgYXQgZXZlcnkgdmVyc2lvbiBcdTIwMTQgc3BlbGwgdGhhdCBgJz49MC4wLjAnYCwgc2luY2UgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHNcbiAgICogYSBiYXJlIGAqYC4gRXZhbHVhdGVkIGFnYWluc3QgYG1hbmlmZXN0LnZlcnNpb25gOyBhIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGNvdW50cyBhc1xuICAgKiBjb25mbGljdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0aW5nVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCBnb2VzIHdyb25nIHdoZW4gYm90aCBydW4sIHNob3duIGluIHRoZSBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJpbmcgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmcgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoYXQgdGhlIHR3byBvZiB0aGVtIGNvbGxpZGUgb3ZlciwgYW5kIGFcbiAgICogdXNlciBiZWluZyBhc2tlZCB0byBkaXNhYmxlIHNvbWV0aGluZyBkZXNlcnZlcyB0byBiZSB0b2xkIHdoeS5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBzaW5jZSB0aGUgYmFubmVyIGlzIHJlbmRlcmVkIGFnYWluIG9uIGV2ZXJ5IHJlZnJlc2guXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdGhpcyBwbHVnaW4gZG9lcyBhYm91dCB0aGUgY29uZmxpY3QuXG4gICAqL1xuICByZWFkb25seSBzZXZlcml0eTogUGx1Z2luQ29uZmxpY3RTZXZlcml0eTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiBjYW5ub3Qgd29yayB3aXRob3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkRlcGVuZGVuY3kge1xuICAvKipcbiAgICogVGhlIHNlbXZlciByYW5nZSBvZiBBUEkgY29udHJhY3QgdmVyc2lvbnMgdGhlIGRlcGVuZGVudCBjb21waWxlZCBhZ2FpbnN0LCBlLmcuIGAnXjInYC5cbiAgICpcbiAgICogQSBkZXBlbmRlbmN5IHdob3NlIHB1Ymxpc2hlZCBBUEkgZmFsbHMgb3V0c2lkZSB0aGUgcmFuZ2UgY291bnRzIGFzIFVOU0FUSVNGSUVELCB3aGljaCBpcyB3aGF0IHR1cm5zIGFcbiAgICogc2lsZW50IGJlaGF2aW9yYWwgbWlzbWF0Y2ggYmV0d2VlbiB0d28gaW5kZXBlbmRlbnRseSByZWxlYXNlZCBwbHVnaW5zIGludG8gYSB2aXNpYmxlIFwidXBkYXRlIHRoaXNcbiAgICogb25lXCIgbWVzc2FnZS4gU3BlbGwgXCJhbnkgdmVyc2lvblwiIGFzIGAnPj0wLjAuMCdgIFx1MjAxNCBgY29tcGFyZS12ZXJzaW9uc2AgcmVqZWN0cyBhIGJhcmUgYCpgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSByZXF1aXJlZCBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCB0aGUgZGVwZW5kZW50IGRvZXMgd2l0aCB0aGlzIHBsdWdpbiwgc2hvd24gaW4gdGhlIHNldHRpbmdzIGJhbm5lci5cbiAgICpcbiAgICogVGhlIGRlcGVuZGVudCBvd25zIHRoaXMgc3RyaW5nIGJlY2F1c2Ugb25seSBpdCBrbm93cyB3aGF0IGl0IHVzZXMgdGhlIG90aGVyIHBsdWdpbiBmb3IsIGFuZCBhIHVzZXJcbiAgICogYmVpbmcgYXNrZWQgdG8gaW5zdGFsbCBzb21ldGhpbmcgZGVzZXJ2ZXMgdG8gYmUgdG9sZCB3aHkuXG4gICAqXG4gICAqIFBhc3MgYSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gdG8gbWFyayB1cCBwYXJ0IG9mIHRoZSBzZW50ZW5jZSwgc3VjaCBhcyBhIHBsdWdpbiBuYW1lIHJlbmRlcmVkIGFzXG4gICAqIGNvZGUuIEVhY2ggcmVuZGVyIGFwcGVuZHMgYSBmcmVzaCBjbG9uZSBvZiBpdCwgc2luY2UgdGhlIGJhbm5lciBpcyByZW5kZXJlZCBhZ2FpbiBvbiBldmVyeSByZWZyZXNoLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUGx1Z2luR2F0ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luR2F0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb25mbGljdHMgdG8gZW5mb3JjZS4gQW4gZW1wdHkgbGlzdCBtZWFucyB0aGUgcGx1Z2luIHJlZnVzZXMgdG8gcnVuIGJlc2lkZSBub3RoaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVwZW5kZW5jaWVzIHRvIGVuZm9yY2UuIEFuIGVtcHR5IGxpc3QgbWVhbnMgdGhlIHBsdWdpbiBkZXBlbmRzIG9uIG5vdGhpbmcsIGFuZCBpdHMgZmVhdHVyZVxuICAgKiBzdXJmYWNlIGxvYWRzIGltbWVkaWF0ZWx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W107XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBob3N0IHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZS4gQ2FsbGVkIG9uY2UgZXZlcnkgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQgYW5kIG5vIGJsb2NraW5nXG4gICAqIGNvbmZsaWN0IGhvbGRzLCBhbmQgYWdhaW4gYWZ0ZXIgYSBnYXRlIHRoYXQgaGFkIGNsb3NlZCBvcGVucyBiYWNrIHVwLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN1cmZhY2UgaXMgbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBwbHVnaW4gXHUyMDE0IHRoZSBvbmUgZGVjbGFyaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZsaWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBwbHVnaW4ncyBub3RpY2UgY29tcG9uZW50LCB1c2VkIHRvIHNheSB3aGF0IGlzIG1pc3NpbmcsIHdoYXQgaXMgaW4gdGhlIHdheSwgYW5kIHdoYXQgY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBVbmxvYWRzIHRoZSBob3N0IHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZS4gQ2FsbGVkIHdoZW4gYSBnYXRlIHRoYXQgaGFkIGJlZW4gb3BlbiBjbG9zZXMuXG4gICAqL1xuICByZWFkb25seSB1bmxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFifSBjb25zdHJ1Y3Rvci5cbiAqL1xuaW50ZXJmYWNlIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJsb2NrZWQgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGJsb2NrZWQgZXhwbGFuYXRpb24gaW50byB0aGUgdGFiJ3MgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgdGFiJ3MgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqL1xuICByZWFkb25seSByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRhYiBhIGJsb2NrZWQgcGx1Z2luIHNob3dzIGluIHBsYWNlIG9mIHRoZSBvbmUgaXQgbmV2ZXIgZ290IHRvIHJlZ2lzdGVyLlxuICpcbiAqIEEgYmxvY2tlZCBwbHVnaW4ncyBgb25sb2FkSW1wbGAgbmV2ZXIgcmFuLCBzbyBpdHMgcmVhbCBzZXR0aW5ncyB0YWIgZG9lcyBub3QgZXhpc3QgXHUyMDE0IGFuZCBhIHVzZXIgd2hvIGdvZXNcbiAqIGxvb2tpbmcgZm9yIHRoZSBwbHVnaW4ncyBzZXR0aW5ncyBpcyBwcmVjaXNlbHkgdGhlIHVzZXIgYXNraW5nIFwid2h5IGlzbid0IHRoaXMgZG9pbmcgYW55dGhpbmc/XCIuIEFuXG4gKiBlbXB0eSBzcGFjZSBpcyB0aGUgd29yc3QgcG9zc2libGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL3NldHRpbmdzLXRhYi9wcmVmZXItc2V0dGluZy1kZWZpbml0aW9ucyAtLSBUaGlzIHRhYiBoYXMgbm8gc2V0dGluZ3MgdG8gZGVjbGFyZS4gSXQgc3RhbmRzIGluIGZvciBhIHNldHRpbmdzIHRhYiB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCwgY2FycnlpbmcgYW4gZXhwbGFuYXRpb24gYW5kIGEgcmVwYWlyIGJ1dHRvbiwgYW5kIHRoZSBwbHVnaW4ncyByZWFsIHNldHRpbmdzIGFwcGVhciB0aGUgbW9tZW50IHRoZSBnYXRlIG9wZW5zLlxuY2xhc3MgQmxvY2tlZFBsdWdpblNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFifS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQmxvY2tlZFBsdWdpblNldHRpbmdUYWJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcy5wbHVnaW4uYXBwLCBwYXJhbXMucGx1Z2luKTtcbiAgICB0aGlzLnJlbmRlckJhbm5lciA9IHBhcmFtcy5yZW5kZXJCYW5uZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgdGFiLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuICAgIHRoaXMucmVuZGVyQmFubmVyKHRoaXMuY29udGFpbmVyRWwpO1xuICB9XG59XG5cbi8qKlxuICogRW5mb3JjZXMgYSBwbHVnaW4ncyBtYW5kYXRvcnkgZGVwZW5kZW5jaWVzIGFuZCBkZWNsYXJlZCBjb25mbGljdHMsIGdhdGluZyBpdHMgZmVhdHVyZSBzdXJmYWNlIG9uIGJvdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5HYXRlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwcml2YXRlIHJlYWRvbmx5IGFubm91bmNlZFdhcm5pbmdQbHVnaW5JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlSZWZzID0gbmV3IE1hcDxzdHJpbmcsIFBsdWdpbkFwaVJlZjxvYmplY3Q+PigpO1xuICBwcml2YXRlIGJsb2NrZWRTZXR0aW5nVGFiOiBudWxsIHwgUGx1Z2luU2V0dGluZ1RhYiA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdO1xuICBwcml2YXRlIGhhc0Fubm91bmNlZEJsb2NrZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0ZlYXR1cmVTdXJmYWNlTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNMYXlvdXRSZWFkeSA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBsb3NzQW5ub3VuY2VtZW50VGltZXJJZDogbnVsbCB8IG51bWJlciA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5sb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBnZXQgYXBwKCk6IEFwcCB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLmFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBQbHVnaW5HYXRlQ29tcG9uZW50fS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luR2F0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbmZsaWN0cyA9IHBhcmFtcy5jb25mbGljdHM7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBwYXJhbXMuZGVwZW5kZW5jaWVzO1xuICAgIHRoaXMubG9hZEZlYXR1cmVTdXJmYWNlID0gcGFyYW1zLmxvYWRGZWF0dXJlU3VyZmFjZTtcbiAgICB0aGlzLnBsdWdpbiA9IHBhcmFtcy5wbHVnaW47XG4gICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBwYXJhbXMucGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICAgIHRoaXMudW5sb2FkRmVhdHVyZVN1cmZhY2UgPSBwYXJhbXMudW5sb2FkRmVhdHVyZVN1cmZhY2U7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyB3aGV0aGVyIGFueSB3YXJuaW5nIGNvbmZsaWN0IGlzIGluIGZvcmNlIHJpZ2h0IG5vdy5cbiAgICpcbiAgICogVGhlIHByZWRpY2F0ZSBhIGRlY2xhcmF0aXZlIHNldHRpbmdzIHRhYiBuZWVkcywgYW5kIHRoZSBjb3VudGVycGFydCB0b1xuICAgKiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudC5nZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZWAuIFN1Y2ggYSB0YWIgZGVjaWRlcyB3aGV0aGVyIGEgcm93IGV4aXN0c1xuICAgKiBCRUZPUkUgaXQgcmVuZGVycyBhbnl0aGluZyBpbnRvIGl0LCBzbyB7QGxpbmsgcmVuZGVyQ29uZmxpY3RXYXJuaW5nQmFubmVyfSB3cml0aW5nIG5vdGhpbmcgY2Fubm90XG4gICAqIGFuc3dlciB0aGUgcXVlc3Rpb24gZm9yIGl0IFx1MjAxNCBhIHJvdyB0aGF0IHJlbmRlcnMgZW1wdHkgaXMgc3RpbGwgYSByb3csIHdpdGggdGhlIGRpdmlkZXIgYW5kIHBhZGRpbmdcbiAgICogZXZlcnkgb3RoZXIgc2V0dGluZyBoYXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYXQgbGVhc3Qgb25lIGRlY2xhcmVkIHdhcm5pbmcgY29uZmxpY3QgaG9sZHMuXG4gICAqL1xuICBwdWJsaWMgaGFzQWN0aXZlV2FybmluZ0NvbmZsaWN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJuKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB3YXRjaGluZyBldmVyeSBkZWNsYXJlZCBkZXBlbmRlbmN5IGFuZCBjb25mbGljdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBhcGlSZWYgPSB3YXRjaFBsdWdpbkFwaTxvYmplY3Q+KHtcbiAgICAgICAgYXBpVmVyc2lvblJhbmdlOiBkZXBlbmRlbmN5LmFwaVZlcnNpb25SYW5nZSxcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZFxuICAgICAgfSk7XG4gICAgICByZWdpc3RlckFzeW5jRXZlbnQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGFwaVJlZi5vbignY2hhbmdlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBpUmVmcy5zZXQoZGVwZW5kZW5jeS5wbHVnaW5JZCwgYXBpUmVmKTtcbiAgICB9XG5cbiAgICAvLyBBIGNvbmZsaWN0IGhhcyBubyBBUEkgdG8gd2F0Y2ggXHUyMDE0IGl0IGlzIHJlYWQgb3V0IG9mIHRoZSBtYW5pZmVzdHMgXHUyMDE0IHNvIHRoZSB0cmlnZ2VyIHRvIHJlLXJlYWQgaXMgdGhlXG4gICAgLy8gbGlicmFyeSdzIG93biBsaWZlY3ljbGUgYnJvYWRjYXN0LiBJdCBjb3ZlcnMgZXZlcnkgY29uZmxpY3RpbmcgcGx1Z2luIGJ1aWx0IG9uIHRoaXMgbGlicmFyeTsgb25lXG4gICAgLy8gdGhhdCBpcyBub3QgaXMgY2F1Z2h0IGF0IHRoZSBuZXh0IGxvYWQsIGFzIHRoZSBmaWxlIGhlYWRlciBzYXlzLlxuICAgIGNvbnN0IGxpZmVjeWNsZUV2ZW50TmFtZXM6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZVtdID0gW1BMVUdJTl9MT0FERURfRVZFTlRfTkFNRSwgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUVdO1xuICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIGxpZmVjeWNsZUV2ZW50TmFtZXMpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgY29udmVydEFzeW5jVG9TeW5jKGFzeW5jIChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHtcbiAgICAgICAgICBpZiAocGF5bG9hZC5wbHVnaW5JZCA9PT0gdGhpcy5wbHVnaW4ubWFuaWZlc3QuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSlcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8vIE5vdGhpbmcgaXMgU0FJRCBhYm91dCBhIG1pc3NpbmcgZGVwZW5kZW5jeSB1bnRpbCB0aGUgbGF5b3V0IGlzIHJlYWR5LiBQbHVnaW5zIGxvYWQgaW4gYW4gdW5zcGVjaWZpZWRcbiAgICAvLyBvcmRlciwgc28gYSBkZXBlbmRlbmN5IHRoYXQgc2ltcGx5IGhhcyBub3QgbG9hZGVkIHlldCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBhdCB0aGlzIHBvaW50IGZyb20gb25lXG4gICAgLy8gdGhhdCBpcyBub3QgaW5zdGFsbGVkIFx1MjAxNCBhbm5vdW5jaW5nIGhlcmUgd291bGQgcHV0IGEgXCJtaXNzaW5nIHBsdWdpblwiIG5vdGljZSBvbiBzY3JlZW4gYXQgZXZlcnlcbiAgICAvLyBzdGFydHVwIGFuZCB0YWtlIGl0IGF3YXkgYSBtb21lbnQgbGF0ZXIuIFRoZSBnYXRlIGl0c2VsZiBkb2VzIG5vdCB3YWl0OiB0aGUgc3VyZmFjZSBsb2FkcyB0aGVcbiAgICAvLyBpbnN0YW50IHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlLCB3aGVuZXZlciB0aGF0IGlzLlxuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTGF5b3V0UmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZXNlbnRVbnNhdGlzZmllZCh0aGlzLmdldFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKCksIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuQmxvY2spKTtcbiAgICAgICAgdGhpcy5hbm5vdW5jZVdhcm5pbmdzKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsTG9zc0Fubm91bmNlbWVudCgpO1xuICAgICAgdGhpcy5oaWRlQmxvY2tlZFNldHRpbmdUYWIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgdGhlIGdhdGUgb25jZSB0aGUgd2F0Y2hlcyBhcmUgaW4gcGxhY2UsIGxvYWRpbmcgdGhlIGZlYXR1cmUgc3VyZmFjZSBpZiBpdCBpcyBhbHJlYWR5IG9wZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZmlyc3QgZXZhbHVhdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgYmFubmVyIGZvciBldmVyeSBjb25mbGljdCB0aGUgaG9zdCBpcyBydW5uaW5nIGFsb25nc2lkZSwgc28gYSBwbHVnaW4gY2FuIHB1dCB0aGUgb3ZlcmxhcCBpblxuICAgKiBpdHMgb3duIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQ29uc3VtZXItaW52b2tlZCwgZXhhY3RseSBsaWtlIGBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50LnJlbmRlckJhbm5lcmA6IHRoZSBsaWJyYXJ5IHJlZ2lzdGVycyB0aGVcbiAgICogc2V0dGluZ3MgdGFiIGEgQkxPQ0tFRCBwbHVnaW4gbmVlZHMsIGJlY2F1c2UgdGhhdCBwbHVnaW4gbmV2ZXIgZ290IHRvIHJlZ2lzdGVyIG9uZSBvZiBpdHMgb3duLCBidXQgaXRcbiAgICogaGFzIG5vIGhvb2sgaW50byB0aGUgdGFiIGEgcnVubmluZyBwbHVnaW4gYnVpbGRzLiBSZW5kZXJzIG5vdGhpbmcgd2hlbiBubyB3YXJuaW5nIGNvbmZsaWN0IGhvbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICovXG4gIHB1YmxpYyByZW5kZXJDb25mbGljdFdhcm5pbmdCYW5uZXIoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm4pKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbmZsaWN0RW50cnkoY29udGFpbmVyRWwsIGNvbmZsaWN0LCB0aGlzLmNyZWF0ZUNvbmZsaWN0V2FybmluZ01lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F5cyB3aGF0IHdlbnQgYXdheSB3aGlsZSB0aGUgcGx1Z2luIHdhcyBydW5uaW5nLCBub3cgdGhhdCB0aGUgZ3JhY2UgcGVyaW9kIGlzIG92ZXIuXG4gICAqXG4gICAqIFJlLXJlYWRzIHRoZSBnYXRlIHJhdGhlciB0aGFuIHRydXN0aW5nIHdoYXQgY2xvc2VkIGl0LCBzbyBhIGRlcGVuZGVuY3kgdGhhdCB3ZW50IGF3YXkgZHVyaW5nIHRoZVxuICAgKiB3aW5kb3cgaXMgYW5ub3VuY2VkIHdpdGggdGhlIHJlc3QuIE9uZSB0aGF0IGNhbWUgYmFjayBpbiB0aW1lIG5ldmVyIGdldHMgaGVyZTogdGhlIGdhdGUgcmVvcGVuaW5nXG4gICAqIGNhbmNlbHMgdGhlIHRpbWVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhbm5vdW5jZUxvc3MoKTogdm9pZCB7XG4gICAgdGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdGhpcy5nZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlRGVwZW5kZW5jeUxvc3RNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuQmxvY2spKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQ29uZmxpY3RBcHBlYXJlZE1lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFubm91bmNlV2FybmluZ3MoKTogdm9pZCB7XG4gICAgLy8gQSB3YXJuaW5nIGRlc2NyaWJlcyB0d28gcGx1Z2lucyB0aGF0IGFyZSBib3RoIFJVTk5JTkcsIHNvIGl0IGlzIHBvaW50bGVzcyB3aGlsZSB0aGlzIG9uZSBpcyBibG9ja2VkXG4gICAgLy8gXHUyMDE0IGFuZCBpdCB3YWl0cyBmb3IgbGF5b3V0LXJlYWR5IGZvciB0aGUgc2FtZSByZWFzb24gdGhlIGJsb2NrZWQgbm90aWNlIGRvZXMuXG4gICAgaWYgKCF0aGlzLmlzTGF5b3V0UmVhZHkgfHwgIXRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJuKSkge1xuICAgICAgaWYgKHRoaXMuYW5ub3VuY2VkV2FybmluZ1BsdWdpbklkcy5oYXMoY29uZmxpY3QucGx1Z2luSWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFubm91bmNlZFdhcm5pbmdQbHVnaW5JZHMuYWRkKGNvbmZsaWN0LnBsdWdpbklkKTtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVDb25mbGljdFdhcm5pbmdNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxMb3NzQW5ub3VuY2VtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkKTtcbiAgICB0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmxvY2tlZE1lc3NhZ2UoZGVwZW5kZW5jeTogUGx1Z2luRGVwZW5kZW5jeSk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LmJsb2NrZWROb3RpY2UsIHtcbiAgICAgIGRlcGVuZGVuY3lQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhkZXBlbmRlbmN5LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmZsaWN0QXBwZWFyZWRNZXNzYWdlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5jb25mbGljdEFwcGVhcmVkTm90aWNlLCB7XG4gICAgICBjb25mbGljdGluZ1BsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGNvbmZsaWN0LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmZsaWN0QmxvY2tlZE1lc3NhZ2UoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0LmJsb2NrZWROb3RpY2UsIHtcbiAgICAgIGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogYXNDb2RlQmxvY2soY29uZmxpY3QucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmxpY3RXYXJuaW5nTWVzc2FnZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3Qud2FybmluZ05vdGljZSwge1xuICAgICAgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhjb25mbGljdC5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBlbmRlbmN5TG9zdE1lc3NhZ2UoZGVwZW5kZW5jeTogUGx1Z2luRGVwZW5kZW5jeSk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LmRlcGVuZGVuY3lMb3N0Tm90aWNlLCB7XG4gICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogYXNDb2RlQmxvY2soZGVwZW5kZW5jeS5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBkZWNsYXJlZCBjb25mbGljdHMgb2Ygb25lIHNldmVyaXR5IHRoYXQgYXJlIGN1cnJlbnRseSBpbiBmb3JjZS5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gVGhlIHNldmVyaXR5IHRvIHNlbGVjdC5cbiAgICogQHJldHVybnMgVGhlIGNvbmZsaWN0cyBob2xkaW5nIHJpZ2h0IG5vdywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBkZWNsYXJlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QWN0aXZlQ29uZmxpY3RzKHNldmVyaXR5OiBQbHVnaW5Db25mbGljdFNldmVyaXR5KTogUGx1Z2luQ29uZmxpY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmxpY3RzLmZpbHRlcigoY29uZmxpY3QpID0+IGNvbmZsaWN0LnNldmVyaXR5ID09PSBzZXZlcml0eSAmJiB0aGlzLmlzQ29uZmxpY3RBY3RpdmUoY29uZmxpY3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKTogUGx1Z2luRGVwZW5kZW5jeVtdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXMuZmlsdGVyKChkZXBlbmRlbmN5KSA9PiAhdGhpcy5hcGlSZWZzLmdldChkZXBlbmRlbmN5LnBsdWdpbklkKT8udmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlQmxvY2tlZFNldHRpbmdUYWIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJsb2NrZWRTZXR0aW5nVGFiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHAuc2V0dGluZy5yZW1vdmVTZXR0aW5nVGFiKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpO1xuICAgIHRoaXMuYmxvY2tlZFNldHRpbmdUYWIgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBvbmUgZGVjbGFyZWQgY29uZmxpY3QgaXMgaW4gZm9yY2UgcmlnaHQgbm93LlxuICAgKlxuICAgKiBPbmx5IGFuIEVOQUJMRUQgcGx1Z2luIGNvdW50cy4gT25lIHRoYXQgaXMgaW5zdGFsbGVkIGJ1dCBzd2l0Y2hlZCBvZmYgcmVnaXN0ZXJzIG5vdGhpbmcsIHNvIGl0IGNhbm5vdFxuICAgKiBjb2xsaWRlLCBhbmQgYWN0aW5nIG9uIGl0IHdvdWxkIGJlIGFuIGFsYXJtIHRoZSB1c2VyIGNhbiBvbmx5IGFuc3dlciBieSB1bmluc3RhbGxpbmcgc29tZXRoaW5nIHRoZXlcbiAgICogaGF2ZSBhbHJlYWR5IHR1cm5lZCBvZmYuXG4gICAqXG4gICAqIEBwYXJhbSBjb25mbGljdCAtIFRoZSBkZWNsYXJlZCBjb25mbGljdC5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29uZmxpY3RpbmcgcGx1Z2luIGlzIGVuYWJsZWQgYXQgYSBjb25mbGljdGluZyB2ZXJzaW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0NvbmZsaWN0QWN0aXZlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluc3RhbGxlZFZlcnNpb24gPSBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICB9KTtcblxuICAgIGlmIChpbnN0YWxsZWRWZXJzaW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzYXRpc2ZpZXNWZXJzaW9uKGluc3RhbGxlZFZlcnNpb24sIGNvbmZsaWN0LmNvbmZsaWN0aW5nVmVyc2lvblJhbmdlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIHdoYXQgaXMgaW4gdGhlIHdheSwgYW5kIHB1dHMgdGhlIHNhbWUgZXhwbGFuYXRpb24gd2hlcmUgdGhlIHVzZXIgd2lsbCBsb29rIGZvciB0aGUgcGx1Z2luJ3NcbiAgICogc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB1bnNhdGlzZmllZERlcGVuZGVuY2llcyAtIFRoZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSBzYXRpc2ZpZWQuXG4gICAqIEBwYXJhbSBibG9ja2luZ0NvbmZsaWN0cyAtIFRoZSBjb25mbGljdHMgY3VycmVudGx5IHJlZnVzaW5nIHRoZSBwbHVnaW4gdGhlIHJpZ2h0IHRvIHJ1bi5cbiAgICovXG4gIHByaXZhdGUgcHJlc2VudFVuc2F0aXNmaWVkKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTGF5b3V0UmVhZHkgfHwgKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCAmJiBibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93QmxvY2tlZFNldHRpbmdUYWIodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcblxuICAgIGlmICh0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB1bnNhdGlzZmllZERlcGVuZGVuY2llcykge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIGJsb2NraW5nQ29uZmxpY3RzKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1ldmFsdWF0ZXMgdGhlIGdhdGUgYW5kIG1vdmVzIHRoZSBmZWF0dXJlIHN1cmZhY2UgdG8gbWF0Y2guXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3VyZmFjZSBtYXRjaGVzIHRoZSBnYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzID0gdGhpcy5nZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpO1xuICAgIGNvbnN0IGJsb2NraW5nQ29uZmxpY3RzID0gdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5CbG9jayk7XG5cbiAgICBpZiAodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwICYmIGJsb2NraW5nQ29uZmxpY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jYW5jZWxMb3NzQW5ub3VuY2VtZW50KCk7XG4gICAgICB0aGlzLmhpZGVCbG9ja2VkU2V0dGluZ1RhYigpO1xuICAgICAgdGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkID0gZmFsc2U7XG5cbiAgICAgIGlmICghdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkKSB7XG4gICAgICAgIHRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEZlYXR1cmVTdXJmYWNlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYW5ub3VuY2VXYXJuaW5ncygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQpIHtcbiAgICAgIHRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy51bmxvYWRGZWF0dXJlU3VyZmFjZSgpO1xuXG4gICAgICAvLyBBIGdhdGUgdGhhdCBjbG9zZXMgd2hpbGUgdGhlIHBsdWdpbiBpcyBSVU5OSU5HIGlzIHRoZSBjYXNlIHdvcnRoIGJlaW5nIGxvdWQgYWJvdXQ6IHRoZSB1c2VyIGp1c3RcbiAgICAgIC8vIGRpZCBzb21ldGhpbmcsIGFuZCB0aGUgY29uc2VxdWVuY2UgaXMgaW1tZWRpYXRlIGFuZCBpbnZpc2libGUgd2l0aG91dCB0aGlzLiBBbm5vdW5jZWQgcmVnYXJkbGVzc1xuICAgICAgLy8gb2YgbGF5b3V0IHJlYWRpbmVzcywgYmVjYXVzZSBhIHJ1bm5pbmcgcGx1Z2luIG1lYW5zIHRoZSBsYXlvdXQgaXMgbG9uZyBzaW5jZSByZWFkeSBcdTIwMTQgYnV0IG9ubHlcbiAgICAgIC8vIG9uY2UgdGhlIGdyYWNlIHBlcmlvZCBoYXMgc2hvd24gdGhlIGxvc3MgaXMgbm90IGFuIHVwZGF0ZSByZWxvYWRpbmcgdGhlIHByb3ZpZGVyIChzZWUgdGhlIGZpbGVcbiAgICAgIC8vIGhlYWRlcikuXG4gICAgICB0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFubm91bmNlTG9zcygpO1xuICAgICAgfSwgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICAgIHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnNob3dCbG9ja2VkU2V0dGluZ1RhYih1bnNhdGlzZmllZERlcGVuZGVuY2llcywgYmxvY2tpbmdDb25mbGljdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VudFVuc2F0aXNmaWVkKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYmxvY2tlZCBleHBsYW5hdGlvbiBpbnRvIGEgc2V0dGluZ3MtdGFiIGNvbnRhaW5lcjogd2hhdCBpcyBtaXNzaW5nIG9yIGluIHRoZSB3YXksIHdoeSBpdFxuICAgKiBtYXR0ZXJzLCBhbmQgdGhlIGJ1dHRvbiB0aGF0IGZpeGVzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzIC0gVGhlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgY3VycmVudGx5IHNhdGlzZmllZC5cbiAgICogQHBhcmFtIGJsb2NraW5nQ29uZmxpY3RzIC0gVGhlIGNvbmZsaWN0cyBjdXJyZW50bHkgcmVmdXNpbmcgdGhlIHBsdWdpbiB0aGUgcmlnaHQgdG8gcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJCbG9ja2VkQmFubmVyKFxuICAgIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCxcbiAgICB1bnNhdGlzZmllZERlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdLFxuICAgIGJsb2NraW5nQ29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdXG4gICk6IHZvaWQge1xuICAgIGlmICh1bnNhdGlzZmllZERlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LnNldHRpbmdzSGVhZGluZykgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBiYW5uZXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7XG4gICAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5QbHVnaW5EZXBlbmRlbmN5QmFubmVyXVxuICAgICAgfSk7XG4gICAgICBiYW5uZXJFbC5hcHBlbmQodGhpcy5jcmVhdGVCbG9ja2VkTWVzc2FnZShkZXBlbmRlbmN5KSk7XG4gICAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCBkZXBlbmRlbmN5LnJlYXNvbik7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZ2V0SW5zdGFsbGVkUGx1Z2luU3RhdGUoe1xuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYmFubmVyRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+XG4gICAgICAgICAgc3RhdGUgPT09IEluc3RhbGxlZFBsdWdpblN0YXRlLkluc3RhbGxlZEJ1dERpc2FibGVkXG4gICAgICAgICAgICA/ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICAgICAgOiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5pbnN0YWxsXG4gICAgICAgICkpXG4gICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGluc3RhbGxBbmRFbmFibGVQbHVnaW4oe1xuICAgICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkLFxuICAgICAgICAgICAgcGx1Z2luTmFtZTogZGVwZW5kZW5jeS5wbHVnaW5OYW1lLFxuICAgICAgICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG5cbiAgICAgIC8vIFRoZSBsaW5rIE9VVCB0byB0aGUgZGVwZW5kZW5jeSdzIG93biBzZXR0aW5ncywgc2hvd24gb25seSBvbmNlIGl0IGlzIGluc3RhbGxlZCBhbmQgZW5hYmxlZCBcdTIwMTQgdGhlXG4gICAgICAvLyBvdGhlciBoYWxmIG9mIHRoZSByZWxhdGlvbnNoaXAgYmVpbmcgdmlzaWJsZSBmcm9tIGJvdGggZW5kcy4gSXQgaXMgd2hhdCBzdG9wcyBcImNvbmZpZ3VyZSBvbmVcbiAgICAgIC8vIG9wZXJhdGlvbiBhY3Jvc3MgdHdvIHBsdWdpbnNcIiBmcm9tIG1lYW5pbmcgXCJnbyBhbmQgZmluZCB0aGUgb3RoZXIgcGx1Z2luIHlvdXJzZWxmXCIuXG4gICAgICBpZiAoc3RhdGUgIT09IEluc3RhbGxlZFBsdWdpblN0YXRlLkVuYWJsZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsLCBkZXBlbmRlbmN5LnBsdWdpbklkLCBkZXBlbmRlbmN5LnBsdWdpbk5hbWUpO1xuICAgIH1cblxuICAgIGlmIChibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5zZXR0aW5nc0hlYWRpbmcpIH0pO1xuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBibG9ja2luZ0NvbmZsaWN0cykge1xuICAgICAgdGhpcy5yZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsLCBjb25mbGljdCwgdGhpcy5jcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgb25lIGNvbmZsaWN0OiB3aGF0IGl0IGlzLCB3aHkgaXQgbWF0dGVycywgYW5kIHRoZSB0d28gd2F5cyBvdXQgb2YgaXQuXG4gICAqXG4gICAqIFRoZSByZXBhaXIgaXMgb2ZmZXJlZCBvbiB0aGUgT1RIRVIgcGx1Z2luIFx1MjAxNCBkaXNhYmxpbmcgaXQgaXMgdGhlIG9uZSB0aGluZyB0aGlzIHBsdWdpbiBjYW4gZG8gaW4gYVxuICAgKiBjbGljaywgc2luY2UgaXQgY2Fubm90IHVwZGF0ZSBzb21lb25lIGVsc2UncyBwbHVnaW4gXHUyMDE0IGFuZCBpdCBpcyB0aGUgcGVyc2lzdGVkIGBkaXNhYmxlUGx1Z2luQW5kU2F2ZWBcbiAgICogcmF0aGVyIHRoYW4gdGhlIHRyYW5zaWVudCBkaXNhYmxlLCBiZWNhdXNlIHRoZSB1c2VyIGFza2VkIGZvciBpdCBieSBjbGlja2luZy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSBjb25mbGljdCAtIFRoZSBjb25mbGljdCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSBtZXNzYWdlRnJhZ21lbnQgLSBUaGUgc2VudGVuY2UgZXhwbGFpbmluZyB0aGUgY29uZmxpY3QuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckNvbmZsaWN0RW50cnkoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBjb25mbGljdDogUGx1Z2luQ29uZmxpY3QsIG1lc3NhZ2VGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5QbHVnaW5Db25mbGljdEJhbm5lcl1cbiAgICB9KTtcbiAgICBiYW5uZXJFbC5hcHBlbmQobWVzc2FnZUZyYWdtZW50KTtcbiAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCBjb25mbGljdC5yZWFzb24pO1xuXG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5kaXNhYmxlLCB7IGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogY29uZmxpY3QucGx1Z2luTmFtZSB9KSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5yZW5kZXJPcGVuU2V0dGluZ3NCdXR0b24oYmFubmVyRWwsIGNvbmZsaWN0LnBsdWdpbklkLCBjb25mbGljdC5wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsOiBIVE1MRWxlbWVudCwgcGx1Z2luSWQ6IHN0cmluZywgcGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5Lm9wZW5EZXBlbmRlbmN5U2V0dGluZ3MsIHtcbiAgICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcbiAgICAgIH0pKVxuICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW4oKTtcbiAgICAgICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZChwbHVnaW5JZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGRlZCB0aHJvdWdoIGBhcHAuc2V0dGluZ2AgcmF0aGVyIHRoYW4gYHBsdWdpbi5hZGRTZXR0aW5nVGFiYCwgYmVjYXVzZSB0aGlzIHRhYiBoYXMgdG8gY29tZSBiYWNrXG4gICAgLy8gT0ZGIGFnYWluIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMgXHUyMDE0IG90aGVyd2lzZSB0aGUgcGx1Z2luJ3Mgb3duIHNldHRpbmdzIHRhYiwgcmVnaXN0ZXJlZCBieVxuICAgIC8vIGBvbmxvYWRJbXBsYCwgd291bGQgYXBwZWFyIGJlc2lkZSBhIHN0YWxlIFwicmVxdWlyZWQgcGx1Z2luIG1pc3NpbmdcIiBvbmUuIGBwbHVnaW4uYWRkU2V0dGluZ1RhYmBcbiAgICAvLyBvbmx5IGV2ZXIgcmVtb3ZlcyBhdCBwbHVnaW4gdW5sb2FkLlxuICAgIGNvbnN0IGJsb2NrZWRTZXR0aW5nVGFiID0gbmV3IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiKHtcbiAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckJsb2NrZWRCYW5uZXIoY29udGFpbmVyRWwsIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5hZGRTZXR0aW5nVGFiKGJsb2NrZWRTZXR0aW5nVGFiKTtcbiAgICB0aGlzLmJsb2NrZWRTZXR0aW5nVGFiID0gYmxvY2tlZFNldHRpbmdUYWI7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEZBLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsYUFBYSx3QkFBd0I7QUFDOUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFTUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLGdCQUFnQjtBQUN6QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFNBQVM7QUFDbEIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxvQ0FBb0M7QUFRN0MsTUFBTSxpREFBaUQ7QUFLaEQsSUFBSyx5QkFBTCxrQkFBS0EsNEJBQUw7QUFPTCxFQUFBQSx3QkFBQSxXQUFRO0FBUVIsRUFBQUEsd0JBQUEsVUFBTztBQWZHLFNBQUFBO0FBQUEsR0FBQTtBQStKWixNQUFNLGdDQUFnQyxpQkFBaUI7QUFBQSxFQUNwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBa0Q7QUFDbkUsVUFBTSxPQUFPLE9BQU8sS0FBSyxPQUFPLE1BQU07QUFDdEMsU0FBSyxlQUFlLE9BQU87QUFB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
456
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdhdGUgb24gYSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2U6IHdoYXQgbXVzdCBiZSBQUkVTRU5UIGZvciBpdCB0byBydW4sIGFuZCB3aGF0IG11c3QgTk9UIGJlLlxuICpcbiAqIEJvdGggaGFsdmVzIGFuc3dlciB0aGUgc2FtZSBxdWVzdGlvbiDigJQgbWF5IHRoaXMgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIHJ1biByaWdodCBub3c/IOKAlCBzbyB0aGV5IGFyZSBvbmVcbiAqIGNvbXBvbmVudCByYXRoZXIgdGhhbiB0d28uIEEgc2Vjb25kLCBpbmRlcGVuZGVudCBnYXRlIHdvdWxkIGRvdWJsZS1sb2FkIHRoZSBzdXJmYWNlIGFuZCBzdGFjayBhIHNlY29uZFxuICogXCJibG9ja2VkXCIgc2V0dGluZ3MgdGFiIG9udG8gdGhlIHNhbWUgcGx1Z2luLCBhbmQgbmVpdGhlciBjb3VsZCBzZWUgdGhlIG90aGVyJ3MgcmVhc29uIGZvciByZWZ1c2luZy5cbiAqXG4gKiAjIyBEZXBlbmRlbmNpZXM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IGNhbm5vdCB3b3JrIHdpdGhvdXRcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdHJpY3Qgc2libGluZyBvZiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudGAsIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyB0aGUgd2hvbGUgcG9pbnQuIEFcbiAqIFNVR0dFU1RJT04gaXMgYW4gb2ZmZXIg4oCUIHRoZSBob3N0IGtlZXBzIHdvcmtpbmcgd2l0aG91dCBpdCBhbmQgc2ltcGx5IGNhbm5vdCBkbyBvbmUgdGhpbmcuIEEgREVQRU5ERU5DWVxuICogaXMgYSByZXF1aXJlbWVudDogYG9ubG9hZEltcGxgIG5ldmVyIHJ1bnMsIG5vIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCwgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQsIG5vdGhpbmcgaXNcbiAqIHBhdGNoZWQuIFJlYWNoIGZvciBhIHN1Z2dlc3Rpb24gd2hlbiB0aGUgb3RoZXIgcGx1Z2luIGFkZHMgc29tZXRoaW5nOyByZWFjaCBmb3IgYSBkZXBlbmRlbmN5IHdoZW4gdGhlXG4gKiBob3N0J3MgYWR2ZXJ0aXNlZCBiZWhhdmlvciBpcyBub3QgdGhlcmUgd2l0aG91dCBpdC5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gZGVwZW5kZW5jeSBmaWVsZCBpbiBhIG1hbmlmZXN0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9ibGVtIHRoaXMgY2xvc2VzLiBXaXRob3V0IG9uZSxcbiAqIGEgdXNlciBtZWV0aW5nIGFuIHVuZmFtaWxpYXIgcGx1Z2luIGluIHRoZWlyIGxpc3QgbW9udGhzIGxhdGVyIGhhcyBub3RoaW5nIHRlbGxpbmcgdGhlbSBpdCBpc1xuICogbG9hZC1iZWFyaW5nIOKAlCB0aGV5IHJlbW92ZSBpdCwgYW5kIHRoZSBicmVha2FnZSBzdXJmYWNlcyB3ZWVrcyBhZnRlciB0aGF0IGFzIGRhbWFnZSB0aGV5IGNhbm5vdCBjb25uZWN0XG4gKiB0byBhbnl0aGluZyB0aGV5IGRpZC4gU28gdGhlIHJlbGF0aW9uc2hpcCBpcyBtYWRlIHZpc2libGUgZnJvbSBib3RoIGVuZHMgYW5kIGVuZm9yY2VkIHdoaWxlIGl0IGhvbGRzOlxuICogdGhlIGRlcGVuZGVudCBleHBsYWlucyBpdHNlbGYgd2hlcmUgdGhlIHVzZXIgaXMgbG9va2luZywgcmVwYWlycyBpdHNlbGYgaW4gb25lIGNsaWNrLCBhbmQgcmVhY3RzIHRoZVxuICogSU5TVEFOVCB0aGUgZGVwZW5kZW5jeSBnb2VzIGF3YXkgcmF0aGVyIHRoYW4gZGVncmFkaW5nIHF1aWV0bHkuXG4gKlxuICogVGhyZWUgY2hvaWNlcyBhcmUgZGVsaWJlcmF0ZSBhbmQgd29ydGggc3RhdGluZywgYmVjYXVzZSBlYWNoIGhhcyBhbiBvYnZpb3VzLWxvb2tpbmcgYWx0ZXJuYXRpdmU6XG4gKlxuICogLSAqKkJsb2NrZWQgbWVhbnMgZW5hYmxlZC1idXQtaW5lcnQsIG5ldmVyIHNlbGYtZGlzYWJsZWQuKiogQ2FsbGluZyBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgIG9uIGl0c2VsZlxuICogICB3b3VsZCBiZSB0aGUgbGl0ZXJhbCByZWFkaW5nIG9mIFwicmVmdXNlcyB0byBsb2FkXCIsIGFuZCBpdCByZXdyaXRlcyBhIGNvbmZpZyB0aGF0IGJlbG9uZ3MgdG8gdGhlIHVzZXIg4oCUXG4gKiAgIHdobyB3b3VsZCB0aGVuIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIGl0IGFmdGVyIGZpeGluZyB0aGUgZGVwZW5kZW5jeS4gU3RheWluZyBlbmFibGVkIGFuZCBpbmVydFxuICogICBzYXlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSB1c2VyLCBjaGFuZ2VzIG5vdGhpbmcgdGhleSBvd24sIGFuZCBjYW4gdW5kbyBpdHNlbGYuXG4gKiAtICoqQmxvY2tlZCBpcyBub3QgYW4gZXJyb3IuKiogVGhyb3dpbmcgZnJvbSBgb25sb2FkYCBtYXJrcyB0aGUgcGx1Z2luIGZhaWxlZCBpbiBPYnNpZGlhbiBhbmQgaGFuZHMgdGhlXG4gKiAgIHVzZXIgYSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mIGEgc2VudGVuY2UgYW5kIGEgYnV0dG9uLlxuICogLSAqKkEgZGVwZW5kZW5jeSBtdXN0IHB1Ymxpc2ggYW4gQVBJLioqIFRoYXQgaXMgd2hhdCBtYWtlcyBwcmVzZW5jZSwgYWJzZW5jZSwgdmVyc2lvbiBhbmQgZGVwYXJ0dXJlIGFsbFxuICogICBvYnNlcnZhYmxlIHRocm91Z2ggb25lIG1lY2hhbmlzbSDigJQgYHdhdGNoUGx1Z2luQXBpYCdzIHJlZmVyZW5jZSBpcyBsaXZlLCBpcyByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiAgIHVubG9hZHMsIGFuZCBhbHJlYWR5IGNsYXNzaWZpZXMgbm90LWluc3RhbGxlZCBhZ2FpbnN0IG5vdC1lbmFibGVkIGFnYWluc3QgdG9vLW9sZC4gQSBwcm92aWRlciB3aXRoXG4gKiAgIG5vdGhpbmcgdG8gZXhwb3NlIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb247IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZVxuICogICBhIHNlY29uZCwgd2Vha2VyIGRldGVjdGlvbiBwYXRoIHRvIG1haW50YWluIGJlc2lkZSBpdC5cbiAqXG4gKiAjIyBDb25mbGljdHM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IHJlZnVzZXMgdG8gcnVuIGJlc2lkZVxuICpcbiAqIFRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgYW5kIGl0IG5lZWRzIGl0cyBvd24gZGV0ZWN0aW9uIHBhdGggYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvbmUgZG9lcyBub3QgZml0LlxuICogQSBjb25mbGljdGluZyBwbHVnaW4gaXMgdHlwaWNhbGx5IGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgb3RoZXIgcGx1Z2luIHRoYXQgc3RpbGwgb3ducyBiZWhhdmlvciB0aGlzIG9uZVxuICogaGFzIHRha2VuIG92ZXIg4oCUIGl0IHB1Ymxpc2hlcyBubyBBUEkgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBgYXBpVmVyc2lvblJhbmdlYCB0byBjb21wYXJlIGFnYWluc3QuXG4gKlxuICogVGhlIGFyZ3VtZW50IGZvciByZWZ1c2luZyByYXRoZXIgdGhhbiBjb21wZXRpbmcgY29tZXMgZnJvbSB0aGUgY2FzZSB0aGlzIGdlbmVyYWxpemVzOiB0d28gcmVuYW1lL2RlbGV0ZVxuICogaGFuZGxlcnMgYWN0aW5nIG9uIG9uZSByZW5hbWUgY29ycnVwdCBsaW5rcyBhbmQgbW92ZSBhdHRhY2htZW50cyB0d2ljZSwgYW5kIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0b1xuICogd2luIHRoYXQgcmFjZSDigJQgYSBoYW5kbGVyIGlzIGVsZWN0ZWQgYnkgcmVnaXN0cnkgb3JkZXIsIGJ1dCB0aGUgcGF0Y2hlcyB0aGF0IGRvIHRoZSB3b3JrIHNpdCBvdXRzaWRlXG4gKiB0aGF0IGVsZWN0aW9uLCBzbyB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLiBFdmVyeSBzY2hlbWUgZm9yIHNlaXppbmdcbiAqIGNvbnRyb2wgZnJvbSBpbnNpZGUgaXMgbG9hZC1vcmRlciBkZXBlbmRlbnQuIFJlZnVzaW5nIGlzIGRldGVybWluaXN0aWMgd2hlcmUgY29tcGV0aW5nIGlzIG5vdCwgYW5kIGFcbiAqIHZhdWx0IHRoYXQgYnJpZWZseSBoYXMgbm8gaGFuZGxlciBpcyBhIGZhciBiZXR0ZXIgb3V0Y29tZSB0aGFuIG9uZSB3aXRoIHR3by5cbiAqXG4gKiBUd28gZGV0YWlscyBvZiB0aGF0IGRldGVjdGlvbiBjYXJyeSBvdmVyIHZlcmJhdGltLCBiZWNhdXNlIGJvdGggYXJlIGxvYWQtYmVhcmluZzpcbiAqXG4gKiAtICoqVmVyc2lvbnMgYXJlIHJlYWQsIG5ldmVyIHRoZSByZWdpc3RyeS4qKiBBIHBsdWdpbiB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCBoYXMgcmVnaXN0ZXJlZCBub3RoaW5nLCBzb1xuICogICBhc2tpbmcgdGhlIHJlZ2lzdHJ5IGdpdmVzIGEgZGlmZmVyZW50IGFuc3dlciBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyBhc2tlZC4gYGFwcC5wbHVnaW5zLm1hbmlmZXN0c2AgaXNcbiAqICAgcG9wdWxhdGVkIGZvciBldmVyeSBpbnN0YWxsZWQgcGx1Z2luIGF0IHN0YXJ0dXAsIHdoYXRldmVyIHRoZSBsb2FkIG9yZGVyIHR1cm5zIG91dCB0byBiZS5cbiAqIC0gKipBbiB1bnBhcnNlYWJsZSB2ZXJzaW9uIGNvdW50cyBhcyBjb25mbGljdGluZy4qKiBGYWlsaW5nIGNsb3NlZCBpcyB0aGUgc2FmZSBkaXJlY3Rpb246IGEgZmFsc2UgYWxhcm1cbiAqICAgY29zdHMgYSBub3RpY2UsIGEgZmFsc2UgYWxsLWNsZWFyIGNvc3RzIGEgdmF1bHQuXG4gKlxuICogTm90IGV2ZXJ5IG92ZXJsYXAgaXMgdGhhdCBzZXZlcmUsIHdoaWNoIGlzIHdoeSBhIGNvbmZsaWN0IGRlY2xhcmVzIGEge0BsaW5rIFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHl9LlxuICogVHdvIHBsdWdpbnMgc2hpcHBpbmcgdGhlIHNhbWUgY29tbWFuZCBkdXBsaWNhdGUgYSBwYWxldHRlIGVudHJ5IGFuZCBkbyB0aGUgd29yayB0d2ljZSDigJQgYW5ub3lpbmcsIG5vdFxuICogY29ycnVwdGluZyDigJQgYW5kIHJlZnVzaW5nIHRvIGxvYWQgb3ZlciB0aGF0IHdvdWxkIGJlIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHRoZSBvdmVybGFwLiBUaG9zZSBkZWNsYXJlXG4gKiB7QGxpbmsgUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJufSBhbmQgYm90aCBrZWVwIHJ1bm5pbmcuXG4gKlxuICogIyMgV2hhdCB0aGlzIGNhbiBhbmQgY2Fubm90IHNlZVxuICpcbiAqIE9ic2lkaWFuIHJhaXNlcyBubyBldmVudCB3aGVuIEFOT1RIRVIgcGx1Z2luIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHNlZSBgcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHNgKSxcbiAqIHNvIGxpdmUgY29uZmxpY3QgZGV0ZWN0aW9uIGhhcyBhIHJlYWwgY2VpbGluZyBhbmQgaXQgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wbGllZCBhd2F5LiBBXG4gKiBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5IGFubm91bmNlcyBpdHNlbGYgdGhyb3VnaCB0aGUgbGlmZWN5Y2xlIGJyb2FkY2FzdCwgYW5kIGlzXG4gKiB0aGVyZWZvcmUgY2F1Z2h0IHRoZSBtb21lbnQgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gT25lIHRoYXQgaXMgbm90IOKAlCBhbiBvbGQgcmVsZWFzZSBwcmVkYXRpbmcgdGhlXG4gKiBicm9hZGNhc3QsIG9yIGEgcGx1Z2luIGJ5IGFub3RoZXIgYXV0aG9yIGVudGlyZWx5IOKAlCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgd2hpY2ggaXMgd2hlbiBpdHNcbiAqIG1hbmlmZXN0IGlzIHJlYWQuXG4gKlxuICogIyMgV2h5IGEgbG9zcyBpcyBhbm5vdW5jZWQgbGF0ZVxuICpcbiAqIE9ic2lkaWFuIHVwZGF0ZXMgYW4gZW5hYmxlZCBwbHVnaW4gYnkgcmVsb2FkaW5nIGl0OiB0aGUgb2xkIGNvcHkgdW5sb2FkcywgdGhlIG5ldyBvbmUgbG9hZHMuIEZvciB0aGVcbiAqIG1vbWVudCBpbiBiZXR3ZWVuIHRoZSBwcm92aWRlcidzIEFQSSBpcyByZXZva2VkLCBzbyBldmVyeSBkZXBlbmRlbnQgc2VlcyBpdHMgZGVwZW5kZW5jeSBnbyBhd2F5IGFuZFxuICogY29tZSBiYWNrLiBUaGUgZmVhdHVyZSBzdXJmYWNlIHN0aWxsIGNvbWVzIGRvd24gYXQgb25jZSDigJQgdGhlIGRlcGVuZGVuY3kgcmVhbGx5IGlzIGdvbmUgZm9yIHRoYXRcbiAqIG1vbWVudCDigJQgYnV0IHRoZSBub3RpY2Ugd2FpdHMge0BsaW5rIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFN9LCBhbmQgYSBsb3NzIHRoYXRcbiAqIGhlYWxlZCBpbiB0aGUgbWVhbnRpbWUgaXMgbmV2ZXIgYW5ub3VuY2VkLiBXaXRob3V0IHRoYXQsIHVwZGF0aW5nIG9uZSBwbHVnaW4gcHV0IGEgXCJubyBsb25nZXJcbiAqIGF2YWlsYWJsZVwiIG5vdGljZSBvbiBzY3JlZW4gaW4gZXZlcnkgcGx1Z2luIGRlcGVuZGluZyBvbiBpdCwgZGVzY3JpYmluZyBhIHN0YXRlIHRoYXQgbm8gbG9uZ2VyIGhlbGQgYnlcbiAqIHRoZSB0aW1lIHRoZSB1c2VyIHJlYWQgaXQuIEEgbG9zcyB0aGUgdXNlciBjYXVzZWQgb24gcHVycG9zZSDigJQgZGlzYWJsaW5nIG9yIHVuaW5zdGFsbGluZyB0aGVcbiAqIGRlcGVuZGVuY3kg4oCUIG91dGxhc3RzIHRoZSB3aW5kb3cgYW5kIGlzIGFubm91bmNlZCBhcyBiZWZvcmUsIG9ubHkgYSBmZXcgc2Vjb25kcyBsYXRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IHNhdGlzZmllcyBhcyBzYXRpc2ZpZXNWZXJzaW9uIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIFBsdWdpblNldHRpbmdUYWJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbkFwaVJlZiB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lLFxuICBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWRcbn0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGRpc2FibGVDb21tdW5pdHlQbHVnaW4gfSBmcm9tICcuLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQge1xuICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lLFxuICBhc0NvZGVCbG9jayxcbiAgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc1xufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyB3YXRjaFBsdWdpbkFwaSB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7XG4gIGdldEluc3RhbGxlZFBsdWdpblN0YXRlLFxuICBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uLFxuICBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luLFxuICBJbnN0YWxsZWRQbHVnaW5TdGF0ZVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0V2ZW50IH0gZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSBnYXRlIHRoYXQgY2xvc2VkIHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcgd2FpdHMgYmVmb3JlIHNheWluZyBzby5cbiAqXG4gKiBMb25nIGVub3VnaCB0byBjb3ZlciBPYnNpZGlhbiByZWxvYWRpbmcgYSBwbHVnaW4gdG8gYXBwbHkgaXRzIHVwZGF0ZSwgc2hvcnQgZW5vdWdoIHRoYXQgYSB1c2VyIHdob1xuICogZGlzYWJsZWQgdGhlIGRlcGVuZGVuY3kgYnkgaGFuZCBzdGlsbCBjb25uZWN0cyB0aGUgbm90aWNlIHRvIHdoYXQgdGhleSBqdXN0IGRpZC5cbiAqL1xuY29uc3QgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGJhZGx5IHR3byBwbHVnaW5zIHJ1bm5pbmcgc2lkZSBieSBzaWRlIGdvZXMgd3JvbmcsIGFuZCB0aGVyZWZvcmUgd2hhdCB0aGlzIG9uZSBkb2VzIGFib3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Db25mbGljdFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBob3N0IHJlZnVzZXMgdG8gcnVuIGF0IGFsbCB3aGlsZSB0aGUgY29uZmxpY3QgaG9sZHM6IGBvbmxvYWRJbXBsYCBuZXZlciBydW5zLCBub3RoaW5nIGlzXG4gICAqIHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGx1Z2luIGV4cGxhaW5zIGl0c2VsZiB0aGUgd2F5IGEgbWlzc2luZyBkZXBlbmRlbmN5IGRvZXMuXG4gICAqXG4gICAqIEZvciBhbiBvdmVybGFwIHdoZXJlIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0LlxuICAgKi9cbiAgQmxvY2sgPSAnYmxvY2snLFxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBydW5zIGFueXdheSBhbmQgc2F5cyB0aGUgb3ZlcmxhcCBpcyB0aGVyZS5cbiAgICpcbiAgICogRm9yIGFuIG92ZXJsYXAgdGhhdCBpcyBhbm5veWluZyByYXRoZXIgdGhhbiBkZXN0cnVjdGl2ZSDigJQgZHVwbGljYXRlIGNvbW1hbmRzLCB3b3JrIGRvbmUgdHdpY2Ug4oCUIHdoZXJlXG4gICAqIHJlZnVzaW5nIHRvIGxvYWQgd291bGQgY29zdCB0aGUgdXNlciBtb3JlIHRoYW4gdGhlIG92ZXJsYXAgZG9lcy5cbiAgICovXG4gIFdhcm4gPSAnd2Fybidcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUsIG9yIHdhcm5zIGFib3V0IHJ1bm5pbmcgYmVzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZsaWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgdGhlIE9USEVSIHBsdWdpbidzIHZlcnNpb25zIHRoYXQgY29uZmxpY3QsIGUuZy4gYCc8MTIuMC4wJ2AgZm9yIFwiZXZlcnkgdmVyc2lvblxuICAgKiBiZWZvcmUgdGhlIG9uZSB0aGF0IGdhdmUgdGhpcyBiZWhhdmlvciB1cFwiLlxuICAgKlxuICAgKiBBIHJhbmdlIHJhdGhlciB0aGFuIGEgbWluaW11bSwgc28gYW4gb3ZlcmxhcCBjb25maW5lZCB0byBvbmUgbWFqb3IgKGAnPj0zIDw0J2ApIGlzIGV4cHJlc3NpYmxlLCBhbmQgc29cbiAgICogaXMgYSBwbHVnaW4gdGhhdCBjb25mbGljdHMgYXQgZXZlcnkgdmVyc2lvbiDigJQgc3BlbGwgdGhhdCBgJz49MC4wLjAnYCwgc2luY2UgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHNcbiAgICogYSBiYXJlIGAqYC4gRXZhbHVhdGVkIGFnYWluc3QgYG1hbmlmZXN0LnZlcnNpb25gOyBhIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGNvdW50cyBhc1xuICAgKiBjb25mbGljdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0aW5nVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCBnb2VzIHdyb25nIHdoZW4gYm90aCBydW4sIHNob3duIGluIHRoZSBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJpbmcgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmcgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoYXQgdGhlIHR3byBvZiB0aGVtIGNvbGxpZGUgb3ZlciwgYW5kIGFcbiAgICogdXNlciBiZWluZyBhc2tlZCB0byBkaXNhYmxlIHNvbWV0aGluZyBkZXNlcnZlcyB0byBiZSB0b2xkIHdoeS5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBzaW5jZSB0aGUgYmFubmVyIGlzIHJlbmRlcmVkIGFnYWluIG9uIGV2ZXJ5IHJlZnJlc2guXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdGhpcyBwbHVnaW4gZG9lcyBhYm91dCB0aGUgY29uZmxpY3QuXG4gICAqL1xuICByZWFkb25seSBzZXZlcml0eTogUGx1Z2luQ29uZmxpY3RTZXZlcml0eTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiBjYW5ub3Qgd29yayB3aXRob3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkRlcGVuZGVuY3kge1xuICAvKipcbiAgICogVGhlIHNlbXZlciByYW5nZSBvZiBBUEkgY29udHJhY3QgdmVyc2lvbnMgdGhlIGRlcGVuZGVudCBjb21waWxlZCBhZ2FpbnN0LCBlLmcuIGAnXjInYC5cbiAgICpcbiAgICogQSBkZXBlbmRlbmN5IHdob3NlIHB1Ymxpc2hlZCBBUEkgZmFsbHMgb3V0c2lkZSB0aGUgcmFuZ2UgY291bnRzIGFzIFVOU0FUSVNGSUVELCB3aGljaCBpcyB3aGF0IHR1cm5zIGFcbiAgICogc2lsZW50IGJlaGF2aW9yYWwgbWlzbWF0Y2ggYmV0d2VlbiB0d28gaW5kZXBlbmRlbnRseSByZWxlYXNlZCBwbHVnaW5zIGludG8gYSB2aXNpYmxlIFwidXBkYXRlIHRoaXNcbiAgICogb25lXCIgbWVzc2FnZS4gU3BlbGwgXCJhbnkgdmVyc2lvblwiIGFzIGAnPj0wLjAuMCdgIOKAlCBgY29tcGFyZS12ZXJzaW9uc2AgcmVqZWN0cyBhIGJhcmUgYCpgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSByZXF1aXJlZCBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCB0aGUgZGVwZW5kZW50IGRvZXMgd2l0aCB0aGlzIHBsdWdpbiwgc2hvd24gaW4gdGhlIHNldHRpbmdzIGJhbm5lci5cbiAgICpcbiAgICogVGhlIGRlcGVuZGVudCBvd25zIHRoaXMgc3RyaW5nIGJlY2F1c2Ugb25seSBpdCBrbm93cyB3aGF0IGl0IHVzZXMgdGhlIG90aGVyIHBsdWdpbiBmb3IsIGFuZCBhIHVzZXJcbiAgICogYmVpbmcgYXNrZWQgdG8gaW5zdGFsbCBzb21ldGhpbmcgZGVzZXJ2ZXMgdG8gYmUgdG9sZCB3aHkuXG4gICAqXG4gICAqIFBhc3MgYSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gdG8gbWFyayB1cCBwYXJ0IG9mIHRoZSBzZW50ZW5jZSwgc3VjaCBhcyBhIHBsdWdpbiBuYW1lIHJlbmRlcmVkIGFzXG4gICAqIGNvZGUuIEVhY2ggcmVuZGVyIGFwcGVuZHMgYSBmcmVzaCBjbG9uZSBvZiBpdCwgc2luY2UgdGhlIGJhbm5lciBpcyByZW5kZXJlZCBhZ2FpbiBvbiBldmVyeSByZWZyZXNoLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUGx1Z2luR2F0ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luR2F0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb25mbGljdHMgdG8gZW5mb3JjZS4gQW4gZW1wdHkgbGlzdCBtZWFucyB0aGUgcGx1Z2luIHJlZnVzZXMgdG8gcnVuIGJlc2lkZSBub3RoaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVwZW5kZW5jaWVzIHRvIGVuZm9yY2UuIEFuIGVtcHR5IGxpc3QgbWVhbnMgdGhlIHBsdWdpbiBkZXBlbmRzIG9uIG5vdGhpbmcsIGFuZCBpdHMgZmVhdHVyZVxuICAgKiBzdXJmYWNlIGxvYWRzIGltbWVkaWF0ZWx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W107XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBob3N0IHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZS4gQ2FsbGVkIG9uY2UgZXZlcnkgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQgYW5kIG5vIGJsb2NraW5nXG4gICAqIGNvbmZsaWN0IGhvbGRzLCBhbmQgYWdhaW4gYWZ0ZXIgYSBnYXRlIHRoYXQgaGFkIGNsb3NlZCBvcGVucyBiYWNrIHVwLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN1cmZhY2UgaXMgbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBwbHVnaW4g4oCUIHRoZSBvbmUgZGVjbGFyaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZsaWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBwbHVnaW4ncyBub3RpY2UgY29tcG9uZW50LCB1c2VkIHRvIHNheSB3aGF0IGlzIG1pc3NpbmcsIHdoYXQgaXMgaW4gdGhlIHdheSwgYW5kIHdoYXQgY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBVbmxvYWRzIHRoZSBob3N0IHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZS4gQ2FsbGVkIHdoZW4gYSBnYXRlIHRoYXQgaGFkIGJlZW4gb3BlbiBjbG9zZXMuXG4gICAqL1xuICByZWFkb25seSB1bmxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFifSBjb25zdHJ1Y3Rvci5cbiAqL1xuaW50ZXJmYWNlIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJsb2NrZWQgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGJsb2NrZWQgZXhwbGFuYXRpb24gaW50byB0aGUgdGFiJ3MgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgdGFiJ3MgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqL1xuICByZWFkb25seSByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRhYiBhIGJsb2NrZWQgcGx1Z2luIHNob3dzIGluIHBsYWNlIG9mIHRoZSBvbmUgaXQgbmV2ZXIgZ290IHRvIHJlZ2lzdGVyLlxuICpcbiAqIEEgYmxvY2tlZCBwbHVnaW4ncyBgb25sb2FkSW1wbGAgbmV2ZXIgcmFuLCBzbyBpdHMgcmVhbCBzZXR0aW5ncyB0YWIgZG9lcyBub3QgZXhpc3Qg4oCUIGFuZCBhIHVzZXIgd2hvIGdvZXNcbiAqIGxvb2tpbmcgZm9yIHRoZSBwbHVnaW4ncyBzZXR0aW5ncyBpcyBwcmVjaXNlbHkgdGhlIHVzZXIgYXNraW5nIFwid2h5IGlzbid0IHRoaXMgZG9pbmcgYW55dGhpbmc/XCIuIEFuXG4gKiBlbXB0eSBzcGFjZSBpcyB0aGUgd29yc3QgcG9zc2libGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL3NldHRpbmdzLXRhYi9wcmVmZXItc2V0dGluZy1kZWZpbml0aW9ucyAtLSBUaGlzIHRhYiBoYXMgbm8gc2V0dGluZ3MgdG8gZGVjbGFyZS4gSXQgc3RhbmRzIGluIGZvciBhIHNldHRpbmdzIHRhYiB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCwgY2FycnlpbmcgYW4gZXhwbGFuYXRpb24gYW5kIGEgcmVwYWlyIGJ1dHRvbiwgYW5kIHRoZSBwbHVnaW4ncyByZWFsIHNldHRpbmdzIGFwcGVhciB0aGUgbW9tZW50IHRoZSBnYXRlIG9wZW5zLlxuY2xhc3MgQmxvY2tlZFBsdWdpblNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFifS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQmxvY2tlZFBsdWdpblNldHRpbmdUYWJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcy5wbHVnaW4uYXBwLCBwYXJhbXMucGx1Z2luKTtcbiAgICB0aGlzLnJlbmRlckJhbm5lciA9IHBhcmFtcy5yZW5kZXJCYW5uZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgdGFiLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuICAgIHRoaXMucmVuZGVyQmFubmVyKHRoaXMuY29udGFpbmVyRWwpO1xuICB9XG59XG5cbi8qKlxuICogRW5mb3JjZXMgYSBwbHVnaW4ncyBtYW5kYXRvcnkgZGVwZW5kZW5jaWVzIGFuZCBkZWNsYXJlZCBjb25mbGljdHMsIGdhdGluZyBpdHMgZmVhdHVyZSBzdXJmYWNlIG9uIGJvdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5HYXRlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwcml2YXRlIHJlYWRvbmx5IGFubm91bmNlZFdhcm5pbmdQbHVnaW5JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlSZWZzID0gbmV3IE1hcDxzdHJpbmcsIFBsdWdpbkFwaVJlZjxvYmplY3Q+PigpO1xuICBwcml2YXRlIGJsb2NrZWRTZXR0aW5nVGFiOiBudWxsIHwgUGx1Z2luU2V0dGluZ1RhYiA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdO1xuICBwcml2YXRlIGhhc0Fubm91bmNlZEJsb2NrZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0ZlYXR1cmVTdXJmYWNlTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNMYXlvdXRSZWFkeSA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBsb3NzQW5ub3VuY2VtZW50VGltZXJJZDogbnVsbCB8IG51bWJlciA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5sb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBnZXQgYXBwKCk6IEFwcCB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLmFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBQbHVnaW5HYXRlQ29tcG9uZW50fS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luR2F0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbmZsaWN0cyA9IHBhcmFtcy5jb25mbGljdHM7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBwYXJhbXMuZGVwZW5kZW5jaWVzO1xuICAgIHRoaXMubG9hZEZlYXR1cmVTdXJmYWNlID0gcGFyYW1zLmxvYWRGZWF0dXJlU3VyZmFjZTtcbiAgICB0aGlzLnBsdWdpbiA9IHBhcmFtcy5wbHVnaW47XG4gICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBwYXJhbXMucGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICAgIHRoaXMudW5sb2FkRmVhdHVyZVN1cmZhY2UgPSBwYXJhbXMudW5sb2FkRmVhdHVyZVN1cmZhY2U7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyB3aGV0aGVyIGFueSB3YXJuaW5nIGNvbmZsaWN0IGlzIGluIGZvcmNlIHJpZ2h0IG5vdy5cbiAgICpcbiAgICogVGhlIHByZWRpY2F0ZSBhIGRlY2xhcmF0aXZlIHNldHRpbmdzIHRhYiBuZWVkcywgYW5kIHRoZSBjb3VudGVycGFydCB0b1xuICAgKiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudC5nZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZWAuIFN1Y2ggYSB0YWIgZGVjaWRlcyB3aGV0aGVyIGEgcm93IGV4aXN0c1xuICAgKiBCRUZPUkUgaXQgcmVuZGVycyBhbnl0aGluZyBpbnRvIGl0LCBzbyB7QGxpbmsgcmVuZGVyQ29uZmxpY3RXYXJuaW5nQmFubmVyfSB3cml0aW5nIG5vdGhpbmcgY2Fubm90XG4gICAqIGFuc3dlciB0aGUgcXVlc3Rpb24gZm9yIGl0IOKAlCBhIHJvdyB0aGF0IHJlbmRlcnMgZW1wdHkgaXMgc3RpbGwgYSByb3csIHdpdGggdGhlIGRpdmlkZXIgYW5kIHBhZGRpbmdcbiAgICogZXZlcnkgb3RoZXIgc2V0dGluZyBoYXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYXQgbGVhc3Qgb25lIGRlY2xhcmVkIHdhcm5pbmcgY29uZmxpY3QgaG9sZHMuXG4gICAqL1xuICBwdWJsaWMgaGFzQWN0aXZlV2FybmluZ0NvbmZsaWN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJuKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB3YXRjaGluZyBldmVyeSBkZWNsYXJlZCBkZXBlbmRlbmN5IGFuZCBjb25mbGljdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBhcGlSZWYgPSB3YXRjaFBsdWdpbkFwaTxvYmplY3Q+KHtcbiAgICAgICAgYXBpVmVyc2lvblJhbmdlOiBkZXBlbmRlbmN5LmFwaVZlcnNpb25SYW5nZSxcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZFxuICAgICAgfSk7XG4gICAgICByZWdpc3RlckFzeW5jRXZlbnQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGFwaVJlZi5vbignY2hhbmdlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBpUmVmcy5zZXQoZGVwZW5kZW5jeS5wbHVnaW5JZCwgYXBpUmVmKTtcbiAgICB9XG5cbiAgICAvLyBBIGNvbmZsaWN0IGhhcyBubyBBUEkgdG8gd2F0Y2gg4oCUIGl0IGlzIHJlYWQgb3V0IG9mIHRoZSBtYW5pZmVzdHMg4oCUIHNvIHRoZSB0cmlnZ2VyIHRvIHJlLXJlYWQgaXMgdGhlXG4gICAgLy8gbGlicmFyeSdzIG93biBsaWZlY3ljbGUgYnJvYWRjYXN0LiBJdCBjb3ZlcnMgZXZlcnkgY29uZmxpY3RpbmcgcGx1Z2luIGJ1aWx0IG9uIHRoaXMgbGlicmFyeTsgb25lXG4gICAgLy8gdGhhdCBpcyBub3QgaXMgY2F1Z2h0IGF0IHRoZSBuZXh0IGxvYWQsIGFzIHRoZSBmaWxlIGhlYWRlciBzYXlzLlxuICAgIGNvbnN0IGxpZmVjeWNsZUV2ZW50TmFtZXM6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZVtdID0gW1BMVUdJTl9MT0FERURfRVZFTlRfTkFNRSwgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUVdO1xuICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIGxpZmVjeWNsZUV2ZW50TmFtZXMpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgY29udmVydEFzeW5jVG9TeW5jKGFzeW5jIChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHtcbiAgICAgICAgICBpZiAocGF5bG9hZC5wbHVnaW5JZCA9PT0gdGhpcy5wbHVnaW4ubWFuaWZlc3QuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSlcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8vIE5vdGhpbmcgaXMgU0FJRCBhYm91dCBhIG1pc3NpbmcgZGVwZW5kZW5jeSB1bnRpbCB0aGUgbGF5b3V0IGlzIHJlYWR5LiBQbHVnaW5zIGxvYWQgaW4gYW4gdW5zcGVjaWZpZWRcbiAgICAvLyBvcmRlciwgc28gYSBkZXBlbmRlbmN5IHRoYXQgc2ltcGx5IGhhcyBub3QgbG9hZGVkIHlldCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBhdCB0aGlzIHBvaW50IGZyb20gb25lXG4gICAgLy8gdGhhdCBpcyBub3QgaW5zdGFsbGVkIOKAlCBhbm5vdW5jaW5nIGhlcmUgd291bGQgcHV0IGEgXCJtaXNzaW5nIHBsdWdpblwiIG5vdGljZSBvbiBzY3JlZW4gYXQgZXZlcnlcbiAgICAvLyBzdGFydHVwIGFuZCB0YWtlIGl0IGF3YXkgYSBtb21lbnQgbGF0ZXIuIFRoZSBnYXRlIGl0c2VsZiBkb2VzIG5vdCB3YWl0OiB0aGUgc3VyZmFjZSBsb2FkcyB0aGVcbiAgICAvLyBpbnN0YW50IHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlLCB3aGVuZXZlciB0aGF0IGlzLlxuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTGF5b3V0UmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZXNlbnRVbnNhdGlzZmllZCh0aGlzLmdldFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKCksIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuQmxvY2spKTtcbiAgICAgICAgdGhpcy5hbm5vdW5jZVdhcm5pbmdzKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsTG9zc0Fubm91bmNlbWVudCgpO1xuICAgICAgdGhpcy5oaWRlQmxvY2tlZFNldHRpbmdUYWIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgdGhlIGdhdGUgb25jZSB0aGUgd2F0Y2hlcyBhcmUgaW4gcGxhY2UsIGxvYWRpbmcgdGhlIGZlYXR1cmUgc3VyZmFjZSBpZiBpdCBpcyBhbHJlYWR5IG9wZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZmlyc3QgZXZhbHVhdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgYmFubmVyIGZvciBldmVyeSBjb25mbGljdCB0aGUgaG9zdCBpcyBydW5uaW5nIGFsb25nc2lkZSwgc28gYSBwbHVnaW4gY2FuIHB1dCB0aGUgb3ZlcmxhcCBpblxuICAgKiBpdHMgb3duIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQ29uc3VtZXItaW52b2tlZCwgZXhhY3RseSBsaWtlIGBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50LnJlbmRlckJhbm5lcmA6IHRoZSBsaWJyYXJ5IHJlZ2lzdGVycyB0aGVcbiAgICogc2V0dGluZ3MgdGFiIGEgQkxPQ0tFRCBwbHVnaW4gbmVlZHMsIGJlY2F1c2UgdGhhdCBwbHVnaW4gbmV2ZXIgZ290IHRvIHJlZ2lzdGVyIG9uZSBvZiBpdHMgb3duLCBidXQgaXRcbiAgICogaGFzIG5vIGhvb2sgaW50byB0aGUgdGFiIGEgcnVubmluZyBwbHVnaW4gYnVpbGRzLiBSZW5kZXJzIG5vdGhpbmcgd2hlbiBubyB3YXJuaW5nIGNvbmZsaWN0IGhvbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICovXG4gIHB1YmxpYyByZW5kZXJDb25mbGljdFdhcm5pbmdCYW5uZXIoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm4pKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbmZsaWN0RW50cnkoY29udGFpbmVyRWwsIGNvbmZsaWN0LCB0aGlzLmNyZWF0ZUNvbmZsaWN0V2FybmluZ01lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F5cyB3aGF0IHdlbnQgYXdheSB3aGlsZSB0aGUgcGx1Z2luIHdhcyBydW5uaW5nLCBub3cgdGhhdCB0aGUgZ3JhY2UgcGVyaW9kIGlzIG92ZXIuXG4gICAqXG4gICAqIFJlLXJlYWRzIHRoZSBnYXRlIHJhdGhlciB0aGFuIHRydXN0aW5nIHdoYXQgY2xvc2VkIGl0LCBzbyBhIGRlcGVuZGVuY3kgdGhhdCB3ZW50IGF3YXkgZHVyaW5nIHRoZVxuICAgKiB3aW5kb3cgaXMgYW5ub3VuY2VkIHdpdGggdGhlIHJlc3QuIE9uZSB0aGF0IGNhbWUgYmFjayBpbiB0aW1lIG5ldmVyIGdldHMgaGVyZTogdGhlIGdhdGUgcmVvcGVuaW5nXG4gICAqIGNhbmNlbHMgdGhlIHRpbWVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhbm5vdW5jZUxvc3MoKTogdm9pZCB7XG4gICAgdGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdGhpcy5nZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlRGVwZW5kZW5jeUxvc3RNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuQmxvY2spKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQ29uZmxpY3RBcHBlYXJlZE1lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFubm91bmNlV2FybmluZ3MoKTogdm9pZCB7XG4gICAgLy8gQSB3YXJuaW5nIGRlc2NyaWJlcyB0d28gcGx1Z2lucyB0aGF0IGFyZSBib3RoIFJVTk5JTkcsIHNvIGl0IGlzIHBvaW50bGVzcyB3aGlsZSB0aGlzIG9uZSBpcyBibG9ja2VkXG4gICAgLy8g4oCUIGFuZCBpdCB3YWl0cyBmb3IgbGF5b3V0LXJlYWR5IGZvciB0aGUgc2FtZSByZWFzb24gdGhlIGJsb2NrZWQgbm90aWNlIGRvZXMuXG4gICAgaWYgKCF0aGlzLmlzTGF5b3V0UmVhZHkgfHwgIXRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJuKSkge1xuICAgICAgaWYgKHRoaXMuYW5ub3VuY2VkV2FybmluZ1BsdWdpbklkcy5oYXMoY29uZmxpY3QucGx1Z2luSWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFubm91bmNlZFdhcm5pbmdQbHVnaW5JZHMuYWRkKGNvbmZsaWN0LnBsdWdpbklkKTtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVDb25mbGljdFdhcm5pbmdNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxMb3NzQW5ub3VuY2VtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkKTtcbiAgICB0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmxvY2tlZE1lc3NhZ2UoZGVwZW5kZW5jeTogUGx1Z2luRGVwZW5kZW5jeSk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LmJsb2NrZWROb3RpY2UsIHtcbiAgICAgIGRlcGVuZGVuY3lQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhkZXBlbmRlbmN5LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmZsaWN0QXBwZWFyZWRNZXNzYWdlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5jb25mbGljdEFwcGVhcmVkTm90aWNlLCB7XG4gICAgICBjb25mbGljdGluZ1BsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGNvbmZsaWN0LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmZsaWN0QmxvY2tlZE1lc3NhZ2UoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0LmJsb2NrZWROb3RpY2UsIHtcbiAgICAgIGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogYXNDb2RlQmxvY2soY29uZmxpY3QucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmxpY3RXYXJuaW5nTWVzc2FnZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3Qud2FybmluZ05vdGljZSwge1xuICAgICAgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhjb25mbGljdC5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBlbmRlbmN5TG9zdE1lc3NhZ2UoZGVwZW5kZW5jeTogUGx1Z2luRGVwZW5kZW5jeSk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LmRlcGVuZGVuY3lMb3N0Tm90aWNlLCB7XG4gICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogYXNDb2RlQmxvY2soZGVwZW5kZW5jeS5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBkZWNsYXJlZCBjb25mbGljdHMgb2Ygb25lIHNldmVyaXR5IHRoYXQgYXJlIGN1cnJlbnRseSBpbiBmb3JjZS5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gVGhlIHNldmVyaXR5IHRvIHNlbGVjdC5cbiAgICogQHJldHVybnMgVGhlIGNvbmZsaWN0cyBob2xkaW5nIHJpZ2h0IG5vdywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBkZWNsYXJlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QWN0aXZlQ29uZmxpY3RzKHNldmVyaXR5OiBQbHVnaW5Db25mbGljdFNldmVyaXR5KTogUGx1Z2luQ29uZmxpY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmxpY3RzLmZpbHRlcigoY29uZmxpY3QpID0+IGNvbmZsaWN0LnNldmVyaXR5ID09PSBzZXZlcml0eSAmJiB0aGlzLmlzQ29uZmxpY3RBY3RpdmUoY29uZmxpY3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKTogUGx1Z2luRGVwZW5kZW5jeVtdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXMuZmlsdGVyKChkZXBlbmRlbmN5KSA9PiAhdGhpcy5hcGlSZWZzLmdldChkZXBlbmRlbmN5LnBsdWdpbklkKT8udmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlQmxvY2tlZFNldHRpbmdUYWIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJsb2NrZWRTZXR0aW5nVGFiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHAuc2V0dGluZy5yZW1vdmVTZXR0aW5nVGFiKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpO1xuICAgIHRoaXMuYmxvY2tlZFNldHRpbmdUYWIgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBvbmUgZGVjbGFyZWQgY29uZmxpY3QgaXMgaW4gZm9yY2UgcmlnaHQgbm93LlxuICAgKlxuICAgKiBPbmx5IGFuIEVOQUJMRUQgcGx1Z2luIGNvdW50cy4gT25lIHRoYXQgaXMgaW5zdGFsbGVkIGJ1dCBzd2l0Y2hlZCBvZmYgcmVnaXN0ZXJzIG5vdGhpbmcsIHNvIGl0IGNhbm5vdFxuICAgKiBjb2xsaWRlLCBhbmQgYWN0aW5nIG9uIGl0IHdvdWxkIGJlIGFuIGFsYXJtIHRoZSB1c2VyIGNhbiBvbmx5IGFuc3dlciBieSB1bmluc3RhbGxpbmcgc29tZXRoaW5nIHRoZXlcbiAgICogaGF2ZSBhbHJlYWR5IHR1cm5lZCBvZmYuXG4gICAqXG4gICAqIEBwYXJhbSBjb25mbGljdCAtIFRoZSBkZWNsYXJlZCBjb25mbGljdC5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29uZmxpY3RpbmcgcGx1Z2luIGlzIGVuYWJsZWQgYXQgYSBjb25mbGljdGluZyB2ZXJzaW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0NvbmZsaWN0QWN0aXZlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluc3RhbGxlZFZlcnNpb24gPSBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICB9KTtcblxuICAgIGlmIChpbnN0YWxsZWRWZXJzaW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzYXRpc2ZpZXNWZXJzaW9uKGluc3RhbGxlZFZlcnNpb24sIGNvbmZsaWN0LmNvbmZsaWN0aW5nVmVyc2lvblJhbmdlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIHdoYXQgaXMgaW4gdGhlIHdheSwgYW5kIHB1dHMgdGhlIHNhbWUgZXhwbGFuYXRpb24gd2hlcmUgdGhlIHVzZXIgd2lsbCBsb29rIGZvciB0aGUgcGx1Z2luJ3NcbiAgICogc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB1bnNhdGlzZmllZERlcGVuZGVuY2llcyAtIFRoZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSBzYXRpc2ZpZWQuXG4gICAqIEBwYXJhbSBibG9ja2luZ0NvbmZsaWN0cyAtIFRoZSBjb25mbGljdHMgY3VycmVudGx5IHJlZnVzaW5nIHRoZSBwbHVnaW4gdGhlIHJpZ2h0IHRvIHJ1bi5cbiAgICovXG4gIHByaXZhdGUgcHJlc2VudFVuc2F0aXNmaWVkKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTGF5b3V0UmVhZHkgfHwgKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCAmJiBibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93QmxvY2tlZFNldHRpbmdUYWIodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcblxuICAgIGlmICh0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB1bnNhdGlzZmllZERlcGVuZGVuY2llcykge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIGJsb2NraW5nQ29uZmxpY3RzKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1ldmFsdWF0ZXMgdGhlIGdhdGUgYW5kIG1vdmVzIHRoZSBmZWF0dXJlIHN1cmZhY2UgdG8gbWF0Y2guXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3VyZmFjZSBtYXRjaGVzIHRoZSBnYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzID0gdGhpcy5nZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpO1xuICAgIGNvbnN0IGJsb2NraW5nQ29uZmxpY3RzID0gdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5CbG9jayk7XG5cbiAgICBpZiAodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwICYmIGJsb2NraW5nQ29uZmxpY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jYW5jZWxMb3NzQW5ub3VuY2VtZW50KCk7XG4gICAgICB0aGlzLmhpZGVCbG9ja2VkU2V0dGluZ1RhYigpO1xuICAgICAgdGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkID0gZmFsc2U7XG5cbiAgICAgIGlmICghdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkKSB7XG4gICAgICAgIHRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEZlYXR1cmVTdXJmYWNlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYW5ub3VuY2VXYXJuaW5ncygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQpIHtcbiAgICAgIHRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy51bmxvYWRGZWF0dXJlU3VyZmFjZSgpO1xuXG4gICAgICAvLyBBIGdhdGUgdGhhdCBjbG9zZXMgd2hpbGUgdGhlIHBsdWdpbiBpcyBSVU5OSU5HIGlzIHRoZSBjYXNlIHdvcnRoIGJlaW5nIGxvdWQgYWJvdXQ6IHRoZSB1c2VyIGp1c3RcbiAgICAgIC8vIGRpZCBzb21ldGhpbmcsIGFuZCB0aGUgY29uc2VxdWVuY2UgaXMgaW1tZWRpYXRlIGFuZCBpbnZpc2libGUgd2l0aG91dCB0aGlzLiBBbm5vdW5jZWQgcmVnYXJkbGVzc1xuICAgICAgLy8gb2YgbGF5b3V0IHJlYWRpbmVzcywgYmVjYXVzZSBhIHJ1bm5pbmcgcGx1Z2luIG1lYW5zIHRoZSBsYXlvdXQgaXMgbG9uZyBzaW5jZSByZWFkeSDigJQgYnV0IG9ubHlcbiAgICAgIC8vIG9uY2UgdGhlIGdyYWNlIHBlcmlvZCBoYXMgc2hvd24gdGhlIGxvc3MgaXMgbm90IGFuIHVwZGF0ZSByZWxvYWRpbmcgdGhlIHByb3ZpZGVyIChzZWUgdGhlIGZpbGVcbiAgICAgIC8vIGhlYWRlcikuXG4gICAgICB0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFubm91bmNlTG9zcygpO1xuICAgICAgfSwgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICAgIHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnNob3dCbG9ja2VkU2V0dGluZ1RhYih1bnNhdGlzZmllZERlcGVuZGVuY2llcywgYmxvY2tpbmdDb25mbGljdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VudFVuc2F0aXNmaWVkKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYmxvY2tlZCBleHBsYW5hdGlvbiBpbnRvIGEgc2V0dGluZ3MtdGFiIGNvbnRhaW5lcjogd2hhdCBpcyBtaXNzaW5nIG9yIGluIHRoZSB3YXksIHdoeSBpdFxuICAgKiBtYXR0ZXJzLCBhbmQgdGhlIGJ1dHRvbiB0aGF0IGZpeGVzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzIC0gVGhlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgY3VycmVudGx5IHNhdGlzZmllZC5cbiAgICogQHBhcmFtIGJsb2NraW5nQ29uZmxpY3RzIC0gVGhlIGNvbmZsaWN0cyBjdXJyZW50bHkgcmVmdXNpbmcgdGhlIHBsdWdpbiB0aGUgcmlnaHQgdG8gcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJCbG9ja2VkQmFubmVyKFxuICAgIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCxcbiAgICB1bnNhdGlzZmllZERlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdLFxuICAgIGJsb2NraW5nQ29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdXG4gICk6IHZvaWQge1xuICAgIGlmICh1bnNhdGlzZmllZERlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LnNldHRpbmdzSGVhZGluZykgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBiYW5uZXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7XG4gICAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5QbHVnaW5EZXBlbmRlbmN5QmFubmVyXVxuICAgICAgfSk7XG4gICAgICBiYW5uZXJFbC5hcHBlbmQodGhpcy5jcmVhdGVCbG9ja2VkTWVzc2FnZShkZXBlbmRlbmN5KSk7XG4gICAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCBkZXBlbmRlbmN5LnJlYXNvbik7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZ2V0SW5zdGFsbGVkUGx1Z2luU3RhdGUoe1xuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYmFubmVyRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+XG4gICAgICAgICAgc3RhdGUgPT09IEluc3RhbGxlZFBsdWdpblN0YXRlLkluc3RhbGxlZEJ1dERpc2FibGVkXG4gICAgICAgICAgICA/ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICAgICAgOiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5pbnN0YWxsXG4gICAgICAgICkpXG4gICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGluc3RhbGxBbmRFbmFibGVQbHVnaW4oe1xuICAgICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkLFxuICAgICAgICAgICAgcGx1Z2luTmFtZTogZGVwZW5kZW5jeS5wbHVnaW5OYW1lLFxuICAgICAgICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG5cbiAgICAgIC8vIFRoZSBsaW5rIE9VVCB0byB0aGUgZGVwZW5kZW5jeSdzIG93biBzZXR0aW5ncywgc2hvd24gb25seSBvbmNlIGl0IGlzIGluc3RhbGxlZCBhbmQgZW5hYmxlZCDigJQgdGhlXG4gICAgICAvLyBvdGhlciBoYWxmIG9mIHRoZSByZWxhdGlvbnNoaXAgYmVpbmcgdmlzaWJsZSBmcm9tIGJvdGggZW5kcy4gSXQgaXMgd2hhdCBzdG9wcyBcImNvbmZpZ3VyZSBvbmVcbiAgICAgIC8vIG9wZXJhdGlvbiBhY3Jvc3MgdHdvIHBsdWdpbnNcIiBmcm9tIG1lYW5pbmcgXCJnbyBhbmQgZmluZCB0aGUgb3RoZXIgcGx1Z2luIHlvdXJzZWxmXCIuXG4gICAgICBpZiAoc3RhdGUgIT09IEluc3RhbGxlZFBsdWdpblN0YXRlLkVuYWJsZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsLCBkZXBlbmRlbmN5LnBsdWdpbklkLCBkZXBlbmRlbmN5LnBsdWdpbk5hbWUpO1xuICAgIH1cblxuICAgIGlmIChibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5zZXR0aW5nc0hlYWRpbmcpIH0pO1xuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBibG9ja2luZ0NvbmZsaWN0cykge1xuICAgICAgdGhpcy5yZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsLCBjb25mbGljdCwgdGhpcy5jcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgb25lIGNvbmZsaWN0OiB3aGF0IGl0IGlzLCB3aHkgaXQgbWF0dGVycywgYW5kIHRoZSB0d28gd2F5cyBvdXQgb2YgaXQuXG4gICAqXG4gICAqIFRoZSByZXBhaXIgaXMgb2ZmZXJlZCBvbiB0aGUgT1RIRVIgcGx1Z2luIOKAlCBkaXNhYmxpbmcgaXQgaXMgdGhlIG9uZSB0aGluZyB0aGlzIHBsdWdpbiBjYW4gZG8gaW4gYVxuICAgKiBjbGljaywgc2luY2UgaXQgY2Fubm90IHVwZGF0ZSBzb21lb25lIGVsc2UncyBwbHVnaW4g4oCUIGFuZCBpdCBpcyB0aGUgcGVyc2lzdGVkIGBkaXNhYmxlUGx1Z2luQW5kU2F2ZWBcbiAgICogcmF0aGVyIHRoYW4gdGhlIHRyYW5zaWVudCBkaXNhYmxlLCBiZWNhdXNlIHRoZSB1c2VyIGFza2VkIGZvciBpdCBieSBjbGlja2luZy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSBjb25mbGljdCAtIFRoZSBjb25mbGljdCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSBtZXNzYWdlRnJhZ21lbnQgLSBUaGUgc2VudGVuY2UgZXhwbGFpbmluZyB0aGUgY29uZmxpY3QuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckNvbmZsaWN0RW50cnkoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBjb25mbGljdDogUGx1Z2luQ29uZmxpY3QsIG1lc3NhZ2VGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5QbHVnaW5Db25mbGljdEJhbm5lcl1cbiAgICB9KTtcbiAgICBiYW5uZXJFbC5hcHBlbmQobWVzc2FnZUZyYWdtZW50KTtcbiAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCBjb25mbGljdC5yZWFzb24pO1xuXG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5kaXNhYmxlLCB7IGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogY29uZmxpY3QucGx1Z2luTmFtZSB9KSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5yZW5kZXJPcGVuU2V0dGluZ3NCdXR0b24oYmFubmVyRWwsIGNvbmZsaWN0LnBsdWdpbklkLCBjb25mbGljdC5wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsOiBIVE1MRWxlbWVudCwgcGx1Z2luSWQ6IHN0cmluZywgcGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5Lm9wZW5EZXBlbmRlbmN5U2V0dGluZ3MsIHtcbiAgICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcbiAgICAgIH0pKVxuICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW4oKTtcbiAgICAgICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZChwbHVnaW5JZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGRlZCB0aHJvdWdoIGBhcHAuc2V0dGluZ2AgcmF0aGVyIHRoYW4gYHBsdWdpbi5hZGRTZXR0aW5nVGFiYCwgYmVjYXVzZSB0aGlzIHRhYiBoYXMgdG8gY29tZSBiYWNrXG4gICAgLy8gT0ZGIGFnYWluIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMg4oCUIG90aGVyd2lzZSB0aGUgcGx1Z2luJ3Mgb3duIHNldHRpbmdzIHRhYiwgcmVnaXN0ZXJlZCBieVxuICAgIC8vIGBvbmxvYWRJbXBsYCwgd291bGQgYXBwZWFyIGJlc2lkZSBhIHN0YWxlIFwicmVxdWlyZWQgcGx1Z2luIG1pc3NpbmdcIiBvbmUuIGBwbHVnaW4uYWRkU2V0dGluZ1RhYmBcbiAgICAvLyBvbmx5IGV2ZXIgcmVtb3ZlcyBhdCBwbHVnaW4gdW5sb2FkLlxuICAgIGNvbnN0IGJsb2NrZWRTZXR0aW5nVGFiID0gbmV3IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiKHtcbiAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckJsb2NrZWRCYW5uZXIoY29udGFpbmVyRWwsIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5hZGRTZXR0aW5nVGFiKGJsb2NrZWRTZXR0aW5nVGFiKTtcbiAgICB0aGlzLmJsb2NrZWRTZXR0aW5nVGFiID0gYmxvY2tlZFNldHRpbmdUYWI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxhQUFhLHdCQUF3QjtBQUM5QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVNQLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsU0FBUztBQUNsQixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLG9DQUFvQztBQVE3QyxNQUFNLGlEQUFpRDtBQUtoRCxJQUFLLHlCQUFMLGtCQUFLQSw0QkFBTDtBQU9MLEVBQUFBLHdCQUFBLFdBQVE7QUFRUixFQUFBQSx3QkFBQSxVQUFPO0FBZkcsU0FBQUE7QUFBQSxHQUFBO0FBK0paLE1BQU0sZ0NBQWdDLGlCQUFpQjtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUFrRDtBQUNuRSxVQUFNLE9BQU8sT0FBTyxLQUFLLE9BQU8sTUFBTTtBQUN0QyxTQUFLLGVBQWUsT0FBTztBQUFBLEVBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLZ0IsVUFBZ0I7QUFDOUIsU0FBSyxZQUFZLE1BQU07QUFDdkIsU0FBSyxhQUFhLEtBQUssV0FBVztBQUFBLEVBQ3BDO0FBQ0Y7QUFLTyxNQUFNLDRCQUE0QixZ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
@@ -1,4 +1,5 @@
1
- /// <reference path="../library.d.mts" />
1
+ /// <reference path="../library-references.d.mts" />
2
+ /// <reference lib="dom" />
2
3
  /**
3
4
  * @file
4
5
  *