@mnaoumov/obsidian-lib 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +40 -64
  3. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  4. package/dist/lib/cjs/app.cjs +40 -64
  5. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  6. package/dist/lib/cjs/attachment-path.cjs +40 -64
  7. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  8. package/dist/lib/cjs/backlink-index.cjs +41 -65
  9. package/dist/lib/cjs/backlink.cjs +40 -64
  10. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  11. package/dist/lib/cjs/callout.cjs +40 -64
  12. package/dist/lib/cjs/canvas.cjs +40 -64
  13. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  14. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  15. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  16. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  17. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  18. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  19. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  20. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  29. package/dist/lib/cjs/command-registrar.cjs +40 -64
  30. package/dist/lib/cjs/community-plugins.cjs +40 -64
  31. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  32. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  33. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  34. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  35. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  36. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  37. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  38. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  39. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  40. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  41. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  42. package/dist/lib/cjs/components/index.cjs +40 -64
  43. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  44. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  45. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  46. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  47. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  48. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  49. package/dist/lib/cjs/components/plugin-notice-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  51. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  52. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  53. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  54. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  55. package/dist/lib/cjs/components/release-notes-component.cjs +40 -64
  56. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  57. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  58. package/dist/lib/cjs/components/settings-migration-component.cjs +40 -64
  59. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  60. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  61. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  62. package/dist/lib/cjs/constructors/index.cjs +40 -64
  63. package/dist/lib/cjs/css-class.cjs +40 -64
  64. package/dist/lib/cjs/data-handler.cjs +40 -64
  65. package/dist/lib/cjs/dataview-link.cjs +40 -64
  66. package/dist/lib/cjs/dataview.cjs +40 -64
  67. package/dist/lib/cjs/debug.cjs +40 -64
  68. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  69. package/dist/lib/cjs/demo-vault-helper.cjs +40 -64
  70. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  71. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +40 -64
  72. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  73. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  74. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  75. package/dist/lib/cjs/editor.cjs +40 -64
  76. package/dist/lib/cjs/events.cjs +40 -64
  77. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  78. package/dist/lib/cjs/file-change.cjs +40 -64
  79. package/dist/lib/cjs/file-explorer.cjs +40 -64
  80. package/dist/lib/cjs/file-manager.cjs +40 -64
  81. package/dist/lib/cjs/file-system.cjs +40 -64
  82. package/dist/lib/cjs/folder-note.cjs +40 -64
  83. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  84. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  85. package/dist/lib/cjs/frontmatter.cjs +40 -64
  86. package/dist/lib/cjs/generated-during-build.cjs +41 -65
  87. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  88. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  89. package/dist/lib/cjs/html-element.cjs +40 -64
  90. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  91. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  92. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  93. package/dist/lib/cjs/i18n/index.cjs +40 -64
  94. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  95. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  96. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  97. package/dist/lib/cjs/index.cjs +40 -64
  98. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  99. package/dist/lib/cjs/library-styles.cjs +40 -64
  100. package/dist/lib/cjs/library.cjs +40 -64
  101. package/dist/lib/cjs/link-name.cjs +40 -64
  102. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  103. package/dist/lib/cjs/link.cjs +40 -64
  104. package/dist/lib/cjs/logger.cjs +40 -64
  105. package/dist/lib/cjs/loop.cjs +40 -64
  106. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  107. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  108. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  109. package/dist/lib/cjs/markdown-view.cjs +40 -64
  110. package/dist/lib/cjs/markdown.cjs +40 -64
  111. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  112. package/dist/lib/cjs/metadata-cache.cjs +40 -64
  113. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  114. package/dist/lib/cjs/modals/alert.cjs +40 -64
  115. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  116. package/dist/lib/cjs/modals/index.cjs +40 -64
  117. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  118. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  119. package/dist/lib/cjs/modals/modal.cjs +40 -64
  120. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  121. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  122. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  123. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  124. package/dist/lib/cjs/note-priority.cjs +41 -65
  125. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  126. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  127. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  128. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  129. package/dist/lib/cjs/parse-link.cjs +40 -64
  130. package/dist/lib/cjs/path-settings.cjs +40 -64
  131. package/dist/lib/cjs/pdf.cjs +40 -64
  132. package/dist/lib/cjs/plugin/index.cjs +40 -64
  133. package/dist/lib/cjs/plugin/plugin-api.cjs +40 -64
  134. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  135. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  136. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  137. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  138. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  139. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  140. package/dist/lib/cjs/plugin/settings-migration-api.cjs +40 -64
  141. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  142. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  143. package/dist/lib/cjs/popovers/index.cjs +40 -64
  144. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  145. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  146. package/dist/lib/cjs/property-entry.cjs +40 -64
  147. package/dist/lib/cjs/queue.cjs +40 -64
  148. package/dist/lib/cjs/react/app-context.cjs +40 -64
  149. package/dist/lib/cjs/react/index.cjs +40 -64
  150. package/dist/lib/cjs/reference.cjs +40 -64
  151. package/dist/lib/cjs/resource-lock.cjs +40 -64
  152. package/dist/lib/cjs/resource-url.cjs +40 -64
  153. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  154. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  155. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  156. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  157. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  158. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  159. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  160. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  161. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  162. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  163. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  164. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  165. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  175. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  177. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  179. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  181. package/dist/lib/cjs/setting-ex.cjs +40 -64
  182. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  183. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  184. package/dist/lib/cjs/templater.cjs +40 -64
  185. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  186. package/dist/lib/cjs/transformers/index.cjs +40 -64
  187. package/dist/lib/cjs/trusted-input.cjs +40 -64
  188. package/dist/lib/cjs/validation.cjs +40 -64
  189. package/dist/lib/cjs/vault-delete.cjs +40 -64
  190. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  191. package/dist/lib/cjs/vault.cjs +41 -65
  192. package/dist/lib/cjs/view-registrar.cjs +40 -64
  193. package/dist/lib/cjs/workspace.cjs +40 -64
  194. package/dist/lib/esm/__merged.mjs +6 -14
  195. package/dist/lib/esm/active-file-provider.mjs +6 -14
  196. package/dist/lib/esm/app.mjs +6 -14
  197. package/dist/lib/esm/async-with-notice.mjs +6 -14
  198. package/dist/lib/esm/attachment-path.mjs +6 -14
  199. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  200. package/dist/lib/esm/backlink-index.mjs +6 -14
  201. package/dist/lib/esm/backlink.mjs +6 -14
  202. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  203. package/dist/lib/esm/callout.mjs +6 -14
  204. package/dist/lib/esm/canvas.mjs +6 -14
  205. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  206. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  207. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  208. package/dist/lib/esm/codemirror/index.mjs +6 -14
  209. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  210. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  211. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  212. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  213. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  214. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  215. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  216. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  217. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  218. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  219. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  220. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  221. package/dist/lib/esm/command-registrar.mjs +6 -14
  222. package/dist/lib/esm/community-plugins.mjs +6 -14
  223. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  224. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  225. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  226. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  227. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  228. package/dist/lib/esm/components/component-ex.mjs +6 -14
  229. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  230. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  231. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  232. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  233. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  234. package/dist/lib/esm/components/index.mjs +6 -14
  235. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  236. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  237. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  238. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  239. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  240. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  241. package/dist/lib/esm/components/plugin-notice-component.mjs +6 -14
  242. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  243. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  244. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  245. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  246. package/dist/lib/esm/components/registry-component.mjs +6 -14
  247. package/dist/lib/esm/components/release-notes-component.mjs +6 -14
  248. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  249. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  250. package/dist/lib/esm/components/settings-migration-component.mjs +6 -14
  251. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  252. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  253. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  254. package/dist/lib/esm/constructors/index.mjs +6 -14
  255. package/dist/lib/esm/css-class.mjs +6 -14
  256. package/dist/lib/esm/data-handler.mjs +6 -14
  257. package/dist/lib/esm/dataview-link.mjs +6 -14
  258. package/dist/lib/esm/dataview.mjs +6 -14
  259. package/dist/lib/esm/debug.mjs +6 -14
  260. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  261. package/dist/lib/esm/demo-vault-helper.mjs +6 -14
  262. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  263. package/dist/lib/esm/desktop-demo-vault-opener.mjs +6 -14
  264. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  265. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  266. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  267. package/dist/lib/esm/editor.mjs +6 -14
  268. package/dist/lib/esm/events.mjs +6 -14
  269. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  270. package/dist/lib/esm/file-change.mjs +6 -14
  271. package/dist/lib/esm/file-explorer.mjs +6 -14
  272. package/dist/lib/esm/file-manager.mjs +6 -14
  273. package/dist/lib/esm/file-system.mjs +6 -14
  274. package/dist/lib/esm/folder-note.mjs +6 -14
  275. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  276. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  277. package/dist/lib/esm/frontmatter.mjs +6 -14
  278. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  279. package/dist/lib/esm/generated-during-build.mjs +7 -15
  280. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  281. package/dist/lib/esm/html-element.mjs +6 -14
  282. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  283. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  284. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  285. package/dist/lib/esm/i18n/index.mjs +6 -14
  286. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  287. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  288. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  289. package/dist/lib/esm/index.mjs +6 -14
  290. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  291. package/dist/lib/esm/library-styles.mjs +6 -14
  292. package/dist/lib/esm/library.mjs +6 -14
  293. package/dist/lib/esm/link-name.mjs +6 -14
  294. package/dist/lib/esm/link-update-progress.mjs +5 -13
  295. package/dist/lib/esm/link.mjs +6 -14
  296. package/dist/lib/esm/logger.mjs +6 -14
  297. package/dist/lib/esm/loop.mjs +6 -14
  298. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  299. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  300. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  301. package/dist/lib/esm/markdown-view.mjs +6 -14
  302. package/dist/lib/esm/markdown.mjs +6 -14
  303. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  304. package/dist/lib/esm/metadata-cache.mjs +6 -14
  305. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  306. package/dist/lib/esm/modals/alert.mjs +6 -14
  307. package/dist/lib/esm/modals/confirm.mjs +6 -14
  308. package/dist/lib/esm/modals/index.mjs +6 -14
  309. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  311. package/dist/lib/esm/modals/modal.mjs +6 -14
  312. package/dist/lib/esm/modals/prompt.mjs +6 -14
  313. package/dist/lib/esm/modals/select-item.mjs +6 -14
  314. package/dist/lib/esm/modals/select-option.mjs +6 -14
  315. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  316. package/dist/lib/esm/note-priority.mjs +6 -14
  317. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  318. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  319. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  320. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  321. package/dist/lib/esm/parse-link.mjs +6 -14
  322. package/dist/lib/esm/path-settings.mjs +6 -14
  323. package/dist/lib/esm/pdf.mjs +6 -14
  324. package/dist/lib/esm/plugin/index.mjs +6 -14
  325. package/dist/lib/esm/plugin/plugin-api.mjs +6 -14
  326. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  327. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  328. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  329. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  330. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  331. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  332. package/dist/lib/esm/plugin/settings-migration-api.mjs +5 -13
  333. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  334. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  335. package/dist/lib/esm/popovers/index.mjs +6 -14
  336. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  337. package/dist/lib/esm/popovers/popover.mjs +6 -14
  338. package/dist/lib/esm/property-entry.mjs +6 -14
  339. package/dist/lib/esm/queue.mjs +6 -14
  340. package/dist/lib/esm/react/app-context.mjs +6 -14
  341. package/dist/lib/esm/react/index.mjs +6 -14
  342. package/dist/lib/esm/reference.mjs +6 -14
  343. package/dist/lib/esm/resource-lock.mjs +6 -14
  344. package/dist/lib/esm/resource-url.mjs +6 -14
  345. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  346. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  347. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  348. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  349. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  350. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  351. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  352. package/dist/lib/esm/setting-components/index.mjs +6 -14
  353. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  354. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  355. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  356. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  357. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  358. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  359. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  360. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  361. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  362. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  363. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  364. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  365. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  366. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  367. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  368. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  369. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  370. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  372. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  373. package/dist/lib/esm/setting-ex.mjs +6 -14
  374. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  375. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  376. package/dist/lib/esm/templater.mjs +6 -14
  377. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  378. package/dist/lib/esm/transformers/index.mjs +6 -14
  379. package/dist/lib/esm/trusted-input.mjs +6 -14
  380. package/dist/lib/esm/validation.mjs +6 -14
  381. package/dist/lib/esm/vault-delete.mjs +6 -14
  382. package/dist/lib/esm/vault-transaction.mjs +6 -14
  383. package/dist/lib/esm/vault.mjs +6 -14
  384. package/dist/lib/esm/view-registrar.mjs +6 -14
  385. package/dist/lib/esm/workspace.mjs +6 -14
  386. package/package.json +69 -24
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -57,4 +49,4 @@ export {
57
49
  PLUGIN_UNLOADED_EVENT_NAME,
58
50
  triggerPluginLifecycleEvent
59
51
  };
