@mnaoumov/obsidian-lib 3.2.0 → 3.3.1

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