60
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tbGlmZWN5Y2xlLWV2ZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBsaWZlY3ljbGUgYnJvYWRjYXN0IGV2ZXJ5IHtAbGluayBQbHVnaW5CYXNlfSBtYWtlczogYG9ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tbG9hZGVkYCB3aGVuIGl0IGhhc1xuICogZmluaXNoZWQgbG9hZGluZyBhbmQgYG9ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tdW5sb2FkZWRgIHdoZW4gaXQgZ29lcyBhd2F5LlxuICpcbiAqIE9ic2lkaWFuIGdpdmVzIGEgcGx1Z2luIG5vIHdheSB0byBsZWFybiB0aGF0IEFOT1RIRVIgcGx1Z2luIHdhcyBlbmFibGVkIG9yIGRpc2FibGVkIFx1MjAxNCB0aGVyZSBpcyBubyBzdWNoXG4gKiBldmVudCBvbiBgYXBwLnBsdWdpbnNgLCBhbmQgYSBwbHVnaW4ncyBvd24gYEV2ZW50c2Agc291cmNlIGNhbm5vdCBoZWxwIGEgbGlzdGVuZXIgdGhhdCBkb2VzIG5vdCB5ZXQgaG9sZFxuICogdGhlIGluc3RhbmNlLiBTbyB0aGUgYnJvYWRjYXN0IGdvZXMgdGhyb3VnaCBgYXBwLndvcmtzcGFjZWAsIHdoaWNoIGlzIG9uZSBvYmplY3QgZXZlcnkgcGx1Z2luIGluIHRoZVxuICogdmF1bHQgY2FuIHJlYWNoLiBEZWxpYmVyYXRlbHkgTk9UIHRoZSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgIGJhZyB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeSBzaGFyZXNcbiAqIGl0cyBzdGF0ZSB0aHJvdWdoOiBhIGxpc3RlbmVyIHRoZXJlIG5lZWRzIGl0cyBvd24gY29weSBvZiB0aGlzIGxpYnJhcnksIGFuZCB0aGVzZSBldmVudHMgYXJlIG1lYW50IHRvIGJlXG4gKiBjb25zdW1hYmxlIGJ5IGFueSBwbHVnaW4gYXQgYWxsLlxuICpcbiAqIFRoZSBuYW1lcyBhcmUgcGFzdCB0ZW5zZSBiZWNhdXNlIGEgYnJvYWRjYXN0IHN0YXRlcyBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4gYGxvYWRlZGAgaW5cbiAqIHBhcnRpY3VsYXIgY2FycmllcyBhIGd1YXJhbnRlZTogaXQgaXMgdHJpZ2dlcmVkIG9ubHkgYWZ0ZXIgZXZlcnkgQVBJIHRoZSBwbHVnaW4gZGVjbGFyZXMgaGFzIGJlZW5cbiAqIHB1Ymxpc2hlZCwgc28gYSBsaXN0ZW5lciBtYXkgY2FsbCB0aGVtIGltbWVkaWF0ZWx5LlxuICpcbiAqIEJvdGggdGhlIGV2ZW50IG5hbWVzIGFuZCB7QGxpbmsgUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkfSBhcmUgYSBDUk9TUy1WRVJTSU9OIENPTlRSQUNULiBDb3BpZXMgb2ZcbiAqIHRoaXMgbGlicmFyeSBhdCBkaWZmZXJlbnQgdmVyc2lvbnMgcHVibGlzaCBhbmQgY29uc3VtZSB0aGVtIHNpZGUgYnkgc2lkZSBpbiBvbmUgdmF1bHQsIHNvIG5laXRoZXIgbWF5XG4gKiBjaGFuZ2UgaW5jb21wYXRpYmx5OiBwbGFpbiBkYXRhIG9ubHksIGFuZCBuZXcgcGF5bG9hZCBmaWVsZHMgb25seSBldmVyIGFkZGVkLlxuICpcbiAqIFRoYXQgY29udHJhY3QgaXMgYWxzbyBQVUJMSVNIRUQsIGFzIG9mIHRoZSBgUGx1Z2luIEFQSSBwcm90b2NvbGAgZ3VpZGU6IHRoaXJkLXBhcnR5IHBsdWdpbnMgdGhhdCB3aWxsXG4gKiBuZXZlciBpbnN0YWxsIHRoaXMgbGlicmFyeSBhcmUgdG9sZCB0byBoYXJkY29kZSB0aGVzZSB0d28gc3RyaW5ncyBhbmQgdGhpcyBwYXlsb2FkIHNoYXBlLiBQdWJsaXNoaW5nIGl0XG4gKiBhZGRlZCBubyBuZXcgY29uc3RyYWludCBcdTIwMTQgdGhlIGNyb3NzLWNvcHkgb25lIGFib3ZlIGFscmVhZHkgZm9yYmFkZSBldmVyeSBjaGFuZ2UgYW4gb3V0c2lkZXIgY291bGRcbiAqIG5vdGljZSBcdTIwMTQgYnV0IGl0IGRvZXMgbWVhbiBhIHJlbmFtZSBpcyBub3cgZG91Ymx5IHVuYXZhaWxhYmxlLiBUaGUgYG9ic2lkaWFuLWRldi11dGlsczpgIHByZWZpeCBuYW1lcyB0aGVcbiAqIGxpYnJhcnkgcmF0aGVyIHRoYW4gdGhlIHN1YmplY3QsIHdoaWNoIGlzIGEgd2FydCwgYW5kIGEgcGVybWFuZW50IG9uZTogYSBuZXV0cmFsIGFsaWFzIHdvdWxkIG5vdCByZXRpcmVcbiAqIHRoZSBvbGQgbmFtZSAoYWxyZWFkeS1yZWxlYXNlZCBwbHVnaW5zIGVtaXQgb25seSBpdCksIHNvIGl0IHdvdWxkIGxlYXZlIGV2ZXJ5IGNvcnJlY3QgY29uc3VtZXIgbGlzdGVuaW5nXG4gKiBmb3IgYm90aCwgZm9yZXZlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiBlaXRoZXIgbGlmZWN5Y2xlIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUgPSB0eXBlb2YgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FIHwgdHlwZW9mIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FO1xuXG4vKipcbiAqIFRoZSBwYXlsb2FkIG9mIHtAbGluayBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUV9IGFuZCB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICpcbiAqIFBsYWluIGRhdGEgYnkgZGVzaWduIFx1MjAxNCBubyBjbGFzcyBpbnN0YW5jZXMgYW5kIG5vIHR5cGVzIG93bmVkIGJ5IHRoaXMgbGlicmFyeSBcdTIwMTQgYmVjYXVzZSBpdCBjcm9zc2VzXG4gKiBiZXR3ZWVuIGluZGVwZW5kZW50bHkgYnVuZGxlZCBjb3BpZXMgb2YgaXQsIGFuZCBiZXR3ZWVuIHBsdWdpbnMgdGhhdCBkbyBub3QgdXNlIGl0IGF0IGFsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQge1xuICAvKipcbiAgICogVGhlIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBwbHVnaW4gcHVibGlzaGVkLCBlbXB0eSB3aGVuIGl0IHB1Ymxpc2hlcyBubyBBUEkuXG4gICAqXG4gICAqIEFuIGFycmF5IHJhdGhlciB0aGFuIGEgc2luZ2xlIHZlcnNpb24gYmVjYXVzZSBhIHByb3ZpZGVyIG1heSBwdWJsaXNoIHNldmVyYWwgY29udHJhY3QgdmVyc2lvbnMgc2lkZSBieVxuICAgKiBzaWRlLCBzbyBjb25zdW1lcnMgcGlubmVkIHRvIGFuIG9sZGVyIHJhbmdlIGtlZXAgd29ya2luZyBhY3Jvc3MgYSBicmVha2luZyBjaGFuZ2UuXG4gICAqXG4gICAqIFRoZSBBUEkgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGhlcmUuIEEgaGFuZGxlIGRlbGl2ZXJlZCBieSBhIG9uZS1zaG90IGV2ZW50IGlzIGFcbiAgICogcHJvYmU6IGl0IGFuc3dlcnMgXCJub3dcIiBhbmQgbmV2ZXIgc2F5cyB3aGVuIFwibm93XCIgY2hhbmdlZCwgYW5kIG9uZSB0aGF0IG91dGxpdmVzIHRoZSBwcm92aWRlciBpc1xuICAgKiBleGFjdGx5IHRoZSBzdGFsZSBoYW5kbGUgdGhlIHBsdWdpbi1hcGkgcmVnaXN0cnkncyByZXZvY2FibGUgaGFuZGxlcyBleGlzdCB0byBwcmV2ZW50LiBSZWFjaCB0aGUgQVBJXG4gICAqIHRocm91Z2ggYHdhdGNoUGx1Z2luQXBpYCBpbnN0ZWFkLCB3aG9zZSByZWZlcmVuY2Ugc3RheXMgY29ycmVjdCBhY3Jvc3MgdW5sb2FkIGFuZCByZS1lbmFibGUuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBpZHMgb2YgdGhlIHBsdWdpbnMgdGhpcyBvbmUgZGVjbGFyZXMgYXMgbWFuZGF0b3J5IGRlcGVuZGVuY2llcywgZW1wdHkgd2hlbiBpdCBkZWNsYXJlcyBub25lLlxuICAgKlxuICAgKiBQcmVzZW50IHNvIHRoZSByZWxhdGlvbnNoaXAgY2FuIGJlIHJlYWQgZnJvbSB0aGUgT1RIRVIgZW5kOiBhIHByb3ZpZGVyIGhhcyBubyB3YXkgdG8gYXNrIHdobyBkZXBlbmRzXG4gICAqIG9uIGl0IFx1MjAxNCB0aGUgcmVnaXN0cnkgb25seSBhbnN3ZXJzIGNvbnN1bWVyLXRvLXByb3ZpZGVyIFx1MjAxNCBhbmQgXCJ3aGljaCBpbnN0YWxsZWQgcGx1Z2lucyBuZWVkIHRoaXMgb25lXCJcbiAgICogaXMgd2hhdCBsZXRzIGEgcHJvdmlkZXIncyBzZXR0aW5ncyB0YWIgdGVsbCB0aGUgdXNlciB3aHkgaXQgaXMgaW4gdGhlaXIgdmF1bHQgYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QuaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBtYW5pZmVzdC5uYW1lYCwgZm9yIGRpc3BsYXkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QudmVyc2lvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2Ugd2hvc2Ugd29ya3NwYWNlIGNhcnJpZXMgdGhlIGJyb2FkY2FzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdG8gdHJpZ2dlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZTtcblxuICAvKipcbiAgICogVGhlIHBheWxvYWQgZGVzY3JpYmluZyB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkO1xufVxuXG4vKipcbiAqIFRyaWdnZXJlZCBvbmNlIGEgcGx1Z2luIGhhcyBmaW5pc2hlZCBsb2FkaW5nIEFORCBwdWJsaXNoZWQgZXZlcnkgQVBJIGl0IGRlY2xhcmVzLCBzbyBhIGxpc3RlbmVyIG1heSBjYWxsXG4gKiB0aG9zZSBBUElzIGltbWVkaWF0ZWx5LlxuICpcbiAqIE5hbWVzcGFjZWQgYnkgdGhlIHBhY2thZ2UgbmFtZSByYXRoZXIgdGhhbiBieSBhbiBhYmJyZXZpYXRpb24gb2YgaXQ6IHRoZSBldmVudCBpcyBnbG9iYWwgdG8gdGhlIHZhdWx0XG4gKiBhbmQgYWltZWQgYXQgcGx1Z2luIGF1dGhvcnMgd2hvIGhhdmUgbmV2ZXIgaGVhcmQgb2YgdGhpcyBsaWJyYXJ5LCBzbyB0aGUgcHJlZml4IGhhcyB0byBpZGVudGlmeSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUgPSAnb2JzaWRpYW4tZGV2LXV0aWxzOnBsdWdpbi1sb2FkZWQnO1xuXG4vKipcbiAqIFRyaWdnZXJlZCBhcyBhIHBsdWdpbiB1bmxvYWRzIFx1MjAxNCB3aGV0aGVyIHRoZSB1c2VyIGRpc2FibGVkIGl0LCB1bmluc3RhbGxlZCBpdCwgb3IgT2JzaWRpYW4gaXMgc2h1dHRpbmdcbiAqIGRvd24uIEl0cyBBUElzIGFyZSByZXZva2VkIGJ5IHRoZSB0aW1lIGEgbGlzdGVuZXIgcnVucy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FID0gJ29ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tdW5sb2FkZWQnO1xuXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcbiAgaW50ZXJmYWNlIFdvcmtzcGFjZSB7XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBhIHBsdWdpbiBmaW5pc2hpbmcgaXRzIGxvYWQsIG9yIHRvIG9uZSB1bmxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFNob3VsZCBiZSB7QGxpbmsgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FfSBvciB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayByZWNlaXZpbmcgdGhlIHBsdWdpbidzIHBheWxvYWQuXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgLypcbiAgICAgKiBBbiBhdWdtZW50YXRpb24gb2YgYW4gRVhJU1RJTkcgb3ZlcmxvYWQgc2V0IGhhcyB0byBzdGF5IGEgbWV0aG9kIHNpZ25hdHVyZS4gQSBwcm9wZXJ0eSBtZW1iZXIgZG9lcyBub3QgbWVyZ2UgaW50b1xuICAgICAqIGBXb3Jrc3BhY2Uub25gJ3Mgb3ZlcmxvYWRzLCBhbmQgVHlwZVNjcmlwdCBzYXlzIHNvIG5vd2hlcmUgbmVhciBoZXJlOiB0aGUgZGVjbGFyYXRpb24gaXRzZWxmIGNvbXBpbGVzLCBhbmQgZXZlcnlcbiAgICAgKiBjYWxsIHNpdGUgbG9zZXMgdGhlIHNpZ25hdHVyZSBpbnN0ZWFkIFx1MjAxNCBgb24oUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCAuLi4pYCBmYWlscyB3aXRoIFwidGhlIGxhc3Qgb3ZlcmxvYWQgZ2F2ZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgZXJyb3JcIi4gVGhlIHJ1bGUgcmVwb3J0cyB0aGlzIG9uZSB3aXRob3V0IGEgZml4IGZvciB0aGUgc2FtZSByZWFzb24sIHNvIHRoZSBkaXNhYmxlIGJlbG93IGlzIHRoZSBhbnN3ZXJcbiAgICAgKiByYXRoZXIgdGhhbiBhIGRlZmVycmFsLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSAtLSBBIHByb3BlcnR5IG1lbWJlciBkb2VzIG5vdCBtZXJnZSBpbnRvIGFuIGV4aXN0aW5nIG92ZXJsb2FkIHNldC4gU2VlIGFib3ZlLlxuICAgIG9uKG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZSwgY2FsbGJhY2s6IChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHVua25vd24sIGNvbnRleHQ/OiB1bmtub3duKTogRXZlbnRSZWY7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmlnZ2VycyBvbmUgb2YgdGhlIHR3byBsaWZlY3ljbGUgZXZlbnRzIG9uIHRoZSBhcHAncyB3b3Jrc3BhY2UuXG4gKlxuICogQSB0aGluIHR5cGVkIHdyYXBwZXIgb3ZlciBgV29ya3NwYWNlLnRyaWdnZXJgLCB3aGljaCBhY2NlcHRzIGFueSBldmVudCBuYW1lIGFuZCBhbnkgYXJndW1lbnRzLCBzbyB0aGF0XG4gKiB0aGUgb25lIHBsYWNlIGEgcGF5bG9hZCBpcyBjb25zdHJ1Y3RlZCBpcyBjaGVja2VkIGFnYWluc3Qge0BsaW5rIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudChwYXJhbXM6IFRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudFBhcmFtcyk6IHZvaWQge1xuICBwYXJhbXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKHBhcmFtcy5uYW1lLCBwYXJhbXMucGF5bG9hZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkdPLE1BQU0sMkJBQTJCO0FBTWpDLE1BQU0sNkJBQTZCO0FBZ0NuQyxTQUFTLDRCQUE0QixRQUFpRDtBQUMzRixTQUFPLElBQUksVUFBVSxRQUFRLE9BQU8sTUFBTSxPQUFPLE9BQU87QUFDMUQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tbGlmZWN5Y2xlLWV2ZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBsaWZlY3ljbGUgYnJvYWRjYXN0IGV2ZXJ5IHtAbGluayBQbHVnaW5CYXNlfSBtYWtlczogYG9ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tbG9hZGVkYCB3aGVuIGl0IGhhc1xuICogZmluaXNoZWQgbG9hZGluZyBhbmQgYG9ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tdW5sb2FkZWRgIHdoZW4gaXQgZ29lcyBhd2F5LlxuICpcbiAqIE9ic2lkaWFuIGdpdmVzIGEgcGx1Z2luIG5vIHdheSB0byBsZWFybiB0aGF0IEFOT1RIRVIgcGx1Z2luIHdhcyBlbmFibGVkIG9yIGRpc2FibGVkIFx1MjAxNCB0aGVyZSBpcyBubyBzdWNoXG4gKiBldmVudCBvbiBgYXBwLnBsdWdpbnNgLCBhbmQgYSBwbHVnaW4ncyBvd24gYEV2ZW50c2Agc291cmNlIGNhbm5vdCBoZWxwIGEgbGlzdGVuZXIgdGhhdCBkb2VzIG5vdCB5ZXQgaG9sZFxuICogdGhlIGluc3RhbmNlLiBTbyB0aGUgYnJvYWRjYXN0IGdvZXMgdGhyb3VnaCBgYXBwLndvcmtzcGFjZWAsIHdoaWNoIGlzIG9uZSBvYmplY3QgZXZlcnkgcGx1Z2luIGluIHRoZVxuICogdmF1bHQgY2FuIHJlYWNoLiBEZWxpYmVyYXRlbHkgTk9UIHRoZSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgIGJhZyB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeSBzaGFyZXNcbiAqIGl0cyBzdGF0ZSB0aHJvdWdoOiBhIGxpc3RlbmVyIHRoZXJlIG5lZWRzIGl0cyBvd24gY29weSBvZiB0aGlzIGxpYnJhcnksIGFuZCB0aGVzZSBldmVudHMgYXJlIG1lYW50IHRvIGJlXG4gKiBjb25zdW1hYmxlIGJ5IGFueSBwbHVnaW4gYXQgYWxsLlxuICpcbiAqIFRoZSBuYW1lcyBhcmUgcGFzdCB0ZW5zZSBiZWNhdXNlIGEgYnJvYWRjYXN0IHN0YXRlcyBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4gYGxvYWRlZGAgaW5cbiAqIHBhcnRpY3VsYXIgY2FycmllcyBhIGd1YXJhbnRlZTogaXQgaXMgdHJpZ2dlcmVkIG9ubHkgYWZ0ZXIgZXZlcnkgQVBJIHRoZSBwbHVnaW4gZGVjbGFyZXMgaGFzIGJlZW5cbiAqIHB1Ymxpc2hlZCwgc28gYSBsaXN0ZW5lciBtYXkgY2FsbCB0aGVtIGltbWVkaWF0ZWx5LlxuICpcbiAqIEJvdGggdGhlIGV2ZW50IG5hbWVzIGFuZCB7QGxpbmsgUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkfSBhcmUgYSBDUk9TUy1WRVJTSU9OIENPTlRSQUNULiBDb3BpZXMgb2ZcbiAqIHRoaXMgbGlicmFyeSBhdCBkaWZmZXJlbnQgdmVyc2lvbnMgcHVibGlzaCBhbmQgY29uc3VtZSB0aGVtIHNpZGUgYnkgc2lkZSBpbiBvbmUgdmF1bHQsIHNvIG5laXRoZXIgbWF5XG4gKiBjaGFuZ2UgaW5jb21wYXRpYmx5OiBwbGFpbiBkYXRhIG9ubHksIGFuZCBuZXcgcGF5bG9hZCBmaWVsZHMgb25seSBldmVyIGFkZGVkLlxuICpcbiAqIFRoYXQgY29udHJhY3QgaXMgYWxzbyBQVUJMSVNIRUQsIGFzIG9mIHRoZSBgUGx1Z2luIEFQSSBwcm90b2NvbGAgZ3VpZGU6IHRoaXJkLXBhcnR5IHBsdWdpbnMgdGhhdCB3aWxsXG4gKiBuZXZlciBpbnN0YWxsIHRoaXMgbGlicmFyeSBhcmUgdG9sZCB0byBoYXJkY29kZSB0aGVzZSB0d28gc3RyaW5ncyBhbmQgdGhpcyBwYXlsb2FkIHNoYXBlLiBQdWJsaXNoaW5nIGl0XG4gKiBhZGRlZCBubyBuZXcgY29uc3RyYWludCBcdTIwMTQgdGhlIGNyb3NzLWNvcHkgb25lIGFib3ZlIGFscmVhZHkgZm9yYmFkZSBldmVyeSBjaGFuZ2UgYW4gb3V0c2lkZXIgY291bGRcbiAqIG5vdGljZSBcdTIwMTQgYnV0IGl0IGRvZXMgbWVhbiBhIHJlbmFtZSBpcyBub3cgZG91Ymx5IHVuYXZhaWxhYmxlLiBUaGUgYG9ic2lkaWFuLWRldi11dGlsczpgIHByZWZpeCBuYW1lcyB0aGVcbiAqIGxpYnJhcnkgcmF0aGVyIHRoYW4gdGhlIHN1YmplY3QsIHdoaWNoIGlzIGEgd2FydCwgYW5kIGEgcGVybWFuZW50IG9uZTogYSBuZXV0cmFsIGFsaWFzIHdvdWxkIG5vdCByZXRpcmVcbiAqIHRoZSBvbGQgbmFtZSAoYWxyZWFkeS1yZWxlYXNlZCBwbHVnaW5zIGVtaXQgb25seSBpdCksIHNvIGl0IHdvdWxkIGxlYXZlIGV2ZXJ5IGNvcnJlY3QgY29uc3VtZXIgbGlzdGVuaW5nXG4gKiBmb3IgYm90aCwgZm9yZXZlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiBlaXRoZXIgbGlmZWN5Y2xlIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUgPSB0eXBlb2YgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FIHwgdHlwZW9mIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FO1xuXG4vKipcbiAqIFRoZSBwYXlsb2FkIG9mIHtAbGluayBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUV9IGFuZCB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICpcbiAqIFBsYWluIGRhdGEgYnkgZGVzaWduIFx1MjAxNCBubyBjbGFzcyBpbnN0YW5jZXMgYW5kIG5vIHR5cGVzIG93bmVkIGJ5IHRoaXMgbGlicmFyeSBcdTIwMTQgYmVjYXVzZSBpdCBjcm9zc2VzXG4gKiBiZXR3ZWVuIGluZGVwZW5kZW50bHkgYnVuZGxlZCBjb3BpZXMgb2YgaXQsIGFuZCBiZXR3ZWVuIHBsdWdpbnMgdGhhdCBkbyBub3QgdXNlIGl0IGF0IGFsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQge1xuICAvKipcbiAgICogVGhlIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBwbHVnaW4gcHVibGlzaGVkLCBlbXB0eSB3aGVuIGl0IHB1Ymxpc2hlcyBubyBBUEkuXG4gICAqXG4gICAqIEFuIGFycmF5IHJhdGhlciB0aGFuIGEgc2luZ2xlIHZlcnNpb24gYmVjYXVzZSBhIHByb3ZpZGVyIG1heSBwdWJsaXNoIHNldmVyYWwgY29udHJhY3QgdmVyc2lvbnMgc2lkZSBieVxuICAgKiBzaWRlLCBzbyBjb25zdW1lcnMgcGlubmVkIHRvIGFuIG9sZGVyIHJhbmdlIGtlZXAgd29ya2luZyBhY3Jvc3MgYSBicmVha2luZyBjaGFuZ2UuXG4gICAqXG4gICAqIFRoZSBBUEkgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGhlcmUuIEEgaGFuZGxlIGRlbGl2ZXJlZCBieSBhIG9uZS1zaG90IGV2ZW50IGlzIGFcbiAgICogcHJvYmU6IGl0IGFuc3dlcnMgXCJub3dcIiBhbmQgbmV2ZXIgc2F5cyB3aGVuIFwibm93XCIgY2hhbmdlZCwgYW5kIG9uZSB0aGF0IG91dGxpdmVzIHRoZSBwcm92aWRlciBpc1xuICAgKiBleGFjdGx5IHRoZSBzdGFsZSBoYW5kbGUgdGhlIHBsdWdpbi1hcGkgcmVnaXN0cnkncyByZXZvY2FibGUgaGFuZGxlcyBleGlzdCB0byBwcmV2ZW50LiBSZWFjaCB0aGUgQVBJXG4gICAqIHRocm91Z2ggYHdhdGNoUGx1Z2luQXBpYCBpbnN0ZWFkLCB3aG9zZSByZWZlcmVuY2Ugc3RheXMgY29ycmVjdCBhY3Jvc3MgdW5sb2FkIGFuZCByZS1lbmFibGUuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBpZHMgb2YgdGhlIHBsdWdpbnMgdGhpcyBvbmUgZGVjbGFyZXMgYXMgbWFuZGF0b3J5IGRlcGVuZGVuY2llcywgZW1wdHkgd2hlbiBpdCBkZWNsYXJlcyBub25lLlxuICAgKlxuICAgKiBQcmVzZW50IHNvIHRoZSByZWxhdGlvbnNoaXAgY2FuIGJlIHJlYWQgZnJvbSB0aGUgT1RIRVIgZW5kOiBhIHByb3ZpZGVyIGhhcyBubyB3YXkgdG8gYXNrIHdobyBkZXBlbmRzXG4gICAqIG9uIGl0IFx1MjAxNCB0aGUgcmVnaXN0cnkgb25seSBhbnN3ZXJzIGNvbnN1bWVyLXRvLXByb3ZpZGVyIFx1MjAxNCBhbmQgXCJ3aGljaCBpbnN0YWxsZWQgcGx1Z2lucyBuZWVkIHRoaXMgb25lXCJcbiAgICogaXMgd2hhdCBsZXRzIGEgcHJvdmlkZXIncyBzZXR0aW5ncyB0YWIgdGVsbCB0aGUgdXNlciB3aHkgaXQgaXMgaW4gdGhlaXIgdmF1bHQgYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QuaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBtYW5pZmVzdC5uYW1lYCwgZm9yIGRpc3BsYXkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QudmVyc2lvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2Ugd2hvc2Ugd29ya3NwYWNlIGNhcnJpZXMgdGhlIGJyb2FkY2FzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdG8gdHJpZ2dlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZTtcblxuICAvKipcbiAgICogVGhlIHBheWxvYWQgZGVzY3JpYmluZyB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkO1xufVxuXG4vKipcbiAqIFRyaWdnZXJlZCBvbmNlIGEgcGx1Z2luIGhhcyBmaW5pc2hlZCBsb2FkaW5nIEFORCBwdWJsaXNoZWQgZXZlcnkgQVBJIGl0IGRlY2xhcmVzLCBzbyBhIGxpc3RlbmVyIG1heSBjYWxsXG4gKiB0aG9zZSBBUElzIGltbWVkaWF0ZWx5LlxuICpcbiAqIE5hbWVzcGFjZWQgYnkgdGhlIHBhY2thZ2UgbmFtZSByYXRoZXIgdGhhbiBieSBhbiBhYmJyZXZpYXRpb24gb2YgaXQ6IHRoZSBldmVudCBpcyBnbG9iYWwgdG8gdGhlIHZhdWx0XG4gKiBhbmQgYWltZWQgYXQgcGx1Z2luIGF1dGhvcnMgd2hvIGhhdmUgbmV2ZXIgaGVhcmQgb2YgdGhpcyBsaWJyYXJ5LCBzbyB0aGUgcHJlZml4IGhhcyB0byBpZGVudGlmeSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUgPSAnb2JzaWRpYW4tZGV2LXV0aWxzOnBsdWdpbi1sb2FkZWQnO1xuXG4vKipcbiAqIFRyaWdnZXJlZCBhcyBhIHBsdWdpbiB1bmxvYWRzIFx1MjAxNCB3aGV0aGVyIHRoZSB1c2VyIGRpc2FibGVkIGl0LCB1bmluc3RhbGxlZCBpdCwgb3IgT2JzaWRpYW4gaXMgc2h1dHRpbmdcbiAqIGRvd24uIEl0cyBBUElzIGFyZSByZXZva2VkIGJ5IHRoZSB0aW1lIGEgbGlzdGVuZXIgcnVucy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FID0gJ29ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tdW5sb2FkZWQnO1xuXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcbiAgaW50ZXJmYWNlIFdvcmtzcGFjZSB7XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBhIHBsdWdpbiBmaW5pc2hpbmcgaXRzIGxvYWQsIG9yIHRvIG9uZSB1bmxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFNob3VsZCBiZSB7QGxpbmsgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FfSBvciB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayByZWNlaXZpbmcgdGhlIHBsdWdpbidzIHBheWxvYWQuXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgLypcbiAgICAgKiBBbiBhdWdtZW50YXRpb24gb2YgYW4gRVhJU1RJTkcgb3ZlcmxvYWQgc2V0IGhhcyB0byBzdGF5IGEgbWV0aG9kIHNpZ25hdHVyZS4gQSBwcm9wZXJ0eSBtZW1iZXIgZG9lcyBub3QgbWVyZ2UgaW50b1xuICAgICAqIGBXb3Jrc3BhY2Uub25gJ3Mgb3ZlcmxvYWRzLCBhbmQgVHlwZVNjcmlwdCBzYXlzIHNvIG5vd2hlcmUgbmVhciBoZXJlOiB0aGUgZGVjbGFyYXRpb24gaXRzZWxmIGNvbXBpbGVzLCBhbmQgZXZlcnlcbiAgICAgKiBjYWxsIHNpdGUgbG9zZXMgdGhlIHNpZ25hdHVyZSBpbnN0ZWFkIFx1MjAxNCBgb24oUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCAuLi4pYCBmYWlscyB3aXRoIFwidGhlIGxhc3Qgb3ZlcmxvYWQgZ2F2ZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgZXJyb3JcIi4gVGhlIHJ1bGUgcmVwb3J0cyB0aGlzIG9uZSB3aXRob3V0IGEgZml4IGZvciB0aGUgc2FtZSByZWFzb24sIHNvIHRoZSBkaXNhYmxlIGJlbG93IGlzIHRoZSBhbnN3ZXJcbiAgICAgKiByYXRoZXIgdGhhbiBhIGRlZmVycmFsLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSAtLSBBIHByb3BlcnR5IG1lbWJlciBkb2VzIG5vdCBtZXJnZSBpbnRvIGFuIGV4aXN0aW5nIG92ZXJsb2FkIHNldC4gU2VlIGFib3ZlLlxuICAgIG9uKG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZSwgY2FsbGJhY2s6IChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHVua25vd24sIGNvbnRleHQ/OiB1bmtub3duKTogRXZlbnRSZWY7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmlnZ2VycyBvbmUgb2YgdGhlIHR3byBsaWZlY3ljbGUgZXZlbnRzIG9uIHRoZSBhcHAncyB3b3Jrc3BhY2UuXG4gKlxuICogQSB0aGluIHR5cGVkIHdyYXBwZXIgb3ZlciBgV29ya3NwYWNlLnRyaWdnZXJgLCB3aGljaCBhY2NlcHRzIGFueSBldmVudCBuYW1lIGFuZCBhbnkgYXJndW1lbnRzLCBzbyB0aGF0XG4gKiB0aGUgb25lIHBsYWNlIGEgcGF5bG9hZCBpcyBjb25zdHJ1Y3RlZCBpcyBjaGVja2VkIGFnYWluc3Qge0BsaW5rIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudChwYXJhbXM6IFRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudFBhcmFtcyk6IHZvaWQge1xuICBwYXJhbXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKHBhcmFtcy5uYW1lLCBwYXJhbXMucGF5bG9hZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHTyxNQUFNLDJCQUEyQjtBQU1qQyxNQUFNLDZCQUE2QjtBQWdDbkMsU0FBUyw0QkFBNEIsUUFBaUQ7QUFDM0YsU0FBTyxJQUFJLFVBQVUsUUFBUSxPQUFPLE1BQU0sT0FBTyxPQUFPO0FBQzFEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -532,4 +524,4 @@ export {
532
524
  PluginSettingsTabBase,
533
525
  SAVE_TO_FILE_CONTEXT
534
526
  };
535
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tc2V0dGluZ3MtdGFiLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVib3VuY2VyLFxuICBQbHVnaW4sXG4gIFNldHRpbmcsXG4gIFNldHRpbmdEZWZpbml0aW9uR3JvdXAsXG4gIFNldHRpbmdEZWZpbml0aW9uSXRlbSxcbiAgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIsXG4gIFNldHRpbmdHcm91cFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIENvbmRpdGlvbmFsS2V5cyxcbiAgRXhjZXB0LFxuICBQcm9taXNhYmxlLFxuICBSZWFkb25seURlZXBcbn0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgbWl4aW5Bc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgUGx1Z2luU2V0dGluZ1RhYixcbiAgc2V0VG9vbHRpcFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGVcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsdWUtY29tcG9uZW50LXdpdGgtY2hhbmdlLXRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0V4IH0gZnJvbSAnLi4vc2V0dGluZy1leC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi50cyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGVuc3VyZVdyYXBwZWQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnQtd3JhcHBlci50cyc7XG5pbXBvcnQgeyBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSB9IGZyb20gJy4uL3NldHRpbmctY29tcG9uZW50cy90ZXh0LWJhc2VkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsaWRhdG9yLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBhZG9wdFNldHRpbmdFeCB9IGZyb20gJy4uL3NldHRpbmctZXgudHMnO1xuaW1wb3J0IHsgaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB9IGZyb20gJy4uL3ZhbGlkYXRpb24udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIEEgY29udGV4dCBwYXNzZWQgdG8gdGhlIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uuc2F2ZVRvRmlsZX0gbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgU0FWRV9UT19GSUxFX0NPTlRFWFQgPSAnUGx1Z2luU2V0dGluZ3NUYWInO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2VkPzogKG5ld1ZhbHVlOiBSZWFkb25seURlZXA8VD4sIG9sZFZhbHVlOiBSZWFkb25seURlZXA8VD4pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHNldHRpbmcgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGVtcHR5LlxuICAgKiBBcHBsaWNhYmxlIG9ubHkgdG8gdGV4dC1iYXNlZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBwbGFjZWhvbGRlciBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gICAqIEFwcGxpY2FibGUgb25seSB0byB0ZXh0LWJhc2VkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgb3B0aW9ucyBmb3IgYFBsdWdpblNldHRpbmdzVGFiQmFzZS5iaW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZSBiZWluZyBib3VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uc0V4dGVuZGVkPFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgVUlWYWx1ZSxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdIHwgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPikgPT4gVUlWYWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0gd2l0aCB2YWx1ZSBjb252ZXJ0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lIGJlaW5nIGJvdW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZUJpbmRFeHRlbmRlZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLmJpbmR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudFxuPiBleHRlbmRzIEJpbmRPcHRpb25zPFVJVmFsdWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IENvbmRpdGlvbmFsS2V5czxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT47XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gYmluZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpbnN0YW5jZSAobmVlZGVkIGJ5IE9ic2lkaWFuJ3MgUGx1Z2luU2V0dGluZ1RhYikuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nRXh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlYXJjaCB0ZXJtcyBmb3IgdGhlIHNldHRpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2V0dGluZy4gVXNlZCBmb3IgcmVuZGVyaW5nOyB0aGUgdGV4dCBjb250ZW50IG9mIGEgZnJhZ21lbnQgaXMgdXNlZCBmb3Igc2VhcmNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzYz86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNldHRpbmcgcm93IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGZvcm0gaXMgcmUtZXZhbHVhdGVkIG9uIGV2ZXJ5IHJlbmRlciBBTkQgb24gZXZlcnkge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZWZyZXNoRG9tU3RhdGV9XG4gICAqIGNhbGwsIHNvIGl0IGNhbiByZWZsZWN0IHJ1bnRpbWUgc3RhdGUuIE9ic2lkaWFuIGFwcGxpZXMgaXQgd2l0aCBgU2V0dGluZy5zZXREaXNhYmxlZGAsIHdoaWNoIGRpc2FibGVzIHRoZVxuICAgKiByb3cgYW5kIGV2ZXJ5IGNvbXBvbmVudCByZWdpc3RlcmVkIG9uIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzZXR0aW5nLiBVc2VkIGZvciByZW5kZXJpbmcgYW5kIHNlYXJjaC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc2V0dGluZyByb3cgaW1wZXJhdGl2ZWx5LCB0eXBpY2FsbHkgdmlhIHRoZSB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gICAqXG4gICAqIFRoZSBzZXR0aW5nIE9ic2lkaWFuIGNyZWF0ZXMgZm9yIHRoZSByb3cgaXMgYWRvcHRlZCBpbnRvIGEge0BsaW5rIFNldHRpbmdFeH0gYmVmb3JlIGl0IGlzIGhhbmRlZCBvdmVyLCBzb1xuICAgKiBhbiBpbXBlcmF0aXZlIHJvdyBib2R5IGNhcnJpZXMgb3ZlciB1bmNoYW5nZWQuIE1heSByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLCBpbnZva2VkIGJlZm9yZSB0aGUgcm93IGlzXG4gICAqIHRvcm4gZG93biBvciByZS1yZW5kZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIGdyb3VwIC0gVGhlIGdyb3VwIHRoZSBzZXR0aW5nIGJlbG9uZ3MgdG8uXG4gICAqIEByZXR1cm5zIEFuIG9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcmVhZG9ubHkgcmVuZGVyOiAoc2V0dGluZzogU2V0dGluZ0V4LCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIGlzIGluY2x1ZGVkIGluIHRoZSBzZXR0aW5ncyBzZWFyY2guIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaGFibGU/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIHJvdyBpcyByZW5kZXJlZC4gQSBmdW5jdGlvbiBmb3JtIGlzIHJlLWV2YWx1YXRlZCBvbiBldmVyeSByZW5kZXIgYW5kIG9uXG4gICAqIGV2ZXJ5IHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UucmVmcmVzaERvbVN0YXRlfSBjYWxsLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2Uuc2V0dGluZ0dyb3VwRXh9LlxuICpcbiAqIEV2ZXJ5IG1lbWJlciBvZiB7QGxpbmsgU2V0dGluZ0RlZmluaXRpb25Hcm91cH0gZXhjZXB0IGl0cyBkaXNjcmltaW5hdG9yLCB3aGljaFxuICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nR3JvdXBFeH0gc2V0cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMgPSBFeGNlcHQ8U2V0dGluZ0RlZmluaXRpb25Hcm91cCwgJ3R5cGUnPjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSBVSSBjb21wb25lbnQncyB2YWx1ZS5cbiAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUgYmVpbmcgYm91bmQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+O1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXAge1xuICB2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQ6IFtwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZ107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5vblNhdmVTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZW5kZXJTZXR0aW5nRXh9LlxuICovXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlUmVuZGVyU2V0dGluZ0V4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBncm91cCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBncm91cDogU2V0dGluZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZyBPYnNpZGlhbiBjcmVhdGVkIGZvciB0aGUgcm93LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZztcblxuICAvKipcbiAgICogVGhlIHBhcmFtcyB0aGUgcm93IHdhcyBkZWNsYXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ0V4UGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBvbkxvYWRTZXR0aW5nczogKGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBpc0luaXRpYWxMb2FkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2F2ZVNldHRpbmdzOiAoXG4gICAgbmV3U3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncz47XG59XG5cbi8qKlxuICogT3ducyB0aGUgdGFiJ3Mgc3Vic2NyaXB0aW9ucyB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50LlxuICpcbiAqIFRoZSBzdWJzY3JpcHRpb25zIGxpdmUgaW4ge0BsaW5rIG9ubG9hZH0gcmF0aGVyIHRoYW4gYXQgZWFjaCByZW5kZXIsIHNvIHRoYXQgYSBsb2FkL3VubG9hZCBwYWlyIHJlZ2lzdGVyc1xuICogdGhlbSBleGFjdGx5IG9uY2UuIFJlZ2lzdGVyaW5nIHRoZW0gcGVyIHJlbmRlciBpbnN0ZWFkIHdvdWxkIGFjY3VtdWxhdGUgYSBmcmVzaCBwYWlyIG9uIGV2ZXJ5IHJlbmRlciBjeWNsZSxcbiAqIGJlY2F1c2Uge0BsaW5rIENvbXBvbmVudEV4LmxvYWR9IGVhcmx5LXJldHVybnMgb25jZSB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgbm90aGluZyByZXNldHMgaW4gYmV0d2Vlbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5jbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCdzIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgeyBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudCB9ID0gdGhpcy5wYXJhbXM7XG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMsIHBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpID0+IHRoaXMucGFyYW1zLm9uTG9hZFNldHRpbmdzKGxvYWRlZFN0YXRlLCBpc0luaXRpYWxMb2FkKSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5wYXJhbXMub25TYXZlU2V0dGluZ3MobmV3U3RhdGUsIG9sZFN0YXRlLCBjb250ZXh0KSkpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmdzIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBQcm92aWRlcyBhIG1ldGhvZCBmb3IgYmluZGluZyB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxpbmcgY2hhbmdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NUYWJCYXNlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8UGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXA+KCkoUGx1Z2luU2V0dGluZ1RhYikge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYiBpcyBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGlzIG9wZW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBtYW5hZ2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBBIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2F2ZVNldHRpbmdzRGVib3VuY2VUaW1lb3V0SW5NaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBERUZBVUxUID0gMjAwMDtcbiAgICByZXR1cm4gREVGQVVMVDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIGN1cnJlbnRSZW5kZXJDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZVNldHRpbmdzRGVib3VuY2VkOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuXG4gIHByaXZhdGUgZ2V0IHBsdWdpblNldHRpbmdzKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3M8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLmlucHV0VmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyRWwsIENzc0NsYXNzLlBsdWdpblNldHRpbmdzVGFiKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCA9IGRlYm91bmNlKFxuICAgICAgY29udmVydEFzeW5jVG9TeW5jKCgpID0+IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCkpLFxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICk7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+KHtcbiAgICAgIG9uTG9hZFNldHRpbmdzOiAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25Mb2FkU2V0dGluZ3MobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpLFxuICAgICAgb25TYXZlU2V0dGluZ3M6IChuZXdTdGF0ZSwgb2xkU3RhdGUsIGNvbnRleHQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25TYXZlU2V0dGluZ3MoeyBjb250ZXh0LCBuZXdTdGF0ZSwgb2xkU3RhdGUgfSksXG4gICAgICBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudFxuICA+KFxuICAgIHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kRXh0ZW5kZWRQYXJhbXM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudCwgUHJvcGVydHlOYW1lPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50LCBQcm9wZXJ0eU5hbWU+IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gYmluZCBvdmVybG9hZCBzaGFyZXMgdGhlIEJpbmQqIHBhcmFtIGZhbWlseS5cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICB2YWx1ZUNvbXBvbmVudCxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0gcGFyYW1zO1xuICAgIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0ge1xuICAgICAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodmFsdWU6IFVJVmFsdWUpOiBQcm9wZXJ0eVR5cGUgPT4gdmFsdWUgYXMgUHJvcGVydHlUeXBlLFxuICAgICAgb25DaGFuZ2VkOiBub29wLFxuICAgICAgcGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyOiAodmFsdWU6IFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+KTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgICAgc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk6IHRydWUsXG4gICAgICBzaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzOiB0cnVlLFxuICAgICAgc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNFeHRlbnNpb246IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckVsID0gZ2V0VmFsaWRhdG9yQ29tcG9uZW50KHZhbHVlQ29tcG9uZW50KT8udmFsaWRhdG9yRWw7XG5cbiAgICBjb25zdCB0ZXh0QmFzZWRDb21wb25lbnQgPSBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSh2YWx1ZUNvbXBvbmVudCk7XG5cbiAgICBjb25zdCByZWFkb25seVZhbHVlID0gdGhpcy5nZXRQbHVnaW5TZXR0aW5nc1Byb3BlcnR5KHByb3BlcnR5TmFtZSk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LmRlZmF1bHRTZXR0aW5ncyBhcyBQbHVnaW5TZXR0aW5ncztcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdO1xuICAgIGNvbnN0IGRlZmF1bHRDb21wb25lbnRWYWx1ZSA9IG9wdGlvbnNFeHRlbnNpb24ucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKGRlZmF1bHRWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPik7XG4gICAgdGV4dEJhc2VkQ29tcG9uZW50Py5zZXRQbGFjZWhvbGRlclZhbHVlKGRlZmF1bHRDb21wb25lbnRWYWx1ZSk7XG5cbiAgICBsZXQgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgICBsZXQgdG9vbHRpcEVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCB0b29sdGlwQ29udGVudEVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh2YWxpZGF0b3JFbCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGVuc3VyZVdyYXBwZWQodmFsaWRhdG9yRWwpO1xuICAgICAgdG9vbHRpcEVsID0gd3JhcHBlci5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEVsLCBbQ3NzQ2xhc3MuVG9vbHRpcCwgQ3NzQ2xhc3MuVG9vbHRpcFZhbGlkYXRvcl0pO1xuICAgICAgdG9vbHRpcENvbnRlbnRFbCA9IHRvb2x0aXBFbC5jcmVhdGVTcGFuKCk7XG4gICAgICBjb25zdCB0b29sdGlwQXJyb3dFbCA9IHRvb2x0aXBFbC5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEFycm93RWwsIENzc0NsYXNzLlRvb2x0aXBBcnJvdyk7XG4gICAgICB0b29sdGlwRWwuaGlkZSgpO1xuICAgICAgd3JhcHBlci5hcHBlbmQodG9vbHRpcEVsKTtcbiAgICB9XG5cbiAgICByZWdpc3RlckFzeW5jRXZlbnQoXG4gICAgICB0aGlzLmdldFJlbmRlckNvbXBvbmVudCgpLFxuICAgICAgdGhpcy5vbigndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJywgKGFub3RoZXJQcm9wZXJ0eU5hbWUsIGFub3RoZXJWYWxpZGF0aW9uTWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSBhbm90aGVyUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhbm90aGVyVmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGxldCBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuICAgIGxldCBzaG91bGRSZXZlcnRUb0RlZmF1bHRWYWx1ZU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgaWYgKHRleHRCYXNlZENvbXBvbmVudCAmJiBvcHRpb25zRXh0ZW5zaW9uLnNob3VsZFNob3dQbGFjZWhvbGRlckZvckRlZmF1bHRWYWx1ZXMgJiYgaXNEZWVwRXF1YWwocmVhZG9ubHlWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgdGV4dEJhc2VkQ29tcG9uZW50LmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKG9wdGlvbnNFeHRlbnNpb24ucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKHJlYWRvbmx5VmFsdWUpKTtcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkU2tpcE9uQ2hhbmdlID0gZmFsc2U7XG4gICAgY29uc3QgVVBEQVRFX1ZBTElEQVRPUl9FTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDtcbiAgICBjb25zdCB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsKCk7XG4gICAgICB9KTtcbiAgICB9LCBVUERBVEVfVkFMSURBVE9SX0VMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHZhbHVlQ29tcG9uZW50Lm9uQ2hhbmdlKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAodWlWYWx1ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBPbkNoYW5nZSkge1xuICAgICAgICBzaG91bGRTa2lwT25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgbGV0IG5ld1ZhbHVlOiBQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2hvdWxkU2V0UHJvcGVydHkgPSB0cnVlO1xuICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSAhIXRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpICYmIG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk7XG4gICAgICBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IG9wdGlvbnNFeHRlbnNpb24uY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyKHVpVmFsdWUpO1xuICAgICAgICBpZiAoaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlcihjb252ZXJ0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGNvbnZlcnRlZFZhbHVlLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICAgIHNob3VsZFNldFByb3BlcnR5ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBjb252ZXJ0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkU2V0UHJvcGVydHkpIHtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbmV3VmFsdWUgYXMgUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSk7XG4gICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzICYmICF0ZXh0QmFzZWRDb21wb25lbnQuaXNFbXB0eSgpICYmIGlzRGVlcEVxdWFsKG5ld1ZhbHVlLCBkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIGlmIChzaG91bGRTZXRQcm9wZXJ0eSkge1xuICAgICAgICBhd2FpdCBvcHRpb25zRXh0ZW5zaW9uLm9uQ2hhbmdlZChuZXdWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPiwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZWQoKTtcbiAgICB9KSk7XG5cbiAgICB2YWxpZGF0b3JFbD8uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHZhbGlkYXRpb25NZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2VzW3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuXG4gICAgcmV0dXJuIHZhbHVlQ29tcG9uZW50O1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsaWRhdG9yRWwoKTogdm9pZCB7XG4gICAgICBpZiAoIXZhbGlkYXRvckVsPy5pc0FjdGl2ZUVsZW1lbnQoKSkge1xuICAgICAgICBpZiAoc2hvdWxkRW1wdHlPbkJsdXIpIHtcbiAgICAgICAgICBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKCF0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRleHRCYXNlZENvbXBvbmVudD8uZW1wdHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgICBzaG91bGRSZXZlcnRUb0RlZmF1bHRWYWx1ZU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBzaG91bGRTa2lwT25DaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgdmFsdWVDb21wb25lbnQuc2V0VmFsdWUoZGVmYXVsdENvbXBvbmVudFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0b3JFbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKHRvb2x0aXBDb250ZW50RWwpO1xuXG4gICAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2UgPT09ICcnKSB7XG4gICAgICAgIHZhbGlkYXRvckVsLnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICAgICAgdmFsaWRhdG9yRWwuY2hlY2tWYWxpZGl0eSgpO1xuICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IHZhbGlkYXRvckVsLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICB2YWxpZGF0b3JFbC5zZXRDdXN0b21WYWxpZGl0eSh2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBpZiAob3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgdG9vbHRpcENvbnRlbnRFbC50ZXh0Q29udGVudCA9IHZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICB0b29sdGlwRWw/LnRvZ2dsZSghIXZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgc2V0VG9vbHRpcCh2YWxpZGF0b3JFbCwgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5TGVnYWN5KCk7XG4gIH1cblxuICAvKipcbiAgICogTGVnYWN5IHdheSB0byByZW5kZXIgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIgaW1wZXJhdGl2ZWx5LlxuICAgKlxuICAgKiBUaGUgcHJlLWRlY2xhcmF0aXZlIGZhbGxiYWNrOiBPYnNpZGlhbiBvbmx5IGNhbGxzIGl0IHdoZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uc30gcmV0dXJucyBhbiBlbXB0eVxuICAgKiBhcnJheSwgaS5lLiB3aGVuIHRoZSBjb25zdW1lciBoYXMgbm90IG92ZXJyaWRkZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9LiBTdWNoIGEgY29uc3VtZXJcbiAgICogb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIGFuZCBidWlsZHMgdGhlIFVJIHdpdGgge0BsaW5rIFNldHRpbmdFeH0gYW5kIHtAbGluayBiaW5kfS5cbiAgICovXG4gIHB1YmxpYyBkaXNwbGF5TGVnYWN5KCk6IHZvaWQge1xuICAgIHRoaXMuYmVnaW5SZW5kZXJDeWNsZSgpO1xuICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgdmFsdWUgYmFja2luZyBhIG5hdGl2ZSBgY29udHJvbGAgc2V0dGluZyBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBPYnNpZGlhbiBjYWxscyBpdCBvbiBldmVyeSByZW5kZXIgb2YgYSBgY29udHJvbGAtdHlwZSBkZWZpbml0aW9uLiBUaGUgaW5oZXJpdGVkIGltcGxlbWVudGF0aW9uIHJlYWRzXG4gICAqIGBwbHVnaW4uc2V0dGluZ3NgLCB3aGljaCBhIHBsdWdpbiBidWlsdCBvbiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlfSBuZXZlciBwb3B1bGF0ZXMsIHNvIGl0IGlzXG4gICAqIHJvdXRlZCB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50IGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Q29udHJvbFZhbHVlKGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShjYXN0VG88U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlY2xhcmF0aXZlIHNldHRpbmcgZGVmaW5pdGlvbnMgcmVuZGVyZWQgYnkgT2JzaWRpYW4gMS4xMysuXG4gICAqXG4gICAqIERlbGVnYXRlcyB0byB7QGxpbmsgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtc30uIFdoZW4gYSBjb25zdW1lciBoYXMgbm90IG92ZXJyaWRkZW4gdGhhdCBob29rIGl0IHJldHVybnNcbiAgICogYW4gZW1wdHkgYXJyYXksIGFuZCBPYnNpZGlhbiBmYWxscyBiYWNrIHRvIHRoZSBpbXBlcmF0aXZlIHtAbGluayBkaXNwbGF5TGVnYWN5fSBwYXRoLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBkZWZpbml0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRTZXR0aW5nRGVmaW5pdGlvbnMoKTogU2V0dGluZ0RlZmluaXRpb25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdEZWZpbml0aW9uSXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBoaWRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmhpZGUoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZC5jYW5jZWwoKTtcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmVuZFJlbmRlckN5Y2xlKCk7XG4gICAgdGhpcy5jb21wb25lbnQudW5sb2FkKCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5oaWRlQXN5bmMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gdGhlIHNldHRpbmdzIHRhYiBpcyBiZWluZyBoaWRkZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgdGFiIGlzIGhpZGRlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoaWRlQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zYXZlVG9GaWxlKFNBVkVfVE9fRklMRV9DT05URVhUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1yZW5kZXJzIHRoZSBzZXR0aW5ncyB0YWIgYWZ0ZXIgdGhlIHVuZGVybHlpbmcgc3RhdGUgY2hhbmdlZC5cbiAgICpcbiAgICogUmVidWlsZHMgdGhlIGRlZmluaXRpb25zIGFuZCByZS1yZW5kZXJzLCB3aGljaCBjb3ZlcnMgYm90aCBwYXRoczogT2JzaWRpYW4gcmVuZGVycyB0aGUgZGVjbGFyYXRpdmVcbiAgICogZGVmaW5pdGlvbnMgd2hlbiB7QGxpbmsgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtc30gcHJvdmlkZXMgdGhlbSwgYW5kIGZhbGxzIGJhY2sgdG9cbiAgICoge0BsaW5rIGRpc3BsYXlMZWdhY3l9IHdoZW4gaXQgZG9lcyBub3QuIE5vdGhpbmcgaXMgcmVuZGVyZWQgd2hpbGUgdGhlIHRhYiBpcyBub3QgdGhlIG9uZSBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFVzZSBpdCBvbmx5IGZvciBjaGFuZ2VzIHRoYXQgYWx0ZXIgdGhlIFNUUlVDVFVSRSBvZiB0aGUgdGFiIFx1MjAxNCByb3dzIGFkZGVkIG9yIHJlbW92ZWQuIFdoZW4gb25seSBhXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMuZGlzYWJsZWR9IC8ge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy52aXNpYmxlfVxuICAgKiBwcmVkaWNhdGUgaGFzIHRvIGJlIHJlLWV2YWx1YXRlZCwgY2FsbCB0aGUgbXVjaCBjaGVhcGVyIHtAbGluayByZWZyZXNoRG9tU3RhdGV9IGluc3RlYWQsIHdoaWNoIHRvZ2dsZXMgdGhlXG4gICAqIHJlbmRlcmVkIERPTSBpbiBwbGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgdGhlIHZhbHVlIG9mIGEgbmF0aXZlIGBjb250cm9sYCBzZXR0aW5nIGRlZmluaXRpb24uXG4gICAqXG4gICAqIFRoZSBjb3VudGVycGFydCBvZiB7QGxpbmsgZ2V0Q29udHJvbFZhbHVlfTogaXQgcm91dGVzIHRoZSB3cml0ZSB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50IGluc3RlYWQgb2YgdGhlXG4gICAqIGluaGVyaXRlZCBgcGx1Z2luLnNhdmVEYXRhYCBwYXRoLCBzbyB2YWxpZGF0aW9uLCB0cmFuc2Zvcm1lcnMgYW5kIHRoZSBkZWJvdW5jZWQgc2F2ZSBhbGwgYXBwbHkgYXMgdGhleSBkb1xuICAgKiBmb3IgYSB7QGxpbmsgYmluZH0tZWQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwZXJzaXN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhbHVlIGlzIHNldC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBzZXRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHlwZSBQcm9wZXJ0eU5hbWUgPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPjtcbiAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KGNhc3RUbzxQcm9wZXJ0eU5hbWU+KGtleSksIGNhc3RUbzxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPih2YWx1ZSkpO1xuICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIuXG4gICAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW5UYWIodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlY2xhcmF0aXZlIHNldHRpbmcgZGVmaW5pdGlvbnMgZm9yIHRoZSB0YWIgKE9ic2lkaWFuIDEuMTMrKS5cbiAgICpcbiAgICogQ29uc3VtZXJzIG92ZXJyaWRlIHRoaXMsIHR5cGljYWxseSBidWlsZGluZyBlYWNoIHJvdyB3aXRoIHtAbGluayBzZXR0aW5nRXh9IGFuZCB7QGxpbmsgYmluZH0gYW5kIGdyb3VwaW5nXG4gICAqIHRoZW0gd2l0aCBgc2V0dGluZ0dyb3VwRXhgLiBSZXR1cm5pbmcgYW4gZW1wdHkgYXJyYXkgXHUyMDE0IHRoZSBkZWZhdWx0IFx1MjAxNCBtYWtlcyBPYnNpZGlhbiBmYWxsIGJhY2sgdG8gdGhlXG4gICAqIGltcGVyYXRpdmUge0BsaW5rIGRpc3BsYXlMZWdhY3l9IHBhdGguXG4gICAqXG4gICAqIE1VU1QgYmUgYSBwdXJlIGJ1aWxkZXIuIE9ic2lkaWFuIGNhbGxzIGl0IHdoZW4gdGhlIHRhYiBpcyByZWdpc3RlcmVkIChgYWRkU2V0dGluZ1RhYmApLCBsb25nIGJlZm9yZSB0aGVcbiAgICogdGFiIGlzIGV2ZXIgb3BlbmVkLCBpbiBvcmRlciB0byBpbmRleCB0aGUgc2V0dGluZ3MgZm9yIHNlYXJjaC4gQW55dGhpbmcgd2l0aCBhIHNpZGUgZWZmZWN0IGJlbG9uZ3MgaW5zaWRlXG4gICAqIGEgcm93J3Mge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy5yZW5kZXJ9IGNhbGxiYWNrLCB3aGljaCBydW5zIG9ubHkgd2hlbiB0aGUgcm93IGlzXG4gICAqIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBkZWZpbml0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zKCk6IFNldHRpbmdEZWZpbml0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2xvYWRlZFN0YXRlIC0gVGhlIGxvYWRlZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9pc0luaXRpYWxMb2FkIC0gV2hldGhlciB0aGUgc2V0dGluZ3MgYXJlIGJlaW5nIGxvYWRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIGxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRTZXR0aW5ncyhfbG9hZGVkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sIF9pc0luaXRpYWxMb2FkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2YWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSByZXZhbGlkYXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlcyA9IGF3YWl0IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQucmV2YWxpZGF0ZSgpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlVmFsaWRhdGlvbnModmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBzZWFyY2gtaW5kZXhhYmxlIGRlY2xhcmF0aXZlIHJvdyB0aGF0IGlzIHJlbmRlcmVkIGltcGVyYXRpdmVseS5cbiAgICpcbiAgICogVGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBkZWNsYXJhdGl2ZSBBUEkgYW5kIHRoaXMgbGlicmFyeSdzIGltcGVyYXRpdmUgYnVpbGRpbmcgYmxvY2tzOiBPYnNpZGlhbiBvd25zIHRoZSByb3cgKHNvIGl0XG4gICAqIGluZGV4ZXMgaXQgZm9yIHNlYXJjaCBhbmQgZXZhbHVhdGVzIGl0cyB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLnZpc2libGV9IC9cbiAgICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy5kaXNhYmxlZH0gcHJlZGljYXRlcyBvbiBldmVyeVxuICAgKiB7QGxpbmsgcmVmcmVzaERvbVN0YXRlfSksIHdoaWxlIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMucmVuZGVyfSBmaWxscyBpdCBpbiB3aXRoXG4gICAqIHtAbGluayBTZXR0aW5nRXh9IGFkZGVycyBhbmQge0BsaW5rIGJpbmR9IGV4YWN0bHkgYXMgYW4gaW1wZXJhdGl2ZSB0YWIgd291bGQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcm93IHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBzZXR0aW5nRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMpOiBTZXR0aW5nRGVmaW5pdGlvblJlbmRlciB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTZXR0aW5nRGVmaW5pdGlvblJlbmRlcj4oe1xuICAgICAgYWxpYXNlczogcGFyYW1zLmFsaWFzZXMsXG4gICAgICBkZXNjOiBwYXJhbXMuZGVzYyxcbiAgICAgIGRpc2FibGVkOiBwYXJhbXMuZGlzYWJsZWQsXG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIHJlbmRlcjogKHNldHRpbmc6IFNldHRpbmcsIGdyb3VwOiBTZXR0aW5nR3JvdXApID0+IHRoaXMucmVuZGVyU2V0dGluZ0V4KHsgZ3JvdXAsIHNldHRpbmcsIHNldHRpbmdFeFBhcmFtczogcGFyYW1zIH0pLFxuICAgICAgc2VhcmNoYWJsZTogcGFyYW1zLnNlYXJjaGFibGUsXG4gICAgICB2aXNpYmxlOiBwYXJhbXMudmlzaWJsZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGRlY2xhcmF0aXZlIGhlYWRpbmcgZ3JvdXAuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJhdGl2ZSBjb3VudGVycGFydCBvZiBgU2V0dGluZ0dyb3VwRXhgOiB3aGVyZSB0aGF0IGNsYXNzIGFwcGVuZHMgYSBncm91cCB0byBhIGNvbnRhaW5lclxuICAgKiBpbXBlcmF0aXZlbHksIHRoaXMgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBPYnNpZGlhbiByZW5kZXJzLCBzbyBhIGdyb3VwLXN0cnVjdHVyZWQgdGFiIGtlZXBzIGl0cyBzaGFwZVxuICAgKiBhZnRlciB0aGUgbWlncmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGdyb3VwIHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIGdyb3VwIGRlZmluaXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0dGluZ0dyb3VwRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nR3JvdXBFeFBhcmFtcyk6IFNldHRpbmdEZWZpbml0aW9uR3JvdXAge1xuICAgIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2V0dGluZ0RlZmluaXRpb25Hcm91cD4oe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgdHlwZTogJ2dyb3VwJ1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiZWdpblJlbmRlckN5Y2xlKCk6IHZvaWQge1xuICAgIHRoaXMuZW5kUmVuZGVyQ3ljbGUoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVJlbmRlckNvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZW5kZXJDb21wb25lbnQoKTogQ29tcG9uZW50RXgge1xuICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5jb21wb25lbnQubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5hZGRDaGlsZChuZXcgQ29tcG9uZW50RXgoKSk7XG4gIH1cblxuICBwcml2YXRlIGVuZFJlbmRlckN5Y2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudDtcbiAgICBpZiAoIXJlbmRlckNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IG51bGw7XG4gICAgdGhpcy5jb21wb25lbnQucmVtb3ZlQ2hpbGQocmVuZGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWVcbiAgKTogUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMucGx1Z2luU2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgcmV0dXJuIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gYXMgUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJDb21wb25lbnQoKTogQ29tcG9uZW50RXgge1xuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJDb21wb25lbnQoKTtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvblNhdmVTZXR0aW5ncyhwYXJhbXM6IFBsdWdpblNldHRpbmdzVGFiQmFzZU9uU2F2ZVNldHRpbmdzUGFyYW1zPFBsdWdpblNldHRpbmdzPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG9sZFN0YXRlOiBfb2xkU3RhdGVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmIChjb250ZXh0ID09PSBTQVZFX1RPX0ZJTEVfQ09OVEVYVCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWYWxpZGF0aW9ucyhuZXdTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgYXMgUmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUgLS0gTWlycm9ycyBPYnNpZGlhbidzIGBTZXR0aW5nRGVmaW5pdGlvblJlbmRlci5yZW5kZXJgLCB3aG9zZSBjbGVhbnVwIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLlxuICBwcml2YXRlIHJlbmRlclNldHRpbmdFeChwYXJhbXM6IFBsdWdpblNldHRpbmdzVGFiQmFzZVJlbmRlclNldHRpbmdFeFBhcmFtcyk6ICgoKSA9PiB2b2lkKSB8IHZvaWQge1xuICAgIGNvbnN0IHJvd0NvbXBvbmVudCA9IHRoaXMuY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk7XG4gICAgY29uc3QgcHJldmlvdXNSZW5kZXJDb21wb25lbnQgPSB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQ7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gcm93Q29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBwYXJhbXMuc2V0dGluZ0V4UGFyYW1zLnJlbmRlcihhZG9wdFNldHRpbmdFeChwYXJhbXMuc2V0dGluZyksIHBhcmFtcy5ncm91cCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW1vdmVDaGlsZChyb3dDb21wb25lbnQpO1xuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gcHJldmlvdXNSZW5kZXJDb21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVWYWxpZGF0aW9ucyh2YWxpZGF0aW9uTWVzc2FnZXM6IFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgdmFsaWRhdGlvbk1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRpb25NZXNzYWdlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJpZ2dlckFzeW5jKCd2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQnLCBwcm9wZXJ0eU5hbWUsIHZhbGlkYXRpb25NZXNzYWdlIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx3QkFBd0I7QUFDakM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFXUCxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGdCQUFnQjtBQUN6QixTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGtDQUFrQztBQUMzQyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDJCQUEyQjtBQUs3QixNQUFNLHVCQUF1QjtBQTRTcEMsTUFBTSx5Q0FBd0UsWUFBWTtBQUFBLEVBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEyRTtBQUM1RixVQUFNO0FBQ04sU0FB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
527
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tc2V0dGluZ3MtdGFiLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVib3VuY2VyLFxuICBQbHVnaW4sXG4gIFNldHRpbmcsXG4gIFNldHRpbmdEZWZpbml0aW9uR3JvdXAsXG4gIFNldHRpbmdEZWZpbml0aW9uSXRlbSxcbiAgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIsXG4gIFNldHRpbmdHcm91cFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIENvbmRpdGlvbmFsS2V5cyxcbiAgRXhjZXB0LFxuICBQcm9taXNhYmxlLFxuICBSZWFkb25seURlZXBcbn0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgbWl4aW5Bc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgUGx1Z2luU2V0dGluZ1RhYixcbiAgc2V0VG9vbHRpcFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGVcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsdWUtY29tcG9uZW50LXdpdGgtY2hhbmdlLXRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0V4IH0gZnJvbSAnLi4vc2V0dGluZy1leC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi50cyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGVuc3VyZVdyYXBwZWQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnQtd3JhcHBlci50cyc7XG5pbXBvcnQgeyBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSB9IGZyb20gJy4uL3NldHRpbmctY29tcG9uZW50cy90ZXh0LWJhc2VkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsaWRhdG9yLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBhZG9wdFNldHRpbmdFeCB9IGZyb20gJy4uL3NldHRpbmctZXgudHMnO1xuaW1wb3J0IHsgaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB9IGZyb20gJy4uL3ZhbGlkYXRpb24udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIEEgY29udGV4dCBwYXNzZWQgdG8gdGhlIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uuc2F2ZVRvRmlsZX0gbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgU0FWRV9UT19GSUxFX0NPTlRFWFQgPSAnUGx1Z2luU2V0dGluZ3NUYWInO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2VkPzogKG5ld1ZhbHVlOiBSZWFkb25seURlZXA8VD4sIG9sZFZhbHVlOiBSZWFkb25seURlZXA8VD4pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHNldHRpbmcgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGVtcHR5LlxuICAgKiBBcHBsaWNhYmxlIG9ubHkgdG8gdGV4dC1iYXNlZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBwbGFjZWhvbGRlciBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gICAqIEFwcGxpY2FibGUgb25seSB0byB0ZXh0LWJhc2VkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgb3B0aW9ucyBmb3IgYFBsdWdpblNldHRpbmdzVGFiQmFzZS5iaW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZSBiZWluZyBib3VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uc0V4dGVuZGVkPFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgVUlWYWx1ZSxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdIHwgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPikgPT4gVUlWYWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0gd2l0aCB2YWx1ZSBjb252ZXJ0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lIGJlaW5nIGJvdW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZUJpbmRFeHRlbmRlZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLmJpbmR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudFxuPiBleHRlbmRzIEJpbmRPcHRpb25zPFVJVmFsdWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IENvbmRpdGlvbmFsS2V5czxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT47XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gYmluZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpbnN0YW5jZSAobmVlZGVkIGJ5IE9ic2lkaWFuJ3MgUGx1Z2luU2V0dGluZ1RhYikuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nRXh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlYXJjaCB0ZXJtcyBmb3IgdGhlIHNldHRpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2V0dGluZy4gVXNlZCBmb3IgcmVuZGVyaW5nOyB0aGUgdGV4dCBjb250ZW50IG9mIGEgZnJhZ21lbnQgaXMgdXNlZCBmb3Igc2VhcmNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzYz86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNldHRpbmcgcm93IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGZvcm0gaXMgcmUtZXZhbHVhdGVkIG9uIGV2ZXJ5IHJlbmRlciBBTkQgb24gZXZlcnkge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZWZyZXNoRG9tU3RhdGV9XG4gICAqIGNhbGwsIHNvIGl0IGNhbiByZWZsZWN0IHJ1bnRpbWUgc3RhdGUuIE9ic2lkaWFuIGFwcGxpZXMgaXQgd2l0aCBgU2V0dGluZy5zZXREaXNhYmxlZGAsIHdoaWNoIGRpc2FibGVzIHRoZVxuICAgKiByb3cgYW5kIGV2ZXJ5IGNvbXBvbmVudCByZWdpc3RlcmVkIG9uIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzZXR0aW5nLiBVc2VkIGZvciByZW5kZXJpbmcgYW5kIHNlYXJjaC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc2V0dGluZyByb3cgaW1wZXJhdGl2ZWx5LCB0eXBpY2FsbHkgdmlhIHRoZSB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gICAqXG4gICAqIFRoZSBzZXR0aW5nIE9ic2lkaWFuIGNyZWF0ZXMgZm9yIHRoZSByb3cgaXMgYWRvcHRlZCBpbnRvIGEge0BsaW5rIFNldHRpbmdFeH0gYmVmb3JlIGl0IGlzIGhhbmRlZCBvdmVyLCBzb1xuICAgKiBhbiBpbXBlcmF0aXZlIHJvdyBib2R5IGNhcnJpZXMgb3ZlciB1bmNoYW5nZWQuIE1heSByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLCBpbnZva2VkIGJlZm9yZSB0aGUgcm93IGlzXG4gICAqIHRvcm4gZG93biBvciByZS1yZW5kZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIGdyb3VwIC0gVGhlIGdyb3VwIHRoZSBzZXR0aW5nIGJlbG9uZ3MgdG8uXG4gICAqIEByZXR1cm5zIEFuIG9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcmVhZG9ubHkgcmVuZGVyOiAoc2V0dGluZzogU2V0dGluZ0V4LCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIGlzIGluY2x1ZGVkIGluIHRoZSBzZXR0aW5ncyBzZWFyY2guIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaGFibGU/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIHJvdyBpcyByZW5kZXJlZC4gQSBmdW5jdGlvbiBmb3JtIGlzIHJlLWV2YWx1YXRlZCBvbiBldmVyeSByZW5kZXIgYW5kIG9uXG4gICAqIGV2ZXJ5IHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UucmVmcmVzaERvbVN0YXRlfSBjYWxsLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2Uuc2V0dGluZ0dyb3VwRXh9LlxuICpcbiAqIEV2ZXJ5IG1lbWJlciBvZiB7QGxpbmsgU2V0dGluZ0RlZmluaXRpb25Hcm91cH0gZXhjZXB0IGl0cyBkaXNjcmltaW5hdG9yLCB3aGljaFxuICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nR3JvdXBFeH0gc2V0cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMgPSBFeGNlcHQ8U2V0dGluZ0RlZmluaXRpb25Hcm91cCwgJ3R5cGUnPjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSBVSSBjb21wb25lbnQncyB2YWx1ZS5cbiAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUgYmVpbmcgYm91bmQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+O1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXAge1xuICB2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQ6IFtwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZ107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5vblNhdmVTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZW5kZXJTZXR0aW5nRXh9LlxuICovXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlUmVuZGVyU2V0dGluZ0V4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBncm91cCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBncm91cDogU2V0dGluZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZyBPYnNpZGlhbiBjcmVhdGVkIGZvciB0aGUgcm93LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZztcblxuICAvKipcbiAgICogVGhlIHBhcmFtcyB0aGUgcm93IHdhcyBkZWNsYXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ0V4UGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBvbkxvYWRTZXR0aW5nczogKGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBpc0luaXRpYWxMb2FkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2F2ZVNldHRpbmdzOiAoXG4gICAgbmV3U3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncz47XG59XG5cbi8qKlxuICogT3ducyB0aGUgdGFiJ3Mgc3Vic2NyaXB0aW9ucyB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50LlxuICpcbiAqIFRoZSBzdWJzY3JpcHRpb25zIGxpdmUgaW4ge0BsaW5rIG9ubG9hZH0gcmF0aGVyIHRoYW4gYXQgZWFjaCByZW5kZXIsIHNvIHRoYXQgYSBsb2FkL3VubG9hZCBwYWlyIHJlZ2lzdGVyc1xuICogdGhlbSBleGFjdGx5IG9uY2UuIFJlZ2lzdGVyaW5nIHRoZW0gcGVyIHJlbmRlciBpbnN0ZWFkIHdvdWxkIGFjY3VtdWxhdGUgYSBmcmVzaCBwYWlyIG9uIGV2ZXJ5IHJlbmRlciBjeWNsZSxcbiAqIGJlY2F1c2Uge0BsaW5rIENvbXBvbmVudEV4LmxvYWR9IGVhcmx5LXJldHVybnMgb25jZSB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgbm90aGluZyByZXNldHMgaW4gYmV0d2Vlbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5jbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCdzIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgeyBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudCB9ID0gdGhpcy5wYXJhbXM7XG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMsIHBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpID0+IHRoaXMucGFyYW1zLm9uTG9hZFNldHRpbmdzKGxvYWRlZFN0YXRlLCBpc0luaXRpYWxMb2FkKSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5wYXJhbXMub25TYXZlU2V0dGluZ3MobmV3U3RhdGUsIG9sZFN0YXRlLCBjb250ZXh0KSkpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmdzIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBQcm92aWRlcyBhIG1ldGhvZCBmb3IgYmluZGluZyB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxpbmcgY2hhbmdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NUYWJCYXNlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8UGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXA+KCkoUGx1Z2luU2V0dGluZ1RhYikge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYiBpcyBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGlzIG9wZW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBtYW5hZ2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBBIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2F2ZVNldHRpbmdzRGVib3VuY2VUaW1lb3V0SW5NaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBERUZBVUxUID0gMjAwMDtcbiAgICByZXR1cm4gREVGQVVMVDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIGN1cnJlbnRSZW5kZXJDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZVNldHRpbmdzRGVib3VuY2VkOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuXG4gIHByaXZhdGUgZ2V0IHBsdWdpblNldHRpbmdzKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3M8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLmlucHV0VmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyRWwsIENzc0NsYXNzLlBsdWdpblNldHRpbmdzVGFiKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCA9IGRlYm91bmNlKFxuICAgICAgY29udmVydEFzeW5jVG9TeW5jKCgpID0+IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCkpLFxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICk7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+KHtcbiAgICAgIG9uTG9hZFNldHRpbmdzOiAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25Mb2FkU2V0dGluZ3MobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpLFxuICAgICAgb25TYXZlU2V0dGluZ3M6IChuZXdTdGF0ZSwgb2xkU3RhdGUsIGNvbnRleHQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25TYXZlU2V0dGluZ3MoeyBjb250ZXh0LCBuZXdTdGF0ZSwgb2xkU3RhdGUgfSksXG4gICAgICBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudFxuICA+KFxuICAgIHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kRXh0ZW5kZWRQYXJhbXM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudCwgUHJvcGVydHlOYW1lPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50LCBQcm9wZXJ0eU5hbWU+IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gYmluZCBvdmVybG9hZCBzaGFyZXMgdGhlIEJpbmQqIHBhcmFtIGZhbWlseS5cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICB2YWx1ZUNvbXBvbmVudCxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0gcGFyYW1zO1xuICAgIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0ge1xuICAgICAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodmFsdWU6IFVJVmFsdWUpOiBQcm9wZXJ0eVR5cGUgPT4gdmFsdWUgYXMgUHJvcGVydHlUeXBlLFxuICAgICAgb25DaGFuZ2VkOiBub29wLFxuICAgICAgcGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyOiAodmFsdWU6IFJlYWRvbmx5RGVlcDxQcm9wZXJ0eVR5cGU+KTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgICAgc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk6IHRydWUsXG4gICAgICBzaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzOiB0cnVlLFxuICAgICAgc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNFeHRlbnNpb246IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckVsID0gZ2V0VmFsaWRhdG9yQ29tcG9uZW50KHZhbHVlQ29tcG9uZW50KT8udmFsaWRhdG9yRWw7XG5cbiAgICBjb25zdCB0ZXh0QmFzZWRDb21wb25lbnQgPSBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSh2YWx1ZUNvbXBvbmVudCk7XG5cbiAgICBjb25zdCByZWFkb25seVZhbHVlID0gdGhpcy5nZXRQbHVnaW5TZXR0aW5nc1Byb3BlcnR5KHByb3BlcnR5TmFtZSk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LmRlZmF1bHRTZXR0aW5ncyBhcyBQbHVnaW5TZXR0aW5ncztcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdO1xuICAgIGNvbnN0IGRlZmF1bHRDb21wb25lbnRWYWx1ZSA9IG9wdGlvbnNFeHRlbnNpb24ucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKGRlZmF1bHRWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPik7XG4gICAgdGV4dEJhc2VkQ29tcG9uZW50Py5zZXRQbGFjZWhvbGRlclZhbHVlKGRlZmF1bHRDb21wb25lbnRWYWx1ZSk7XG5cbiAgICBsZXQgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgICBsZXQgdG9vbHRpcEVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCB0b29sdGlwQ29udGVudEVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh2YWxpZGF0b3JFbCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGVuc3VyZVdyYXBwZWQodmFsaWRhdG9yRWwpO1xuICAgICAgdG9vbHRpcEVsID0gd3JhcHBlci5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEVsLCBbQ3NzQ2xhc3MuVG9vbHRpcCwgQ3NzQ2xhc3MuVG9vbHRpcFZhbGlkYXRvcl0pO1xuICAgICAgdG9vbHRpcENvbnRlbnRFbCA9IHRvb2x0aXBFbC5jcmVhdGVTcGFuKCk7XG4gICAgICBjb25zdCB0b29sdGlwQXJyb3dFbCA9IHRvb2x0aXBFbC5jcmVhdGVEaXYoKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModG9vbHRpcEFycm93RWwsIENzc0NsYXNzLlRvb2x0aXBBcnJvdyk7XG4gICAgICB0b29sdGlwRWwuaGlkZSgpO1xuICAgICAgd3JhcHBlci5hcHBlbmQodG9vbHRpcEVsKTtcbiAgICB9XG5cbiAgICByZWdpc3RlckFzeW5jRXZlbnQoXG4gICAgICB0aGlzLmdldFJlbmRlckNvbXBvbmVudCgpLFxuICAgICAgdGhpcy5vbigndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJywgKGFub3RoZXJQcm9wZXJ0eU5hbWUsIGFub3RoZXJWYWxpZGF0aW9uTWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSBhbm90aGVyUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhbm90aGVyVmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGxldCBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuICAgIGxldCBzaG91bGRSZXZlcnRUb0RlZmF1bHRWYWx1ZU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgaWYgKHRleHRCYXNlZENvbXBvbmVudCAmJiBvcHRpb25zRXh0ZW5zaW9uLnNob3VsZFNob3dQbGFjZWhvbGRlckZvckRlZmF1bHRWYWx1ZXMgJiYgaXNEZWVwRXF1YWwocmVhZG9ubHlWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgdGV4dEJhc2VkQ29tcG9uZW50LmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKG9wdGlvbnNFeHRlbnNpb24ucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKHJlYWRvbmx5VmFsdWUpKTtcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkU2tpcE9uQ2hhbmdlID0gZmFsc2U7XG4gICAgY29uc3QgVVBEQVRFX1ZBTElEQVRPUl9FTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDtcbiAgICBjb25zdCB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsKCk7XG4gICAgICB9KTtcbiAgICB9LCBVUERBVEVfVkFMSURBVE9SX0VMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHZhbHVlQ29tcG9uZW50Lm9uQ2hhbmdlKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAodWlWYWx1ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBPbkNoYW5nZSkge1xuICAgICAgICBzaG91bGRTa2lwT25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgbGV0IG5ld1ZhbHVlOiBQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2hvdWxkU2V0UHJvcGVydHkgPSB0cnVlO1xuICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSAhIXRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpICYmIG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk7XG4gICAgICBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IG9wdGlvbnNFeHRlbnNpb24uY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyKHVpVmFsdWUpO1xuICAgICAgICBpZiAoaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlcihjb252ZXJ0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGNvbnZlcnRlZFZhbHVlLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICAgIHNob3VsZFNldFByb3BlcnR5ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBjb252ZXJ0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkU2V0UHJvcGVydHkpIHtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbmV3VmFsdWUgYXMgUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSk7XG4gICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzICYmICF0ZXh0QmFzZWRDb21wb25lbnQuaXNFbXB0eSgpICYmIGlzRGVlcEVxdWFsKG5ld1ZhbHVlLCBkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIGlmIChzaG91bGRTZXRQcm9wZXJ0eSkge1xuICAgICAgICBhd2FpdCBvcHRpb25zRXh0ZW5zaW9uLm9uQ2hhbmdlZChuZXdWYWx1ZSBhcyBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPiwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZWQoKTtcbiAgICB9KSk7XG5cbiAgICB2YWxpZGF0b3JFbD8uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgfSk7XG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHZhbGlkYXRpb25NZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2VzW3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuXG4gICAgcmV0dXJuIHZhbHVlQ29tcG9uZW50O1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsaWRhdG9yRWwoKTogdm9pZCB7XG4gICAgICBpZiAoIXZhbGlkYXRvckVsPy5pc0FjdGl2ZUVsZW1lbnQoKSkge1xuICAgICAgICBpZiAoc2hvdWxkRW1wdHlPbkJsdXIpIHtcbiAgICAgICAgICBzaG91bGRFbXB0eU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKCF0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRleHRCYXNlZENvbXBvbmVudD8uZW1wdHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIpIHtcbiAgICAgICAgICBzaG91bGRSZXZlcnRUb0RlZmF1bHRWYWx1ZU9uQmx1ciA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRleHRCYXNlZENvbXBvbmVudD8uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBzaG91bGRTa2lwT25DaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgdmFsdWVDb21wb25lbnQuc2V0VmFsdWUoZGVmYXVsdENvbXBvbmVudFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0b3JFbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKHRvb2x0aXBDb250ZW50RWwpO1xuXG4gICAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2UgPT09ICcnKSB7XG4gICAgICAgIHZhbGlkYXRvckVsLnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICAgICAgdmFsaWRhdG9yRWwuY2hlY2tWYWxpZGl0eSgpO1xuICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IHZhbGlkYXRvckVsLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICB2YWxpZGF0b3JFbC5zZXRDdXN0b21WYWxpZGl0eSh2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBpZiAob3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgdG9vbHRpcENvbnRlbnRFbC50ZXh0Q29udGVudCA9IHZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICB0b29sdGlwRWw/LnRvZ2dsZSghIXZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgc2V0VG9vbHRpcCh2YWxpZGF0b3JFbCwgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5TGVnYWN5KCk7XG4gIH1cblxuICAvKipcbiAgICogTGVnYWN5IHdheSB0byByZW5kZXIgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIgaW1wZXJhdGl2ZWx5LlxuICAgKlxuICAgKiBUaGUgcHJlLWRlY2xhcmF0aXZlIGZhbGxiYWNrOiBPYnNpZGlhbiBvbmx5IGNhbGxzIGl0IHdoZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uc30gcmV0dXJucyBhbiBlbXB0eVxuICAgKiBhcnJheSwgaS5lLiB3aGVuIHRoZSBjb25zdW1lciBoYXMgbm90IG92ZXJyaWRkZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9LiBTdWNoIGEgY29uc3VtZXJcbiAgICogb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIGFuZCBidWlsZHMgdGhlIFVJIHdpdGgge0BsaW5rIFNldHRpbmdFeH0gYW5kIHtAbGluayBiaW5kfS5cbiAgICovXG4gIHB1YmxpYyBkaXNwbGF5TGVnYWN5KCk6IHZvaWQge1xuICAgIHRoaXMuYmVnaW5SZW5kZXJDeWNsZSgpO1xuICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgdmFsdWUgYmFja2luZyBhIG5hdGl2ZSBgY29udHJvbGAgc2V0dGluZyBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBPYnNpZGlhbiBjYWxscyBpdCBvbiBldmVyeSByZW5kZXIgb2YgYSBgY29udHJvbGAtdHlwZSBkZWZpbml0aW9uLiBUaGUgaW5oZXJpdGVkIGltcGxlbWVudGF0aW9uIHJlYWRzXG4gICAqIGBwbHVnaW4uc2V0dGluZ3NgLCB3aGljaCBhIHBsdWdpbiBidWlsdCBvbiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlfSBuZXZlciBwb3B1bGF0ZXMsIHNvIGl0IGlzXG4gICAqIHJvdXRlZCB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50IGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Q29udHJvbFZhbHVlKGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShjYXN0VG88U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlY2xhcmF0aXZlIHNldHRpbmcgZGVmaW5pdGlvbnMgcmVuZGVyZWQgYnkgT2JzaWRpYW4gMS4xMysuXG4gICAqXG4gICAqIERlbGVnYXRlcyB0byB7QGxpbmsgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtc30uIFdoZW4gYSBjb25zdW1lciBoYXMgbm90IG92ZXJyaWRkZW4gdGhhdCBob29rIGl0IHJldHVybnNcbiAgICogYW4gZW1wdHkgYXJyYXksIGFuZCBPYnNpZGlhbiBmYWxscyBiYWNrIHRvIHRoZSBpbXBlcmF0aXZlIHtAbGluayBkaXNwbGF5TGVnYWN5fSBwYXRoLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBkZWZpbml0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRTZXR0aW5nRGVmaW5pdGlvbnMoKTogU2V0dGluZ0RlZmluaXRpb25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdEZWZpbml0aW9uSXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBoaWRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmhpZGUoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZC5jYW5jZWwoKTtcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmVuZFJlbmRlckN5Y2xlKCk7XG4gICAgdGhpcy5jb21wb25lbnQudW5sb2FkKCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5oaWRlQXN5bmMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gdGhlIHNldHRpbmdzIHRhYiBpcyBiZWluZyBoaWRkZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgdGFiIGlzIGhpZGRlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoaWRlQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zYXZlVG9GaWxlKFNBVkVfVE9fRklMRV9DT05URVhUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1yZW5kZXJzIHRoZSBzZXR0aW5ncyB0YWIgYWZ0ZXIgdGhlIHVuZGVybHlpbmcgc3RhdGUgY2hhbmdlZC5cbiAgICpcbiAgICogUmVidWlsZHMgdGhlIGRlZmluaXRpb25zIGFuZCByZS1yZW5kZXJzLCB3aGljaCBjb3ZlcnMgYm90aCBwYXRoczogT2JzaWRpYW4gcmVuZGVycyB0aGUgZGVjbGFyYXRpdmVcbiAgICogZGVmaW5pdGlvbnMgd2hlbiB7QGxpbmsgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtc30gcHJvdmlkZXMgdGhlbSwgYW5kIGZhbGxzIGJhY2sgdG9cbiAgICoge0BsaW5rIGRpc3BsYXlMZWdhY3l9IHdoZW4gaXQgZG9lcyBub3QuIE5vdGhpbmcgaXMgcmVuZGVyZWQgd2hpbGUgdGhlIHRhYiBpcyBub3QgdGhlIG9uZSBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFVzZSBpdCBvbmx5IGZvciBjaGFuZ2VzIHRoYXQgYWx0ZXIgdGhlIFNUUlVDVFVSRSBvZiB0aGUgdGFiIFx1MjAxNCByb3dzIGFkZGVkIG9yIHJlbW92ZWQuIFdoZW4gb25seSBhXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMuZGlzYWJsZWR9IC8ge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy52aXNpYmxlfVxuICAgKiBwcmVkaWNhdGUgaGFzIHRvIGJlIHJlLWV2YWx1YXRlZCwgY2FsbCB0aGUgbXVjaCBjaGVhcGVyIHtAbGluayByZWZyZXNoRG9tU3RhdGV9IGluc3RlYWQsIHdoaWNoIHRvZ2dsZXMgdGhlXG4gICAqIHJlbmRlcmVkIERPTSBpbiBwbGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgdGhlIHZhbHVlIG9mIGEgbmF0aXZlIGBjb250cm9sYCBzZXR0aW5nIGRlZmluaXRpb24uXG4gICAqXG4gICAqIFRoZSBjb3VudGVycGFydCBvZiB7QGxpbmsgZ2V0Q29udHJvbFZhbHVlfTogaXQgcm91dGVzIHRoZSB3cml0ZSB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50IGluc3RlYWQgb2YgdGhlXG4gICAqIGluaGVyaXRlZCBgcGx1Z2luLnNhdmVEYXRhYCBwYXRoLCBzbyB2YWxpZGF0aW9uLCB0cmFuc2Zvcm1lcnMgYW5kIHRoZSBkZWJvdW5jZWQgc2F2ZSBhbGwgYXBwbHkgYXMgdGhleSBkb1xuICAgKiBmb3IgYSB7QGxpbmsgYmluZH0tZWQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwZXJzaXN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhbHVlIGlzIHNldC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBzZXRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHlwZSBQcm9wZXJ0eU5hbWUgPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPjtcbiAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnNldFByb3BlcnR5KGNhc3RUbzxQcm9wZXJ0eU5hbWU+KGtleSksIGNhc3RUbzxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPih2YWx1ZSkpO1xuICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIuXG4gICAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW5UYWIodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlY2xhcmF0aXZlIHNldHRpbmcgZGVmaW5pdGlvbnMgZm9yIHRoZSB0YWIgKE9ic2lkaWFuIDEuMTMrKS5cbiAgICpcbiAgICogQ29uc3VtZXJzIG92ZXJyaWRlIHRoaXMsIHR5cGljYWxseSBidWlsZGluZyBlYWNoIHJvdyB3aXRoIHtAbGluayBzZXR0aW5nRXh9IGFuZCB7QGxpbmsgYmluZH0gYW5kIGdyb3VwaW5nXG4gICAqIHRoZW0gd2l0aCBgc2V0dGluZ0dyb3VwRXhgLiBSZXR1cm5pbmcgYW4gZW1wdHkgYXJyYXkgXHUyMDE0IHRoZSBkZWZhdWx0IFx1MjAxNCBtYWtlcyBPYnNpZGlhbiBmYWxsIGJhY2sgdG8gdGhlXG4gICAqIGltcGVyYXRpdmUge0BsaW5rIGRpc3BsYXlMZWdhY3l9IHBhdGguXG4gICAqXG4gICAqIE1VU1QgYmUgYSBwdXJlIGJ1aWxkZXIuIE9ic2lkaWFuIGNhbGxzIGl0IHdoZW4gdGhlIHRhYiBpcyByZWdpc3RlcmVkIChgYWRkU2V0dGluZ1RhYmApLCBsb25nIGJlZm9yZSB0aGVcbiAgICogdGFiIGlzIGV2ZXIgb3BlbmVkLCBpbiBvcmRlciB0byBpbmRleCB0aGUgc2V0dGluZ3MgZm9yIHNlYXJjaC4gQW55dGhpbmcgd2l0aCBhIHNpZGUgZWZmZWN0IGJlbG9uZ3MgaW5zaWRlXG4gICAqIGEgcm93J3Mge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy5yZW5kZXJ9IGNhbGxiYWNrLCB3aGljaCBydW5zIG9ubHkgd2hlbiB0aGUgcm93IGlzXG4gICAqIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBkZWZpbml0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zKCk6IFNldHRpbmdEZWZpbml0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2xvYWRlZFN0YXRlIC0gVGhlIGxvYWRlZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9pc0luaXRpYWxMb2FkIC0gV2hldGhlciB0aGUgc2V0dGluZ3MgYXJlIGJlaW5nIGxvYWRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIGxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRTZXR0aW5ncyhfbG9hZGVkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sIF9pc0luaXRpYWxMb2FkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2YWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSByZXZhbGlkYXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlcyA9IGF3YWl0IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQucmV2YWxpZGF0ZSgpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlVmFsaWRhdGlvbnModmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBzZWFyY2gtaW5kZXhhYmxlIGRlY2xhcmF0aXZlIHJvdyB0aGF0IGlzIHJlbmRlcmVkIGltcGVyYXRpdmVseS5cbiAgICpcbiAgICogVGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBkZWNsYXJhdGl2ZSBBUEkgYW5kIHRoaXMgbGlicmFyeSdzIGltcGVyYXRpdmUgYnVpbGRpbmcgYmxvY2tzOiBPYnNpZGlhbiBvd25zIHRoZSByb3cgKHNvIGl0XG4gICAqIGluZGV4ZXMgaXQgZm9yIHNlYXJjaCBhbmQgZXZhbHVhdGVzIGl0cyB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLnZpc2libGV9IC9cbiAgICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy5kaXNhYmxlZH0gcHJlZGljYXRlcyBvbiBldmVyeVxuICAgKiB7QGxpbmsgcmVmcmVzaERvbVN0YXRlfSksIHdoaWxlIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMucmVuZGVyfSBmaWxscyBpdCBpbiB3aXRoXG4gICAqIHtAbGluayBTZXR0aW5nRXh9IGFkZGVycyBhbmQge0BsaW5rIGJpbmR9IGV4YWN0bHkgYXMgYW4gaW1wZXJhdGl2ZSB0YWIgd291bGQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcm93IHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBzZXR0aW5nRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMpOiBTZXR0aW5nRGVmaW5pdGlvblJlbmRlciB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTZXR0aW5nRGVmaW5pdGlvblJlbmRlcj4oe1xuICAgICAgYWxpYXNlczogcGFyYW1zLmFsaWFzZXMsXG4gICAgICBkZXNjOiBwYXJhbXMuZGVzYyxcbiAgICAgIGRpc2FibGVkOiBwYXJhbXMuZGlzYWJsZWQsXG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIHJlbmRlcjogKHNldHRpbmc6IFNldHRpbmcsIGdyb3VwOiBTZXR0aW5nR3JvdXApID0+IHRoaXMucmVuZGVyU2V0dGluZ0V4KHsgZ3JvdXAsIHNldHRpbmcsIHNldHRpbmdFeFBhcmFtczogcGFyYW1zIH0pLFxuICAgICAgc2VhcmNoYWJsZTogcGFyYW1zLnNlYXJjaGFibGUsXG4gICAgICB2aXNpYmxlOiBwYXJhbXMudmlzaWJsZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGRlY2xhcmF0aXZlIGhlYWRpbmcgZ3JvdXAuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJhdGl2ZSBjb3VudGVycGFydCBvZiBgU2V0dGluZ0dyb3VwRXhgOiB3aGVyZSB0aGF0IGNsYXNzIGFwcGVuZHMgYSBncm91cCB0byBhIGNvbnRhaW5lclxuICAgKiBpbXBlcmF0aXZlbHksIHRoaXMgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBPYnNpZGlhbiByZW5kZXJzLCBzbyBhIGdyb3VwLXN0cnVjdHVyZWQgdGFiIGtlZXBzIGl0cyBzaGFwZVxuICAgKiBhZnRlciB0aGUgbWlncmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGdyb3VwIHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIGdyb3VwIGRlZmluaXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0dGluZ0dyb3VwRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nR3JvdXBFeFBhcmFtcyk6IFNldHRpbmdEZWZpbml0aW9uR3JvdXAge1xuICAgIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2V0dGluZ0RlZmluaXRpb25Hcm91cD4oe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgdHlwZTogJ2dyb3VwJ1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiZWdpblJlbmRlckN5Y2xlKCk6IHZvaWQge1xuICAgIHRoaXMuZW5kUmVuZGVyQ3ljbGUoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVJlbmRlckNvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZW5kZXJDb21wb25lbnQoKTogQ29tcG9uZW50RXgge1xuICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5jb21wb25lbnQubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5hZGRDaGlsZChuZXcgQ29tcG9uZW50RXgoKSk7XG4gIH1cblxuICBwcml2YXRlIGVuZFJlbmRlckN5Y2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudDtcbiAgICBpZiAoIXJlbmRlckNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IG51bGw7XG4gICAgdGhpcy5jb21wb25lbnQucmVtb3ZlQ2hpbGQocmVuZGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWVcbiAgKTogUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMucGx1Z2luU2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgcmV0dXJuIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gYXMgUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJDb21wb25lbnQoKTogQ29tcG9uZW50RXgge1xuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJDb21wb25lbnQoKTtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvblNhdmVTZXR0aW5ncyhwYXJhbXM6IFBsdWdpblNldHRpbmdzVGFiQmFzZU9uU2F2ZVNldHRpbmdzUGFyYW1zPFBsdWdpblNldHRpbmdzPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG9sZFN0YXRlOiBfb2xkU3RhdGVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmIChjb250ZXh0ID09PSBTQVZFX1RPX0ZJTEVfQ09OVEVYVCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWYWxpZGF0aW9ucyhuZXdTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgYXMgUmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUgLS0gTWlycm9ycyBPYnNpZGlhbidzIGBTZXR0aW5nRGVmaW5pdGlvblJlbmRlci5yZW5kZXJgLCB3aG9zZSBjbGVhbnVwIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLlxuICBwcml2YXRlIHJlbmRlclNldHRpbmdFeChwYXJhbXM6IFBsdWdpblNldHRpbmdzVGFiQmFzZVJlbmRlclNldHRpbmdFeFBhcmFtcyk6ICgoKSA9PiB2b2lkKSB8IHZvaWQge1xuICAgIGNvbnN0IHJvd0NvbXBvbmVudCA9IHRoaXMuY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk7XG4gICAgY29uc3QgcHJldmlvdXNSZW5kZXJDb21wb25lbnQgPSB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQ7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gcm93Q29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBwYXJhbXMuc2V0dGluZ0V4UGFyYW1zLnJlbmRlcihhZG9wdFNldHRpbmdFeChwYXJhbXMuc2V0dGluZyksIHBhcmFtcy5ncm91cCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW1vdmVDaGlsZChyb3dDb21wb25lbnQpO1xuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gcHJldmlvdXNSZW5kZXJDb21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVWYWxpZGF0aW9ucyh2YWxpZGF0aW9uTWVzc2FnZXM6IFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgdmFsaWRhdGlvbk1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRpb25NZXNzYWdlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJpZ2dlckFzeW5jKCd2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQnLCBwcm9wZXJ0eU5hbWUsIHZhbGlkYXRpb25NZXNzYWdlIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsd0JBQXdCO0FBQ2pDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBV1AsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUywyQkFBMkI7QUFLN0IsTUFBTSx1QkFBdUI7QUE0U3BDLE1BQU0seUNBQXdFLFlBQVk7QUFBQSxFQUN2RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBMkU7QUFDNUYsVUFBTTtBQUNOLFNBQUssU0FBUztB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