@mnaoumov/obsidian-lib 4.1.0 → 4.2.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 (215) hide show
  1. package/dist/lib/cjs/__merged.cjs +9 -2
  2. package/dist/lib/cjs/__merged.d.cts +2 -2
  3. package/dist/lib/cjs/active-file-provider.cjs +3 -2
  4. package/dist/lib/cjs/app.cjs +3 -2
  5. package/dist/lib/cjs/async-with-notice.cjs +3 -2
  6. package/dist/lib/cjs/attachment-path.cjs +3 -2
  7. package/dist/lib/cjs/attachment-unit-folder.cjs +3 -2
  8. package/dist/lib/cjs/backlink-index.cjs +3 -2
  9. package/dist/lib/cjs/backlink.cjs +3 -2
  10. package/dist/lib/cjs/bases-view-registrar.cjs +3 -2
  11. package/dist/lib/cjs/callout.cjs +3 -2
  12. package/dist/lib/cjs/canvas.cjs +3 -2
  13. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -2
  14. package/dist/lib/cjs/code-block-markdown-information.cjs +3 -2
  15. package/dist/lib/cjs/code-block-reg-exp.cjs +3 -2
  16. package/dist/lib/cjs/codemirror/index.cjs +3 -2
  17. package/dist/lib/cjs/codemirror/state-field-spec.cjs +3 -2
  18. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +3 -2
  19. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +3 -2
  20. package/dist/lib/cjs/command-handlers/command-handler.cjs +3 -2
  21. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +3 -2
  22. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -2
  23. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -2
  24. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +3 -2
  25. package/dist/lib/cjs/command-handlers/index.cjs +3 -2
  26. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +3 -2
  27. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +3 -2
  28. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +3 -2
  29. package/dist/lib/cjs/command-registrar.cjs +3 -2
  30. package/dist/lib/cjs/community-plugins.cjs +47 -4
  31. package/dist/lib/cjs/community-plugins.d.cts +36 -1
  32. package/dist/lib/cjs/components/abort-signal-component.cjs +3 -2
  33. package/dist/lib/cjs/components/all-windows-event-component.cjs +3 -2
  34. package/dist/lib/cjs/components/async-error-handler-component.cjs +3 -2
  35. package/dist/lib/cjs/components/async-events-component.cjs +3 -2
  36. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +3 -2
  37. package/dist/lib/cjs/components/component-ex.cjs +3 -2
  38. package/dist/lib/cjs/components/console-debug-component.cjs +3 -2
  39. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +3 -2
  40. package/dist/lib/cjs/components/disposable-component.cjs +3 -2
  41. package/dist/lib/cjs/components/embed-extensions-component.cjs +3 -2
  42. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +3 -2
  43. package/dist/lib/cjs/components/index.cjs +3 -2
  44. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -2
  45. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +3 -2
  46. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -2
  47. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +3 -2
  48. package/dist/lib/cjs/components/plugin-context-component.cjs +3 -2
  49. package/dist/lib/cjs/components/plugin-gate-component.cjs +26 -4
  50. package/dist/lib/cjs/components/plugin-gate-component.d.cts +10 -0
  51. package/dist/lib/cjs/components/plugin-notice-component.cjs +3 -2
  52. package/dist/lib/cjs/components/plugin-settings-component.cjs +3 -2
  53. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +3 -2
  54. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +3 -2
  55. package/dist/lib/cjs/components/pointer-position-component.cjs +3 -2
  56. package/dist/lib/cjs/components/registry-component.cjs +3 -2
  57. package/dist/lib/cjs/components/release-notes-component.cjs +3 -2
  58. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +3 -2
  59. package/dist/lib/cjs/components/rmdir-guard-component.cjs +3 -2
  60. package/dist/lib/cjs/components/settings-migration-component.cjs +3 -2
  61. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -2
  62. package/dist/lib/cjs/components/templates-language-component.cjs +3 -2
  63. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +3 -2
  64. package/dist/lib/cjs/constructors/index.cjs +3 -2
  65. package/dist/lib/cjs/css-class.cjs +3 -2
  66. package/dist/lib/cjs/data-handler.cjs +3 -2
  67. package/dist/lib/cjs/dataview-link.cjs +3 -2
  68. package/dist/lib/cjs/dataview.cjs +3 -2
  69. package/dist/lib/cjs/debug.cjs +3 -2
  70. package/dist/lib/cjs/demo-vault-helper-settings.cjs +3 -2
  71. package/dist/lib/cjs/demo-vault-helper.cjs +3 -2
  72. package/dist/lib/cjs/demo-vault-naming.cjs +3 -2
  73. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +3 -2
  74. package/dist/lib/cjs/desktop-trusted-input.cjs +3 -2
  75. package/dist/lib/cjs/editor-extension-registrar.cjs +3 -2
  76. package/dist/lib/cjs/editor-suggest-registrar.cjs +3 -2
  77. package/dist/lib/cjs/editor.cjs +3 -2
  78. package/dist/lib/cjs/events.cjs +3 -2
  79. package/dist/lib/cjs/extensions-registrar.cjs +3 -2
  80. package/dist/lib/cjs/file-change.cjs +3 -2
  81. package/dist/lib/cjs/file-explorer.cjs +3 -2
  82. package/dist/lib/cjs/file-manager.cjs +3 -2
  83. package/dist/lib/cjs/file-system.cjs +3 -2
  84. package/dist/lib/cjs/folder-note.cjs +3 -2
  85. package/dist/lib/cjs/frontmatter-formatting.cjs +3 -2
  86. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +3 -2
  87. package/dist/lib/cjs/frontmatter.cjs +3 -2
  88. package/dist/lib/cjs/generated-during-build.cjs +4 -3
  89. package/dist/lib/cjs/hover-link-source-registrar.cjs +3 -2
  90. package/dist/lib/cjs/html-element.cjs +3 -2
  91. package/dist/lib/cjs/i18n/custom-type-options.cjs +3 -2
  92. package/dist/lib/cjs/i18n/default-translations.cjs +3 -2
  93. package/dist/lib/cjs/i18n/i18n.cjs +3 -2
  94. package/dist/lib/cjs/i18n/index.cjs +3 -2
  95. package/dist/lib/cjs/i18n/locales/en.cjs +7 -2
  96. package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
  97. package/dist/lib/cjs/i18n/locales/index.cjs +3 -2
  98. package/dist/lib/cjs/i18n/locales/translations-map.cjs +3 -2
  99. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
  100. package/dist/lib/cjs/index.cjs +3 -2
  101. package/dist/lib/cjs/is-in-obsidian.cjs +3 -2
  102. package/dist/lib/cjs/library-styles.cjs +3 -2
  103. package/dist/lib/cjs/library.cjs +3 -2
  104. package/dist/lib/cjs/link-name.cjs +3 -2
  105. package/dist/lib/cjs/link-update-progress.cjs +3 -2
  106. package/dist/lib/cjs/link.cjs +3 -2
  107. package/dist/lib/cjs/logger.cjs +3 -2
  108. package/dist/lib/cjs/loop.cjs +3 -2
  109. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +3 -2
  110. package/dist/lib/cjs/markdown-code-block-processor.cjs +3 -2
  111. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +3 -2
  112. package/dist/lib/cjs/markdown-view.cjs +3 -2
  113. package/dist/lib/cjs/markdown.cjs +3 -2
  114. package/dist/lib/cjs/menu-event-registrar.cjs +3 -2
  115. package/dist/lib/cjs/metadata-cache.cjs +19 -3
  116. package/dist/lib/cjs/mobile-trusted-input.cjs +3 -2
  117. package/dist/lib/cjs/modals/alert.cjs +3 -2
  118. package/dist/lib/cjs/modals/confirm.cjs +3 -2
  119. package/dist/lib/cjs/modals/index.cjs +3 -2
  120. package/dist/lib/cjs/modals/minimizable-modal.cjs +3 -2
  121. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -2
  122. package/dist/lib/cjs/modals/modal.cjs +3 -2
  123. package/dist/lib/cjs/modals/prompt.cjs +3 -2
  124. package/dist/lib/cjs/modals/select-item.cjs +3 -2
  125. package/dist/lib/cjs/modals/select-option.cjs +3 -2
  126. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +3 -2
  127. package/dist/lib/cjs/note-priority.cjs +3 -2
  128. package/dist/lib/cjs/notebook-navigator.cjs +3 -2
  129. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +3 -2
  130. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +3 -2
  131. package/dist/lib/cjs/obsidian-settings.cjs +3 -2
  132. package/dist/lib/cjs/parse-link.cjs +3 -2
  133. package/dist/lib/cjs/path-settings.cjs +3 -2
  134. package/dist/lib/cjs/pdf.cjs +3 -2
  135. package/dist/lib/cjs/plugin/index.cjs +3 -2
  136. package/dist/lib/cjs/plugin/plugin-api-schema.cjs +3 -2
  137. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -2
  138. package/dist/lib/cjs/plugin/plugin-api.d.cts +10 -0
  139. package/dist/lib/cjs/plugin/plugin-context.cjs +3 -2
  140. package/dist/lib/cjs/plugin/plugin-event-source.cjs +3 -2
  141. package/dist/lib/cjs/plugin/plugin-install-state.cjs +31 -4
  142. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +38 -0
  143. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +3 -2
  144. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +3 -2
  145. package/dist/lib/cjs/plugin/plugin.cjs +3 -2
  146. package/dist/lib/cjs/plugin/settings-migration-api.cjs +3 -2
  147. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +3 -2
  148. package/dist/lib/cjs/popovers/field-popover.cjs +3 -2
  149. package/dist/lib/cjs/popovers/index.cjs +3 -2
  150. package/dist/lib/cjs/popovers/popover-anchor.cjs +3 -2
  151. package/dist/lib/cjs/popovers/popover.cjs +3 -2
  152. package/dist/lib/cjs/property-entry.cjs +3 -2
  153. package/dist/lib/cjs/queue.cjs +3 -2
  154. package/dist/lib/cjs/react/app-context.cjs +3 -2
  155. package/dist/lib/cjs/react/index.cjs +3 -2
  156. package/dist/lib/cjs/reference.cjs +3 -2
  157. package/dist/lib/cjs/resource-lock.cjs +3 -2
  158. package/dist/lib/cjs/resource-url.cjs +3 -2
  159. package/dist/lib/cjs/ribbon-icon-registrar.cjs +3 -2
  160. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -2
  161. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +3 -2
  162. package/dist/lib/cjs/setting-components/date-component.cjs +3 -2
  163. package/dist/lib/cjs/setting-components/date-time-component.cjs +3 -2
  164. package/dist/lib/cjs/setting-components/email-component.cjs +3 -2
  165. package/dist/lib/cjs/setting-components/file-component.cjs +3 -2
  166. package/dist/lib/cjs/setting-components/index.cjs +3 -2
  167. package/dist/lib/cjs/setting-components/month-component.cjs +3 -2
  168. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -2
  169. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +3 -2
  170. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -2
  171. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +3 -2
  172. package/dist/lib/cjs/setting-components/number-component.cjs +3 -2
  173. package/dist/lib/cjs/setting-components/password-component.cjs +3 -2
  174. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -2
  175. package/dist/lib/cjs/setting-components/telephone-component.cjs +3 -2
  176. package/dist/lib/cjs/setting-components/text-based-component.cjs +3 -2
  177. package/dist/lib/cjs/setting-components/time-component.cjs +3 -2
  178. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -2
  179. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -2
  180. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +3 -2
  181. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +3 -2
  182. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -2
  183. package/dist/lib/cjs/setting-components/url-component.cjs +3 -2
  184. package/dist/lib/cjs/setting-components/validator-component.cjs +3 -2
  185. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +3 -2
  186. package/dist/lib/cjs/setting-components/week-component.cjs +3 -2
  187. package/dist/lib/cjs/setting-ex.cjs +3 -2
  188. package/dist/lib/cjs/setting-group-ex.cjs +3 -2
  189. package/dist/lib/cjs/status-bar-item-registrar.cjs +3 -2
  190. package/dist/lib/cjs/templater.cjs +3 -2
  191. package/dist/lib/cjs/transformers/duration-transformer.cjs +3 -2
  192. package/dist/lib/cjs/transformers/index.cjs +3 -2
  193. package/dist/lib/cjs/trusted-input.cjs +3 -2
  194. package/dist/lib/cjs/validation.cjs +3 -2
  195. package/dist/lib/cjs/vault-delete.cjs +3 -2
  196. package/dist/lib/cjs/vault-transaction.cjs +3 -2
  197. package/dist/lib/cjs/vault.cjs +3 -2
  198. package/dist/lib/cjs/view-registrar.cjs +3 -2
  199. package/dist/lib/cjs/workspace.cjs +3 -2
  200. package/dist/lib/esm/__merged.d.mts +2 -2
  201. package/dist/lib/esm/__merged.mjs +9 -3
  202. package/dist/lib/esm/community-plugins.d.mts +36 -1
  203. package/dist/lib/esm/community-plugins.mjs +42 -2
  204. package/dist/lib/esm/components/plugin-gate-component.d.mts +10 -0
  205. package/dist/lib/esm/components/plugin-gate-component.mjs +30 -5
  206. package/dist/lib/esm/generated-during-build.mjs +1 -1
  207. package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
  208. package/dist/lib/esm/i18n/locales/en.mjs +5 -1
  209. package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
  210. package/dist/lib/esm/metadata-cache.mjs +17 -2
  211. package/dist/lib/esm/plugin/plugin-api.d.mts +10 -0
  212. package/dist/lib/esm/plugin/plugin-api.mjs +4 -1
  213. package/dist/lib/esm/plugin/plugin-install-state.d.mts +38 -0
  214. package/dist/lib/esm/plugin/plugin-install-state.mjs +30 -3
  215. package/package.json +11 -4
@@ -77,7 +77,8 @@ ensureBrowserProcess();
77
77
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
78
  return originalRequire?.(id);
79
79
  }
80
- if (globalThis.app.isMobile) {
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
81
82
  if (id === "process" || id === "node:process") {
82
83
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
83
84
  return process;
@@ -239,4 +240,4 @@ function toFolderNoteLocation(storageLocation) {
239
240
  resolveFolderNote,
240
241
  resolveFolderNoteConfig
241
242
  });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoZXJlIGEgZm9sZGVyJ3MgZm9sZGVyIG5vdGUgbGl2ZXMuXG4gKlxuICogVGhlIHRocmVlIGNvbmNyZXRlIG1lbWJlcnMgYXJlIHRoZSBzaGFwZXMgdGhlIGZvbGRlci1ub3RlIGVjb3N5c3RlbSBhY3R1YWxseSB1c2VzOlxuICogYGNoYXJsaWUvY2hhcmxpZS5tZGAgYW5kIGBjaGFybGllL2luZGV4Lm1kYCBhcmUgYm90aCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcn0gKHRoZXlcbiAqIGRpZmZlciBvbmx5IGluIHRoZSBOQU1FLCB3aGljaCBpcyB3aHkgbmFtaW5nIGlzIGEgY2FsbGJhY2sgYW5kIG5vdCBhIGZvdXJ0aCBtZW1iZXIpLCB3aGlsZVxuICogYGNoYXJsaWUubWRgIGJlc2lkZSB0aGUgZm9sZGVyIGlzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyfSDigJQgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdGhhdFxuICogYFtbYWxwaGEvYnJhdm8vY2hhcmxpZV1dYCBsaW5rcyB0byBhIGZvbGRlciB3aXRoIG5vIHNwZWNpYWwgc3ludGF4LlxuICovXG5leHBvcnQgZW51bSBGb2xkZXJOb3RlTG9jYXRpb24ge1xuICAvKipcbiAgICogVGFrZSB0aGUgYW5zd2VyIGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4sIGZhbGxpbmcgYmFjayB0byBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzXG4gICAqIGZvbGRlciwgaW5zaWRlIGl0LiBUaGUgZGVmYXVsdCwgYW5kIHJlc29sdmVkIExJVkUgcmF0aGVyIHRoYW4gY29waWVkLlxuICAgKi9cbiAgQXV0byA9ICdBdXRvJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvL2NoYXJsaWUvPG5hbWU+Lm1kYC5cbiAgICovXG4gIEluc2lkZUZvbGRlciA9ICdJbnNpZGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgaGFzIG5vIGZvbGRlciBub3RlcyBhdCBhbGwsIHNvIGV2ZXJ5IGZvbGRlciBhbnN3ZXJzIGBudWxsYC4gVGhpcyBpcyBhbHNvIGhvdyBhIGNhbGxlciBvcHRzXG4gICAqIG91dCBvZiBmb2xkZXItbm90ZSBiZWhhdmlvciBlbnRpcmVseS5cbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIGBhbHBoYS9icmF2by88bmFtZT4ubWRgLCBiZXNpZGUgdGhlIGZvbGRlci5cbiAgICovXG4gIFBhcmVudEZvbGRlciA9ICdQYXJlbnRGb2xkZXInXG59XG5cbi8qKlxuICogQSBmb2xkZXItbm90ZSBzZXR1cCB3aXRoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gYWxyZWFkeSByZXNvbHZlZCB0byBhIGNvbmNyZXRlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCBXSVRIT1VUIHRoZSBsZWFkaW5nIGRvdCwgaW4gcmVzb2x1dGlvbiBvcmRlciDigJQgdGhlIGZpcnN0IG9uZVxuICAgKiB0aGF0IG5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgd2lucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gICAqXG4gICAqIFJlYWQgcmF0aGVyIHRoYW4gYWN0ZWQgdXBvbiBoZXJlOiBpdCBjaGFuZ2VzIG5vdGhpbmcgYWJvdXQgV0hJQ0ggZmlsZSBpcyB0aGUgZm9sZGVyIG5vdGUsIGJ1dCBhIGNhbGxlclxuICAgKiB0aGF0IHJldmVhbHMgdGhlIG5vdGUgaGFzIHRvIGtub3cgdGhlcmUgaXMgbm90aGluZyB0byByZXZlYWwgYW5kIGZhbGwgYmFjayB0byByZXZlYWxpbmcgdGhlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlciB8IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lIHwgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGZvbGRlciBub3RlIG9mIGEgZm9sZGVyLCBXSVRIT1VUIGl0cyBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZTsgYW4gZW1wdHkgKG9yIGJsYW5rKSBuYW1lIG1lYW5zIHRoZSBmb2xkZXIgaGFzIG5vIGZvbGRlciBub3RlLlxuICAgKi9cbiAgLy8gQSBmdW5jdGlvbiBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIG1ldGhvZCwgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYWxvbmUgY2FsbGJhY2ssIG5ldmVyIGEgbWV0aG9kIG9mIHRoZVxuICAvLyBjb25maWcg4oCUIHdoaWNoIGlzIGFsc28gd2hhdCBsZXRzIGl0IGJlIGRlc3RydWN0dXJlZCBhbmQgaGFuZGVkIG9uIHdpdGhvdXQgdHJpcHBpbmcgYHVuYm91bmQtbWV0aG9kYC5cbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBkb3QsIGluIHJlc29sdXRpb24gb3JkZXIuIElnbm9yZWRcbiAgICogdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSwgd2hpY2ggdGFrZXMgdGhlIGluc3RhbGxlZCBwbHVnaW4ncyBhbnN3ZXIgd2hvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gSWdub3JlZCB1bmRlciB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlciwgV0lUSE9VVCBpdHMgZXh0ZW5zaW9uLiBJZ25vcmVkIHVuZGVyXG4gICAqIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIG5hbWVzIHRoZSBub3RlIHRoZSB3YXkgdGhlIGluc3RhbGxlZCBwbHVnaW4gZG9lcy5cbiAgICpcbiAgICogQSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIG5hbWUgdGVtcGxhdGUsIGJlY2F1c2UgYSB0ZW1wbGF0ZSBuZWVkcyBhIHRva2VuIHZvY2FidWxhcnkgYW5kIHRoaXMgbGlicmFyeVxuICAgKiBoYXMgbm9uZSB0byBpbXBvc2Ug4oCUIGEgY2FsbGVyIHRoYXQgaGFzIG9uZSAoYHt7Zm9sZGVyTmFtZX19YCwgYHt7Zm9sZGVyUGF0aH19YCwg4oCmKSByZW5kZXJzIGl0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgLy8gU2VlIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLnJlc29sdmVOYW1lfSBmb3Igd2h5IHRoaXMgaXMgYSBmdW5jdGlvbiBwcm9wZXJ0eS5cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBhbHJlYWR5LXJlc29sdmVkIHNldHVwIHRvIHVzZS5cbiAgICpcbiAgICogT21pdHRlZCBtZWFucyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IOKAlCB0aGUgc2V0dXAgaXMgcmVzb2x2ZWQgb24gdGhlIHNwb3QsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogYHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBmb2xkZXIgfSlgIHRoZSBvbmUtbGluZXIgZXZlcnkgY2FsbGVyIHdhbnRzLiBQYXNzIG9uZSB3aGVuIHRoZSBzYW1lIHNldHVwIGlzXG4gICAqIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG9yIHdoZW4gaXRzIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLmlzSGlkZGVufSBpcyBuZWVkZWQgYWxvbmdzaWRlIHRoZSBub3RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIGZvbGRlciBub3RlIGlzIHdhbnRlZC4gUmVhZCBBRlRFUiBhbnkgcmVuYW1lOiB0aGUgbm90ZSBpcyBuYW1lZCBmcm9tIHRoZSBmb2xkZXInc1xuICAgKiBDVVJSRU5UIG5hbWUsIGFuZCBhIGBmb2xkZXItbm90ZXNgIGluc3RhbGwgd2l0aCBgc3luY0ZvbGRlck5hbWVgIG9uIHdpbGwgaGF2ZSByZW5hbWVkIGl0IGFscmVhZHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IFRGb2xkZXI7XG59XG5cbi8qKlxuICogVGhlIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIGlkLCBhcyBpdHMgbWFuaWZlc3QgZGVjbGFyZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBGT0xERVJfTk9URVNfUExVR0lOX0lEID0gJ2ZvbGRlci1ub3Rlcyc7XG5cbi8qKlxuICogVGhlIG9uZSB0b2tlbiBgZm9sZGVyLW5vdGVzYCcgb3duIG5hbWUgdGVtcGxhdGUgdW5kZXJzdGFuZHMuIEV2ZXJ5IG90aGVyIGNoYXJhY3RlciBpbiB0aGF0IHRlbXBsYXRlIGlzXG4gKiBhIGxpdGVyYWwsIHNvIHRyYW5zbGF0aW5nIHRoaXMgdG9rZW4gaXMgdGhlIHdob2xlIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAqL1xuY29uc3QgRk9MREVSX05PVEVTX0ZPTERFUl9OQU1FX1RPS0VOX1JFR19FWFAgPSAvXFx7XFx7Zm9sZGVyX25hbWVcXH1cXH0vZ2k7XG5cbi8qKlxuICogYGZvbGRlci1ub3Rlc2Agb2ZmZXJzIGBFeGNhbGlkcmF3YCBmb2xkZXIgbm90ZXMsIHdoaWNoIGFyZSBNYXJrZG93biBmaWxlcyB3aXRoIGFuIGBFeGNhbGlkcmF3YCBwYXlsb2FkIOKAlCBpdHNcbiAqIG93biByZXNvbHZlciBub3JtYWxpemVzIHRoZSB0eXBlIHRoZSBzYW1lIHdheSBiZWZvcmUgbG9va2luZyB0aGUgZmlsZSB1cC5cbiAqL1xuY29uc3QgRVhDQUxJRFJBV19GSUxFX0VYVEVOU0lPTiA9ICdleGNhbGlkcmF3JztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gZmFsbHMgYmFjayB0bzogdGhlIGxheW91dCBldmVyeSBmb2xkZXItbm90ZSBwbHVnaW4gc3VwcG9ydHMsIGFuZFxuICogdGhlIG9uZSBgZm9sZGVyLW5vdGVzYCBpdHNlbGYgc2hpcHMgYXMgaXRzIGRlZmF1bHQuIE5vdGhpbmcgaGlkZXMgYSBub3RlIHdoZW4gbm8gcGx1Z2luIGlzIHRoZXJlIHRvIGhpZGVcbiAqIGl0LCBzbyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgYGZhbHNlYC5cbiAqL1xuY29uc3QgRkFMTEJBQ0tfRk9MREVSX05PVEVfQ09ORklHOiBGb2xkZXJOb3RlQ29uZmlnID0ge1xuICBleHRlbnNpb25zOiBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyLFxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PiBmb2xkZXIubmFtZVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIGZvbGRlcidzIGZvbGRlciBub3RlIOKAlCB0aGUgb25lIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyIGl0c2VsZi5cbiAqXG4gKiAqKk5ldmVyIGNyZWF0ZXMuKiogQSBmb2xkZXIgdGhhdCBoYXMgbm8gZm9sZGVyIG5vdGUgYW5zd2VycyBgbnVsbGAsIGFuZCBzbyBkb2VzIHRoZSB2YXVsdCByb290IHVuZGVyXG4gKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcn0gKG5vdGhpbmcgY2FuIHNpdCBiZXNpZGUgaXQpLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciBub3RlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGUocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgYXBwLCBmb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgaWYgKGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXIgPyBmb2xkZXIucGFyZW50Py5wYXRoIDogZm9sZGVyLnBhdGg7XG4gIGlmIChwYXJlbnRGb2xkZXJQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vdGVOYW1lID0gY29uZmlnLnJlc29sdmVOYW1lKGZvbGRlcikudHJpbSgpO1xuICBpZiAoIW5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBjb25maWcuZXh0ZW5zaW9ucykge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChub3JtYWxpemVQYXRoKGpvaW4ocGFyZW50Rm9sZGVyUGF0aCwgYCR7bm90ZU5hbWV9LiR7ZXh0ZW5zaW9ufWApKSk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gaW50byBhIGNvbmNyZXRlIGZvbGRlci1ub3RlIHNldHVwLlxuICpcbiAqIGBmb2xkZXItbm90ZXNgJyBgdmF1bHRGb2xkZXJgIHN0b3JhZ2UgKGV2ZXJ5IGZvbGRlciBub3RlIHBvb2xlZCBpbiBvbmUgY2VudHJhbCBmb2xkZXIpIGhhcyBub1xuICogY291bnRlcnBhcnQgaGVyZSBhbmQgZmFsbHMgYmFjayByYXRoZXIgdGhhbiBndWVzc2luZzogd2l0aCB0aGUgbm90ZXMgcG9vbGVkLCB0aGUgbm90ZSBiZWxvbmdpbmcgdG8gYVxuICogZm9sZGVyIGlzIG5vIGxvbmdlciBkZXJpdmFibGUgZnJvbSB0aGF0IGZvbGRlcidzIHBhdGggYWxvbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzZXR1cCwgYW5kIHRoZSBhcHAgdG8gcmVhZCB0aGUgaW5zdGFsbGVkIHBsdWdpbiBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHNldHVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyk6IEZvbGRlck5vdGVDb25maWcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgaXNIaWRkZW4sXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gbG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbiAhPT0gRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG9cbiAgICA/IHtcbiAgICAgIGV4dGVuc2lvbnM6IG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucyA/PyBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dKSxcbiAgICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA/PyBmYWxzZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzb2x2ZU5hbWU6IHJlc29sdmVOYW1lID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRy5yZXNvbHZlTmFtZVxuICAgIH1cbiAgICA6IHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHApID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4dGVuc2lvbnMgdGhlIHdheSBgZm9sZGVyLW5vdGVzYCBkb2VzIGJlZm9yZSBpdCBsb29rcyBhIGZpbGUgdXA6IG5vIGxlYWRpbmcgZG90LCBsb3dlci1jYXNlLFxuICogYEV4Y2FsaWRyYXdgIHRyZWF0ZWQgYXMgTWFya2Rvd24sIGJsYW5rcyBkcm9wcGVkLCBkdXBsaWNhdGVzIGNvbGxhcHNlZCB3aGlsZSBrZWVwaW5nIHRoZSBmaXJzdCBvY2N1cnJlbmNlJ3NcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25zIC0gVGhlIGV4dGVuc2lvbnMgYXMgY29uZmlndXJlZC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGV4dGVuc2lvbnMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC4vLCAnJykpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24gPT09IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA6IGV4dGVuc2lvbilcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gWy4uLm5ldyBTZXQobm9ybWFsaXplZEV4dGVuc2lvbnMpXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIG93biBjb25maWd1cmF0aW9uLCBpZiBpdCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgdGhlIHdheVxuICogaXQgZG9jdW1lbnRzLlxuICpcbiAqIEV2ZXJ5IHZhbHVlIGlzIHJlYWQgYXMgYHVua25vd25gIGFuZCBjaGVja2VkLCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoaXMgaXMgYW5vdGhlclxuICogcGx1Z2luJ3MgcHJpdmF0ZSBzZXR0aW5ncyBvYmplY3QsIHNvIGEgdmVyc2lvbiB0aGF0IHJlbmFtZXMgb3IgZHJvcHMgYSBrZXkgbXVzdCBkZWdyYWRlIHRvIHRoZSBmYWxsYmFja1xuICogaW5zdGVhZCBvZiB0aHJvd2luZyBpbnNpZGUgYSBjbGljayBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHBsdWdpbiBpcyBhYnNlbnQsIG5vdCBjb25maWd1cmVkLCBvciBzZXQgdG8gYSBzdG9yYWdlXG4gKiBsb2NhdGlvbiB3aXRoIG5vIGNvdW50ZXJwYXJ0IGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHA6IEFwcCk6IEZvbGRlck5vdGVDb25maWcgfCBudWxsIHtcbiAgY29uc3QgZm9sZGVyTm90ZXNQbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oRk9MREVSX05PVEVTX1BMVUdJTl9JRCk7XG4gIC8vIE5hcnJvd2VkIHdpdGggYGluYCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoYXQga2VlcHMgZXZlcnkgdmFsdWUgYmVsb3cgdHlwZWQgYHVua25vd25gLFxuICAvLyB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSBmb3JlaWduIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3MgYXJlLlxuICBpZiAoIWZvbGRlck5vdGVzUGx1Z2luIHx8ICEoJ3NldHRpbmdzJyBpbiBmb2xkZXJOb3Rlc1BsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVzU2V0dGluZ3M6IHVua25vd24gPSBmb2xkZXJOb3Rlc1BsdWdpbi5zZXR0aW5ncztcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3Rlc1NldHRpbmdzICE9PSAnb2JqZWN0JyB8fCBmb2xkZXJOb3Rlc1NldHRpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHRvRm9sZGVyTm90ZUxvY2F0aW9uKCdzdG9yYWdlTG9jYXRpb24nIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN0b3JhZ2VMb2NhdGlvbiA6IG51bGwpO1xuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlTmFtZSA9ICdmb2xkZXJOb3RlTmFtZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgOiBudWxsO1xuICBpZiAodHlwZW9mIGZvbGRlck5vdGVOYW1lICE9PSAnc3RyaW5nJyB8fCAhZm9sZGVyTm90ZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVUeXBlID0gJ2ZvbGRlck5vdGVUeXBlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSA6IG51bGw7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVUeXBlcyA9ICdzdXBwb3J0ZWRGaWxlVHlwZXMnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN1cHBvcnRlZEZpbGVUeXBlcyA6IG51bGw7XG4gIGNvbnN0IGlzSGlkZGVuID0gJ2hpZGVGb2xkZXJOb3RlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5oaWRlRm9sZGVyTm90ZSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBJdHMgb3duIHJlc29sdmVyIHRyaWVzIHRoZSBwcmltYXJ5IHR5cGUgZmlyc3QgYW5kIGV2ZXJ5IG90aGVyIHN1cHBvcnRlZCB0eXBlIGFmdGVyIGl0LCB3aGljaCBpcyB0aGVcbiAgICAvLyBvcmRlciByZXByb2R1Y2VkIGhlcmUuIEFuIHVudXNhYmxlIHBhaXIgbGVhdmVzIE1hcmtkb3duLCB0aGUgZXh0ZW5zaW9uIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkXG4gICAgLy8gd2l0aG91dC5cbiAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKFtcbiAgICAgIHR5cGVvZiBmb2xkZXJOb3RlVHlwZSA9PT0gJ3N0cmluZycgPyBmb2xkZXJOb3RlVHlwZSA6IE1BUktET1dOX0ZJTEVfRVhURU5TSU9OLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3VwcG9ydGVkRmlsZVR5cGVzKSA/IHN1cHBvcnRlZEZpbGVUeXBlcy5maWx0ZXIoKHR5cGU6IHVua25vd24pID0+IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxuICAgIF0pLFxuICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgICBsb2NhdGlvbixcbiAgICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PlxuICAgICAgcmVwbGFjZUFsbCh7XG4gICAgICAgICRzdHJpbmc6IGZvbGRlck5vdGVOYW1lLFxuICAgICAgICAvLyBBIGZ1bmN0aW9uIHJlcGxhY2VyLCBzbyBhIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgYCQmYCBpcyBpbnNlcnRlZCBsaXRlcmFsbHkuXG4gICAgICAgIHJlcGxhY2VyOiAoKSA9PiBmb2xkZXIubmFtZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQXG4gICAgICB9KVxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYGZvbGRlci1ub3Rlc2AnIGBzdG9yYWdlTG9jYXRpb25gIG9udG8gdGhpcyBsaWJyYXJ5J3Mgb3duIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBzdG9yYWdlTG9jYXRpb24gLSBUaGUgdmFsdWUgcmVhZCBvdXQgb2YgdGhhdCBwbHVnaW4ncyBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiwgb3IgYG51bGxgIGZvciBgdmF1bHRGb2xkZXJgIGFuZCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIGl0cyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRvRm9sZGVyTm90ZUxvY2F0aW9uKHN0b3JhZ2VMb2NhdGlvbjogdW5rbm93bik6IEZvbGRlck5vdGVDb25maWdbJ2xvY2F0aW9uJ10gfCBudWxsIHtcbiAgc3dpdGNoIChzdG9yYWdlTG9jYXRpb24pIHtcbiAgICBjYXNlICdpbnNpZGVGb2xkZXInOiB7XG4gICAgICByZXR1cm4gRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcjtcbiAgICB9XG4gICAgY2FzZSAncGFyZW50Rm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsa0JBQXFCO0FBQ3JCLG9CQUEyQjtBQUMzQixzQkFBOEI7QUFFOUIseUJBQXdDO0FBV2pDLElBQUsscUJBQUwsa0JBQUtBLHdCQUFMO0FBS0wsRUFBQUEsb0JBQUEsVUFBTztBQUtQLEVBQUFBLG9CQUFBLGtCQUFlO0FBTWYsRUFBQUEsb0JBQUEsVUFBTztBQUtQLEVBQUFBLG9CQUFBLGtCQUFlO0FBckJMLFNBQUFBO0FBQUEsR0FBQTtBQXNJTCxNQUFNLHlCQUF5QjtB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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoZXJlIGEgZm9sZGVyJ3MgZm9sZGVyIG5vdGUgbGl2ZXMuXG4gKlxuICogVGhlIHRocmVlIGNvbmNyZXRlIG1lbWJlcnMgYXJlIHRoZSBzaGFwZXMgdGhlIGZvbGRlci1ub3RlIGVjb3N5c3RlbSBhY3R1YWxseSB1c2VzOlxuICogYGNoYXJsaWUvY2hhcmxpZS5tZGAgYW5kIGBjaGFybGllL2luZGV4Lm1kYCBhcmUgYm90aCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcn0gKHRoZXlcbiAqIGRpZmZlciBvbmx5IGluIHRoZSBOQU1FLCB3aGljaCBpcyB3aHkgbmFtaW5nIGlzIGEgY2FsbGJhY2sgYW5kIG5vdCBhIGZvdXJ0aCBtZW1iZXIpLCB3aGlsZVxuICogYGNoYXJsaWUubWRgIGJlc2lkZSB0aGUgZm9sZGVyIGlzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyfSDigJQgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdGhhdFxuICogYFtbYWxwaGEvYnJhdm8vY2hhcmxpZV1dYCBsaW5rcyB0byBhIGZvbGRlciB3aXRoIG5vIHNwZWNpYWwgc3ludGF4LlxuICovXG5leHBvcnQgZW51bSBGb2xkZXJOb3RlTG9jYXRpb24ge1xuICAvKipcbiAgICogVGFrZSB0aGUgYW5zd2VyIGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4sIGZhbGxpbmcgYmFjayB0byBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzXG4gICAqIGZvbGRlciwgaW5zaWRlIGl0LiBUaGUgZGVmYXVsdCwgYW5kIHJlc29sdmVkIExJVkUgcmF0aGVyIHRoYW4gY29waWVkLlxuICAgKi9cbiAgQXV0byA9ICdBdXRvJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvL2NoYXJsaWUvPG5hbWU+Lm1kYC5cbiAgICovXG4gIEluc2lkZUZvbGRlciA9ICdJbnNpZGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgaGFzIG5vIGZvbGRlciBub3RlcyBhdCBhbGwsIHNvIGV2ZXJ5IGZvbGRlciBhbnN3ZXJzIGBudWxsYC4gVGhpcyBpcyBhbHNvIGhvdyBhIGNhbGxlciBvcHRzXG4gICAqIG91dCBvZiBmb2xkZXItbm90ZSBiZWhhdmlvciBlbnRpcmVseS5cbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIGBhbHBoYS9icmF2by88bmFtZT4ubWRgLCBiZXNpZGUgdGhlIGZvbGRlci5cbiAgICovXG4gIFBhcmVudEZvbGRlciA9ICdQYXJlbnRGb2xkZXInXG59XG5cbi8qKlxuICogQSBmb2xkZXItbm90ZSBzZXR1cCB3aXRoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gYWxyZWFkeSByZXNvbHZlZCB0byBhIGNvbmNyZXRlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCBXSVRIT1VUIHRoZSBsZWFkaW5nIGRvdCwgaW4gcmVzb2x1dGlvbiBvcmRlciDigJQgdGhlIGZpcnN0IG9uZVxuICAgKiB0aGF0IG5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgd2lucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gICAqXG4gICAqIFJlYWQgcmF0aGVyIHRoYW4gYWN0ZWQgdXBvbiBoZXJlOiBpdCBjaGFuZ2VzIG5vdGhpbmcgYWJvdXQgV0hJQ0ggZmlsZSBpcyB0aGUgZm9sZGVyIG5vdGUsIGJ1dCBhIGNhbGxlclxuICAgKiB0aGF0IHJldmVhbHMgdGhlIG5vdGUgaGFzIHRvIGtub3cgdGhlcmUgaXMgbm90aGluZyB0byByZXZlYWwgYW5kIGZhbGwgYmFjayB0byByZXZlYWxpbmcgdGhlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlciB8IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lIHwgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGZvbGRlciBub3RlIG9mIGEgZm9sZGVyLCBXSVRIT1VUIGl0cyBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZTsgYW4gZW1wdHkgKG9yIGJsYW5rKSBuYW1lIG1lYW5zIHRoZSBmb2xkZXIgaGFzIG5vIGZvbGRlciBub3RlLlxuICAgKi9cbiAgLy8gQSBmdW5jdGlvbiBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIG1ldGhvZCwgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYWxvbmUgY2FsbGJhY2ssIG5ldmVyIGEgbWV0aG9kIG9mIHRoZVxuICAvLyBjb25maWcg4oCUIHdoaWNoIGlzIGFsc28gd2hhdCBsZXRzIGl0IGJlIGRlc3RydWN0dXJlZCBhbmQgaGFuZGVkIG9uIHdpdGhvdXQgdHJpcHBpbmcgYHVuYm91bmQtbWV0aG9kYC5cbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBkb3QsIGluIHJlc29sdXRpb24gb3JkZXIuIElnbm9yZWRcbiAgICogdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSwgd2hpY2ggdGFrZXMgdGhlIGluc3RhbGxlZCBwbHVnaW4ncyBhbnN3ZXIgd2hvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gSWdub3JlZCB1bmRlciB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlciwgV0lUSE9VVCBpdHMgZXh0ZW5zaW9uLiBJZ25vcmVkIHVuZGVyXG4gICAqIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIG5hbWVzIHRoZSBub3RlIHRoZSB3YXkgdGhlIGluc3RhbGxlZCBwbHVnaW4gZG9lcy5cbiAgICpcbiAgICogQSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIG5hbWUgdGVtcGxhdGUsIGJlY2F1c2UgYSB0ZW1wbGF0ZSBuZWVkcyBhIHRva2VuIHZvY2FidWxhcnkgYW5kIHRoaXMgbGlicmFyeVxuICAgKiBoYXMgbm9uZSB0byBpbXBvc2Ug4oCUIGEgY2FsbGVyIHRoYXQgaGFzIG9uZSAoYHt7Zm9sZGVyTmFtZX19YCwgYHt7Zm9sZGVyUGF0aH19YCwg4oCmKSByZW5kZXJzIGl0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgLy8gU2VlIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLnJlc29sdmVOYW1lfSBmb3Igd2h5IHRoaXMgaXMgYSBmdW5jdGlvbiBwcm9wZXJ0eS5cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBhbHJlYWR5LXJlc29sdmVkIHNldHVwIHRvIHVzZS5cbiAgICpcbiAgICogT21pdHRlZCBtZWFucyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IOKAlCB0aGUgc2V0dXAgaXMgcmVzb2x2ZWQgb24gdGhlIHNwb3QsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogYHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBmb2xkZXIgfSlgIHRoZSBvbmUtbGluZXIgZXZlcnkgY2FsbGVyIHdhbnRzLiBQYXNzIG9uZSB3aGVuIHRoZSBzYW1lIHNldHVwIGlzXG4gICAqIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG9yIHdoZW4gaXRzIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLmlzSGlkZGVufSBpcyBuZWVkZWQgYWxvbmdzaWRlIHRoZSBub3RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIGZvbGRlciBub3RlIGlzIHdhbnRlZC4gUmVhZCBBRlRFUiBhbnkgcmVuYW1lOiB0aGUgbm90ZSBpcyBuYW1lZCBmcm9tIHRoZSBmb2xkZXInc1xuICAgKiBDVVJSRU5UIG5hbWUsIGFuZCBhIGBmb2xkZXItbm90ZXNgIGluc3RhbGwgd2l0aCBgc3luY0ZvbGRlck5hbWVgIG9uIHdpbGwgaGF2ZSByZW5hbWVkIGl0IGFscmVhZHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IFRGb2xkZXI7XG59XG5cbi8qKlxuICogVGhlIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIGlkLCBhcyBpdHMgbWFuaWZlc3QgZGVjbGFyZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBGT0xERVJfTk9URVNfUExVR0lOX0lEID0gJ2ZvbGRlci1ub3Rlcyc7XG5cbi8qKlxuICogVGhlIG9uZSB0b2tlbiBgZm9sZGVyLW5vdGVzYCcgb3duIG5hbWUgdGVtcGxhdGUgdW5kZXJzdGFuZHMuIEV2ZXJ5IG90aGVyIGNoYXJhY3RlciBpbiB0aGF0IHRlbXBsYXRlIGlzXG4gKiBhIGxpdGVyYWwsIHNvIHRyYW5zbGF0aW5nIHRoaXMgdG9rZW4gaXMgdGhlIHdob2xlIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAqL1xuY29uc3QgRk9MREVSX05PVEVTX0ZPTERFUl9OQU1FX1RPS0VOX1JFR19FWFAgPSAvXFx7XFx7Zm9sZGVyX25hbWVcXH1cXH0vZ2k7XG5cbi8qKlxuICogYGZvbGRlci1ub3Rlc2Agb2ZmZXJzIGBFeGNhbGlkcmF3YCBmb2xkZXIgbm90ZXMsIHdoaWNoIGFyZSBNYXJrZG93biBmaWxlcyB3aXRoIGFuIGBFeGNhbGlkcmF3YCBwYXlsb2FkIOKAlCBpdHNcbiAqIG93biByZXNvbHZlciBub3JtYWxpemVzIHRoZSB0eXBlIHRoZSBzYW1lIHdheSBiZWZvcmUgbG9va2luZyB0aGUgZmlsZSB1cC5cbiAqL1xuY29uc3QgRVhDQUxJRFJBV19GSUxFX0VYVEVOU0lPTiA9ICdleGNhbGlkcmF3JztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gZmFsbHMgYmFjayB0bzogdGhlIGxheW91dCBldmVyeSBmb2xkZXItbm90ZSBwbHVnaW4gc3VwcG9ydHMsIGFuZFxuICogdGhlIG9uZSBgZm9sZGVyLW5vdGVzYCBpdHNlbGYgc2hpcHMgYXMgaXRzIGRlZmF1bHQuIE5vdGhpbmcgaGlkZXMgYSBub3RlIHdoZW4gbm8gcGx1Z2luIGlzIHRoZXJlIHRvIGhpZGVcbiAqIGl0LCBzbyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgYGZhbHNlYC5cbiAqL1xuY29uc3QgRkFMTEJBQ0tfRk9MREVSX05PVEVfQ09ORklHOiBGb2xkZXJOb3RlQ29uZmlnID0ge1xuICBleHRlbnNpb25zOiBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyLFxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PiBmb2xkZXIubmFtZVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIGZvbGRlcidzIGZvbGRlciBub3RlIOKAlCB0aGUgb25lIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyIGl0c2VsZi5cbiAqXG4gKiAqKk5ldmVyIGNyZWF0ZXMuKiogQSBmb2xkZXIgdGhhdCBoYXMgbm8gZm9sZGVyIG5vdGUgYW5zd2VycyBgbnVsbGAsIGFuZCBzbyBkb2VzIHRoZSB2YXVsdCByb290IHVuZGVyXG4gKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcn0gKG5vdGhpbmcgY2FuIHNpdCBiZXNpZGUgaXQpLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciBub3RlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGUocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgYXBwLCBmb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgaWYgKGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXIgPyBmb2xkZXIucGFyZW50Py5wYXRoIDogZm9sZGVyLnBhdGg7XG4gIGlmIChwYXJlbnRGb2xkZXJQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vdGVOYW1lID0gY29uZmlnLnJlc29sdmVOYW1lKGZvbGRlcikudHJpbSgpO1xuICBpZiAoIW5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBjb25maWcuZXh0ZW5zaW9ucykge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChub3JtYWxpemVQYXRoKGpvaW4ocGFyZW50Rm9sZGVyUGF0aCwgYCR7bm90ZU5hbWV9LiR7ZXh0ZW5zaW9ufWApKSk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gaW50byBhIGNvbmNyZXRlIGZvbGRlci1ub3RlIHNldHVwLlxuICpcbiAqIGBmb2xkZXItbm90ZXNgJyBgdmF1bHRGb2xkZXJgIHN0b3JhZ2UgKGV2ZXJ5IGZvbGRlciBub3RlIHBvb2xlZCBpbiBvbmUgY2VudHJhbCBmb2xkZXIpIGhhcyBub1xuICogY291bnRlcnBhcnQgaGVyZSBhbmQgZmFsbHMgYmFjayByYXRoZXIgdGhhbiBndWVzc2luZzogd2l0aCB0aGUgbm90ZXMgcG9vbGVkLCB0aGUgbm90ZSBiZWxvbmdpbmcgdG8gYVxuICogZm9sZGVyIGlzIG5vIGxvbmdlciBkZXJpdmFibGUgZnJvbSB0aGF0IGZvbGRlcidzIHBhdGggYWxvbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzZXR1cCwgYW5kIHRoZSBhcHAgdG8gcmVhZCB0aGUgaW5zdGFsbGVkIHBsdWdpbiBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHNldHVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyk6IEZvbGRlck5vdGVDb25maWcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgaXNIaWRkZW4sXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gbG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbiAhPT0gRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG9cbiAgICA/IHtcbiAgICAgIGV4dGVuc2lvbnM6IG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucyA/PyBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dKSxcbiAgICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA/PyBmYWxzZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzb2x2ZU5hbWU6IHJlc29sdmVOYW1lID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRy5yZXNvbHZlTmFtZVxuICAgIH1cbiAgICA6IHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHApID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4dGVuc2lvbnMgdGhlIHdheSBgZm9sZGVyLW5vdGVzYCBkb2VzIGJlZm9yZSBpdCBsb29rcyBhIGZpbGUgdXA6IG5vIGxlYWRpbmcgZG90LCBsb3dlci1jYXNlLFxuICogYEV4Y2FsaWRyYXdgIHRyZWF0ZWQgYXMgTWFya2Rvd24sIGJsYW5rcyBkcm9wcGVkLCBkdXBsaWNhdGVzIGNvbGxhcHNlZCB3aGlsZSBrZWVwaW5nIHRoZSBmaXJzdCBvY2N1cnJlbmNlJ3NcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25zIC0gVGhlIGV4dGVuc2lvbnMgYXMgY29uZmlndXJlZC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGV4dGVuc2lvbnMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC4vLCAnJykpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24gPT09IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA6IGV4dGVuc2lvbilcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gWy4uLm5ldyBTZXQobm9ybWFsaXplZEV4dGVuc2lvbnMpXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIG93biBjb25maWd1cmF0aW9uLCBpZiBpdCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgdGhlIHdheVxuICogaXQgZG9jdW1lbnRzLlxuICpcbiAqIEV2ZXJ5IHZhbHVlIGlzIHJlYWQgYXMgYHVua25vd25gIGFuZCBjaGVja2VkLCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoaXMgaXMgYW5vdGhlclxuICogcGx1Z2luJ3MgcHJpdmF0ZSBzZXR0aW5ncyBvYmplY3QsIHNvIGEgdmVyc2lvbiB0aGF0IHJlbmFtZXMgb3IgZHJvcHMgYSBrZXkgbXVzdCBkZWdyYWRlIHRvIHRoZSBmYWxsYmFja1xuICogaW5zdGVhZCBvZiB0aHJvd2luZyBpbnNpZGUgYSBjbGljayBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHBsdWdpbiBpcyBhYnNlbnQsIG5vdCBjb25maWd1cmVkLCBvciBzZXQgdG8gYSBzdG9yYWdlXG4gKiBsb2NhdGlvbiB3aXRoIG5vIGNvdW50ZXJwYXJ0IGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHA6IEFwcCk6IEZvbGRlck5vdGVDb25maWcgfCBudWxsIHtcbiAgY29uc3QgZm9sZGVyTm90ZXNQbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oRk9MREVSX05PVEVTX1BMVUdJTl9JRCk7XG4gIC8vIE5hcnJvd2VkIHdpdGggYGluYCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoYXQga2VlcHMgZXZlcnkgdmFsdWUgYmVsb3cgdHlwZWQgYHVua25vd25gLFxuICAvLyB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSBmb3JlaWduIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3MgYXJlLlxuICBpZiAoIWZvbGRlck5vdGVzUGx1Z2luIHx8ICEoJ3NldHRpbmdzJyBpbiBmb2xkZXJOb3Rlc1BsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVzU2V0dGluZ3M6IHVua25vd24gPSBmb2xkZXJOb3Rlc1BsdWdpbi5zZXR0aW5ncztcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3Rlc1NldHRpbmdzICE9PSAnb2JqZWN0JyB8fCBmb2xkZXJOb3Rlc1NldHRpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHRvRm9sZGVyTm90ZUxvY2F0aW9uKCdzdG9yYWdlTG9jYXRpb24nIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN0b3JhZ2VMb2NhdGlvbiA6IG51bGwpO1xuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlTmFtZSA9ICdmb2xkZXJOb3RlTmFtZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgOiBudWxsO1xuICBpZiAodHlwZW9mIGZvbGRlck5vdGVOYW1lICE9PSAnc3RyaW5nJyB8fCAhZm9sZGVyTm90ZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVUeXBlID0gJ2ZvbGRlck5vdGVUeXBlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSA6IG51bGw7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVUeXBlcyA9ICdzdXBwb3J0ZWRGaWxlVHlwZXMnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN1cHBvcnRlZEZpbGVUeXBlcyA6IG51bGw7XG4gIGNvbnN0IGlzSGlkZGVuID0gJ2hpZGVGb2xkZXJOb3RlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5oaWRlRm9sZGVyTm90ZSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBJdHMgb3duIHJlc29sdmVyIHRyaWVzIHRoZSBwcmltYXJ5IHR5cGUgZmlyc3QgYW5kIGV2ZXJ5IG90aGVyIHN1cHBvcnRlZCB0eXBlIGFmdGVyIGl0LCB3aGljaCBpcyB0aGVcbiAgICAvLyBvcmRlciByZXByb2R1Y2VkIGhlcmUuIEFuIHVudXNhYmxlIHBhaXIgbGVhdmVzIE1hcmtkb3duLCB0aGUgZXh0ZW5zaW9uIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkXG4gICAgLy8gd2l0aG91dC5cbiAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKFtcbiAgICAgIHR5cGVvZiBmb2xkZXJOb3RlVHlwZSA9PT0gJ3N0cmluZycgPyBmb2xkZXJOb3RlVHlwZSA6IE1BUktET1dOX0ZJTEVfRVhURU5TSU9OLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3VwcG9ydGVkRmlsZVR5cGVzKSA/IHN1cHBvcnRlZEZpbGVUeXBlcy5maWx0ZXIoKHR5cGU6IHVua25vd24pID0+IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxuICAgIF0pLFxuICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgICBsb2NhdGlvbixcbiAgICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PlxuICAgICAgcmVwbGFjZUFsbCh7XG4gICAgICAgICRzdHJpbmc6IGZvbGRlck5vdGVOYW1lLFxuICAgICAgICAvLyBBIGZ1bmN0aW9uIHJlcGxhY2VyLCBzbyBhIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgYCQmYCBpcyBpbnNlcnRlZCBsaXRlcmFsbHkuXG4gICAgICAgIHJlcGxhY2VyOiAoKSA9PiBmb2xkZXIubmFtZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQXG4gICAgICB9KVxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYGZvbGRlci1ub3Rlc2AnIGBzdG9yYWdlTG9jYXRpb25gIG9udG8gdGhpcyBsaWJyYXJ5J3Mgb3duIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBzdG9yYWdlTG9jYXRpb24gLSBUaGUgdmFsdWUgcmVhZCBvdXQgb2YgdGhhdCBwbHVnaW4ncyBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiwgb3IgYG51bGxgIGZvciBgdmF1bHRGb2xkZXJgIGFuZCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIGl0cyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRvRm9sZGVyTm90ZUxvY2F0aW9uKHN0b3JhZ2VMb2NhdGlvbjogdW5rbm93bik6IEZvbGRlck5vdGVDb25maWdbJ2xvY2F0aW9uJ10gfCBudWxsIHtcbiAgc3dpdGNoIChzdG9yYWdlTG9jYXRpb24pIHtcbiAgICBjYXNlICdpbnNpZGVGb2xkZXInOiB7XG4gICAgICByZXR1cm4gRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcjtcbiAgICB9XG4gICAgY2FzZSAncGFyZW50Rm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLGtCQUFxQjtBQUNyQixvQkFBMkI7QUFDM0Isc0JBQThCO0FBRTlCLHlCQUF3QztBQVdqQyxJQUFLLHFCQUFMLGtCQUFLQSx3QkFBTDtBQUtMLEVBQUFBLG9CQUFBLFVBQU87QUFLUCxFQUFBQSxvQkFBQSxrQkFBZTtBQU1mLEVBQUFBLG9CQUFBLFVBQU87QUFLUCxFQUFBQSxvQkFBQSxrQkFBZTtBQXJCTCxTQUFBQTtBQUFBLEdBQUE7QUFzSUwsTUFBTSx5QkFBeUI7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
@@ -77,7 +77,8 @@ ensureBrowserProcess();
77
77
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
78
  return originalRequire?.(id);
79
79
  }
80
- if (globalThis.app.isMobile) {
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
81
82
  if (id === "process" || id === "node:process") {
82
83
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
83
84
  return process;
@@ -426,4 +427,4 @@ function stringifyFlow(value) {
426
427
  enableFrontmatterFormattingPreservation,
427
428
  preserveFrontmatterFormatting
428
429
  });
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci1mb3JtYXR0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXdyaXRlcyBhIG5vdGUncyBZQU1MIGZyb250IG1hdHRlciBieSBzcGxpY2luZyBpdHMgY29uY3JldGUgc3ludGF4IHRyZWUsIHNvIGV2ZXJ5IHJlZ2lvbiBhIGNoYW5nZSBkb2VzIG5vdCByZWFjaFxuICoga2VlcHMgdGhlIGV4YWN0IGJ5dGVzIGl0cyBhdXRob3Igd3JvdGUg4oCUIGNvbW1lbnRzIGFuZCB0aGUgd2hpdGVzcGFjZSBpbnNpZGUgdGhlbSwgcXVvdGluZyBzdHlsZSwgYmxhbmsgbGluZXMsXG4gKiBpbmRlbnRhdGlvbiB3aWR0aCwgZmxvdyB2ZXJzdXMgYmxvY2sgY29sbGVjdGlvbnMsIGFuZCBmb2xkZWQgYW5kIGxpdGVyYWwgc2NhbGFycy5cbiAqXG4gKiBPYnNpZGlhbidzIG93biBgcHJvY2Vzc0Zyb250TWF0dGVyKClgIHBhcnNlcyB0aGUgYmxvY2sgdG8gYSBwbGFpbiBvYmplY3QgYW5kIHJlLXN0cmluZ2lmaWVzIHRoZSB3aG9sZSBvZiBpdCwgc28gYVxuICogY2FsbGJhY2sgdGhhdCBjaGFuZ2VzIG9uZSBrZXkgcmV3cml0ZXMgZXZlcnkgb3RoZXIuIFJlLWVtaXR0aW5nIHRoZSBwYXJzZWQgZG9jdW1lbnQgaW5zdGVhZCBvZiB0aGUgcmF3IHRleHQgZG9lcyBub3RcbiAqIGZpeCB0aGF0OiBmaXZlIG9mIHRoZSBsb3NzZXMgc3Vydml2ZSBldmVyeSBlbWl0IG9wdGlvbiB0aGUgYHlhbWxgIHBhY2thZ2Ugb2ZmZXJzLiBTcGxpY2luZyB0aGUgQ1NUIGRvZXMgZml4IGl0LFxuICogYmVjYXVzZSBhbiB1bnRvdWNoZWQgdG9rZW4gaXMgbmV2ZXIgcmUtZW1pdHRlZCBhdCBhbGwg4oCUIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWVtZWxpL3lhbWwgfCB0aGUgbGlicmFyeX0ga2VlcHNcbiAqIGVhY2ggdG9rZW4ncyBvcmlnaW5hbCBzb3VyY2UgdGV4dCBhbmQge0BsaW5rIGh0dHBzOi8vZWVtZWxpLm9yZy95YW1sLyNjc3QtcGFyc2VyIHwgYENTVC5zdHJpbmdpZnlgfSBjb25jYXRlbmF0ZXMgaXQuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgREVMSUJFUkFURUxZIG5vdCBvbiB0aGUgZGVmYXVsdCBwYXRoLiBJdCBuZWVkcyB0aGUgYHlhbWxgIHBhY2thZ2UncyBDU1QgQVBJLCB3aGljaCBPYnNpZGlhbiBkb2VzIG5vdFxuICogaGFuZCB0byBwbHVnaW5zIHRocm91Z2ggaXRzIG1vZHVsZSBtYXAg4oCUIHRoYXQgbWFwIGlzIGBvYnNpZGlhbmAsIGBAY29kZW1pcnJvci8qYCBhbmQgYEBsZXplci8qYCBhbmQgbm90aGluZyBlbHNlIOKAlFxuICogc28gdGhlIHBhY2thZ2UgY2Fubm90IGJlIG1hcmtlZCBleHRlcm5hbCBhbmQgbGFuZHMgaW4gdGhlIGNvbnN1bWluZyBwbHVnaW4ncyBgbWFpbi5qc2AsIGFib3V0IDEwMCBLQiBvZiBpdC4gQSBwbHVnaW5cbiAqIG9wdHMgaW4gYnkgY2FsbGluZyB7QGxpbmsgZW5hYmxlRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmF0aW9ufSBvbmNlLCBhbmQgb25seSBpdCBwYXlzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFBhcnNlZE5vZGVcbn0gZnJvbSAneWFtbCc7XG5cbmltcG9ydCB7XG4gIGNhc3RUbyxcbiAgaXNEZWVwRXF1YWxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBpbnNlcnRBdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHtcbiAgZ2V0RnJvbnRNYXR0ZXJJbmZvLFxuICBwYXJzZVlhbWwsXG4gIHN0cmluZ2lmeVlhbWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIsXG4gIENTVCxcbiAgaXNBbGlhcyxcbiAgcGFyc2VEb2N1bWVudCxcbiAgUGFyc2VyLFxuICBzdHJpbmdpZnksXG4gIHZpc2l0XG59IGZyb20gJ3lhbWwnO1xuXG5pbXBvcnQge1xuICBjaGVja0lzUGxhaW5PYmplY3QsXG4gIHJlZ2lzdGVyRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuXG4vKipcbiAqIEEgYmxvY2sgb3IgZmxvdyBjb2xsZWN0aW9uIHRva2VuIHdob3NlIGl0ZW1zIHRoZSBzcGxpY2UgcmVhcnJhbmdlcy5cbiAqL1xudHlwZSBDb2xsZWN0aW9uVG9rZW4gPSBDU1QuQmxvY2tNYXAgfCBDU1QuQmxvY2tTZXF1ZW5jZTtcblxuLyoqXG4gKiBPbmUgc3RlcCBvZiB0aGUgZWRpdCBzY3JpcHQge0BsaW5rIGJ1aWxkRWRpdFNjcmlwdH0gZGVyaXZlcyBmb3IgYSBzZXF1ZW5jZS5cbiAqXG4gKiBga2VlcGAgcmV1c2VzIHRoZSBvbGQgaXRlbSdzIHRva2VuIHVudG91Y2hlZCwgYG1lcmdlYCByZXVzZXMgaXQgYW5kIHJld3JpdGVzIGl0cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIGBpbnNlcnRgXG4gKiBlbWl0cyBhIGJyYW5kIG5ldyBpdGVtLiBBIHJlbW92YWwgcHJvZHVjZXMgbm8gc3RlcCBhdCBhbGwg4oCUIGl0IGlzIHNpbXBseSBhbiBvbGQgaW5kZXggbm8gc3RlcCBuYW1lcy5cbiAqL1xuaW50ZXJmYWNlIEVkaXRTdGVwIHtcbiAgcmVhZG9ubHkga2luZDogJ2luc2VydCcgfCAna2VlcCcgfCAnbWVyZ2UnO1xuICByZWFkb25seSBuZXdJbmRleDogbnVtYmVyO1xuICByZWFkb25seSBvbGRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBgc2VwYCBhbmQgYHZhbHVlYCB0b2tlbnMgb2YgYSBmcmVzaGx5IGVtaXR0ZWQgYmxvY2stbWFwIGl0ZW0sIHJlYWR5IHRvIGJlIHRyYW5zcGxhbnRlZCBvbnRvIGFuIGV4aXN0aW5nIG9uZS5cbiAqL1xuaW50ZXJmYWNlIE1hcEl0ZW1Ub2tlbnMge1xuICByZWFkb25seSBzZXBhcmF0b3JUb2tlbnM6IENTVC5Tb3VyY2VUb2tlbltdO1xuICByZWFkb25seSB2YWx1ZTogQ1NULlRva2VuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgc2VxdWVuY2UgbG9uZyBlbm91Z2ggdGhhdCB0aGUgcXVhZHJhdGljIGVkaXQgc2NyaXB0IHN0b3BzIGJlaW5nIHdvcnRoIGl0cyBjb3N0LlxuICpcbiAqIEEgZnJvbnQgbWF0dGVyIHNlcXVlbmNlIGlzIGEgdGFnIGxpc3Qgb3IgYW4gYWxpYXMgbGlzdCwgc28gdGhpcyBpcyBuZXZlciBhcHByb2FjaGVkIGluIHByYWN0aWNlOyBpdCBpcyBoZXJlIHNvIHRoYXQgYVxuICogcGF0aG9sb2dpY2FsIG9uZSBkZWdyYWRlcyB0byBhIHdob2xlLWNvbGxlY3Rpb24gcmUtZW1pdCBpbnN0ZWFkIG9mIHN0YWxsaW5nIHRoZSB3cml0ZSBxdWV1ZS5cbiAqL1xuY29uc3QgRURJVF9TQ1JJUFRfQ0VMTF9MSU1JVCA9IDEwXzAwMDtcblxuLyoqXG4gKiBXaGF0IGEgbWFwcGluZyBlbWl0cyBhcyB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgdmFsdWVzIGlzIGB1bmRlZmluZWRgLCBpLmUuIHdoZW4gaXQgaGFzIG5vdGhpbmcgdG8gd3JpdGUgYXQgYWxsLlxuICovXG5jb25zdCBFTVBUWV9NQVBQSU5HX0ZSQUdNRU5UID0gJ3t9JztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBPYnNpZGlhbiBpdHNlbGYgcGFzc2VzIHRvIGBzdHJpbmdpZnkoKWAsIHJlYWQgb3V0IG9mIGl0cyBidW5kbGUuXG4gKlxuICogRXZlcnkgZnJhZ21lbnQgdGhpcyBtb2R1bGUgZW1pdHMgZ29lcyB0aHJvdWdoIHRoZW0sIHNvIGEgZnJhZ21lbnQgaXQgd3JpdGVzIGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBvbmUgdGhlXG4gKiBwYXJzZS1hbmQtc3RyaW5naWZ5IHBhdGggd291bGQgaGF2ZSB3cml0dGVuIGZvciB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xuY29uc3QgT0JTSURJQU5fU1RSSU5HSUZZX09QVElPTlMgPSB7XG4gIGFsaWFzRHVwbGljYXRlT2JqZWN0czogZmFsc2UsXG4gIGxpbmVXaWR0aDogMCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYG51bGxTdHJgIGlzIHRoZSBgeWFtbGAgcGFja2FnZSdzIG93biBvcHRpb24gbmFtZS5cbiAgbnVsbFN0cjogJydcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogVGhlIGtleSBhIGZyYWdtZW50IGlzIGVtaXR0ZWQgdW5kZXIgd2hlbiBvbmx5IGl0cyB2YWx1ZSBpcyB3YW50ZWQuIE5ldmVyIHJlYWNoZXMgdGhlIG91dHB1dC5cbiAqL1xuY29uc3QgUExBQ0VIT0xERVJfS0VZID0gJ2snO1xuXG4vKipcbiAqIFRoZSBgQXJyYXkuYXQoKWAgaW5kZXggb2YgdGhlIHRva2VuIGJlZm9yZSB0aGUgbGFzdCBvbmUsIHdoaWNoIGlzIHdoZXJlIGEgbmV3bGluZSBzaXRzIHdoZW4gYW4gaW5kZW50IGZvbGxvd3MgaXQuXG4gKi9cbmNvbnN0IFNFQ09ORF9UT19MQVNUX0lOREVYID0gLTI7XG5cbmNvbnN0IFRSQUlMSU5HX05FV0xJTkVfUkVHX0VYUCA9IC9cXG4kLztcblxuY29uc3QgVU5SRVNPTFZFRF9UQUdfV0FSTklOR19DT0RFID0gJ1RBR19SRVNPTFZFX0ZBSUxFRCc7XG5cbi8qKlxuICogT25lIHN0ZXAgb2YgdGhlIHJhdyBlZGl0IHNjcmlwdCwgYmVmb3JlIHJlbW92YWxzIGFyZSBmb2xkZWQgaW50byB0aGUgaW5zZXJ0aW9ucyB0aGF0IGZvbGxvdyB0aGVtLlxuICovXG5pbnRlcmZhY2UgUmF3RWRpdFN0ZXAge1xuICByZWFkb25seSBraW5kOiAnaW5zZXJ0JyB8ICdrZWVwJyB8ICdyZW1vdmUnO1xuICByZWFkb25seSBuZXdJbmRleDogbnVtYmVyO1xuICByZWFkb25seSBvbGRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdoYXQgYENTVC5yZXNvbHZlQXNTY2FsYXJgIGhhbmRzIGJhY2sgZm9yIGEga2V5OiB0aGUgc2NhbGFyJ3Mgb3duIHRleHQsIG5ldmVyIGEgc2NoZW1hLXJlc29sdmVkIHZhbHVlLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRTY2FsYXIge1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGlzIG1vZHVsZSdzIGVuZ2luZSBhcyB0aGUgZnJvbnQgbWF0dGVyIGZvcm1hdHRpbmcgcHJlc2VydmVyIGZvciBldmVyeSB3cml0ZSB0aGlzIGxpYnJhcnkgcGVyZm9ybXMuXG4gKlxuICogQ2FsbCBpdCBvbmNlLCBmcm9tIGEgcGx1Z2luJ3MgYG9ubG9hZEltcGwoKWAuIEl0IHRha2VzIGVmZmVjdCBmb3IgYHByb2Nlc3NGcm9udG1hdHRlcigpYCwgYGFwcGx5RmlsZUNoYW5nZXMoKWAgYW5kXG4gKiBldmVyeSBvdGhlciBwYXRoIHRoYXQgcmVhY2hlcyBgc2V0RnJvbnRtYXR0ZXIoKWAsIGluY2x1ZGluZyB0aGUgb25lcyB0aGUgY2FsbGluZyBwbHVnaW4gZG9lcyBub3QgaW52b2tlIGl0c2VsZi5cbiAqXG4gKiBUaGVyZSBpcyBvbmUgcHJlc2VydmVyIHBlciByZWFsbSwgc28gdHdvIHBsdWdpbnMgdGhhdCBib3RoIGNhbGwgdGhpcyBzaW1wbHkgYWdyZWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2YXRpb24oKTogdm9pZCB7XG4gIHJlZ2lzdGVyRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyKHByZXNlcnZlRnJvbnRtYXR0ZXJGb3JtYXR0aW5nKTtcbn1cblxuLyoqXG4gKiBSZXdyaXRlcyB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgbm90ZSwga2VlcGluZyB0aGUgb3JpZ2luYWwgYnl0ZXMgb2YgZXZlcnl0aGluZyB0aGUgY2hhbmdlIGRvZXMgbm90IHJlYWNoLlxuICpcbiAqIEl0IGlzIHRoZSBlbmdpbmUge0BsaW5rIGVuYWJsZUZyb250bWF0dGVyRm9ybWF0dGluZ1ByZXNlcnZhdGlvbn0gcmVnaXN0ZXJzLCBhbmQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBhcyB3ZWxsLlxuICpcbiAqIGBudWxsYCBtZWFucyBcInRoaXMgb25lIGlzIG5vdCBtaW5lXCI6IHRoZSBibG9jayBkb2VzIG5vdCBleGlzdCwgdGhlIG5ldyBmcm9udCBtYXR0ZXIgaXMgZW1wdHkgKGJvdGggYXJlIHRoZVxuICogcGFyc2UtYW5kLXN0cmluZ2lmeSBwYXRoJ3MgYnVzaW5lc3MsIHVuY2hhbmdlZCksIG9yIHRoZSBzcGxpY2UgY291bGQgbm90IGJlIHByb3ZlZCBmYWl0aGZ1bC4gVGhlIHByb29mIGlzIG5vdFxuICogaGFuZC13YXZlZCDigJQgdGhlIHNwbGljZWQgYmxvY2sgaXMgcmUtcGFyc2VkIGFuZCBjb21wYXJlZCBhZ2FpbnN0IHRoZSB2YWx1ZSB0aGUgcGFyc2UtYW5kLXN0cmluZ2lmeSBwYXRoIHdvdWxkIGhhdmVcbiAqIHByb2R1Y2VkIGZvciB0aGUgc2FtZSBpbnB1dCwgYW5kIGFueSBkaWZmZXJlbmNlIHJldHVybnMgYG51bGxgLiBUaGF0IGlzIHdoYXQgbWFrZXMgdGhpcyBzdHJpY3RseSBiZXR0ZXIgdGhhbiB0aGF0XG4gKiBwYXRoIG9yIGlkZW50aWNhbCB0byBpdCwgYW5kIG5ldmVyIHdvcnNlLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIG5vdGUgdG8gcmV3cml0ZSB0aGUgZnJvbnQgbWF0dGVyIG9mLlxuICogQHBhcmFtIG5ld0Zyb250bWF0dGVyIC0gVGhlIGZyb250IG1hdHRlciB0byB3cml0ZS5cbiAqIEByZXR1cm5zIFRoZSBuZXcgbm90ZSwgb3IgYG51bGxgIHdoZW4gdGhlIGNhbGxlciBzaG91bGQgcGFyc2UgdGhlIGJsb2NrIGFuZCB3cml0ZSB0aGUgd2hvbGUgb2YgaXQgb3V0IGFnYWluIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZUZyb250bWF0dGVyRm9ybWF0dGluZyhjb250ZW50OiBzdHJpbmcsIG5ld0Zyb250bWF0dGVyOiBvYmplY3QpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgZnJvbnRtYXR0ZXJJbmZvID0gZ2V0RnJvbnRNYXR0ZXJJbmZvKGNvbnRlbnQpO1xuICBpZiAoIWZyb250bWF0dGVySW5mby5leGlzdHMgfHwgT2JqZWN0LmtleXMobmV3RnJvbnRtYXR0ZXIpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc3BsaWNlZEJvZHkgPSBzcGxpY2VGcm9udG1hdHRlckJvZHkoZnJvbnRtYXR0ZXJJbmZvLmZyb250bWF0dGVyLCBuZXdGcm9udG1hdHRlcik7XG4gIHJldHVybiBzcGxpY2VkQm9keSA9PT0gbnVsbFxuICAgID8gbnVsbFxuICAgIDogaW5zZXJ0QXQoe1xuICAgICAgJHN0cmluZzogY29udGVudCxcbiAgICAgIGVuZEluZGV4OiBmcm9udG1hdHRlckluZm8udG8sXG4gICAgICBzdGFydEluZGV4OiBmcm9udG1hdHRlckluZm8uZnJvbSxcbiAgICAgIHN1YnN0cmluZzogc3BsaWNlZEJvZHlcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBlZGl0IHNjcmlwdCB0aGF0IHR1cm5zIGBvbGRBcnJheWAgaW50byBgbmV3QXJyYXlgLCByZXVzaW5nIGFzIG1hbnkgb2YgdGhlIG9sZCBpdGVtcyBhcyBpdCBjYW4uXG4gKlxuICogQSBsb25nZXN0LWNvbW1vbi1zdWJzZXF1ZW5jZSBkaWZmIG92ZXIgdmFsdWUgZXF1YWxpdHkgaXMgd2hhdCByZWNvdmVycyB0aGUgQVVUSE9SJ3Mgb3BlcmF0aW9uLiBSZXBsYXlpbmcgdGhlXG4gKiBtdXRhdGlvbiBhbiBhcnJheSBtZXRob2QgcGVyZm9ybWVkIGluc3RlYWQg4oCUIGBbYSwgYiwgY10uc3BsaWNlKDEsIDEpYCB3cml0ZXMgYFsxXSA9ICdjJ2AgdGhlbiB0cnVuY2F0ZXMg4oCUIHdvdWxkXG4gKiBvdmVyd3JpdGUgYGJgJ3Mgbm9kZSB3aXRoIGBjYCdzIHZhbHVlIGFuZCBkZWxldGUgYGNgJ3Mgbm9kZSwgc28gYGJgJ3MgY29tbWVudCB3b3VsZCBlbmQgdXAgYW5ub3RhdGluZyBgY2A6IGV4YWN0bHlcbiAqIHRoZSBtaXNhdHRyaWJ1dGlvbiB0aGlzIG1vZHVsZSBleGlzdHMgdG8gcHJldmVudC5cbiAqXG4gKiBBIHJlbW92YWwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4gaW5zZXJ0aW9uIG9mIHRoZSBzYW1lIHNoYXBlIGlzIGZvbGRlZCBpbnRvIGEgc2luZ2xlIGBtZXJnZWAsIHNvIGFuIGl0ZW0gZWRpdGVkXG4gKiBpbiBwbGFjZSAoYFt7IHF0eTogMSB9XWAgdG8gYFt7IHF0eTogMiB9XWApIGtlZXBzIGl0cyBvd24gbm9kZSBhbmQgaXRzIGNvbW1lbnRzIHJhdGhlciB0aGFuIGJlaW5nIHJlYnVpbHQuXG4gKlxuICogQHBhcmFtIG9sZEFycmF5IC0gVGhlIHNlcXVlbmNlIGFzIHRoZSBzb3VyY2UgaG9sZHMgaXQuXG4gKiBAcGFyYW0gbmV3QXJyYXkgLSBUaGUgc2VxdWVuY2UgYXMgaXQgaXMgdG8gYmUgd3JpdHRlbi5cbiAqIEByZXR1cm5zIFRoZSBzdGVwcyB0byBhcHBseSwgaW4gb3V0cHV0IG9yZGVyLlxuICovXG5mdW5jdGlvbiBidWlsZEVkaXRTY3JpcHQob2xkQXJyYXk6IHJlYWRvbmx5IHVua25vd25bXSwgbmV3QXJyYXk6IHJlYWRvbmx5IHVua25vd25bXSk6IEVkaXRTdGVwW10ge1xuICBjb25zdCByYXdTdGVwcyA9IGJ1aWxkUmF3RWRpdFNjcmlwdChvbGRBcnJheSwgbmV3QXJyYXkpO1xuICBjb25zdCBzdGVwczogRWRpdFN0ZXBbXSA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByYXdTdGVwcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBzdGVwID0gY2FzdFRvPFJhd0VkaXRTdGVwPihyYXdTdGVwc1tpbmRleF0pO1xuICAgIGNvbnN0IG5leHRTdGVwID0gcmF3U3RlcHNbaW5kZXggKyAxXTtcbiAgICBpZiAoXG4gICAgICBzdGVwLmtpbmQgPT09ICdyZW1vdmUnICYmIG5leHRTdGVwPy5raW5kID09PSAnaW5zZXJ0J1xuICAgICAgJiYgY2hlY2tJc01lcmdlYWJsZShvbGRBcnJheVtzdGVwLm9sZEluZGV4XSwgbmV3QXJyYXlbbmV4dFN0ZXAubmV3SW5kZXhdKVxuICAgICkge1xuICAgICAgc3RlcHMucHVzaCh7IGtpbmQ6ICdtZXJnZScsIG5ld0luZGV4OiBuZXh0U3RlcC5uZXdJbmRleCwgb2xkSW5kZXg6IHN0ZXAub2xkSW5kZXggfSk7XG4gICAgICBpbmRleCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAua2luZCAhPT0gJ3JlbW92ZScpIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiBzdGVwLmtpbmQsIG5ld0luZGV4OiBzdGVwLm5ld0luZGV4LCBvbGRJbmRleDogc3RlcC5vbGRJbmRleCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmF3RWRpdFNjcmlwdChvbGRBcnJheTogcmVhZG9ubHkgdW5rbm93bltdLCBuZXdBcnJheTogcmVhZG9ubHkgdW5rbm93bltdKTogUmF3RWRpdFN0ZXBbXSB7XG4gIGNvbnN0IG9sZExlbmd0aCA9IG9sZEFycmF5Lmxlbmd0aDtcbiAgY29uc3QgbmV3TGVuZ3RoID0gbmV3QXJyYXkubGVuZ3RoO1xuICBjb25zdCBjb21tb25MZW5ndGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogb2xkTGVuZ3RoICsgMSB9LCAoKSA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggKyAxIH0sICgpID0+IDApKTtcblxuICBmb3IgKGxldCBvbGRJbmRleCA9IG9sZExlbmd0aCAtIDE7IG9sZEluZGV4ID49IDA7IG9sZEluZGV4LS0pIHtcbiAgICBmb3IgKGxldCBuZXdJbmRleCA9IG5ld0xlbmd0aCAtIDE7IG5ld0luZGV4ID49IDA7IG5ld0luZGV4LS0pIHtcbiAgICAgIGNvbnN0IHJvdyA9IGNhc3RUbzxudW1iZXJbXT4oY29tbW9uTGVuZ3Roc1tvbGRJbmRleF0pO1xuICAgICAgY29uc3QgbmV4dFJvdyA9IGNhc3RUbzxudW1iZXJbXT4oY29tbW9uTGVuZ3Roc1tvbGRJbmRleCArIDFdKTtcbiAgICAgIHJvd1tuZXdJbmRleF0gPSBpc0RlZXBFcXVhbChvbGRBcnJheVtvbGRJbmRleF0sIG5ld0FycmF5W25ld0luZGV4XSlcbiAgICAgICAgPyBjYXN0VG88bnVtYmVyPihuZXh0Um93W25ld0luZGV4ICsgMV0pICsgMVxuICAgICAgICA6IE1hdGgubWF4KGNhc3RUbzxudW1iZXI+KG5leHRSb3dbbmV3SW5kZXhdKSwgY2FzdFRvPG51bWJlcj4ocm93W25ld0luZGV4ICsgMV0pKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGVwczogUmF3RWRpdFN0ZXBbXSA9IFtdO1xuICBsZXQgb2xkSW5kZXggPSAwO1xuICBsZXQgbmV3SW5kZXggPSAwO1xuXG4gIHdoaWxlIChvbGRJbmRleCA8IG9sZExlbmd0aCAmJiBuZXdJbmRleCA8IG5ld0xlbmd0aCkge1xuICAgIGlmIChpc0RlZXBFcXVhbChvbGRBcnJheVtvbGRJbmRleF0sIG5ld0FycmF5W25ld0luZGV4XSkpIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiAna2VlcCcsIG5ld0luZGV4LCBvbGRJbmRleCB9KTtcbiAgICAgIG9sZEluZGV4Kys7XG4gICAgICBuZXdJbmRleCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZhbFJvdyA9IGNhc3RUbzxudW1iZXJbXT4oY29tbW9uTGVuZ3Roc1tvbGRJbmRleCArIDFdKTtcbiAgICBjb25zdCBpbnNlcnRpb25Sb3cgPSBjYXN0VG88bnVtYmVyW10+KGNvbW1vbkxlbmd0aHNbb2xkSW5kZXhdKTtcbiAgICBjb25zdCByZW1vdmFsQ29tbW9uTGVuZ3RoID0gY2FzdFRvPG51bWJlcj4ocmVtb3ZhbFJvd1tuZXdJbmRleF0pO1xuICAgIGNvbnN0IGluc2VydGlvbkNvbW1vbkxlbmd0aCA9IGNhc3RUbzxudW1iZXI+KGluc2VydGlvblJvd1tuZXdJbmRleCArIDFdKTtcbiAgICBpZiAocmVtb3ZhbENvbW1vbkxlbmd0aCA+PSBpbnNlcnRpb25Db21tb25MZW5ndGgpIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiAncmVtb3ZlJywgbmV3SW5kZXg6IC0xLCBvbGRJbmRleCB9KTtcbiAgICAgIG9sZEluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiAnaW5zZXJ0JywgbmV3SW5kZXgsIG9sZEluZGV4OiAtMSB9KTtcbiAgICAgIG5ld0luZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG9sZEluZGV4IDwgb2xkTGVuZ3RoOyBvbGRJbmRleCsrKSB7XG4gICAgc3RlcHMucHVzaCh7IGtpbmQ6ICdyZW1vdmUnLCBuZXdJbmRleDogLTEsIG9sZEluZGV4IH0pO1xuICB9XG5cbiAgZm9yICg7IG5ld0luZGV4IDwgbmV3TGVuZ3RoOyBuZXdJbmRleCsrKSB7XG4gICAgc3RlcHMucHVzaCh7IGtpbmQ6ICdpbnNlcnQnLCBuZXdJbmRleCwgb2xkSW5kZXg6IC0xIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXBzO1xufVxuXG5mdW5jdGlvbiBjaGVja0NhcnJpZXNJbmRlbnQoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtLCBpbmRlbnQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gQ1NULnN0cmluZ2lmeShpdGVtKS5yZXBsYWNlKC9eXFxuKy8sICcnKS5zdGFydHNXaXRoKCcgJy5yZXBlYXQoaW5kZW50KSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSGFzQW5jaG9yT3JBbGlhcyhjb250ZW50czogUGFyc2VkTm9kZSk6IGJvb2xlYW4ge1xuICBsZXQgaGFzQW5jaG9yT3JBbGlhcyA9IGZhbHNlO1xuXG4gIHZpc2l0KGNvbnRlbnRzLCB7XG4gICAgTm9kZShfa2V5OiB1bmtub3duLCBub2RlOiBOb2RlKTogc3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICghaXNBbGlhcyhub2RlKSAmJiBub2RlLmFuY2hvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGhhc0FuY2hvck9yQWxpYXMgPSB0cnVlO1xuICAgICAgcmV0dXJuIHZpc2l0LkJSRUFLO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGhhc0FuY2hvck9yQWxpYXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNNZXJnZWFibGUob2xkVmFsdWU6IHVua25vd24sIG5ld1ZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoY2hlY2tJc1BsYWluT2JqZWN0KG9sZFZhbHVlKSAmJiBjaGVja0lzUGxhaW5PYmplY3QobmV3VmFsdWUpKSB8fCAoQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgc3BsaWNlZCBibG9jayBhZ2FpbnN0IHRoZSBvbmUgdGhlIHBhcnNlLWFuZC1zdHJpbmdpZnkgcGF0aCB3b3VsZCBoYXZlIHdyaXR0ZW4gZm9yIHRoZSBzYW1lIHZhbHVlLlxuICpcbiAqIENvbXBhcmluZyB0aGUgdHdvIFBBUlNFRCB2YWx1ZXMgcmF0aGVyIHRoYW4gdGhlIHR3byB0ZXh0cyBpcyB0aGUgd2hvbGUgcG9pbnQ6IHRoZSB0ZXh0cyBhcmUgc3VwcG9zZWQgdG8gZGlmZmVyIOKAlCB0aGF0XG4gKiBpcyB0aGUgZm9ybWF0dGluZyB0aGlzIG1vZHVsZSBwcmVzZXJ2ZXMg4oCUIHdoaWxlIHRoZSB2YWx1ZXMgbXVzdCBub3QuIENvbXBhcmluZyBhZ2FpbnN0IHRoYXQgcGF0aCdzIG91dHB1dCByYXRoZXIgdGhhblxuICogYWdhaW5zdCBgbmV3RnJvbnRtYXR0ZXJgIGl0c2VsZiBpcyB3aGF0IG1ha2VzIHRoZSBndWFyYW50ZWUgZXhhY3QsIHNpbmNlIGJvdGggc2lkZXMgdGhlbiBjYXJyeSB0aGUgc2FtZSByb3VuZC10cmlwXG4gKiBsb3NzZXMsIGB1bmRlZmluZWRgIHZhbHVlcyBkcm9wcGVkIGFuZCB0aW1lc3RhbXBzIHJlYWQgYmFjayBhcyBkYXRlcyBhbW9uZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBzcGxpY2VkQm9keSAtIFRoZSBzcGxpY2VkIGJsb2NrIHRleHQuXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRoYXQgd2FzIHRvIGJlIHdyaXR0ZW4uXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzcGxpY2VkIGJsb2NrIHJlYWRzIGJhY2sgYXMgdGhlIHZhbHVlIHRoZSBwYXJzZS1hbmQtc3RyaW5naWZ5IHBhdGggd291bGQgaGF2ZSB3cml0dGVuLlxuICovXG5mdW5jdGlvbiBjaGVja0lzU2VtYW50aWNNYXRjaChzcGxpY2VkQm9keTogc3RyaW5nLCBuZXdGcm9udG1hdHRlcjogb2JqZWN0KTogYm9vbGVhbiB7XG4gIGxldCBzcGxpY2VkVmFsdWU6IHVua25vd247XG5cbiAgdHJ5IHtcbiAgICBzcGxpY2VkVmFsdWUgPSBwYXJzZVlhbWwoc3BsaWNlZEJvZHkpO1xuICAgIC8qXG4gICAgICogdjggaWdub3JlIHN0YXJ0IC0tIEEgbmV0LCBub3QgYSBwYXRoOiBgcGFyc2VZYW1sYCBUSFJPV1Mgb24gYSBibG9jayBpdCBjYW5ub3QgcmVhZCByYXRoZXIgdGhhbiByZXBvcnRpbmcgaXQsIGFuZFxuICAgICAqIGEgc3BsaWNlIGNvdWxkIHByb2R1Y2Ugb25lLiBBIDM2IDAwMC1tdXRhdGlvbiBkaWZmZXJlbnRpYWwgZnV6eiBmb3VuZCA5MyB0aGF0IGRpZCwgZXZlcnkgb25lIG9mIHRoZW0gdGhlXG4gICAgICogdmFsdWVsZXNzLWl0ZW0gc2hhcGUgYG5vcm1hbGl6ZUl0ZW1JbmRlbnRzYCBub3cgcmVwYWlycywgYW5kIG5vbmUgYXQgYWxsIGFmdGVyd2FyZHMg4oCUIHNvIHRoZXJlIGlzIG5vIGlucHV0IGxlZnRcbiAgICAgKiB0byBwaW4gdGhpcyB3aXRoLCBhbmQgdGhlIGNvbnRyYWN0IHRoYXQgaXQgdXBob2xkcyAoZGVjbGluZSwgbmV2ZXIgdGhyb3cpIGlzIHRoZSBvbmUgdGhpcyBtb2R1bGUncyBjYWxsZXJzIHJlbHlcbiAgICAgKiBvbi4gRG8gbm90IGRlbGV0ZSBpdCBvbiB0aGUgc3RyZW5ndGggb2YgdGhhdDogaXQgaXMgdGhlIHJlYXNvbiBhIGZ1dHVyZSBzaGFwZSBpcyBhIGZhbGxiYWNrIHJhdGhlciB0aGFuIGEgY3Jhc2guXG4gICAgICovXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICB9XG5cbiAgcmV0dXJuIGlzRGVlcEVxdWFsKHNwbGljZWRWYWx1ZSwgcGFyc2VZYW1sKHN0cmluZ2lmeVlhbWwobmV3RnJvbnRtYXR0ZXIpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBpbmRlbnQ6IG51bWJlcik6IENTVC5Db2xsZWN0aW9uSXRlbSB8IG51bGwge1xuICBjb25zdCBmcmFnbWVudCA9IHN0cmluZ2lmeSh7IFtrZXldOiB2YWx1ZSB9LCBPQlNJRElBTl9TVFJJTkdJRllfT1BUSU9OUyk7XG4gIC8vIEFuIGVtcHR5IG1hcHBpbmcgbWVhbnMgdGhlIHZhbHVlIGlzIGB1bmRlZmluZWRgLCB3aGljaCB0aGUgcmV3cml0ZSBwYXRoIGRyb3BzIGFzIHdlbGwuIERyb3AgdGhlIGtleSB3aXRoIGl0LlxuICByZXR1cm4gZnJhZ21lbnQudHJpbUVuZCgpID09PSBFTVBUWV9NQVBQSU5HX0ZSQUdNRU5UID8gbnVsbCA6IGxpZnRGcmFnbWVudEl0ZW0oZnJhZ21lbnQsIGluZGVudCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlcUl0ZW0odmFsdWU6IHVua25vd24sIGluZGVudDogbnVtYmVyKTogQ1NULkNvbGxlY3Rpb25JdGVtIHtcbiAgcmV0dXJuIGxpZnRGcmFnbWVudEl0ZW0oc3RyaW5naWZ5KFt2YWx1ZV0sIE9CU0lESUFOX1NUUklOR0lGWV9PUFRJT05TKSwgaW5kZW50LCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3BhY2VUb2tlbihpbmRlbnQ6IG51bWJlcik6IENTVC5Tb3VyY2VUb2tlbiB7XG4gIHJldHVybiB7XG4gICAgaW5kZW50LFxuICAgIG9mZnNldDogLTEsXG4gICAgc291cmNlOiAnICcucmVwZWF0KGluZGVudCksXG4gICAgdHlwZTogJ3NwYWNlJ1xuICB9O1xufVxuXG4vKipcbiAqIFJlYnVpbGRzIGEgYmxvY2sgbWFwJ3MgaXRlbXMgc28gaXQgcmVwcmVzZW50cyBgbmV3T2JqZWN0YCwgcmV1c2luZyBlYWNoIHN1cnZpdmluZyBrZXkncyBvd24gaXRlbSB0b2tlbi5cbiAqXG4gKiBUaGUgaXRlbXMgYXJlIHJlYnVpbHQgaW4gdGhlIE5FVyBvYmplY3QncyBrZXkgb3JkZXIgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZSdzLCBzbyBhIGNhbGxiYWNrIHRoYXQgc29ydHMgb3IgcmVvcmRlcnNcbiAqIGtleXMgc3RpbGwgc29ydHMgdGhlbSDigJQgdGhlIHJlb3JkZXJlZCBrZXkgc2ltcGx5IHRha2VzIGl0cyBjb21tZW50LCBpdHMgcXVvdGluZyBhbmQgaXRzIHZhbHVlIGZvcm1hdHRpbmcgd2l0aCBpdC5cbiAqXG4gKiBgZmFsc2VgIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHJlLWVtaXQgdGhpcyB3aG9sZSBjb2xsZWN0aW9uIGluc3RlYWQ6IGEgZHVwbGljYXRlIGtleSwgYSBrZXkgbm8gc3RyaW5nIGNhbiBuYW1lLCBvclxuICogYSBuZXN0ZWQgbWVyZ2UgdGhhdCBnYXZlIHVwLlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSBibG9jayBtYXAgdG8gcmVidWlsZC5cbiAqIEBwYXJhbSBvbGRPYmplY3QgLSBUaGUgbWFwcGluZyBhcyB0aGUgc291cmNlIGhvbGRzIGl0LlxuICogQHBhcmFtIG5ld09iamVjdCAtIFRoZSBtYXBwaW5nIHRvIHdyaXRlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdG9rZW4gbm93IHJlcHJlc2VudHMgYG5ld09iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGRpZE1lcmdlTWFwKHRva2VuOiBDU1QuQmxvY2tNYXAsIG9sZE9iamVjdDogR2VuZXJpY09iamVjdCwgbmV3T2JqZWN0OiBHZW5lcmljT2JqZWN0KTogYm9vbGVhbiB7XG4gIG5vcm1hbGl6ZUl0ZW1JbmRlbnRzKHRva2VuKTtcbiAgY29uc3QgaXRlbXNCeUtleSA9IG5ldyBNYXA8c3RyaW5nLCBDU1QuQ29sbGVjdGlvbkl0ZW0+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIHRva2VuLml0ZW1zKSB7XG4gICAgY29uc3Qga2V5ID0gcmVhZEl0ZW1LZXkoaXRlbSk7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCBpdGVtc0J5S2V5LmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXRlbXNCeUtleS5zZXQoa2V5LCBpdGVtKTtcbiAgfVxuXG4gIGNvbnN0IG1lcmdlZEl0ZW1zOiBDU1QuQ29sbGVjdGlvbkl0ZW1bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2tleSwgbmV3VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld09iamVjdCkpIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNCeUtleS5nZXQoa2V5KTtcblxuICAgIGlmICghaXRlbSkge1xuICAgICAgY29uc3QgY3JlYXRlZEl0ZW0gPSBjcmVhdGVNYXBJdGVtKGtleSwgbmV3VmFsdWUsIHRva2VuLmluZGVudCk7XG4gICAgICBpZiAoY3JlYXRlZEl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkSXRlbXMucHVzaChjcmVhdGVkSXRlbSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG1lcmdlSXRlbVZhbHVlKGl0ZW0sIG9sZE9iamVjdFtrZXldLCBuZXdWYWx1ZSwgdG9rZW4uaW5kZW50LCBmYWxzZSk7XG4gICAgbWVyZ2VkSXRlbXMucHVzaChpdGVtKTtcbiAgfVxuXG4gIGlmIChtZXJnZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmaW5hbGl6ZUl0ZW1zKG1lcmdlZEl0ZW1zKTtcbiAgdG9rZW4uaXRlbXMgPSBjYXN0VG88Q1NULkJsb2NrTWFwWydpdGVtcyddPihtZXJnZWRJdGVtcyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlYnVpbGRzIGEgYmxvY2sgc2VxdWVuY2UncyBpdGVtcyBzbyBpdCByZXByZXNlbnRzIGBuZXdBcnJheWAsIHJldXNpbmcgdGhlIHRva2VuIG9mIGV2ZXJ5IGl0ZW0gdGhhdCBzdXJ2aXZlcy5cbiAqXG4gKiBAcGFyYW0gdG9rZW4gLSBUaGUgYmxvY2sgc2VxdWVuY2UgdG8gcmVidWlsZC5cbiAqIEBwYXJhbSBvbGRBcnJheSAtIFRoZSBzZXF1ZW5jZSBhcyB0aGUgc291cmNlIGhvbGRzIGl0LlxuICogQHBhcmFtIG5ld0FycmF5IC0gVGhlIHNlcXVlbmNlIHRvIHdyaXRlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdG9rZW4gbm93IHJlcHJlc2VudHMgYG5ld0FycmF5YC5cbiAqL1xuZnVuY3Rpb24gZGlkTWVyZ2VTZXEodG9rZW46IENTVC5CbG9ja1NlcXVlbmNlLCBvbGRBcnJheTogcmVhZG9ubHkgdW5rbm93bltdLCBuZXdBcnJheTogcmVhZG9ubHkgdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIGlmIChvbGRBcnJheS5sZW5ndGggKiBuZXdBcnJheS5sZW5ndGggPiBFRElUX1NDUklQVF9DRUxMX0xJTUlUKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbm9ybWFsaXplSXRlbUluZGVudHModG9rZW4pO1xuICBjb25zdCBtZXJnZWRJdGVtczogQ1NULkNvbGxlY3Rpb25JdGVtW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHN0ZXAgb2YgYnVpbGRFZGl0U2NyaXB0KG9sZEFycmF5LCBuZXdBcnJheSkpIHtcbiAgICBpZiAoc3RlcC5raW5kID09PSAnaW5zZXJ0Jykge1xuICAgICAgbWVyZ2VkSXRlbXMucHVzaChjcmVhdGVTZXFJdGVtKG5ld0FycmF5W3N0ZXAubmV3SW5kZXhdLCB0b2tlbi5pbmRlbnQpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSBjYXN0VG88Q1NULkNvbGxlY3Rpb25JdGVtPih0b2tlbi5pdGVtc1tzdGVwLm9sZEluZGV4XSk7XG4gICAgaWYgKHN0ZXAua2luZCA9PT0gJ21lcmdlJykge1xuICAgICAgbWVyZ2VJdGVtVmFsdWUoaXRlbSwgb2xkQXJyYXlbc3RlcC5vbGRJbmRleF0sIG5ld0FycmF5W3N0ZXAubmV3SW5kZXhdLCB0b2tlbi5pbmRlbnQsIHRydWUpO1xuICAgIH1cblxuICAgIG1lcmdlZEl0ZW1zLnB1c2goaXRlbSk7XG4gIH1cblxuICBpZiAobWVyZ2VkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmluYWxpemVJdGVtcyhtZXJnZWRJdGVtcyk7XG4gIHRva2VuLml0ZW1zID0gY2FzdFRvPENTVC5CbG9ja1NlcXVlbmNlWydpdGVtcyddPihtZXJnZWRJdGVtcyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdpdmVzIGEgbmVzdGVkIGNvbGxlY3Rpb24ncyBmaXJzdCBpdGVtIHRoZSBsZWFkaW5nIGluZGVudCBvZiBpdHMgb3duLCBzbyB0aGUgaXRlbXMgYmVjb21lIGludGVyY2hhbmdlYWJsZS5cbiAqXG4gKiBBIG5lc3RlZCBjb2xsZWN0aW9uJ3MgZmlyc3QgaXRlbSBjYXJyaWVzIG5vIGluZGVudCBpbiB0aGUgc291cmNlOiB0aGUgaW5kZW50IHNpdHMgaW4gd2hhdGV2ZXIgcHJlY2VkZXMgdGhlXG4gKiBjb2xsZWN0aW9uIOKAlCB0aGUgc2VwYXJhdG9yJ3MgdHJhaWxpbmcgc3BhY2VzLCBvciB0aGUgZGFzaCBvZiB0aGUgc2VxdWVuY2UgaXRlbSBpdCBiZWxvbmdzIHRvLiBFdmVyeSBsYXRlciBpdGVtXG4gKiBjYXJyaWVzIGl0cyBvd24uIFJlbW92aW5nIG9yIHJlb3JkZXJpbmcgdGhlIGZpcnN0IGl0ZW0gd2l0aG91dCByZXBhaXJpbmcgdGhhdCBsZWF2ZXMgdGhlIHN1cnZpdm9yIGRvdWJseSBpbmRlbnRlZCxcbiAqIHNvIHRoZSBpbmRlbnQgaXMgbW92ZWQgb3V0IG9mIHRoZSBzZXBhcmF0b3IgYW5kIG9udG8gdGhlIGl0ZW0gYmVmb3JlIGFueXRoaW5nIGlzIHJlYXJyYW5nZWQuXG4gKlxuICogVGhlIG9uZSBzaGFwZSBpdCBjYW5ub3QgcmVwYWlyIGlzIGEgZmlyc3QgaXRlbSB3cml0dGVuIElOTElORSB3aXRoIHdoYXQgcHJlY2VkZXMgaXQgKGAtIG5hbWU6IGFgKSwgd2hlcmUgdGhlcmUgaXMgbm9cbiAqIGluZGVudCB0byBtb3ZlIGJlY2F1c2UgdGhlIGl0ZW0gaXMgbm90IGF0IHRoZSBzdGFydCBvZiBpdHMgbGluZS4gU3VjaCBhIGNvbGxlY3Rpb24gaXMgcmUtZW1pdHRlZCB3aG9sZSBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBwcmVjZWRpbmdUb2tlbnMgLSBUaGUgc2VwYXJhdG9yIHRva2VucyB0aGF0IHNpdCBiZXR3ZWVuIHRoZSBwYXJlbnQgYW5kIHRoZSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gLSBUaGUgY29sbGVjdGlvbiB3aG9zZSBmaXJzdCBpdGVtIGlzIHRvIGNhcnJ5IGl0cyBvd24gaW5kZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgY29sbGVjdGlvbidzIGl0ZW1zIGFyZSBub3cgaW50ZXJjaGFuZ2VhYmxlLlxuICovXG5mdW5jdGlvbiBkaWROb3JtYWxpemVGaXJzdEl0ZW1JbmRlbnQocHJlY2VkaW5nVG9rZW5zOiBDU1QuU291cmNlVG9rZW5bXSB8IHVuZGVmaW5lZCwgY29sbGVjdGlvbjogQ29sbGVjdGlvblRva2VuKTogYm9vbGVhbiB7XG4gIC8vIEEgcGFyc2VkIGJsb2NrIGNvbGxlY3Rpb24gYWx3YXlzIGhvbGRzIGF0IGxlYXN0IG9uZSBpdGVtLCBvciBpdCB3b3VsZCBub3QgaGF2ZSBwYXJzZWQgYXMgYSBjb2xsZWN0aW9uIGF0IGFsbC5cbiAgY29uc3QgZmlyc3RJdGVtID0gY2FzdFRvPENTVC5Db2xsZWN0aW9uSXRlbT4oY29sbGVjdGlvbi5pdGVtc1swXSk7XG5cbiAgaWYgKGNvbGxlY3Rpb24uaW5kZW50ID09PSAwIHx8IGNoZWNrQ2Fycmllc0luZGVudChmaXJzdEl0ZW0sIGNvbGxlY3Rpb24uaW5kZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgbGFzdFRva2VuID0gcHJlY2VkaW5nVG9rZW5zPy5hdCgtMSk7XG4gIGlmIChsYXN0VG9rZW4/LnR5cGUgIT09ICdzcGFjZScgfHwgcHJlY2VkaW5nVG9rZW5zPy5hdChTRUNPTkRfVE9fTEFTVF9JTkRFWCk/LnR5cGUgIT09ICduZXdsaW5lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByZWNlZGluZ1Rva2Vucy5wb3AoKTtcbiAgZmlyc3RJdGVtLnN0YXJ0LnVuc2hpZnQobGFzdFRva2VuKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGVtaXRNYXBJdGVtVG9rZW5zKHZhbHVlOiB1bmtub3duLCBpbmRlbnQ6IG51bWJlciwgc2hvdWxkUHJlZmVyRmxvdzogYm9vbGVhbik6IE1hcEl0ZW1Ub2tlbnMge1xuICBjb25zdCBmcmFnbWVudCA9IHNob3VsZFByZWZlckZsb3dcbiAgICA/IGAke1BMQUNFSE9MREVSX0tFWX06ICR7c3RyaW5naWZ5Rmxvdyh2YWx1ZSl9YFxuICAgIDogc3RyaW5naWZ5KHsgW1BMQUNFSE9MREVSX0tFWV06IHZhbHVlIH0sIE9CU0lESUFOX1NUUklOR0lGWV9PUFRJT05TKTtcbiAgY29uc3QgaXRlbSA9IGxpZnRGcmFnbWVudEl0ZW0oZnJhZ21lbnQsIGluZGVudCwgZmFsc2UpO1xuICByZXR1cm4geyBzZXBhcmF0b3JUb2tlbnM6IGNhc3RUbzxDU1QuU291cmNlVG9rZW5bXT4oaXRlbS5zZXApLCB2YWx1ZTogaXRlbS52YWx1ZSB9O1xufVxuXG5mdW5jdGlvbiBlbWl0U2VxSXRlbSh2YWx1ZTogdW5rbm93biwgaW5kZW50OiBudW1iZXIsIHNob3VsZFByZWZlckZsb3c6IGJvb2xlYW4pOiBDU1QuQ29sbGVjdGlvbkl0ZW0ge1xuICBjb25zdCBmcmFnbWVudCA9IHNob3VsZFByZWZlckZsb3cgPyBgLSAke3N0cmluZ2lmeUZsb3codmFsdWUpfWAgOiBzdHJpbmdpZnkoW3ZhbHVlXSwgT0JTSURJQU5fU1RSSU5HSUZZX09QVElPTlMpO1xuICByZXR1cm4gbGlmdEZyYWdtZW50SXRlbShmcmFnbWVudCwgaW5kZW50LCBmYWxzZSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG1lcmdlZCBpdGVtcyBvZiBhIGNvbGxlY3Rpb24gam9pbmFibGUgYWdhaW4sIHdoYXRldmVyIHRoZSBtZXJnZSBkaWQgdG8gdGhlaXIgb3JkZXIuXG4gKlxuICogQW4gaXRlbSB0aGF0IHdhcyBub3QgZmlyc3QgY2FuIGNhcnJ5IHRoZSBibGFuayBsaW5lIHRoYXQgc2VwYXJhdGVkIGl0IGZyb20gaXRzIHByZWRlY2Vzc29yLCB3aGljaCBiZWNvbWVzIGEgbGVhZGluZ1xuICogYmxhbmsgbGluZSBvbmNlIGl0IElTIGZpcnN0LCBhbmQgbm90aGluZyBpbiB0aGUgaXRlbSB0b2tlbnMgdGhlbXNlbHZlcyBzaG93cyBpdC4gRXZlcnkgaXRlbSBhbHJlYWR5IGVuZHMgaW4gaXRzIG93blxuICogbmV3bGluZSwgYmVjYXVzZSBPYnNpZGlhbidzIGZyb250IG1hdHRlciBibG9jayBhbHdheXMgZW5kcyBpbiBvbmUsIHNvIHJlb3JkZXJpbmcgbmV2ZXIgam9pbnMgdHdvIGl0ZW1zIG9uIG9uZSBsaW5lLlxuICpcbiAqIEBwYXJhbSBpdGVtcyAtIFRoZSBtZXJnZWQgaXRlbXMsIG11dGF0ZWQgaW4gcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGZpbmFsaXplSXRlbXMoaXRlbXM6IENTVC5Db2xsZWN0aW9uSXRlbVtdKTogdm9pZCB7XG4gIGNvbnN0IGZpcnN0SXRlbSA9IGNhc3RUbzxDU1QuQ29sbGVjdGlvbkl0ZW0+KGl0ZW1zWzBdKTtcbiAgd2hpbGUgKGZpcnN0SXRlbS5zdGFydFswXT8udHlwZSA9PT0gJ25ld2xpbmUnKSB7XG4gICAgZmlyc3RJdGVtLnN0YXJ0LnNoaWZ0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZW50TGluZXModGV4dDogc3RyaW5nLCBpbmRlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChpbmRlbnQgPT09IDApIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGNvbnN0IHBhZGRpbmcgPSAnICcucmVwZWF0KGluZGVudCk7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUgPT09ICcnID8gbGluZSA6IHBhZGRpbmcgKyBsaW5lKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBmcmVzaGx5IGVtaXR0ZWQgZnJhZ21lbnQgYW5kIGhhbmRzIGJhY2sgaXRzIG9uZSBjb2xsZWN0aW9uIGl0ZW0sIGluZGVudGVkIHRvIHNpdCB3aGVyZSBpdCBpcyBnb2luZy5cbiAqXG4gKiBUaGUgZnJhZ21lbnQncyBvd24gbGluZXMgYXJlIGluZGVudGVkIGJlZm9yZSBwYXJzaW5nLCBzbyBldmVyeSB0b2tlbiBpbnNpZGUgaXQgY2FycmllcyB0aGUgYWJzb2x1dGUgaW5kZW50IHRoZVxuICogb3V0cHV0IG5lZWRzLiBUaGUgaXRlbSdzIE9XTiBsZWFkaW5nIGluZGVudCBpcyBub3QgcGFydCBvZiB0aGF0IOKAlCBhIGZpcnN0IGl0ZW0gbmV2ZXIgY2FycmllcyBvbmUsIHRoZSBpbmRlbnQgYmVpbmdcbiAqIHN1cHBsaWVkIGJ5IHdoYXRldmVyIHByZWNlZGVzIHRoZSBjb2xsZWN0aW9uIOKAlCBzbyBpdCBpcyBwcmVwZW5kZWQgYXMgYSB0b2tlbiwgd2hpY2ggaXMgd2hhdCBtYWtlcyB0aGUgaXRlbSB1bmlmb3JtXG4gKiB3aXRoIGl0cyBuZXcgc2libGluZ3MgYW5kIHRoZXJlZm9yZSBmcmVlIHRvIGJlIHJlb3JkZXJlZCBvciB0byBiZWNvbWUgdGhlIGZpcnN0LlxuICpcbiAqIFRoZSBmcmFnbWVudCB3YXMgcHJvZHVjZWQgYnkgYHN0cmluZ2lmeWAgYSBsaW5lIGFib3ZlIHRoZSBjYWxsLCBhcyBhIG9uZS1pdGVtIGJsb2NrIGNvbGxlY3Rpb24sIHNvIGl0IGFsd2F5cyBwYXJzZXNcbiAqIGJhY2sgYXMgb25lIOKAlCB3aGljaCBpcyB3aHkgdGhpcyByZWFkcyB0aGUgaXRlbSBvdXQgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGl0LiBXZXJlIHRoYXQgZXZlciB0byBzdG9wIGhvbGRpbmcsIHRoZVxuICogcmVzdWx0aW5nIHRocm93IGlzIGNhdWdodCBieSBgc2V0RnJvbnRtYXR0ZXJgJ3Mgc2VhbSwgd2hpY2ggcmVwb3J0cyBpdCBhbmQgd3JpdGVzIHRoZSBibG9jayB0aGUgb3JkaW5hcnkgd2F5LlxuICpcbiAqIEBwYXJhbSBmcmFnbWVudCAtIFRoZSBlbWl0dGVkIFlBTUwgZnJhZ21lbnQsIGF0IGluZGVudCB6ZXJvLlxuICogQHBhcmFtIGluZGVudCAtIFRoZSBpbmRlbnQgdGhlIGl0ZW0gd2lsbCBzaXQgYXQuXG4gKiBAcGFyYW0gc2hvdWxkQ2FycnlJbmRlbnQgLSBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGl0ZW0ncyBvd24gbGVhZGluZyBpbmRlbnQgdG9rZW4uXG4gKiBAcmV0dXJucyBUaGUgaXRlbS5cbiAqL1xuZnVuY3Rpb24gbGlmdEZyYWdtZW50SXRlbShmcmFnbWVudDogc3RyaW5nLCBpbmRlbnQ6IG51bWJlciwgc2hvdWxkQ2FycnlJbmRlbnQ6IGJvb2xlYW4pOiBDU1QuQ29sbGVjdGlvbkl0ZW0ge1xuICBjb25zdCByb290ID0gcGFyc2VEb2N1bWVudChpbmRlbnRMaW5lcyhmcmFnbWVudCwgaW5kZW50KSwgeyBrZWVwU291cmNlVG9rZW5zOiB0cnVlIH0pLmNvbnRlbnRzPy5zcmNUb2tlbjtcbiAgY29uc3QgaXRlbSA9IGNhc3RUbzxDU1QuQ29sbGVjdGlvbkl0ZW0+KGNhc3RUbzxDb2xsZWN0aW9uVG9rZW4+KHJvb3QpLml0ZW1zWzBdKTtcblxuICBpZiAoc2hvdWxkQ2FycnlJbmRlbnQgJiYgaW5kZW50ID4gMCkge1xuICAgIGl0ZW0uc3RhcnQudW5zaGlmdChjcmVhdGVTcGFjZVRva2VuKGluZGVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW07XG59XG5cbi8qKlxuICogUmV3cml0ZXMgYW4gaXRlbSdzIHZhbHVlIGluIHBsYWNlIHdoZXJlIGl0IGNhbiwgYW5kIHJlLWVtaXRzIHRoZSB3aG9sZSB2YWx1ZSB3aGVyZSBpdCBjYW5ub3QuXG4gKlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgY29sbGVjdGlvbiBpdGVtIHRvIHJld3JpdGUgdGhlIHZhbHVlIG9mLlxuICogQHBhcmFtIG9sZFZhbHVlIC0gVGhlIHZhbHVlIHRoZSBzb3VyY2UgaG9sZHMuXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gKiBAcGFyYW0gcGFyZW50SW5kZW50IC0gVGhlIGluZGVudCBvZiB0aGUgY29sbGVjdGlvbiB0aGUgaXRlbSBiZWxvbmdzIHRvLlxuICogQHBhcmFtIGlzU2VxSXRlbSAtIFdoZXRoZXIgdGhlIGl0ZW0gaXMgYSBzZXF1ZW5jZSBpdGVtLCB3aGljaCBjYXJyaWVzIG5vIGBzZXBgIGFuZCBubyBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSXRlbVZhbHVlKGl0ZW06IENTVC5Db2xsZWN0aW9uSXRlbSwgb2xkVmFsdWU6IHVua25vd24sIG5ld1ZhbHVlOiB1bmtub3duLCBwYXJlbnRJbmRlbnQ6IG51bWJlciwgaXNTZXFJdGVtOiBib29sZWFuKTogdm9pZCB7XG4gIGlmIChpc0RlZXBFcXVhbChvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gVW50b3VjaGVkOiBpdHMgYnl0ZXMgc3RheSBleGFjdGx5IGFzIGl0cyBhdXRob3Igd3JvdGUgdGhlbS4gVGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIG1vZHVsZS5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB2YWx1ZVRva2VuID0gaXRlbS52YWx1ZTtcbiAgY29uc3QgcHJlY2VkaW5nVG9rZW5zID0gaXNTZXFJdGVtID8gaXRlbS5zdGFydCA6IGl0ZW0uc2VwO1xuXG4gIGlmIChcbiAgICAodmFsdWVUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrLW1hcCcgJiYgY2hlY2tJc1BsYWluT2JqZWN0KG9sZFZhbHVlKSAmJiBjaGVja0lzUGxhaW5PYmplY3QobmV3VmFsdWUpXG4gICAgICAmJiBkaWROb3JtYWxpemVGaXJzdEl0ZW1JbmRlbnQocHJlY2VkaW5nVG9rZW5zLCB2YWx1ZVRva2VuKSAmJiBkaWRNZXJnZU1hcCh2YWx1ZVRva2VuLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKSB8fCAodmFsdWVUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrLXNlcScgJiYgQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSlcbiAgICAgICAgJiYgZGlkTm9ybWFsaXplRmlyc3RJdGVtSW5kZW50KHByZWNlZGluZ1Rva2VucywgdmFsdWVUb2tlbikgJiYgZGlkTWVyZ2VTZXEodmFsdWVUb2tlbiwgb2xkVmFsdWUsIG5ld1ZhbHVlKSlcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVwbGFjZUl0ZW1WYWx1ZShpdGVtLCBuZXdWYWx1ZSwgcGFyZW50SW5kZW50LCB2YWx1ZVRva2VuPy50eXBlID09PSAnZmxvdy1jb2xsZWN0aW9uJywgaXNTZXFJdGVtKTtcbn1cblxuLyoqXG4gKiBHaXZlcyBldmVyeSBpdGVtIG9mIGEgY29sbGVjdGlvbiB0aGUgaW5kZW50IG9mIGl0cyBvd24gbGluZSwgc28gdGhhdCBhbnkgb2YgdGhlbSBjYW4gYmUgcmVtb3ZlZCBvciBtb3ZlZC5cbiAqXG4gKiBBbiBpdGVtIHdpdGggTk8gVkFMVUUg4oCUIGEgYmFyZSBgLWAsIG9yIGBrZXk6YCB3aXRoIG5vdGhpbmcgYWZ0ZXIgaXQg4oCUIGFic29yYnMgdGhlIG5ld2xpbmUgdGhhdCBlbmRzIGl0cyBsaW5lIEFORCB0aGVcbiAqIGluZGVudCBvZiB0aGUgbGluZSBhZnRlciBpdCwgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyBub3RoaW5nIGVsc2UgdG8gaGFuZyB0aGVtIG9uLiBSZW1vdmluZyBvciBtb3Zpbmcgc3VjaCBhbiBpdGVtXG4gKiB0aGVyZWZvcmUgdGFrZXMgaXRzIHN1Y2Nlc3NvcidzIGluZGVudCB3aXRoIGl0LCBhbmQgdGhlIGJsb2NrIHRoYXQgY29tZXMgYmFjayBkb2VzIG5vdCBwYXJzZSBhdCBhbGwuXG4gKlxuICogTWVhc3VyZWQ6IG92ZXIgYSAzNiAwMDAtbXV0YXRpb24gZGlmZmVyZW50aWFsIGZ1enogdGhpcyBPTkUgc2hhcGUgYWNjb3VudGVkIGZvciBldmVyeSBzcGxpY2UgdGhlIHNhZmV0eSBuZXQgaGFkIHRvXG4gKiByZWZ1c2Ugb24gdW5yZWFkYWJsZSBvdXRwdXQg4oCUIDkzIG9mIHRoZW0g4oCUIHNvIGl0IGlzIGEgZmlkZWxpdHkgZml4IHJhdGhlciB0aGFuIGEgY29ycmVjdG5lc3Mgb25lLCB0aGUgc2FmZXR5IG5ldFxuICogaGF2aW5nIGFscmVhZHkgbWFkZSBlYWNoIG9mIHRob3NlIGEgZmFsbGJhY2suXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb24gLSBUaGUgY29sbGVjdGlvbiB3aG9zZSBpdGVtcyBhcmUgdG8gY2FycnkgdGhlaXIgb3duIGluZGVudC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSXRlbUluZGVudHMoY29sbGVjdGlvbjogQ29sbGVjdGlvblRva2VuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW2luZGV4LCBpdGVtXSBvZiBjb2xsZWN0aW9uLml0ZW1zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gY2FzdFRvPENTVC5Db2xsZWN0aW9uSXRlbSB8IHVuZGVmaW5lZD4oY29sbGVjdGlvbi5pdGVtc1tpbmRleCArIDFdKTtcbiAgICBpZiAoIW5leHRJdGVtIHx8IGl0ZW0udmFsdWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEEgbWFwIGl0ZW0gaGFuZ3MgdGhlbSBvbiBpdHMgYHNlcGAsIGEgc2VxdWVuY2UgaXRlbSBvbiBpdHMgYHN0YXJ0YCwgdGhhdCBiZWluZyBhbGwgaXQgaGFzLlxuICAgIGNvbnN0IHRyYWlsaW5nVG9rZW5zID0gaXRlbS5zZXA/Lmxlbmd0aCA/IGl0ZW0uc2VwIDogaXRlbS5zdGFydDtcbiAgICBjb25zdCBsYXN0VG9rZW4gPSB0cmFpbGluZ1Rva2Vucy5hdCgtMSk7XG4gICAgaWYgKGxhc3RUb2tlbj8udHlwZSAhPT0gJ3NwYWNlJyB8fCB0cmFpbGluZ1Rva2Vucy5hdChTRUNPTkRfVE9fTEFTVF9JTkRFWCk/LnR5cGUgIT09ICduZXdsaW5lJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJhaWxpbmdUb2tlbnMucG9wKCk7XG4gICAgbmV4dEl0ZW0uc3RhcnQudW5zaGlmdChsYXN0VG9rZW4pO1xuICB9XG59XG5cbi8qKlxuICogTmFtZXMgdGhlIGtleSBhbiBpdGVtIGlzIGFkZHJlc3NlZCBieSwgb3IgYG51bGxgIHdoZW4gbm8gc3RyaW5nIGNhbiBuYW1lIGl0LlxuICpcbiAqIGByZXNvbHZlQXNTY2FsYXJgIHlpZWxkcyB0aGUgc2NhbGFyJ3MgVEVYVCByYXRoZXIgdGhhbiBhIHNjaGVtYS1yZXNvbHZlZCB2YWx1ZSwgc28gdGhlIGFuc3dlciBpcyBhbHdheXMgYSBzdHJpbmcg4oCUXG4gKiBhbmQgaXQgaXMgdGhlIHNhbWUgc3RyaW5nIHRoZSBwbGFpbi1vYmplY3QgcHJvamVjdGlvbiBib3RoIHNpZGVzIG9mIHRoZSBtZXJnZSBhcmUgY29tcGFyZWQgdGhyb3VnaCwgd2hpY2ggaXMgd2hhdFxuICogbGV0cyBhIGA0MjpgIGtleSBtYXRjaCB0aGUgcHJvamVjdGlvbidzIGAnNDInYCB3aXRob3V0IHF1b3RpbmcgaXQgb24gdGhlIHdheSBvdXQuXG4gKlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB0byBuYW1lIHRoZSBrZXkgb2YuXG4gKiBAcmV0dXJucyBUaGUga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUga2V5IGlzIGEgY29sbGVjdGlvbiByYXRoZXIgdGhhbiBhIHNjYWxhci5cbiAqL1xuZnVuY3Rpb24gcmVhZEl0ZW1LZXkoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtKTogbnVsbCB8IHN0cmluZyB7XG4gIHJldHVybiAhaXRlbS5rZXkgfHwgIUNTVC5pc1NjYWxhcihpdGVtLmtleSkgPyBudWxsIDogY2FzdFRvPFJlc29sdmVkU2NhbGFyPihDU1QucmVzb2x2ZUFzU2NhbGFyKGl0ZW0ua2V5KSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJdGVtVmFsdWUoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtLCBuZXdWYWx1ZTogdW5rbm93biwgaW5kZW50OiBudW1iZXIsIHNob3VsZFByZWZlckZsb3c6IGJvb2xlYW4sIGlzU2VxSXRlbTogYm9vbGVhbik6IHZvaWQge1xuICBpZiAoaXNTZXFJdGVtKSB7XG4gICAgc2V0SXRlbVZhbHVlKGl0ZW0sIGVtaXRTZXFJdGVtKG5ld1ZhbHVlLCBpbmRlbnQsIHNob3VsZFByZWZlckZsb3cpLnZhbHVlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbWl0dGVkVG9rZW5zID0gZW1pdE1hcEl0ZW1Ub2tlbnMobmV3VmFsdWUsIGluZGVudCwgc2hvdWxkUHJlZmVyRmxvdyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBzZXBgIGlzIHRoZSBgeWFtbGAgcGFja2FnZSdzIG93biBwcm9wZXJ0eSBuYW1lLlxuICBpdGVtLnNlcCA9IGVtaXR0ZWRUb2tlbnMuc2VwYXJhdG9yVG9rZW5zO1xuICBzZXRJdGVtVmFsdWUoaXRlbSwgZW1pdHRlZFRva2Vucy52YWx1ZSk7XG59XG5cbi8qKlxuICogQXNzaWducyBhbiBpdGVtJ3MgdmFsdWUgdG9rZW4sIHJlbW92aW5nIHRoZSBwcm9wZXJ0eSBvdXRyaWdodCB3aGVuIHRoZSBlbWl0dGVkIHZhbHVlIGhhcyBub25lLlxuICpcbiAqIEEga2V5IHdpdGggYSBgbnVsbGAgdmFsdWUgZW1pdHMgYXMgYGtleTpgIHdpdGggbm90aGluZyBhZnRlciB0aGUgc2VwYXJhdG9yLCBzbyB0aGUgaXRlbSBnZW51aW5lbHkgaGFzIG5vIHZhbHVlXG4gKiB0b2tlbiDigJQgYW5kIHVuZGVyIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlc2AgdGhhdCBpcyBhIHByb3BlcnR5IHRvIGRlbGV0ZSwgbm90IG9uZSB0byBzZXQgdG8gYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB0byBhc3NpZ24gdGhlIHZhbHVlIHRva2VuIG9mLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRva2VuLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBlbWl0dGVkIHZhbHVlIGhhcyBub25lLlxuICovXG5mdW5jdGlvbiBzZXRJdGVtVmFsdWUoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtLCB2YWx1ZTogQ1NULlRva2VuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsZXRlIGl0ZW0udmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaXRlbS52YWx1ZSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIFNwbGljZXMgdGhlIHRleHQgSU5TSURFIGEgZnJvbnQgbWF0dGVyIGJsb2NrJ3MgZGVsaW1pdGVycywgbGVhdmluZyBib3RoIGAtLS1gIGxpbmVzIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIGZyb250IG1hdHRlciBibG9jaydzIHRleHQuXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRvIHdyaXRlLlxuICogQHJldHVybnMgVGhlIG5ldyBibG9jayB0ZXh0LCBvciBgbnVsbGAgd2hlbiB0aGUgc3BsaWNlIGNvdWxkIG5vdCBiZSBwcm92ZWQgZmFpdGhmdWwuXG4gKi9cbmZ1bmN0aW9uIHNwbGljZUZyb250bWF0dGVyQm9keShzb3VyY2U6IHN0cmluZywgbmV3RnJvbnRtYXR0ZXI6IG9iamVjdCk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB0b2tlbnMgPSBbLi4ubmV3IFBhcnNlcigpLnBhcnNlKHNvdXJjZSldO1xuICBjb25zdCBkb2N1bWVudHMgPSBbLi4ubmV3IENvbXBvc2VyKHsga2VlcFNvdXJjZVRva2VuczogdHJ1ZSB9KS5jb21wb3NlKHRva2VucywgdHJ1ZSldO1xuICAvLyBBIHNlY29uZCBkb2N1bWVudCBpcyByZWFjaGFibGUg4oCUIGEgYC4uLmAgZW5kIG1hcmtlciBzdGFydHMgb25lIOKAlCBhbmQgc3BsaWNpbmcgdGhlIGZpcnN0IHdvdWxkIGVtaXQgYm90aC5cbiAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudHMubGVuZ3RoID09PSAxID8gZG9jdW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuXG4gIGlmICghZG9jdW1lbnQgfHwgZG9jdW1lbnQuZXJyb3JzLmxlbmd0aCA+IDAgfHwgZG9jdW1lbnQud2FybmluZ3Muc29tZSgod2FybmluZykgPT4gd2FybmluZy5jb2RlID09PSBVTlJFU09MVkVEX1RBR19XQVJOSU5HX0NPREUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250ZW50cyA9IGRvY3VtZW50LmNvbnRlbnRzO1xuICBjb25zdCByb290VG9rZW4gPSBjb250ZW50cz8uc3JjVG9rZW47XG4gIC8vIEFuIGFuY2hvciBpcyBhIHNlY29uZCBuYW1lIGZvciBhIG5vZGUsIHNvIGEgc3BsaWNlIHRoYXQgbW92ZXMgb3IgZHJvcHMgb25lIG9mIHRoZSB0d28gc2lsZW50bHkgcmV3cml0ZXMgdGhlIG90aGVyLlxuICAvLyBOb3RoaW5nIGhlcmUgaXMgd29ydGggdGhhdCByaXNrIGZvciBhIGNvbnN0cnVjdCBPYnNpZGlhbidzIG93biBwcm9wZXJ0eSBlZGl0b3IgY2Fubm90IHByb2R1Y2UuXG4gIGlmICghY29udGVudHMgfHwgcm9vdFRva2VuPy50eXBlICE9PSAnYmxvY2stbWFwJyB8fCBjaGVja0hhc0FuY2hvck9yQWxpYXMoY29udGVudHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBIGJsb2NrLW1hcCByb290IGFsd2F5cyBwcm9qZWN0cyB0byBhIHBsYWluIG9iamVjdCwgc28gdGhpcyBpcyBhIGNhc3QgcmF0aGVyIHRoYW4gYSBjaGVjay4gQW55dGhpbmcgdGhhdCBtYWRlIGl0XG4gIC8vIHVudHJ1ZSB3b3VsZCBzdGlsbCBiZSBjYXVnaHQgZG93bnN0cmVhbTogdGhlIG1lcmdlIHdvdWxkIHdyaXRlIGEgbWFwcGluZyB0aGUgc2FmZXR5IG5ldCB0aGVuIHJlZnVzZXMuXG4gIGNvbnN0IG9sZEZyb250bWF0dGVyID0gY2FzdFRvPEdlbmVyaWNPYmplY3Q+KGRvY3VtZW50LnRvSlMoKSk7XG5cbiAgaWYgKCFkaWRNZXJnZU1hcChyb290VG9rZW4sIG9sZEZyb250bWF0dGVyLCBjYXN0VG88R2VuZXJpY09iamVjdD4obmV3RnJvbnRtYXR0ZXIpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRXZlcnkgdG9rZW4sIG5vdCBqdXN0IHRoZSByb290IGNvbGxlY3Rpb24nczogYSBjb21tZW50IGJlZm9yZSBvciBhZnRlciB0aGUgbWFwcGluZyBiZWxvbmdzIHRvIHRoZSBET0NVTUVOVCwgc29cbiAgLy8gYENTVC5zdHJpbmdpZnkoY29udGVudHMuc3JjVG9rZW4pYCBhbG9uZSBzaWxlbnRseSBkcm9wcyBib3RoLlxuICBjb25zdCBlbWl0dGVkQm9keSA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiBDU1Quc3RyaW5naWZ5KHRva2VuKSkuam9pbignJyk7XG5cbiAgLy8gVGhlIHJlcGxhY2VkIHJlZ2lvbiBoYXMgdG8gZW5kIGluIGV4YWN0bHkgb25lIG5ld2xpbmUsIGFzIE9ic2lkaWFuJ3MgZnJvbnQgbWF0dGVyIGJsb2NrIGFsd2F5cyBkb2VzLCBvciB0aGUgY2xvc2luZ1xuICAvLyBgLS0tYCBtb3ZlcyBvZmYgaXRzIG93biBsaW5lLiBBIGJsb2NrIHdob3NlIGxhc3Qga2V5IHdhcyBkcm9wcGVkIGNhbiBlbWl0IG5vbmUsIHNvIGl0IGlzIG5vcm1hbGl6ZWQsIG5vdCB0cnVzdGVkLlxuICBjb25zdCBzcGxpY2VkQm9keSA9IGAke2VtaXR0ZWRCb2R5LnJlcGxhY2UoVFJBSUxJTkdfTkVXTElORV9SRUdfRVhQLCAnJyl9XFxuYDtcblxuICByZXR1cm4gY2hlY2tJc1NlbWFudGljTWF0Y2goc3BsaWNlZEJvZHksIG5ld0Zyb250bWF0dGVyKSA/IHNwbGljZWRCb2R5IDogbnVsbDtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Rmxvdyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnkodmFsdWUsIHtcbiAgICAuLi5PQlNJRElBTl9TVFJJTkdJRllfT1BUSU9OUyxcbiAgICBjb2xsZWN0aW9uU3R5bGU6ICdmbG93JyxcbiAgICBmbG93Q29sbGVjdGlvblBhZGRpbmc6IGZhbHNlXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCQSwwQkFHTztBQUNQLG9CQUF5QjtBQUN6QixzQkFJTztBQUNQLGtCQVFPO0FBRVAseUJBR087QUFpQ1AsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSx5QkFBeUI7QUFRL0IsTUFBTSw2QkFBNkI7QUFBQSxF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
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci1mb3JtYXR0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXdyaXRlcyBhIG5vdGUncyBZQU1MIGZyb250IG1hdHRlciBieSBzcGxpY2luZyBpdHMgY29uY3JldGUgc3ludGF4IHRyZWUsIHNvIGV2ZXJ5IHJlZ2lvbiBhIGNoYW5nZSBkb2VzIG5vdCByZWFjaFxuICoga2VlcHMgdGhlIGV4YWN0IGJ5dGVzIGl0cyBhdXRob3Igd3JvdGUg4oCUIGNvbW1lbnRzIGFuZCB0aGUgd2hpdGVzcGFjZSBpbnNpZGUgdGhlbSwgcXVvdGluZyBzdHlsZSwgYmxhbmsgbGluZXMsXG4gKiBpbmRlbnRhdGlvbiB3aWR0aCwgZmxvdyB2ZXJzdXMgYmxvY2sgY29sbGVjdGlvbnMsIGFuZCBmb2xkZWQgYW5kIGxpdGVyYWwgc2NhbGFycy5cbiAqXG4gKiBPYnNpZGlhbidzIG93biBgcHJvY2Vzc0Zyb250TWF0dGVyKClgIHBhcnNlcyB0aGUgYmxvY2sgdG8gYSBwbGFpbiBvYmplY3QgYW5kIHJlLXN0cmluZ2lmaWVzIHRoZSB3aG9sZSBvZiBpdCwgc28gYVxuICogY2FsbGJhY2sgdGhhdCBjaGFuZ2VzIG9uZSBrZXkgcmV3cml0ZXMgZXZlcnkgb3RoZXIuIFJlLWVtaXR0aW5nIHRoZSBwYXJzZWQgZG9jdW1lbnQgaW5zdGVhZCBvZiB0aGUgcmF3IHRleHQgZG9lcyBub3RcbiAqIGZpeCB0aGF0OiBmaXZlIG9mIHRoZSBsb3NzZXMgc3Vydml2ZSBldmVyeSBlbWl0IG9wdGlvbiB0aGUgYHlhbWxgIHBhY2thZ2Ugb2ZmZXJzLiBTcGxpY2luZyB0aGUgQ1NUIGRvZXMgZml4IGl0LFxuICogYmVjYXVzZSBhbiB1bnRvdWNoZWQgdG9rZW4gaXMgbmV2ZXIgcmUtZW1pdHRlZCBhdCBhbGwg4oCUIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWVtZWxpL3lhbWwgfCB0aGUgbGlicmFyeX0ga2VlcHNcbiAqIGVhY2ggdG9rZW4ncyBvcmlnaW5hbCBzb3VyY2UgdGV4dCBhbmQge0BsaW5rIGh0dHBzOi8vZWVtZWxpLm9yZy95YW1sLyNjc3QtcGFyc2VyIHwgYENTVC5zdHJpbmdpZnlgfSBjb25jYXRlbmF0ZXMgaXQuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgREVMSUJFUkFURUxZIG5vdCBvbiB0aGUgZGVmYXVsdCBwYXRoLiBJdCBuZWVkcyB0aGUgYHlhbWxgIHBhY2thZ2UncyBDU1QgQVBJLCB3aGljaCBPYnNpZGlhbiBkb2VzIG5vdFxuICogaGFuZCB0byBwbHVnaW5zIHRocm91Z2ggaXRzIG1vZHVsZSBtYXAg4oCUIHRoYXQgbWFwIGlzIGBvYnNpZGlhbmAsIGBAY29kZW1pcnJvci8qYCBhbmQgYEBsZXplci8qYCBhbmQgbm90aGluZyBlbHNlIOKAlFxuICogc28gdGhlIHBhY2thZ2UgY2Fubm90IGJlIG1hcmtlZCBleHRlcm5hbCBhbmQgbGFuZHMgaW4gdGhlIGNvbnN1bWluZyBwbHVnaW4ncyBgbWFpbi5qc2AsIGFib3V0IDEwMCBLQiBvZiBpdC4gQSBwbHVnaW5cbiAqIG9wdHMgaW4gYnkgY2FsbGluZyB7QGxpbmsgZW5hYmxlRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmF0aW9ufSBvbmNlLCBhbmQgb25seSBpdCBwYXlzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFBhcnNlZE5vZGVcbn0gZnJvbSAneWFtbCc7XG5cbmltcG9ydCB7XG4gIGNhc3RUbyxcbiAgaXNEZWVwRXF1YWxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBpbnNlcnRBdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHtcbiAgZ2V0RnJvbnRNYXR0ZXJJbmZvLFxuICBwYXJzZVlhbWwsXG4gIHN0cmluZ2lmeVlhbWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIsXG4gIENTVCxcbiAgaXNBbGlhcyxcbiAgcGFyc2VEb2N1bWVudCxcbiAgUGFyc2VyLFxuICBzdHJpbmdpZnksXG4gIHZpc2l0XG59IGZyb20gJ3lhbWwnO1xuXG5pbXBvcnQge1xuICBjaGVja0lzUGxhaW5PYmplY3QsXG4gIHJlZ2lzdGVyRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuXG4vKipcbiAqIEEgYmxvY2sgb3IgZmxvdyBjb2xsZWN0aW9uIHRva2VuIHdob3NlIGl0ZW1zIHRoZSBzcGxpY2UgcmVhcnJhbmdlcy5cbiAqL1xudHlwZSBDb2xsZWN0aW9uVG9rZW4gPSBDU1QuQmxvY2tNYXAgfCBDU1QuQmxvY2tTZXF1ZW5jZTtcblxuLyoqXG4gKiBPbmUgc3RlcCBvZiB0aGUgZWRpdCBzY3JpcHQge0BsaW5rIGJ1aWxkRWRpdFNjcmlwdH0gZGVyaXZlcyBmb3IgYSBzZXF1ZW5jZS5cbiAqXG4gKiBga2VlcGAgcmV1c2VzIHRoZSBvbGQgaXRlbSdzIHRva2VuIHVudG91Y2hlZCwgYG1lcmdlYCByZXVzZXMgaXQgYW5kIHJld3JpdGVzIGl0cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIGBpbnNlcnRgXG4gKiBlbWl0cyBhIGJyYW5kIG5ldyBpdGVtLiBBIHJlbW92YWwgcHJvZHVjZXMgbm8gc3RlcCBhdCBhbGwg4oCUIGl0IGlzIHNpbXBseSBhbiBvbGQgaW5kZXggbm8gc3RlcCBuYW1lcy5cbiAqL1xuaW50ZXJmYWNlIEVkaXRTdGVwIHtcbiAgcmVhZG9ubHkga2luZDogJ2luc2VydCcgfCAna2VlcCcgfCAnbWVyZ2UnO1xuICByZWFkb25seSBuZXdJbmRleDogbnVtYmVyO1xuICByZWFkb25seSBvbGRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBgc2VwYCBhbmQgYHZhbHVlYCB0b2tlbnMgb2YgYSBmcmVzaGx5IGVtaXR0ZWQgYmxvY2stbWFwIGl0ZW0sIHJlYWR5IHRvIGJlIHRyYW5zcGxhbnRlZCBvbnRvIGFuIGV4aXN0aW5nIG9uZS5cbiAqL1xuaW50ZXJmYWNlIE1hcEl0ZW1Ub2tlbnMge1xuICByZWFkb25seSBzZXBhcmF0b3JUb2tlbnM6IENTVC5Tb3VyY2VUb2tlbltdO1xuICByZWFkb25seSB2YWx1ZTogQ1NULlRva2VuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgc2VxdWVuY2UgbG9uZyBlbm91Z2ggdGhhdCB0aGUgcXVhZHJhdGljIGVkaXQgc2NyaXB0IHN0b3BzIGJlaW5nIHdvcnRoIGl0cyBjb3N0LlxuICpcbiAqIEEgZnJvbnQgbWF0dGVyIHNlcXVlbmNlIGlzIGEgdGFnIGxpc3Qgb3IgYW4gYWxpYXMgbGlzdCwgc28gdGhpcyBpcyBuZXZlciBhcHByb2FjaGVkIGluIHByYWN0aWNlOyBpdCBpcyBoZXJlIHNvIHRoYXQgYVxuICogcGF0aG9sb2dpY2FsIG9uZSBkZWdyYWRlcyB0byBhIHdob2xlLWNvbGxlY3Rpb24gcmUtZW1pdCBpbnN0ZWFkIG9mIHN0YWxsaW5nIHRoZSB3cml0ZSBxdWV1ZS5cbiAqL1xuY29uc3QgRURJVF9TQ1JJUFRfQ0VMTF9MSU1JVCA9IDEwXzAwMDtcblxuLyoqXG4gKiBXaGF0IGEgbWFwcGluZyBlbWl0cyBhcyB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgdmFsdWVzIGlzIGB1bmRlZmluZWRgLCBpLmUuIHdoZW4gaXQgaGFzIG5vdGhpbmcgdG8gd3JpdGUgYXQgYWxsLlxuICovXG5jb25zdCBFTVBUWV9NQVBQSU5HX0ZSQUdNRU5UID0gJ3t9JztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBPYnNpZGlhbiBpdHNlbGYgcGFzc2VzIHRvIGBzdHJpbmdpZnkoKWAsIHJlYWQgb3V0IG9mIGl0cyBidW5kbGUuXG4gKlxuICogRXZlcnkgZnJhZ21lbnQgdGhpcyBtb2R1bGUgZW1pdHMgZ29lcyB0aHJvdWdoIHRoZW0sIHNvIGEgZnJhZ21lbnQgaXQgd3JpdGVzIGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBvbmUgdGhlXG4gKiBwYXJzZS1hbmQtc3RyaW5naWZ5IHBhdGggd291bGQgaGF2ZSB3cml0dGVuIGZvciB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xuY29uc3QgT0JTSURJQU5fU1RSSU5HSUZZX09QVElPTlMgPSB7XG4gIGFsaWFzRHVwbGljYXRlT2JqZWN0czogZmFsc2UsXG4gIGxpbmVXaWR0aDogMCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYG51bGxTdHJgIGlzIHRoZSBgeWFtbGAgcGFja2FnZSdzIG93biBvcHRpb24gbmFtZS5cbiAgbnVsbFN0cjogJydcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogVGhlIGtleSBhIGZyYWdtZW50IGlzIGVtaXR0ZWQgdW5kZXIgd2hlbiBvbmx5IGl0cyB2YWx1ZSBpcyB3YW50ZWQuIE5ldmVyIHJlYWNoZXMgdGhlIG91dHB1dC5cbiAqL1xuY29uc3QgUExBQ0VIT0xERVJfS0VZID0gJ2snO1xuXG4vKipcbiAqIFRoZSBgQXJyYXkuYXQoKWAgaW5kZXggb2YgdGhlIHRva2VuIGJlZm9yZSB0aGUgbGFzdCBvbmUsIHdoaWNoIGlzIHdoZXJlIGEgbmV3bGluZSBzaXRzIHdoZW4gYW4gaW5kZW50IGZvbGxvd3MgaXQuXG4gKi9cbmNvbnN0IFNFQ09ORF9UT19MQVNUX0lOREVYID0gLTI7XG5cbmNvbnN0IFRSQUlMSU5HX05FV0xJTkVfUkVHX0VYUCA9IC9cXG4kLztcblxuY29uc3QgVU5SRVNPTFZFRF9UQUdfV0FSTklOR19DT0RFID0gJ1RBR19SRVNPTFZFX0ZBSUxFRCc7XG5cbi8qKlxuICogT25lIHN0ZXAgb2YgdGhlIHJhdyBlZGl0IHNjcmlwdCwgYmVmb3JlIHJlbW92YWxzIGFyZSBmb2xkZWQgaW50byB0aGUgaW5zZXJ0aW9ucyB0aGF0IGZvbGxvdyB0aGVtLlxuICovXG5pbnRlcmZhY2UgUmF3RWRpdFN0ZXAge1xuICByZWFkb25seSBraW5kOiAnaW5zZXJ0JyB8ICdrZWVwJyB8ICdyZW1vdmUnO1xuICByZWFkb25seSBuZXdJbmRleDogbnVtYmVyO1xuICByZWFkb25seSBvbGRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdoYXQgYENTVC5yZXNvbHZlQXNTY2FsYXJgIGhhbmRzIGJhY2sgZm9yIGEga2V5OiB0aGUgc2NhbGFyJ3Mgb3duIHRleHQsIG5ldmVyIGEgc2NoZW1hLXJlc29sdmVkIHZhbHVlLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRTY2FsYXIge1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGlzIG1vZHVsZSdzIGVuZ2luZSBhcyB0aGUgZnJvbnQgbWF0dGVyIGZvcm1hdHRpbmcgcHJlc2VydmVyIGZvciBldmVyeSB3cml0ZSB0aGlzIGxpYnJhcnkgcGVyZm9ybXMuXG4gKlxuICogQ2FsbCBpdCBvbmNlLCBmcm9tIGEgcGx1Z2luJ3MgYG9ubG9hZEltcGwoKWAuIEl0IHRha2VzIGVmZmVjdCBmb3IgYHByb2Nlc3NGcm9udG1hdHRlcigpYCwgYGFwcGx5RmlsZUNoYW5nZXMoKWAgYW5kXG4gKiBldmVyeSBvdGhlciBwYXRoIHRoYXQgcmVhY2hlcyBgc2V0RnJvbnRtYXR0ZXIoKWAsIGluY2x1ZGluZyB0aGUgb25lcyB0aGUgY2FsbGluZyBwbHVnaW4gZG9lcyBub3QgaW52b2tlIGl0c2VsZi5cbiAqXG4gKiBUaGVyZSBpcyBvbmUgcHJlc2VydmVyIHBlciByZWFsbSwgc28gdHdvIHBsdWdpbnMgdGhhdCBib3RoIGNhbGwgdGhpcyBzaW1wbHkgYWdyZWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2YXRpb24oKTogdm9pZCB7XG4gIHJlZ2lzdGVyRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyKHByZXNlcnZlRnJvbnRtYXR0ZXJGb3JtYXR0aW5nKTtcbn1cblxuLyoqXG4gKiBSZXdyaXRlcyB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgbm90ZSwga2VlcGluZyB0aGUgb3JpZ2luYWwgYnl0ZXMgb2YgZXZlcnl0aGluZyB0aGUgY2hhbmdlIGRvZXMgbm90IHJlYWNoLlxuICpcbiAqIEl0IGlzIHRoZSBlbmdpbmUge0BsaW5rIGVuYWJsZUZyb250bWF0dGVyRm9ybWF0dGluZ1ByZXNlcnZhdGlvbn0gcmVnaXN0ZXJzLCBhbmQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBhcyB3ZWxsLlxuICpcbiAqIGBudWxsYCBtZWFucyBcInRoaXMgb25lIGlzIG5vdCBtaW5lXCI6IHRoZSBibG9jayBkb2VzIG5vdCBleGlzdCwgdGhlIG5ldyBmcm9udCBtYXR0ZXIgaXMgZW1wdHkgKGJvdGggYXJlIHRoZVxuICogcGFyc2UtYW5kLXN0cmluZ2lmeSBwYXRoJ3MgYnVzaW5lc3MsIHVuY2hhbmdlZCksIG9yIHRoZSBzcGxpY2UgY291bGQgbm90IGJlIHByb3ZlZCBmYWl0aGZ1bC4gVGhlIHByb29mIGlzIG5vdFxuICogaGFuZC13YXZlZCDigJQgdGhlIHNwbGljZWQgYmxvY2sgaXMgcmUtcGFyc2VkIGFuZCBjb21wYXJlZCBhZ2FpbnN0IHRoZSB2YWx1ZSB0aGUgcGFyc2UtYW5kLXN0cmluZ2lmeSBwYXRoIHdvdWxkIGhhdmVcbiAqIHByb2R1Y2VkIGZvciB0aGUgc2FtZSBpbnB1dCwgYW5kIGFueSBkaWZmZXJlbmNlIHJldHVybnMgYG51bGxgLiBUaGF0IGlzIHdoYXQgbWFrZXMgdGhpcyBzdHJpY3RseSBiZXR0ZXIgdGhhbiB0aGF0XG4gKiBwYXRoIG9yIGlkZW50aWNhbCB0byBpdCwgYW5kIG5ldmVyIHdvcnNlLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIG5vdGUgdG8gcmV3cml0ZSB0aGUgZnJvbnQgbWF0dGVyIG9mLlxuICogQHBhcmFtIG5ld0Zyb250bWF0dGVyIC0gVGhlIGZyb250IG1hdHRlciB0byB3cml0ZS5cbiAqIEByZXR1cm5zIFRoZSBuZXcgbm90ZSwgb3IgYG51bGxgIHdoZW4gdGhlIGNhbGxlciBzaG91bGQgcGFyc2UgdGhlIGJsb2NrIGFuZCB3cml0ZSB0aGUgd2hvbGUgb2YgaXQgb3V0IGFnYWluIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZUZyb250bWF0dGVyRm9ybWF0dGluZyhjb250ZW50OiBzdHJpbmcsIG5ld0Zyb250bWF0dGVyOiBvYmplY3QpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgZnJvbnRtYXR0ZXJJbmZvID0gZ2V0RnJvbnRNYXR0ZXJJbmZvKGNvbnRlbnQpO1xuICBpZiAoIWZyb250bWF0dGVySW5mby5leGlzdHMgfHwgT2JqZWN0LmtleXMobmV3RnJvbnRtYXR0ZXIpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc3BsaWNlZEJvZHkgPSBzcGxpY2VGcm9udG1hdHRlckJvZHkoZnJvbnRtYXR0ZXJJbmZvLmZyb250bWF0dGVyLCBuZXdGcm9udG1hdHRlcik7XG4gIHJldHVybiBzcGxpY2VkQm9keSA9PT0gbnVsbFxuICAgID8gbnVsbFxuICAgIDogaW5zZXJ0QXQoe1xuICAgICAgJHN0cmluZzogY29udGVudCxcbiAgICAgIGVuZEluZGV4OiBmcm9udG1hdHRlckluZm8udG8sXG4gICAgICBzdGFydEluZGV4OiBmcm9udG1hdHRlckluZm8uZnJvbSxcbiAgICAgIHN1YnN0cmluZzogc3BsaWNlZEJvZHlcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBlZGl0IHNjcmlwdCB0aGF0IHR1cm5zIGBvbGRBcnJheWAgaW50byBgbmV3QXJyYXlgLCByZXVzaW5nIGFzIG1hbnkgb2YgdGhlIG9sZCBpdGVtcyBhcyBpdCBjYW4uXG4gKlxuICogQSBsb25nZXN0LWNvbW1vbi1zdWJzZXF1ZW5jZSBkaWZmIG92ZXIgdmFsdWUgZXF1YWxpdHkgaXMgd2hhdCByZWNvdmVycyB0aGUgQVVUSE9SJ3Mgb3BlcmF0aW9uLiBSZXBsYXlpbmcgdGhlXG4gKiBtdXRhdGlvbiBhbiBhcnJheSBtZXRob2QgcGVyZm9ybWVkIGluc3RlYWQg4oCUIGBbYSwgYiwgY10uc3BsaWNlKDEsIDEpYCB3cml0ZXMgYFsxXSA9ICdjJ2AgdGhlbiB0cnVuY2F0ZXMg4oCUIHdvdWxkXG4gKiBvdmVyd3JpdGUgYGJgJ3Mgbm9kZSB3aXRoIGBjYCdzIHZhbHVlIGFuZCBkZWxldGUgYGNgJ3Mgbm9kZSwgc28gYGJgJ3MgY29tbWVudCB3b3VsZCBlbmQgdXAgYW5ub3RhdGluZyBgY2A6IGV4YWN0bHlcbiAqIHRoZSBtaXNhdHRyaWJ1dGlvbiB0aGlzIG1vZHVsZSBleGlzdHMgdG8gcHJldmVudC5cbiAqXG4gKiBBIHJlbW92YWwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4gaW5zZXJ0aW9uIG9mIHRoZSBzYW1lIHNoYXBlIGlzIGZvbGRlZCBpbnRvIGEgc2luZ2xlIGBtZXJnZWAsIHNvIGFuIGl0ZW0gZWRpdGVkXG4gKiBpbiBwbGFjZSAoYFt7IHF0eTogMSB9XWAgdG8gYFt7IHF0eTogMiB9XWApIGtlZXBzIGl0cyBvd24gbm9kZSBhbmQgaXRzIGNvbW1lbnRzIHJhdGhlciB0aGFuIGJlaW5nIHJlYnVpbHQuXG4gKlxuICogQHBhcmFtIG9sZEFycmF5IC0gVGhlIHNlcXVlbmNlIGFzIHRoZSBzb3VyY2UgaG9sZHMgaXQuXG4gKiBAcGFyYW0gbmV3QXJyYXkgLSBUaGUgc2VxdWVuY2UgYXMgaXQgaXMgdG8gYmUgd3JpdHRlbi5cbiAqIEByZXR1cm5zIFRoZSBzdGVwcyB0byBhcHBseSwgaW4gb3V0cHV0IG9yZGVyLlxuICovXG5mdW5jdGlvbiBidWlsZEVkaXRTY3JpcHQob2xkQXJyYXk6IHJlYWRvbmx5IHVua25vd25bXSwgbmV3QXJyYXk6IHJlYWRvbmx5IHVua25vd25bXSk6IEVkaXRTdGVwW10ge1xuICBjb25zdCByYXdTdGVwcyA9IGJ1aWxkUmF3RWRpdFNjcmlwdChvbGRBcnJheSwgbmV3QXJyYXkpO1xuICBjb25zdCBzdGVwczogRWRpdFN0ZXBbXSA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByYXdTdGVwcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBzdGVwID0gY2FzdFRvPFJhd0VkaXRTdGVwPihyYXdTdGVwc1tpbmRleF0pO1xuICAgIGNvbnN0IG5leHRTdGVwID0gcmF3U3RlcHNbaW5kZXggKyAxXTtcbiAgICBpZiAoXG4gICAgICBzdGVwLmtpbmQgPT09ICdyZW1vdmUnICYmIG5leHRTdGVwPy5raW5kID09PSAnaW5zZXJ0J1xuICAgICAgJiYgY2hlY2tJc01lcmdlYWJsZShvbGRBcnJheVtzdGVwLm9sZEluZGV4XSwgbmV3QXJyYXlbbmV4dFN0ZXAubmV3SW5kZXhdKVxuICAgICkge1xuICAgICAgc3RlcHMucHVzaCh7IGtpbmQ6ICdtZXJnZScsIG5ld0luZGV4OiBuZXh0U3RlcC5uZXdJbmRleCwgb2xkSW5kZXg6IHN0ZXAub2xkSW5kZXggfSk7XG4gICAgICBpbmRleCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAua2luZCAhPT0gJ3JlbW92ZScpIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiBzdGVwLmtpbmQsIG5ld0luZGV4OiBzdGVwLm5ld0luZGV4LCBvbGRJbmRleDogc3RlcC5vbGRJbmRleCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmF3RWRpdFNjcmlwdChvbGRBcnJheTogcmVhZG9ubHkgdW5rbm93bltdLCBuZXdBcnJheTogcmVhZG9ubHkgdW5rbm93bltdKTogUmF3RWRpdFN0ZXBbXSB7XG4gIGNvbnN0IG9sZExlbmd0aCA9IG9sZEFycmF5Lmxlbmd0aDtcbiAgY29uc3QgbmV3TGVuZ3RoID0gbmV3QXJyYXkubGVuZ3RoO1xuICBjb25zdCBjb21tb25MZW5ndGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogb2xkTGVuZ3RoICsgMSB9LCAoKSA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggKyAxIH0sICgpID0+IDApKTtcblxuICBmb3IgKGxldCBvbGRJbmRleCA9IG9sZExlbmd0aCAtIDE7IG9sZEluZGV4ID49IDA7IG9sZEluZGV4LS0pIHtcbiAgICBmb3IgKGxldCBuZXdJbmRleCA9IG5ld0xlbmd0aCAtIDE7IG5ld0luZGV4ID49IDA7IG5ld0luZGV4LS0pIHtcbiAgICAgIGNvbnN0IHJvdyA9IGNhc3RUbzxudW1iZXJbXT4oY29tbW9uTGVuZ3Roc1tvbGRJbmRleF0pO1xuICAgICAgY29uc3QgbmV4dFJvdyA9IGNhc3RUbzxudW1iZXJbXT4oY29tbW9uTGVuZ3Roc1tvbGRJbmRleCArIDFdKTtcbiAgICAgIHJvd1tuZXdJbmRleF0gPSBpc0RlZXBFcXVhbChvbGRBcnJheVtvbGRJbmRleF0sIG5ld0FycmF5W25ld0luZGV4XSlcbiAgICAgICAgPyBjYXN0VG88bnVtYmVyPihuZXh0Um93W25ld0luZGV4ICsgMV0pICsgMVxuICAgICAgICA6IE1hdGgubWF4KGNhc3RUbzxudW1iZXI+KG5leHRSb3dbbmV3SW5kZXhdKSwgY2FzdFRvPG51bWJlcj4ocm93W25ld0luZGV4ICsgMV0pKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGVwczogUmF3RWRpdFN0ZXBbXSA9IFtdO1xuICBsZXQgb2xkSW5kZXggPSAwO1xuICBsZXQgbmV3SW5kZXggPSAwO1xuXG4gIHdoaWxlIChvbGRJbmRleCA8IG9sZExlbmd0aCAmJiBuZXdJbmRleCA8IG5ld0xlbmd0aCkge1xuICAgIGlmIChpc0RlZXBFcXVhbChvbGRBcnJheVtvbGRJbmRleF0sIG5ld0FycmF5W25ld0luZGV4XSkpIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiAna2VlcCcsIG5ld0luZGV4LCBvbGRJbmRleCB9KTtcbiAgICAgIG9sZEluZGV4Kys7XG4gICAgICBuZXdJbmRleCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZhbFJvdyA9IGNhc3RUbzxudW1iZXJbXT4oY29tbW9uTGVuZ3Roc1tvbGRJbmRleCArIDFdKTtcbiAgICBjb25zdCBpbnNlcnRpb25Sb3cgPSBjYXN0VG88bnVtYmVyW10+KGNvbW1vbkxlbmd0aHNbb2xkSW5kZXhdKTtcbiAgICBjb25zdCByZW1vdmFsQ29tbW9uTGVuZ3RoID0gY2FzdFRvPG51bWJlcj4ocmVtb3ZhbFJvd1tuZXdJbmRleF0pO1xuICAgIGNvbnN0IGluc2VydGlvbkNvbW1vbkxlbmd0aCA9IGNhc3RUbzxudW1iZXI+KGluc2VydGlvblJvd1tuZXdJbmRleCArIDFdKTtcbiAgICBpZiAocmVtb3ZhbENvbW1vbkxlbmd0aCA+PSBpbnNlcnRpb25Db21tb25MZW5ndGgpIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiAncmVtb3ZlJywgbmV3SW5kZXg6IC0xLCBvbGRJbmRleCB9KTtcbiAgICAgIG9sZEluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZXBzLnB1c2goeyBraW5kOiAnaW5zZXJ0JywgbmV3SW5kZXgsIG9sZEluZGV4OiAtMSB9KTtcbiAgICAgIG5ld0luZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG9sZEluZGV4IDwgb2xkTGVuZ3RoOyBvbGRJbmRleCsrKSB7XG4gICAgc3RlcHMucHVzaCh7IGtpbmQ6ICdyZW1vdmUnLCBuZXdJbmRleDogLTEsIG9sZEluZGV4IH0pO1xuICB9XG5cbiAgZm9yICg7IG5ld0luZGV4IDwgbmV3TGVuZ3RoOyBuZXdJbmRleCsrKSB7XG4gICAgc3RlcHMucHVzaCh7IGtpbmQ6ICdpbnNlcnQnLCBuZXdJbmRleCwgb2xkSW5kZXg6IC0xIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXBzO1xufVxuXG5mdW5jdGlvbiBjaGVja0NhcnJpZXNJbmRlbnQoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtLCBpbmRlbnQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gQ1NULnN0cmluZ2lmeShpdGVtKS5yZXBsYWNlKC9eXFxuKy8sICcnKS5zdGFydHNXaXRoKCcgJy5yZXBlYXQoaW5kZW50KSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSGFzQW5jaG9yT3JBbGlhcyhjb250ZW50czogUGFyc2VkTm9kZSk6IGJvb2xlYW4ge1xuICBsZXQgaGFzQW5jaG9yT3JBbGlhcyA9IGZhbHNlO1xuXG4gIHZpc2l0KGNvbnRlbnRzLCB7XG4gICAgTm9kZShfa2V5OiB1bmtub3duLCBub2RlOiBOb2RlKTogc3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICghaXNBbGlhcyhub2RlKSAmJiBub2RlLmFuY2hvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGhhc0FuY2hvck9yQWxpYXMgPSB0cnVlO1xuICAgICAgcmV0dXJuIHZpc2l0LkJSRUFLO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGhhc0FuY2hvck9yQWxpYXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNNZXJnZWFibGUob2xkVmFsdWU6IHVua25vd24sIG5ld1ZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoY2hlY2tJc1BsYWluT2JqZWN0KG9sZFZhbHVlKSAmJiBjaGVja0lzUGxhaW5PYmplY3QobmV3VmFsdWUpKSB8fCAoQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgc3BsaWNlZCBibG9jayBhZ2FpbnN0IHRoZSBvbmUgdGhlIHBhcnNlLWFuZC1zdHJpbmdpZnkgcGF0aCB3b3VsZCBoYXZlIHdyaXR0ZW4gZm9yIHRoZSBzYW1lIHZhbHVlLlxuICpcbiAqIENvbXBhcmluZyB0aGUgdHdvIFBBUlNFRCB2YWx1ZXMgcmF0aGVyIHRoYW4gdGhlIHR3byB0ZXh0cyBpcyB0aGUgd2hvbGUgcG9pbnQ6IHRoZSB0ZXh0cyBhcmUgc3VwcG9zZWQgdG8gZGlmZmVyIOKAlCB0aGF0XG4gKiBpcyB0aGUgZm9ybWF0dGluZyB0aGlzIG1vZHVsZSBwcmVzZXJ2ZXMg4oCUIHdoaWxlIHRoZSB2YWx1ZXMgbXVzdCBub3QuIENvbXBhcmluZyBhZ2FpbnN0IHRoYXQgcGF0aCdzIG91dHB1dCByYXRoZXIgdGhhblxuICogYWdhaW5zdCBgbmV3RnJvbnRtYXR0ZXJgIGl0c2VsZiBpcyB3aGF0IG1ha2VzIHRoZSBndWFyYW50ZWUgZXhhY3QsIHNpbmNlIGJvdGggc2lkZXMgdGhlbiBjYXJyeSB0aGUgc2FtZSByb3VuZC10cmlwXG4gKiBsb3NzZXMsIGB1bmRlZmluZWRgIHZhbHVlcyBkcm9wcGVkIGFuZCB0aW1lc3RhbXBzIHJlYWQgYmFjayBhcyBkYXRlcyBhbW9uZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBzcGxpY2VkQm9keSAtIFRoZSBzcGxpY2VkIGJsb2NrIHRleHQuXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRoYXQgd2FzIHRvIGJlIHdyaXR0ZW4uXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzcGxpY2VkIGJsb2NrIHJlYWRzIGJhY2sgYXMgdGhlIHZhbHVlIHRoZSBwYXJzZS1hbmQtc3RyaW5naWZ5IHBhdGggd291bGQgaGF2ZSB3cml0dGVuLlxuICovXG5mdW5jdGlvbiBjaGVja0lzU2VtYW50aWNNYXRjaChzcGxpY2VkQm9keTogc3RyaW5nLCBuZXdGcm9udG1hdHRlcjogb2JqZWN0KTogYm9vbGVhbiB7XG4gIGxldCBzcGxpY2VkVmFsdWU6IHVua25vd247XG5cbiAgdHJ5IHtcbiAgICBzcGxpY2VkVmFsdWUgPSBwYXJzZVlhbWwoc3BsaWNlZEJvZHkpO1xuICAgIC8qXG4gICAgICogdjggaWdub3JlIHN0YXJ0IC0tIEEgbmV0LCBub3QgYSBwYXRoOiBgcGFyc2VZYW1sYCBUSFJPV1Mgb24gYSBibG9jayBpdCBjYW5ub3QgcmVhZCByYXRoZXIgdGhhbiByZXBvcnRpbmcgaXQsIGFuZFxuICAgICAqIGEgc3BsaWNlIGNvdWxkIHByb2R1Y2Ugb25lLiBBIDM2IDAwMC1tdXRhdGlvbiBkaWZmZXJlbnRpYWwgZnV6eiBmb3VuZCA5MyB0aGF0IGRpZCwgZXZlcnkgb25lIG9mIHRoZW0gdGhlXG4gICAgICogdmFsdWVsZXNzLWl0ZW0gc2hhcGUgYG5vcm1hbGl6ZUl0ZW1JbmRlbnRzYCBub3cgcmVwYWlycywgYW5kIG5vbmUgYXQgYWxsIGFmdGVyd2FyZHMg4oCUIHNvIHRoZXJlIGlzIG5vIGlucHV0IGxlZnRcbiAgICAgKiB0byBwaW4gdGhpcyB3aXRoLCBhbmQgdGhlIGNvbnRyYWN0IHRoYXQgaXQgdXBob2xkcyAoZGVjbGluZSwgbmV2ZXIgdGhyb3cpIGlzIHRoZSBvbmUgdGhpcyBtb2R1bGUncyBjYWxsZXJzIHJlbHlcbiAgICAgKiBvbi4gRG8gbm90IGRlbGV0ZSBpdCBvbiB0aGUgc3RyZW5ndGggb2YgdGhhdDogaXQgaXMgdGhlIHJlYXNvbiBhIGZ1dHVyZSBzaGFwZSBpcyBhIGZhbGxiYWNrIHJhdGhlciB0aGFuIGEgY3Jhc2guXG4gICAgICovXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICB9XG5cbiAgcmV0dXJuIGlzRGVlcEVxdWFsKHNwbGljZWRWYWx1ZSwgcGFyc2VZYW1sKHN0cmluZ2lmeVlhbWwobmV3RnJvbnRtYXR0ZXIpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBpbmRlbnQ6IG51bWJlcik6IENTVC5Db2xsZWN0aW9uSXRlbSB8IG51bGwge1xuICBjb25zdCBmcmFnbWVudCA9IHN0cmluZ2lmeSh7IFtrZXldOiB2YWx1ZSB9LCBPQlNJRElBTl9TVFJJTkdJRllfT1BUSU9OUyk7XG4gIC8vIEFuIGVtcHR5IG1hcHBpbmcgbWVhbnMgdGhlIHZhbHVlIGlzIGB1bmRlZmluZWRgLCB3aGljaCB0aGUgcmV3cml0ZSBwYXRoIGRyb3BzIGFzIHdlbGwuIERyb3AgdGhlIGtleSB3aXRoIGl0LlxuICByZXR1cm4gZnJhZ21lbnQudHJpbUVuZCgpID09PSBFTVBUWV9NQVBQSU5HX0ZSQUdNRU5UID8gbnVsbCA6IGxpZnRGcmFnbWVudEl0ZW0oZnJhZ21lbnQsIGluZGVudCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlcUl0ZW0odmFsdWU6IHVua25vd24sIGluZGVudDogbnVtYmVyKTogQ1NULkNvbGxlY3Rpb25JdGVtIHtcbiAgcmV0dXJuIGxpZnRGcmFnbWVudEl0ZW0oc3RyaW5naWZ5KFt2YWx1ZV0sIE9CU0lESUFOX1NUUklOR0lGWV9PUFRJT05TKSwgaW5kZW50LCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3BhY2VUb2tlbihpbmRlbnQ6IG51bWJlcik6IENTVC5Tb3VyY2VUb2tlbiB7XG4gIHJldHVybiB7XG4gICAgaW5kZW50LFxuICAgIG9mZnNldDogLTEsXG4gICAgc291cmNlOiAnICcucmVwZWF0KGluZGVudCksXG4gICAgdHlwZTogJ3NwYWNlJ1xuICB9O1xufVxuXG4vKipcbiAqIFJlYnVpbGRzIGEgYmxvY2sgbWFwJ3MgaXRlbXMgc28gaXQgcmVwcmVzZW50cyBgbmV3T2JqZWN0YCwgcmV1c2luZyBlYWNoIHN1cnZpdmluZyBrZXkncyBvd24gaXRlbSB0b2tlbi5cbiAqXG4gKiBUaGUgaXRlbXMgYXJlIHJlYnVpbHQgaW4gdGhlIE5FVyBvYmplY3QncyBrZXkgb3JkZXIgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZSdzLCBzbyBhIGNhbGxiYWNrIHRoYXQgc29ydHMgb3IgcmVvcmRlcnNcbiAqIGtleXMgc3RpbGwgc29ydHMgdGhlbSDigJQgdGhlIHJlb3JkZXJlZCBrZXkgc2ltcGx5IHRha2VzIGl0cyBjb21tZW50LCBpdHMgcXVvdGluZyBhbmQgaXRzIHZhbHVlIGZvcm1hdHRpbmcgd2l0aCBpdC5cbiAqXG4gKiBgZmFsc2VgIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHJlLWVtaXQgdGhpcyB3aG9sZSBjb2xsZWN0aW9uIGluc3RlYWQ6IGEgZHVwbGljYXRlIGtleSwgYSBrZXkgbm8gc3RyaW5nIGNhbiBuYW1lLCBvclxuICogYSBuZXN0ZWQgbWVyZ2UgdGhhdCBnYXZlIHVwLlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSBibG9jayBtYXAgdG8gcmVidWlsZC5cbiAqIEBwYXJhbSBvbGRPYmplY3QgLSBUaGUgbWFwcGluZyBhcyB0aGUgc291cmNlIGhvbGRzIGl0LlxuICogQHBhcmFtIG5ld09iamVjdCAtIFRoZSBtYXBwaW5nIHRvIHdyaXRlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdG9rZW4gbm93IHJlcHJlc2VudHMgYG5ld09iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGRpZE1lcmdlTWFwKHRva2VuOiBDU1QuQmxvY2tNYXAsIG9sZE9iamVjdDogR2VuZXJpY09iamVjdCwgbmV3T2JqZWN0OiBHZW5lcmljT2JqZWN0KTogYm9vbGVhbiB7XG4gIG5vcm1hbGl6ZUl0ZW1JbmRlbnRzKHRva2VuKTtcbiAgY29uc3QgaXRlbXNCeUtleSA9IG5ldyBNYXA8c3RyaW5nLCBDU1QuQ29sbGVjdGlvbkl0ZW0+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIHRva2VuLml0ZW1zKSB7XG4gICAgY29uc3Qga2V5ID0gcmVhZEl0ZW1LZXkoaXRlbSk7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCBpdGVtc0J5S2V5LmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXRlbXNCeUtleS5zZXQoa2V5LCBpdGVtKTtcbiAgfVxuXG4gIGNvbnN0IG1lcmdlZEl0ZW1zOiBDU1QuQ29sbGVjdGlvbkl0ZW1bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2tleSwgbmV3VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld09iamVjdCkpIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNCeUtleS5nZXQoa2V5KTtcblxuICAgIGlmICghaXRlbSkge1xuICAgICAgY29uc3QgY3JlYXRlZEl0ZW0gPSBjcmVhdGVNYXBJdGVtKGtleSwgbmV3VmFsdWUsIHRva2VuLmluZGVudCk7XG4gICAgICBpZiAoY3JlYXRlZEl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkSXRlbXMucHVzaChjcmVhdGVkSXRlbSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG1lcmdlSXRlbVZhbHVlKGl0ZW0sIG9sZE9iamVjdFtrZXldLCBuZXdWYWx1ZSwgdG9rZW4uaW5kZW50LCBmYWxzZSk7XG4gICAgbWVyZ2VkSXRlbXMucHVzaChpdGVtKTtcbiAgfVxuXG4gIGlmIChtZXJnZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmaW5hbGl6ZUl0ZW1zKG1lcmdlZEl0ZW1zKTtcbiAgdG9rZW4uaXRlbXMgPSBjYXN0VG88Q1NULkJsb2NrTWFwWydpdGVtcyddPihtZXJnZWRJdGVtcyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlYnVpbGRzIGEgYmxvY2sgc2VxdWVuY2UncyBpdGVtcyBzbyBpdCByZXByZXNlbnRzIGBuZXdBcnJheWAsIHJldXNpbmcgdGhlIHRva2VuIG9mIGV2ZXJ5IGl0ZW0gdGhhdCBzdXJ2aXZlcy5cbiAqXG4gKiBAcGFyYW0gdG9rZW4gLSBUaGUgYmxvY2sgc2VxdWVuY2UgdG8gcmVidWlsZC5cbiAqIEBwYXJhbSBvbGRBcnJheSAtIFRoZSBzZXF1ZW5jZSBhcyB0aGUgc291cmNlIGhvbGRzIGl0LlxuICogQHBhcmFtIG5ld0FycmF5IC0gVGhlIHNlcXVlbmNlIHRvIHdyaXRlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdG9rZW4gbm93IHJlcHJlc2VudHMgYG5ld0FycmF5YC5cbiAqL1xuZnVuY3Rpb24gZGlkTWVyZ2VTZXEodG9rZW46IENTVC5CbG9ja1NlcXVlbmNlLCBvbGRBcnJheTogcmVhZG9ubHkgdW5rbm93bltdLCBuZXdBcnJheTogcmVhZG9ubHkgdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIGlmIChvbGRBcnJheS5sZW5ndGggKiBuZXdBcnJheS5sZW5ndGggPiBFRElUX1NDUklQVF9DRUxMX0xJTUlUKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbm9ybWFsaXplSXRlbUluZGVudHModG9rZW4pO1xuICBjb25zdCBtZXJnZWRJdGVtczogQ1NULkNvbGxlY3Rpb25JdGVtW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHN0ZXAgb2YgYnVpbGRFZGl0U2NyaXB0KG9sZEFycmF5LCBuZXdBcnJheSkpIHtcbiAgICBpZiAoc3RlcC5raW5kID09PSAnaW5zZXJ0Jykge1xuICAgICAgbWVyZ2VkSXRlbXMucHVzaChjcmVhdGVTZXFJdGVtKG5ld0FycmF5W3N0ZXAubmV3SW5kZXhdLCB0b2tlbi5pbmRlbnQpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSBjYXN0VG88Q1NULkNvbGxlY3Rpb25JdGVtPih0b2tlbi5pdGVtc1tzdGVwLm9sZEluZGV4XSk7XG4gICAgaWYgKHN0ZXAua2luZCA9PT0gJ21lcmdlJykge1xuICAgICAgbWVyZ2VJdGVtVmFsdWUoaXRlbSwgb2xkQXJyYXlbc3RlcC5vbGRJbmRleF0sIG5ld0FycmF5W3N0ZXAubmV3SW5kZXhdLCB0b2tlbi5pbmRlbnQsIHRydWUpO1xuICAgIH1cblxuICAgIG1lcmdlZEl0ZW1zLnB1c2goaXRlbSk7XG4gIH1cblxuICBpZiAobWVyZ2VkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmluYWxpemVJdGVtcyhtZXJnZWRJdGVtcyk7XG4gIHRva2VuLml0ZW1zID0gY2FzdFRvPENTVC5CbG9ja1NlcXVlbmNlWydpdGVtcyddPihtZXJnZWRJdGVtcyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdpdmVzIGEgbmVzdGVkIGNvbGxlY3Rpb24ncyBmaXJzdCBpdGVtIHRoZSBsZWFkaW5nIGluZGVudCBvZiBpdHMgb3duLCBzbyB0aGUgaXRlbXMgYmVjb21lIGludGVyY2hhbmdlYWJsZS5cbiAqXG4gKiBBIG5lc3RlZCBjb2xsZWN0aW9uJ3MgZmlyc3QgaXRlbSBjYXJyaWVzIG5vIGluZGVudCBpbiB0aGUgc291cmNlOiB0aGUgaW5kZW50IHNpdHMgaW4gd2hhdGV2ZXIgcHJlY2VkZXMgdGhlXG4gKiBjb2xsZWN0aW9uIOKAlCB0aGUgc2VwYXJhdG9yJ3MgdHJhaWxpbmcgc3BhY2VzLCBvciB0aGUgZGFzaCBvZiB0aGUgc2VxdWVuY2UgaXRlbSBpdCBiZWxvbmdzIHRvLiBFdmVyeSBsYXRlciBpdGVtXG4gKiBjYXJyaWVzIGl0cyBvd24uIFJlbW92aW5nIG9yIHJlb3JkZXJpbmcgdGhlIGZpcnN0IGl0ZW0gd2l0aG91dCByZXBhaXJpbmcgdGhhdCBsZWF2ZXMgdGhlIHN1cnZpdm9yIGRvdWJseSBpbmRlbnRlZCxcbiAqIHNvIHRoZSBpbmRlbnQgaXMgbW92ZWQgb3V0IG9mIHRoZSBzZXBhcmF0b3IgYW5kIG9udG8gdGhlIGl0ZW0gYmVmb3JlIGFueXRoaW5nIGlzIHJlYXJyYW5nZWQuXG4gKlxuICogVGhlIG9uZSBzaGFwZSBpdCBjYW5ub3QgcmVwYWlyIGlzIGEgZmlyc3QgaXRlbSB3cml0dGVuIElOTElORSB3aXRoIHdoYXQgcHJlY2VkZXMgaXQgKGAtIG5hbWU6IGFgKSwgd2hlcmUgdGhlcmUgaXMgbm9cbiAqIGluZGVudCB0byBtb3ZlIGJlY2F1c2UgdGhlIGl0ZW0gaXMgbm90IGF0IHRoZSBzdGFydCBvZiBpdHMgbGluZS4gU3VjaCBhIGNvbGxlY3Rpb24gaXMgcmUtZW1pdHRlZCB3aG9sZSBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBwcmVjZWRpbmdUb2tlbnMgLSBUaGUgc2VwYXJhdG9yIHRva2VucyB0aGF0IHNpdCBiZXR3ZWVuIHRoZSBwYXJlbnQgYW5kIHRoZSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gLSBUaGUgY29sbGVjdGlvbiB3aG9zZSBmaXJzdCBpdGVtIGlzIHRvIGNhcnJ5IGl0cyBvd24gaW5kZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgY29sbGVjdGlvbidzIGl0ZW1zIGFyZSBub3cgaW50ZXJjaGFuZ2VhYmxlLlxuICovXG5mdW5jdGlvbiBkaWROb3JtYWxpemVGaXJzdEl0ZW1JbmRlbnQocHJlY2VkaW5nVG9rZW5zOiBDU1QuU291cmNlVG9rZW5bXSB8IHVuZGVmaW5lZCwgY29sbGVjdGlvbjogQ29sbGVjdGlvblRva2VuKTogYm9vbGVhbiB7XG4gIC8vIEEgcGFyc2VkIGJsb2NrIGNvbGxlY3Rpb24gYWx3YXlzIGhvbGRzIGF0IGxlYXN0IG9uZSBpdGVtLCBvciBpdCB3b3VsZCBub3QgaGF2ZSBwYXJzZWQgYXMgYSBjb2xsZWN0aW9uIGF0IGFsbC5cbiAgY29uc3QgZmlyc3RJdGVtID0gY2FzdFRvPENTVC5Db2xsZWN0aW9uSXRlbT4oY29sbGVjdGlvbi5pdGVtc1swXSk7XG5cbiAgaWYgKGNvbGxlY3Rpb24uaW5kZW50ID09PSAwIHx8IGNoZWNrQ2Fycmllc0luZGVudChmaXJzdEl0ZW0sIGNvbGxlY3Rpb24uaW5kZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgbGFzdFRva2VuID0gcHJlY2VkaW5nVG9rZW5zPy5hdCgtMSk7XG4gIGlmIChsYXN0VG9rZW4/LnR5cGUgIT09ICdzcGFjZScgfHwgcHJlY2VkaW5nVG9rZW5zPy5hdChTRUNPTkRfVE9fTEFTVF9JTkRFWCk/LnR5cGUgIT09ICduZXdsaW5lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByZWNlZGluZ1Rva2Vucy5wb3AoKTtcbiAgZmlyc3RJdGVtLnN0YXJ0LnVuc2hpZnQobGFzdFRva2VuKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGVtaXRNYXBJdGVtVG9rZW5zKHZhbHVlOiB1bmtub3duLCBpbmRlbnQ6IG51bWJlciwgc2hvdWxkUHJlZmVyRmxvdzogYm9vbGVhbik6IE1hcEl0ZW1Ub2tlbnMge1xuICBjb25zdCBmcmFnbWVudCA9IHNob3VsZFByZWZlckZsb3dcbiAgICA/IGAke1BMQUNFSE9MREVSX0tFWX06ICR7c3RyaW5naWZ5Rmxvdyh2YWx1ZSl9YFxuICAgIDogc3RyaW5naWZ5KHsgW1BMQUNFSE9MREVSX0tFWV06IHZhbHVlIH0sIE9CU0lESUFOX1NUUklOR0lGWV9PUFRJT05TKTtcbiAgY29uc3QgaXRlbSA9IGxpZnRGcmFnbWVudEl0ZW0oZnJhZ21lbnQsIGluZGVudCwgZmFsc2UpO1xuICByZXR1cm4geyBzZXBhcmF0b3JUb2tlbnM6IGNhc3RUbzxDU1QuU291cmNlVG9rZW5bXT4oaXRlbS5zZXApLCB2YWx1ZTogaXRlbS52YWx1ZSB9O1xufVxuXG5mdW5jdGlvbiBlbWl0U2VxSXRlbSh2YWx1ZTogdW5rbm93biwgaW5kZW50OiBudW1iZXIsIHNob3VsZFByZWZlckZsb3c6IGJvb2xlYW4pOiBDU1QuQ29sbGVjdGlvbkl0ZW0ge1xuICBjb25zdCBmcmFnbWVudCA9IHNob3VsZFByZWZlckZsb3cgPyBgLSAke3N0cmluZ2lmeUZsb3codmFsdWUpfWAgOiBzdHJpbmdpZnkoW3ZhbHVlXSwgT0JTSURJQU5fU1RSSU5HSUZZX09QVElPTlMpO1xuICByZXR1cm4gbGlmdEZyYWdtZW50SXRlbShmcmFnbWVudCwgaW5kZW50LCBmYWxzZSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG1lcmdlZCBpdGVtcyBvZiBhIGNvbGxlY3Rpb24gam9pbmFibGUgYWdhaW4sIHdoYXRldmVyIHRoZSBtZXJnZSBkaWQgdG8gdGhlaXIgb3JkZXIuXG4gKlxuICogQW4gaXRlbSB0aGF0IHdhcyBub3QgZmlyc3QgY2FuIGNhcnJ5IHRoZSBibGFuayBsaW5lIHRoYXQgc2VwYXJhdGVkIGl0IGZyb20gaXRzIHByZWRlY2Vzc29yLCB3aGljaCBiZWNvbWVzIGEgbGVhZGluZ1xuICogYmxhbmsgbGluZSBvbmNlIGl0IElTIGZpcnN0LCBhbmQgbm90aGluZyBpbiB0aGUgaXRlbSB0b2tlbnMgdGhlbXNlbHZlcyBzaG93cyBpdC4gRXZlcnkgaXRlbSBhbHJlYWR5IGVuZHMgaW4gaXRzIG93blxuICogbmV3bGluZSwgYmVjYXVzZSBPYnNpZGlhbidzIGZyb250IG1hdHRlciBibG9jayBhbHdheXMgZW5kcyBpbiBvbmUsIHNvIHJlb3JkZXJpbmcgbmV2ZXIgam9pbnMgdHdvIGl0ZW1zIG9uIG9uZSBsaW5lLlxuICpcbiAqIEBwYXJhbSBpdGVtcyAtIFRoZSBtZXJnZWQgaXRlbXMsIG11dGF0ZWQgaW4gcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGZpbmFsaXplSXRlbXMoaXRlbXM6IENTVC5Db2xsZWN0aW9uSXRlbVtdKTogdm9pZCB7XG4gIGNvbnN0IGZpcnN0SXRlbSA9IGNhc3RUbzxDU1QuQ29sbGVjdGlvbkl0ZW0+KGl0ZW1zWzBdKTtcbiAgd2hpbGUgKGZpcnN0SXRlbS5zdGFydFswXT8udHlwZSA9PT0gJ25ld2xpbmUnKSB7XG4gICAgZmlyc3RJdGVtLnN0YXJ0LnNoaWZ0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZW50TGluZXModGV4dDogc3RyaW5nLCBpbmRlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChpbmRlbnQgPT09IDApIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGNvbnN0IHBhZGRpbmcgPSAnICcucmVwZWF0KGluZGVudCk7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUgPT09ICcnID8gbGluZSA6IHBhZGRpbmcgKyBsaW5lKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBmcmVzaGx5IGVtaXR0ZWQgZnJhZ21lbnQgYW5kIGhhbmRzIGJhY2sgaXRzIG9uZSBjb2xsZWN0aW9uIGl0ZW0sIGluZGVudGVkIHRvIHNpdCB3aGVyZSBpdCBpcyBnb2luZy5cbiAqXG4gKiBUaGUgZnJhZ21lbnQncyBvd24gbGluZXMgYXJlIGluZGVudGVkIGJlZm9yZSBwYXJzaW5nLCBzbyBldmVyeSB0b2tlbiBpbnNpZGUgaXQgY2FycmllcyB0aGUgYWJzb2x1dGUgaW5kZW50IHRoZVxuICogb3V0cHV0IG5lZWRzLiBUaGUgaXRlbSdzIE9XTiBsZWFkaW5nIGluZGVudCBpcyBub3QgcGFydCBvZiB0aGF0IOKAlCBhIGZpcnN0IGl0ZW0gbmV2ZXIgY2FycmllcyBvbmUsIHRoZSBpbmRlbnQgYmVpbmdcbiAqIHN1cHBsaWVkIGJ5IHdoYXRldmVyIHByZWNlZGVzIHRoZSBjb2xsZWN0aW9uIOKAlCBzbyBpdCBpcyBwcmVwZW5kZWQgYXMgYSB0b2tlbiwgd2hpY2ggaXMgd2hhdCBtYWtlcyB0aGUgaXRlbSB1bmlmb3JtXG4gKiB3aXRoIGl0cyBuZXcgc2libGluZ3MgYW5kIHRoZXJlZm9yZSBmcmVlIHRvIGJlIHJlb3JkZXJlZCBvciB0byBiZWNvbWUgdGhlIGZpcnN0LlxuICpcbiAqIFRoZSBmcmFnbWVudCB3YXMgcHJvZHVjZWQgYnkgYHN0cmluZ2lmeWAgYSBsaW5lIGFib3ZlIHRoZSBjYWxsLCBhcyBhIG9uZS1pdGVtIGJsb2NrIGNvbGxlY3Rpb24sIHNvIGl0IGFsd2F5cyBwYXJzZXNcbiAqIGJhY2sgYXMgb25lIOKAlCB3aGljaCBpcyB3aHkgdGhpcyByZWFkcyB0aGUgaXRlbSBvdXQgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGl0LiBXZXJlIHRoYXQgZXZlciB0byBzdG9wIGhvbGRpbmcsIHRoZVxuICogcmVzdWx0aW5nIHRocm93IGlzIGNhdWdodCBieSBgc2V0RnJvbnRtYXR0ZXJgJ3Mgc2VhbSwgd2hpY2ggcmVwb3J0cyBpdCBhbmQgd3JpdGVzIHRoZSBibG9jayB0aGUgb3JkaW5hcnkgd2F5LlxuICpcbiAqIEBwYXJhbSBmcmFnbWVudCAtIFRoZSBlbWl0dGVkIFlBTUwgZnJhZ21lbnQsIGF0IGluZGVudCB6ZXJvLlxuICogQHBhcmFtIGluZGVudCAtIFRoZSBpbmRlbnQgdGhlIGl0ZW0gd2lsbCBzaXQgYXQuXG4gKiBAcGFyYW0gc2hvdWxkQ2FycnlJbmRlbnQgLSBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGl0ZW0ncyBvd24gbGVhZGluZyBpbmRlbnQgdG9rZW4uXG4gKiBAcmV0dXJucyBUaGUgaXRlbS5cbiAqL1xuZnVuY3Rpb24gbGlmdEZyYWdtZW50SXRlbShmcmFnbWVudDogc3RyaW5nLCBpbmRlbnQ6IG51bWJlciwgc2hvdWxkQ2FycnlJbmRlbnQ6IGJvb2xlYW4pOiBDU1QuQ29sbGVjdGlvbkl0ZW0ge1xuICBjb25zdCByb290ID0gcGFyc2VEb2N1bWVudChpbmRlbnRMaW5lcyhmcmFnbWVudCwgaW5kZW50KSwgeyBrZWVwU291cmNlVG9rZW5zOiB0cnVlIH0pLmNvbnRlbnRzPy5zcmNUb2tlbjtcbiAgY29uc3QgaXRlbSA9IGNhc3RUbzxDU1QuQ29sbGVjdGlvbkl0ZW0+KGNhc3RUbzxDb2xsZWN0aW9uVG9rZW4+KHJvb3QpLml0ZW1zWzBdKTtcblxuICBpZiAoc2hvdWxkQ2FycnlJbmRlbnQgJiYgaW5kZW50ID4gMCkge1xuICAgIGl0ZW0uc3RhcnQudW5zaGlmdChjcmVhdGVTcGFjZVRva2VuKGluZGVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW07XG59XG5cbi8qKlxuICogUmV3cml0ZXMgYW4gaXRlbSdzIHZhbHVlIGluIHBsYWNlIHdoZXJlIGl0IGNhbiwgYW5kIHJlLWVtaXRzIHRoZSB3aG9sZSB2YWx1ZSB3aGVyZSBpdCBjYW5ub3QuXG4gKlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgY29sbGVjdGlvbiBpdGVtIHRvIHJld3JpdGUgdGhlIHZhbHVlIG9mLlxuICogQHBhcmFtIG9sZFZhbHVlIC0gVGhlIHZhbHVlIHRoZSBzb3VyY2UgaG9sZHMuXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gKiBAcGFyYW0gcGFyZW50SW5kZW50IC0gVGhlIGluZGVudCBvZiB0aGUgY29sbGVjdGlvbiB0aGUgaXRlbSBiZWxvbmdzIHRvLlxuICogQHBhcmFtIGlzU2VxSXRlbSAtIFdoZXRoZXIgdGhlIGl0ZW0gaXMgYSBzZXF1ZW5jZSBpdGVtLCB3aGljaCBjYXJyaWVzIG5vIGBzZXBgIGFuZCBubyBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSXRlbVZhbHVlKGl0ZW06IENTVC5Db2xsZWN0aW9uSXRlbSwgb2xkVmFsdWU6IHVua25vd24sIG5ld1ZhbHVlOiB1bmtub3duLCBwYXJlbnRJbmRlbnQ6IG51bWJlciwgaXNTZXFJdGVtOiBib29sZWFuKTogdm9pZCB7XG4gIGlmIChpc0RlZXBFcXVhbChvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gVW50b3VjaGVkOiBpdHMgYnl0ZXMgc3RheSBleGFjdGx5IGFzIGl0cyBhdXRob3Igd3JvdGUgdGhlbS4gVGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIG1vZHVsZS5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB2YWx1ZVRva2VuID0gaXRlbS52YWx1ZTtcbiAgY29uc3QgcHJlY2VkaW5nVG9rZW5zID0gaXNTZXFJdGVtID8gaXRlbS5zdGFydCA6IGl0ZW0uc2VwO1xuXG4gIGlmIChcbiAgICAodmFsdWVUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrLW1hcCcgJiYgY2hlY2tJc1BsYWluT2JqZWN0KG9sZFZhbHVlKSAmJiBjaGVja0lzUGxhaW5PYmplY3QobmV3VmFsdWUpXG4gICAgICAmJiBkaWROb3JtYWxpemVGaXJzdEl0ZW1JbmRlbnQocHJlY2VkaW5nVG9rZW5zLCB2YWx1ZVRva2VuKSAmJiBkaWRNZXJnZU1hcCh2YWx1ZVRva2VuLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKSB8fCAodmFsdWVUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrLXNlcScgJiYgQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSlcbiAgICAgICAgJiYgZGlkTm9ybWFsaXplRmlyc3RJdGVtSW5kZW50KHByZWNlZGluZ1Rva2VucywgdmFsdWVUb2tlbikgJiYgZGlkTWVyZ2VTZXEodmFsdWVUb2tlbiwgb2xkVmFsdWUsIG5ld1ZhbHVlKSlcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVwbGFjZUl0ZW1WYWx1ZShpdGVtLCBuZXdWYWx1ZSwgcGFyZW50SW5kZW50LCB2YWx1ZVRva2VuPy50eXBlID09PSAnZmxvdy1jb2xsZWN0aW9uJywgaXNTZXFJdGVtKTtcbn1cblxuLyoqXG4gKiBHaXZlcyBldmVyeSBpdGVtIG9mIGEgY29sbGVjdGlvbiB0aGUgaW5kZW50IG9mIGl0cyBvd24gbGluZSwgc28gdGhhdCBhbnkgb2YgdGhlbSBjYW4gYmUgcmVtb3ZlZCBvciBtb3ZlZC5cbiAqXG4gKiBBbiBpdGVtIHdpdGggTk8gVkFMVUUg4oCUIGEgYmFyZSBgLWAsIG9yIGBrZXk6YCB3aXRoIG5vdGhpbmcgYWZ0ZXIgaXQg4oCUIGFic29yYnMgdGhlIG5ld2xpbmUgdGhhdCBlbmRzIGl0cyBsaW5lIEFORCB0aGVcbiAqIGluZGVudCBvZiB0aGUgbGluZSBhZnRlciBpdCwgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyBub3RoaW5nIGVsc2UgdG8gaGFuZyB0aGVtIG9uLiBSZW1vdmluZyBvciBtb3Zpbmcgc3VjaCBhbiBpdGVtXG4gKiB0aGVyZWZvcmUgdGFrZXMgaXRzIHN1Y2Nlc3NvcidzIGluZGVudCB3aXRoIGl0LCBhbmQgdGhlIGJsb2NrIHRoYXQgY29tZXMgYmFjayBkb2VzIG5vdCBwYXJzZSBhdCBhbGwuXG4gKlxuICogTWVhc3VyZWQ6IG92ZXIgYSAzNiAwMDAtbXV0YXRpb24gZGlmZmVyZW50aWFsIGZ1enogdGhpcyBPTkUgc2hhcGUgYWNjb3VudGVkIGZvciBldmVyeSBzcGxpY2UgdGhlIHNhZmV0eSBuZXQgaGFkIHRvXG4gKiByZWZ1c2Ugb24gdW5yZWFkYWJsZSBvdXRwdXQg4oCUIDkzIG9mIHRoZW0g4oCUIHNvIGl0IGlzIGEgZmlkZWxpdHkgZml4IHJhdGhlciB0aGFuIGEgY29ycmVjdG5lc3Mgb25lLCB0aGUgc2FmZXR5IG5ldFxuICogaGF2aW5nIGFscmVhZHkgbWFkZSBlYWNoIG9mIHRob3NlIGEgZmFsbGJhY2suXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb24gLSBUaGUgY29sbGVjdGlvbiB3aG9zZSBpdGVtcyBhcmUgdG8gY2FycnkgdGhlaXIgb3duIGluZGVudC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSXRlbUluZGVudHMoY29sbGVjdGlvbjogQ29sbGVjdGlvblRva2VuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW2luZGV4LCBpdGVtXSBvZiBjb2xsZWN0aW9uLml0ZW1zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gY2FzdFRvPENTVC5Db2xsZWN0aW9uSXRlbSB8IHVuZGVmaW5lZD4oY29sbGVjdGlvbi5pdGVtc1tpbmRleCArIDFdKTtcbiAgICBpZiAoIW5leHRJdGVtIHx8IGl0ZW0udmFsdWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEEgbWFwIGl0ZW0gaGFuZ3MgdGhlbSBvbiBpdHMgYHNlcGAsIGEgc2VxdWVuY2UgaXRlbSBvbiBpdHMgYHN0YXJ0YCwgdGhhdCBiZWluZyBhbGwgaXQgaGFzLlxuICAgIGNvbnN0IHRyYWlsaW5nVG9rZW5zID0gaXRlbS5zZXA/Lmxlbmd0aCA/IGl0ZW0uc2VwIDogaXRlbS5zdGFydDtcbiAgICBjb25zdCBsYXN0VG9rZW4gPSB0cmFpbGluZ1Rva2Vucy5hdCgtMSk7XG4gICAgaWYgKGxhc3RUb2tlbj8udHlwZSAhPT0gJ3NwYWNlJyB8fCB0cmFpbGluZ1Rva2Vucy5hdChTRUNPTkRfVE9fTEFTVF9JTkRFWCk/LnR5cGUgIT09ICduZXdsaW5lJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJhaWxpbmdUb2tlbnMucG9wKCk7XG4gICAgbmV4dEl0ZW0uc3RhcnQudW5zaGlmdChsYXN0VG9rZW4pO1xuICB9XG59XG5cbi8qKlxuICogTmFtZXMgdGhlIGtleSBhbiBpdGVtIGlzIGFkZHJlc3NlZCBieSwgb3IgYG51bGxgIHdoZW4gbm8gc3RyaW5nIGNhbiBuYW1lIGl0LlxuICpcbiAqIGByZXNvbHZlQXNTY2FsYXJgIHlpZWxkcyB0aGUgc2NhbGFyJ3MgVEVYVCByYXRoZXIgdGhhbiBhIHNjaGVtYS1yZXNvbHZlZCB2YWx1ZSwgc28gdGhlIGFuc3dlciBpcyBhbHdheXMgYSBzdHJpbmcg4oCUXG4gKiBhbmQgaXQgaXMgdGhlIHNhbWUgc3RyaW5nIHRoZSBwbGFpbi1vYmplY3QgcHJvamVjdGlvbiBib3RoIHNpZGVzIG9mIHRoZSBtZXJnZSBhcmUgY29tcGFyZWQgdGhyb3VnaCwgd2hpY2ggaXMgd2hhdFxuICogbGV0cyBhIGA0MjpgIGtleSBtYXRjaCB0aGUgcHJvamVjdGlvbidzIGAnNDInYCB3aXRob3V0IHF1b3RpbmcgaXQgb24gdGhlIHdheSBvdXQuXG4gKlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB0byBuYW1lIHRoZSBrZXkgb2YuXG4gKiBAcmV0dXJucyBUaGUga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUga2V5IGlzIGEgY29sbGVjdGlvbiByYXRoZXIgdGhhbiBhIHNjYWxhci5cbiAqL1xuZnVuY3Rpb24gcmVhZEl0ZW1LZXkoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtKTogbnVsbCB8IHN0cmluZyB7XG4gIHJldHVybiAhaXRlbS5rZXkgfHwgIUNTVC5pc1NjYWxhcihpdGVtLmtleSkgPyBudWxsIDogY2FzdFRvPFJlc29sdmVkU2NhbGFyPihDU1QucmVzb2x2ZUFzU2NhbGFyKGl0ZW0ua2V5KSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJdGVtVmFsdWUoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtLCBuZXdWYWx1ZTogdW5rbm93biwgaW5kZW50OiBudW1iZXIsIHNob3VsZFByZWZlckZsb3c6IGJvb2xlYW4sIGlzU2VxSXRlbTogYm9vbGVhbik6IHZvaWQge1xuICBpZiAoaXNTZXFJdGVtKSB7XG4gICAgc2V0SXRlbVZhbHVlKGl0ZW0sIGVtaXRTZXFJdGVtKG5ld1ZhbHVlLCBpbmRlbnQsIHNob3VsZFByZWZlckZsb3cpLnZhbHVlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbWl0dGVkVG9rZW5zID0gZW1pdE1hcEl0ZW1Ub2tlbnMobmV3VmFsdWUsIGluZGVudCwgc2hvdWxkUHJlZmVyRmxvdyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBzZXBgIGlzIHRoZSBgeWFtbGAgcGFja2FnZSdzIG93biBwcm9wZXJ0eSBuYW1lLlxuICBpdGVtLnNlcCA9IGVtaXR0ZWRUb2tlbnMuc2VwYXJhdG9yVG9rZW5zO1xuICBzZXRJdGVtVmFsdWUoaXRlbSwgZW1pdHRlZFRva2Vucy52YWx1ZSk7XG59XG5cbi8qKlxuICogQXNzaWducyBhbiBpdGVtJ3MgdmFsdWUgdG9rZW4sIHJlbW92aW5nIHRoZSBwcm9wZXJ0eSBvdXRyaWdodCB3aGVuIHRoZSBlbWl0dGVkIHZhbHVlIGhhcyBub25lLlxuICpcbiAqIEEga2V5IHdpdGggYSBgbnVsbGAgdmFsdWUgZW1pdHMgYXMgYGtleTpgIHdpdGggbm90aGluZyBhZnRlciB0aGUgc2VwYXJhdG9yLCBzbyB0aGUgaXRlbSBnZW51aW5lbHkgaGFzIG5vIHZhbHVlXG4gKiB0b2tlbiDigJQgYW5kIHVuZGVyIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlc2AgdGhhdCBpcyBhIHByb3BlcnR5IHRvIGRlbGV0ZSwgbm90IG9uZSB0byBzZXQgdG8gYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB0byBhc3NpZ24gdGhlIHZhbHVlIHRva2VuIG9mLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRva2VuLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBlbWl0dGVkIHZhbHVlIGhhcyBub25lLlxuICovXG5mdW5jdGlvbiBzZXRJdGVtVmFsdWUoaXRlbTogQ1NULkNvbGxlY3Rpb25JdGVtLCB2YWx1ZTogQ1NULlRva2VuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsZXRlIGl0ZW0udmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaXRlbS52YWx1ZSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIFNwbGljZXMgdGhlIHRleHQgSU5TSURFIGEgZnJvbnQgbWF0dGVyIGJsb2NrJ3MgZGVsaW1pdGVycywgbGVhdmluZyBib3RoIGAtLS1gIGxpbmVzIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIGZyb250IG1hdHRlciBibG9jaydzIHRleHQuXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRvIHdyaXRlLlxuICogQHJldHVybnMgVGhlIG5ldyBibG9jayB0ZXh0LCBvciBgbnVsbGAgd2hlbiB0aGUgc3BsaWNlIGNvdWxkIG5vdCBiZSBwcm92ZWQgZmFpdGhmdWwuXG4gKi9cbmZ1bmN0aW9uIHNwbGljZUZyb250bWF0dGVyQm9keShzb3VyY2U6IHN0cmluZywgbmV3RnJvbnRtYXR0ZXI6IG9iamVjdCk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB0b2tlbnMgPSBbLi4ubmV3IFBhcnNlcigpLnBhcnNlKHNvdXJjZSldO1xuICBjb25zdCBkb2N1bWVudHMgPSBbLi4ubmV3IENvbXBvc2VyKHsga2VlcFNvdXJjZVRva2VuczogdHJ1ZSB9KS5jb21wb3NlKHRva2VucywgdHJ1ZSldO1xuICAvLyBBIHNlY29uZCBkb2N1bWVudCBpcyByZWFjaGFibGUg4oCUIGEgYC4uLmAgZW5kIG1hcmtlciBzdGFydHMgb25lIOKAlCBhbmQgc3BsaWNpbmcgdGhlIGZpcnN0IHdvdWxkIGVtaXQgYm90aC5cbiAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudHMubGVuZ3RoID09PSAxID8gZG9jdW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuXG4gIGlmICghZG9jdW1lbnQgfHwgZG9jdW1lbnQuZXJyb3JzLmxlbmd0aCA+IDAgfHwgZG9jdW1lbnQud2FybmluZ3Muc29tZSgod2FybmluZykgPT4gd2FybmluZy5jb2RlID09PSBVTlJFU09MVkVEX1RBR19XQVJOSU5HX0NPREUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250ZW50cyA9IGRvY3VtZW50LmNvbnRlbnRzO1xuICBjb25zdCByb290VG9rZW4gPSBjb250ZW50cz8uc3JjVG9rZW47XG4gIC8vIEFuIGFuY2hvciBpcyBhIHNlY29uZCBuYW1lIGZvciBhIG5vZGUsIHNvIGEgc3BsaWNlIHRoYXQgbW92ZXMgb3IgZHJvcHMgb25lIG9mIHRoZSB0d28gc2lsZW50bHkgcmV3cml0ZXMgdGhlIG90aGVyLlxuICAvLyBOb3RoaW5nIGhlcmUgaXMgd29ydGggdGhhdCByaXNrIGZvciBhIGNvbnN0cnVjdCBPYnNpZGlhbidzIG93biBwcm9wZXJ0eSBlZGl0b3IgY2Fubm90IHByb2R1Y2UuXG4gIGlmICghY29udGVudHMgfHwgcm9vdFRva2VuPy50eXBlICE9PSAnYmxvY2stbWFwJyB8fCBjaGVja0hhc0FuY2hvck9yQWxpYXMoY29udGVudHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBIGJsb2NrLW1hcCByb290IGFsd2F5cyBwcm9qZWN0cyB0byBhIHBsYWluIG9iamVjdCwgc28gdGhpcyBpcyBhIGNhc3QgcmF0aGVyIHRoYW4gYSBjaGVjay4gQW55dGhpbmcgdGhhdCBtYWRlIGl0XG4gIC8vIHVudHJ1ZSB3b3VsZCBzdGlsbCBiZSBjYXVnaHQgZG93bnN0cmVhbTogdGhlIG1lcmdlIHdvdWxkIHdyaXRlIGEgbWFwcGluZyB0aGUgc2FmZXR5IG5ldCB0aGVuIHJlZnVzZXMuXG4gIGNvbnN0IG9sZEZyb250bWF0dGVyID0gY2FzdFRvPEdlbmVyaWNPYmplY3Q+KGRvY3VtZW50LnRvSlMoKSk7XG5cbiAgaWYgKCFkaWRNZXJnZU1hcChyb290VG9rZW4sIG9sZEZyb250bWF0dGVyLCBjYXN0VG88R2VuZXJpY09iamVjdD4obmV3RnJvbnRtYXR0ZXIpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRXZlcnkgdG9rZW4sIG5vdCBqdXN0IHRoZSByb290IGNvbGxlY3Rpb24nczogYSBjb21tZW50IGJlZm9yZSBvciBhZnRlciB0aGUgbWFwcGluZyBiZWxvbmdzIHRvIHRoZSBET0NVTUVOVCwgc29cbiAgLy8gYENTVC5zdHJpbmdpZnkoY29udGVudHMuc3JjVG9rZW4pYCBhbG9uZSBzaWxlbnRseSBkcm9wcyBib3RoLlxuICBjb25zdCBlbWl0dGVkQm9keSA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiBDU1Quc3RyaW5naWZ5KHRva2VuKSkuam9pbignJyk7XG5cbiAgLy8gVGhlIHJlcGxhY2VkIHJlZ2lvbiBoYXMgdG8gZW5kIGluIGV4YWN0bHkgb25lIG5ld2xpbmUsIGFzIE9ic2lkaWFuJ3MgZnJvbnQgbWF0dGVyIGJsb2NrIGFsd2F5cyBkb2VzLCBvciB0aGUgY2xvc2luZ1xuICAvLyBgLS0tYCBtb3ZlcyBvZmYgaXRzIG93biBsaW5lLiBBIGJsb2NrIHdob3NlIGxhc3Qga2V5IHdhcyBkcm9wcGVkIGNhbiBlbWl0IG5vbmUsIHNvIGl0IGlzIG5vcm1hbGl6ZWQsIG5vdCB0cnVzdGVkLlxuICBjb25zdCBzcGxpY2VkQm9keSA9IGAke2VtaXR0ZWRCb2R5LnJlcGxhY2UoVFJBSUxJTkdfTkVXTElORV9SRUdfRVhQLCAnJyl9XFxuYDtcblxuICByZXR1cm4gY2hlY2tJc1NlbWFudGljTWF0Y2goc3BsaWNlZEJvZHksIG5ld0Zyb250bWF0dGVyKSA/IHNwbGljZWRCb2R5IDogbnVsbDtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Rmxvdyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnkodmFsdWUsIHtcbiAgICAuLi5PQlNJRElBTl9TVFJJTkdJRllfT1BUSU9OUyxcbiAgICBjb2xsZWN0aW9uU3R5bGU6ICdmbG93JyxcbiAgICBmbG93Q29sbGVjdGlvblBhZGRpbmc6IGZhbHNlXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsMEJBR087QUFDUCxvQkFBeUI7QUFDekIsc0JBSU87QUFDUCxrQkFRTztBQUVQLHlCQUdPO0FBaUNQLE1BQU0seUJBQXlCO0FBSy9CLE1BQU0seUJBQXlCO0FBUS9CLE1BQU0sNkJBQTZCO0FBQUEs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
@@ -77,7 +77,8 @@ ensureBrowserProcess();
77
77
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
78
  return originalRequire?.(id);
79
79
  }
80
- if (globalThis.app.isMobile) {
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
81
82
  if (id === "process" || id === "node:process") {
82
83
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
83
84
  return process;
@@ -137,4 +138,4 @@ function toFrontmatterLinkCacheWithOffsets(reference) {
137
138
  isFrontmatterLinkCacheWithOffsets,
138
139
  toFrontmatterLinkCacheWithOffsets
139
140
  });
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB0eXBlIGZvciBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG4vKipcbiAqIFR5cGUgZm9yIGZyb250bWF0dGVyIGxpbmsgY2FjaGUgd2l0aCBvZmZzZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICovXG4gIGVuZE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0YXJ0IG9mZnNldCBvZiB0aGUgbGluayBpbiB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBzdGFydE9mZnNldDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIHtcbiAgaWYgKCFpc0Zyb250bWF0dGVyTGlua0NhY2hlKHJlZmVyZW5jZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzID0gcmVmZXJlbmNlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cz47XG4gIHJldHVybiBmcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLnN0YXJ0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgZnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cy5lbmRPZmZzZXQgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUgdG8gYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMocmVmZXJlbmNlOiBGcm9udG1hdHRlckxpbmtDYWNoZSk6IEZyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHJlZmVyZW5jZSlcbiAgICA/IHJlZmVyZW5jZVxuICAgIDoge1xuICAgICAgLi4ucmVmZXJlbmNlLFxuICAgICAgZW5kT2Zmc2V0OiByZWZlcmVuY2Uub3JpZ2luYWwubGVuZ3RoLFxuICAgICAgc3RhcnRPZmZzZXQ6IDBcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLDZCQUF1QztBQXVCaEMsU0FBUyxrQ0FBa0MsV0FBb0U7QUFDcEgsTUFBSSxLQUFDLCtDQUF1QixTQUFTLEdBQUc7QUFDdEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGtDQUFrQztBQUN4QyxTQUFPLGdDQUFnQyxnQkFBZ0IsVUFBYSxnQ0FBZ0MsY0FBYztBQUNwSDtBQVFPLFNBQVMsa0NBQWtDLFdBQWtFO0FBQ2xILFNBQU8sa0NBQWtDLFNBQVMsSUFDOUMsWUFDQTtBQUFBLElBQ0EsR0FBRztBQUFBLElBQ0gsV0FBVyxVQUFVLFNBQVM7QUFBQSxJQUM5QixhQUFhO0FBQUEsRUFDZjtBQUNKOyIsIm5hbWVzIjpbXX0=
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB0eXBlIGZvciBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG4vKipcbiAqIFR5cGUgZm9yIGZyb250bWF0dGVyIGxpbmsgY2FjaGUgd2l0aCBvZmZzZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICovXG4gIGVuZE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0YXJ0IG9mZnNldCBvZiB0aGUgbGluayBpbiB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBzdGFydE9mZnNldDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIHtcbiAgaWYgKCFpc0Zyb250bWF0dGVyTGlua0NhY2hlKHJlZmVyZW5jZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzID0gcmVmZXJlbmNlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cz47XG4gIHJldHVybiBmcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLnN0YXJ0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgZnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cy5lbmRPZmZzZXQgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUgdG8gYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMocmVmZXJlbmNlOiBGcm9udG1hdHRlckxpbmtDYWNoZSk6IEZyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHJlZmVyZW5jZSlcbiAgICA/IHJlZmVyZW5jZVxuICAgIDoge1xuICAgICAgLi4ucmVmZXJlbmNlLFxuICAgICAgZW5kT2Zmc2V0OiByZWZlcmVuY2Uub3JpZ2luYWwubGVuZ3RoLFxuICAgICAgc3RhcnRPZmZzZXQ6IDBcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSw2QkFBdUM7QUF1QmhDLFNBQVMsa0NBQWtDLFdBQW9FO0FBQ3BILE1BQUksS0FBQywrQ0FBdUIsU0FBUyxHQUFHO0FBQ3RDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxrQ0FBa0M7QUFDeEMsU0FBTyxnQ0FBZ0MsZ0JBQWdCLFVBQWEsZ0NBQWdDLGNBQWM7QUFDcEg7QUFRTyxTQUFTLGtDQUFrQyxXQUFrRTtBQUNsSCxTQUFPLGtDQUFrQyxTQUFTLElBQzlDLFlBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxJQUNILFdBQVcsVUFBVSxTQUFTO0FBQUEsSUFDOUIsYUFBYTtBQUFBLEVBQ2Y7QUFDSjsiLCJuYW1lcyI6W119
@@ -77,7 +77,8 @@ ensureBrowserProcess();
77
77
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
78
  return originalRequire?.(id);
79
79
  }
80
- if (globalThis.app.isMobile) {
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
81
82
  if (id === "process" || id === "node:process") {
82
83
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
83
84
  return process;
@@ -249,4 +250,4 @@ function preserveFormatting(content, newFrontmatter) {
249
250
  removeEmptyFrontmatterValues,
250
251
  setFrontmatter
251
252
  });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgYW5kIG1hbmFnaW5nIFlBTUwgZnJvbnQgbWF0dGVyIGluIE9ic2lkaWFuIG5vdGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlV3JhcHBlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS13cmFwcGVyJztcblxuaW1wb3J0IHsgZmlsdGVySW5QbGFjZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcnJheSc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IGluc2VydEF0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQge1xuICBnZXRGcm9udE1hdHRlckluZm8sXG4gIHBhcnNlWWFtbCxcbiAgc3RyaW5naWZ5WWFtbFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGNvbWJpbmVkIGZyb250IG1hdHRlciBvZiBhIGRvY3VtZW50LlxuICogSXQgaXMgYSB1bmlvbiBvZiBjdXN0b20gZnJvbnQgbWF0dGVyLCBPYnNpZGlhbiBmcm9udCBtYXR0ZXIsIGFuZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+ID0gR2VuZXJpY09iamVjdDxDdXN0b21Gcm9udG1hdHRlciAmIE9ic2lkaWFuRnJvbnRtYXR0ZXI+O1xuXG4vKipcbiAqIEEgcmV3cml0ZSBvZiBhIG5vdGUncyBmcm9udCBtYXR0ZXIgdGhhdCBrZWVwcyB0aGUgYXV0aG9yJ3Mgb3JpZ2luYWwgZm9ybWF0dGluZyB3aGVyZXZlciB0aGUgY2hhbmdlIGRvZXMgbm90IHJlYWNoIGl0LlxuICpcbiAqIEl0IGlzIGhhbmRlZCB0aGUgd2hvbGUgbm90ZSBhbmQgdGhlIGZyb250IG1hdHRlciB0byB3cml0ZSwgYW5kIHJldHVybnMgdGhlIHdob2xlIG5ldyBub3RlIOKAlCBvciBgbnVsbGAgd2hlbiBpdCBjYW5ub3QgYmUgZmFpdGhmdWwsIHdoaWNoIGhhbmRzIHRoZSB3cml0ZSBiYWNrIHRvIHtAbGluayBzZXRGcm9udG1hdHRlcn0ncyBvd24gcGFyc2UtYW5kLXN0cmluZ2lmeSBwYXRoLiBSZXR1cm5pbmcgYG51bGxgIGlzIG5ldmVyIGFuIGVycm9yOiBpdCBpcyBob3cgdGhlIHByZXNlcnZlciBndWFyYW50ZWVzIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggb3IgaW1wcm92ZSBvbiB0aGF0IHBhdGgsIG5ldmVyIGRvIHdvcnNlIHRoYW4gaXQuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbm90ZSB0byByZXdyaXRlIHRoZSBmcm9udCBtYXR0ZXIgb2YuXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRvIHdyaXRlLlxuICogQHJldHVybnMgVGhlIG5ldyBub3RlLCBvciBgbnVsbGAgdG8gbGV0IHtAbGluayBzZXRGcm9udG1hdHRlcn0gd3JpdGUgaXQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyID0gKHRoaXM6IHZvaWQsIGNvbnRlbnQ6IHN0cmluZywgbmV3RnJvbnRtYXR0ZXI6IG9iamVjdCkgPT4gbnVsbCB8IHN0cmluZztcblxuLyoqXG4gKiBBIGZyb250IG1hdHRlciBvZiBhbiBPYnNpZGlhbiBmaWxlLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaGVscC5vYnNpZGlhbi5tZC9FZGl0aW5nK2FuZCtmb3JtYXR0aW5nL1Byb3BlcnRpZXMjRGVmYXVsdCtwcm9wZXJ0aWVzfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuRnJvbnRtYXR0ZXIge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgYWxpYXNlcyBmb3IgdGhlIG5vdGUuXG4gICAqL1xuICBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIENTUyBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSBub3RlLlxuICAgKi9cbiAgY3NzY2xhc3Nlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiB0YWdzIGZvciB0aGUgbm90ZS5cbiAgICovXG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGZyb250IG1hdHRlciBmb3IgcHVibGlzaGluZyBpbiBPYnNpZGlhbi5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2hlbHAub2JzaWRpYW4ubWQvRWRpdGluZythbmQrZm9ybWF0dGluZy9Qcm9wZXJ0aWVzI1Byb3BlcnRpZXMrZm9yK09ic2lkaWFuK1B1Ymxpc2h9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5QdWJsaXNoRnJvbnRtYXR0ZXIge1xuICAvKipcbiAgICogQSBjb3ZlciBpbWFnZSBmb3IgdGhlIG5vdGUuXG4gICAqL1xuICBjb3Zlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIG5vdGUuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gaW1hZ2UgZm9yIHRoZSBub3RlLlxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcGVybWFuZW50IGxpbmsgZm9yIHRoZSBub3RlLlxuICAgKi9cbiAgcGVybWFsaW5rPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RlIGlzIHB1Ymxpc2hlZC5cbiAgICovXG4gIHB1Ymxpc2g/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW1vdmVFbXB0eUZyb250bWF0dGVyVmFsdWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVFbXB0eUZyb250bWF0dGVyVmFsdWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmcm9udCBtYXR0ZXIgb2JqZWN0IHRvIHJlbW92ZSB0aGUgZW1wdHkgdmFsdWVzIGZyb20uIEl0IGlzIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IEdlbmVyaWNPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVtb3ZlIGFycmF5cyB0aGF0IGFyZSBlbXB0eSwgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYmVjYW1lIGVtcHR5IGFmdGVyIHRoZWlyIG93biBpdGVtcyB3ZXJlIHJlbW92ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlbW92ZUVtcHR5QXJyYXlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW1vdmUgcGxhaW4gb2JqZWN0cyB0aGF0IGFyZSBlbXB0eSwgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYmVjYW1lIGVtcHR5IGFmdGVyIHRoZWlyIG93biBwcm9wZXJ0aWVzIHdlcmUgcmVtb3ZlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlRW1wdHlPYmplY3RzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW1vdmUgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIEJvdGggYXJlIHRyZWF0ZWQgdGhlIHNhbWU6IHRoZXkgYXJlIHRoZSB0d28gd2F5cyBhIGtleSBjYW4gYmUgcHJlc2VudCBidXQgY2Fycnkgbm8gdmFsdWUsIGFuZCBgdW5kZWZpbmVkYCBjYW5ub3Qgc3Vydml2ZSBhIFlBTUwgcm91bmQtdHJpcCBhbnl3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlbW92ZU51bGxzPzogYm9vbGVhbjtcbn1cblxuY29uc3QgRlJPTlRNQVRURVJfRk9STUFUVElOR19QUkVTRVJWRVJfU1RBVEVfS0VZID0gJ2Zyb250bWF0dGVyRm9ybWF0dGluZ1ByZXNlcnZlcic7XG5jb25zdCBLRVlfUEFUSF9TRVBBUkFUT1IgPSAnLic7XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSB2YWx1ZXMgZnJvbSBhIGZyb250IG1hdHRlciBvYmplY3QsIHJlY3Vyc2luZyBpbnRvIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMuXG4gKlxuICogVGhlIHRyYXZlcnNhbCBpcyBib3R0b20tdXA6IGEgY29udGFpbmVyIGlzIHBydW5lZCBiZWZvcmUgaXQgaXMgaXRzZWxmIHRlc3RlZCBmb3IgZW1wdGluZXNzLCBzbyBhIGNvbnRhaW5lciB0aGF0IGhvbGRzIG5vdGhpbmcgYnV0IGVtcHR5IHZhbHVlcyBpcyByZW1vdmVkIGFzIHdlbGwgd2hlbiB0aGUgbWF0Y2hpbmcgb3B0aW9uIGlzIGVuYWJsZWQuXG4gKi9cbmNsYXNzIEVtcHR5RnJvbnRtYXR0ZXJWYWx1ZVJlbW92ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW92ZWRLZXlQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRSZW1vdmVFbXB0eUFycmF5czogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRSZW1vdmVFbXB0eU9iamVjdHM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlTnVsbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcmVtb3ZlciwgcmVzb2x2aW5nIHRoZSBwcm92aWRlZCBvcHRpb25zIGFnYWluc3QgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbW92aW5nIHRoZSBlbXB0eSBmcm9udCBtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUmVtb3ZlRW1wdHlGcm9udG1hdHRlclZhbHVlc1BhcmFtcykge1xuICAgIHRoaXMuc2hvdWxkUmVtb3ZlRW1wdHlBcnJheXMgPSBwYXJhbXMuc2hvdWxkUmVtb3ZlRW1wdHlBcnJheXMgPz8gZmFsc2U7XG4gICAgdGhpcy5zaG91bGRSZW1vdmVFbXB0eU9iamVjdHMgPSBwYXJhbXMuc2hvdWxkUmVtb3ZlRW1wdHlPYmplY3RzID8/IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkUmVtb3ZlTnVsbHMgPSBwYXJhbXMuc2hvdWxkUmVtb3ZlTnVsbHMgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZW1wdHkgdmFsdWVzIGZyb20gdGhlIGdpdmVuIGZyb250IG1hdHRlciBvYmplY3QsIG1vZGlmeWluZyBpdCBpbiBwbGFjZS5cbiAgICpcbiAgICogQHBhcmFtIGZyb250bWF0dGVyIC0gVGhlIGZyb250IG1hdHRlciBvYmplY3QgdG8gcmVtb3ZlIHRoZSBlbXB0eSB2YWx1ZXMgZnJvbS5cbiAgICogQHJldHVybnMgVGhlIGtleSBwYXRocyBvZiB0aGUgcmVtb3ZlZCB2YWx1ZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVtb3ZlZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoZnJvbnRtYXR0ZXI6IEdlbmVyaWNPYmplY3QpOiBzdHJpbmdbXSB7XG4gICAgdGhpcy5wcnVuZU9iamVjdChmcm9udG1hdHRlciwgJycpO1xuICAgIHJldHVybiB0aGlzLnJlbW92ZWRLZXlQYXRocztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJc0VtcHR5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFJlbW92ZU51bGxzO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgPyB2YWx1ZS5sZW5ndGggPT09IDAgJiYgdGhpcy5zaG91bGRSZW1vdmVFbXB0eUFycmF5c1xuICAgICAgOiBjaGVja0lzUGxhaW5PYmplY3QodmFsdWUpICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDAgJiYgdGhpcy5zaG91bGRSZW1vdmVFbXB0eU9iamVjdHM7XG4gIH1cblxuICBwcml2YXRlIGpvaW5LZXlQYXRoKGtleVBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBrZXlQYXRoID8gYCR7a2V5UGF0aH0ke0tFWV9QQVRIX1NFUEFSQVRPUn0ke2tleX1gIDoga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBwcnVuZSh2YWx1ZTogdW5rbm93biwga2V5UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnBydW5lQXJyYXkodmFsdWUsIGtleVBhdGgpO1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgdGhpcy5wcnVuZU9iamVjdCh2YWx1ZSwga2V5UGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcnVuZUFycmF5KGFycmF5OiB1bmtub3duW10sIGtleVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGZpbHRlckluUGxhY2UoYXJyYXksIChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXRlbUtleVBhdGggPSB0aGlzLmpvaW5LZXlQYXRoKGtleVBhdGgsIFN0cmluZyhpbmRleCkpO1xuICAgICAgdGhpcy5wcnVuZShpdGVtLCBpdGVtS2V5UGF0aCk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJc0VtcHR5KGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZWRLZXlQYXRocy5wdXNoKGl0ZW1LZXlQYXRoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJ1bmVPYmplY3QoJG9iamVjdDogR2VuZXJpY09iamVjdCwga2V5UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoJG9iamVjdCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5UGF0aCA9IHRoaXMuam9pbktleVBhdGgoa2V5UGF0aCwga2V5KTtcbiAgICAgIHRoaXMucHJ1bmUodmFsdWUsIHZhbHVlS2V5UGF0aCk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVkS2V5UGF0aHMucHVzaCh2YWx1ZUtleVBhdGgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICAgICAgZGVsZXRlICRvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QsIGkuZS4gYW4gb2JqZWN0IGxpdGVyYWwgcmF0aGVyIHRoYW4gYW4gYXJyYXkgb3IgYSBjbGFzcyBpbnN0YW5jZS5cbiAqXG4gKiBgcGFyc2VZYW1sKClgIHR1cm5zIGEgWUFNTCB0aW1lc3RhbXAgaW50byBhIHtAbGluayBEYXRlfSwgd2hpY2ggaGFzIG5vIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHNvIGEgcGxhaW4gYHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdgIHRlc3Qgd291bGQgcmVwb3J0IGV2ZXJ5IGRhdGUgYXMgYW4gZW1wdHkgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgR2VuZXJpY09iamVjdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBjb250ZW50IHN0cmluZy5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KGNvbnRlbnQ6IHN0cmluZyk6IENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+IHtcbiAgY29uc3QgZnJvbnRtYXR0ZXJJbmZvID0gZ2V0RnJvbnRNYXR0ZXJJbmZvKGNvbnRlbnQpO1xuICByZXR1cm4gKHBhcnNlWWFtbChmcm9udG1hdHRlckluZm8uZnJvbnRtYXR0ZXIpID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHtAbGluayBGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXJ9IGV2ZXJ5IGZyb250LW1hdHRlciB3cml0ZSBpbiB0aGlzIGxpYnJhcnkgcm91dGVzIHRocm91Z2guXG4gKlxuICogVGhlcmUgaXMgYXQgbW9zdCBvbmUsIHNoYXJlZCBieSBldmVyeSBwbHVnaW4gbG9hZGVkIGluIHRoZSBzYW1lIHJlYWxtIOKAlCBsaWtlIGV2ZXJ5IG90aGVyIHJlZ2lzdHJhdGlvbiBpbiB0aGlzIGxpYnJhcnkgaXQgbGl2ZXMgaW4gdGhlIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5EZXZVdGlsc2AgYmFnIOKAlCBzbyBhIHNpbmdsZSBjYWxsIG1ha2VzIGV2ZXJ5IHdyaXRlIHRoaXMgbGlicmFyeSBwZXJmb3JtcyBmb3JtYXR0aW5nLXByZXNlcnZpbmcsIGBwcm9jZXNzRnJvbnRtYXR0ZXIoKWAgYW5kIGBhcHBseUZpbGVDaGFuZ2VzKClgIGluY2x1ZGVkLiBQYXNzIGBudWxsYCB0byB1bnJlZ2lzdGVyLlxuICpcbiAqIFRoZSBwcmVzZXJ2ZXIgaXMgTk9UIHJlZ2lzdGVyZWQgYnkgZGVmYXVsdCwgYW5kIHRoYXQgaXMgYSBidW5kbGUtc2l6ZSBkZWNpc2lvbiByYXRoZXIgdGhhbiBhIGRvdWJ0IGFib3V0IHRoZSBlbmdpbmU6IHRoZSBvbmUgdGhpcyBsaWJyYXJ5IHNoaXBzIG5lZWRzIHRoZSBgeWFtbGAgcGFja2FnZSdzIENTVCBBUEksIHdoaWNoIE9ic2lkaWFuIGRvZXMgbm90IGhhbmQgdG8gcGx1Z2lucyBhbmQgd2hpY2ggY29zdHMgYWJvdXQgMTAwIEtCIG9mIGEgcGx1Z2luJ3MgYG1haW4uanNgLiBBIHBsdWdpbiB0aGF0IHdhbnRzIGl0IGNhbGxzIGBlbmFibGVGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2YXRpb24oKWAgZnJvbSBgb2JzaWRpYW4tZGV2LXV0aWxzL29ic2lkaWFuL2Zyb250bWF0dGVyLWZvcm1hdHRpbmdgLCBhbmQgcGF5cyBmb3IgaXQgb25seSB0aGVuLlxuICpcbiAqIEBwYXJhbSBwcmVzZXJ2ZXIgLSBUaGUgcHJlc2VydmVyIHRvIHJvdXRlIGZyb250LW1hdHRlciB3cml0ZXMgdGhyb3VnaCwgb3IgYG51bGxgIHRvIHVucmVnaXN0ZXIgdGhlIGN1cnJlbnQgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXIocHJlc2VydmVyOiBGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXIgfCBudWxsKTogdm9pZCB7XG4gIGdldEZyb250bWF0dGVyRm9ybWF0dGluZ1ByZXNlcnZlcldyYXBwZXIoKS52YWx1ZSA9IHByZXNlcnZlcjtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBlbXB0eSB2YWx1ZXMgZnJvbSBhIGZyb250IG1hdHRlciBvYmplY3QsIGF0IGFueSBuZXN0aW5nIGRlcHRoLlxuICpcbiAqIEJ5IGRlZmF1bHQgb25seSBlbXB0eSBzdHJpbmdzIGFyZSByZW1vdmVkIOKAlCBib3RoIGFzIHByb3BlcnR5IHZhbHVlcyBhbmQgYXMgYXJyYXkgaXRlbXMuIGBudWxsYCwgYHVuZGVmaW5lZGAsIGVtcHR5IGFycmF5cyBhbmQgZW1wdHkgb2JqZWN0cyBhcmUga2VwdCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogVGhlIG9iamVjdCBpcyBtb2RpZmllZCBpbiBwbGFjZSwgc28gdGhlIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc3RyYWlnaHQgZnJvbSBhIGBwcm9jZXNzRnJvbnRtYXR0ZXIoKWAgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW1vdmluZyB0aGUgZW1wdHkgZnJvbnQgbWF0dGVyIHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBkb3Qtc2VwYXJhdGVkIGtleSBwYXRocyBvZiB0aGUgcmVtb3ZlZCB2YWx1ZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVtb3ZlZC4gQW4gYXJyYXkgaXRlbSBpcyByZXBvcnRlZCBieSBpdHMgaW5kZXggd2l0aGluIHRoZSBhcnJheSBhcyBpdCB3YXMgYmVmb3JlIGFueSBvZiBpdHMgc2libGluZ3Mgd2VyZSByZW1vdmVkLCBlLmcuIGB0YWdzLjBgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW1wdHlGcm9udG1hdHRlclZhbHVlcyhwYXJhbXM6IFJlbW92ZUVtcHR5RnJvbnRtYXR0ZXJWYWx1ZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBuZXcgRW1wdHlGcm9udG1hdHRlclZhbHVlUmVtb3ZlcihwYXJhbXMpLnJlbW92ZShwYXJhbXMuZnJvbnRtYXR0ZXIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGNvbnRlbnQgc3RyaW5nLlxuICpcbiAqIFdoZW4gYSB7QGxpbmsgRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyfSBpcyByZWdpc3RlcmVkIChzZWUge0BsaW5rIHJlZ2lzdGVyRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyfSkgdGhlIHdyaXRlIGdvZXMgdGhyb3VnaCBpdCBmaXJzdCwgc28gdGhlIHBhcnRzIG9mIHRoZSBibG9jayB0aGUgY2hhbmdlIGRvZXMgbm90IHJlYWNoIGtlZXAgdGhlIGJ5dGVzIHRoZWlyIGF1dGhvciB3cm90ZSDigJQgdGhlaXIgY29tbWVudHMsIHF1b3RpbmcsIGJsYW5rIGxpbmVzIGFuZCBpbmRlbnRhdGlvbi4gV2l0aG91dCBvbmUsIGFuZCB3aGVuZXZlciB0aGUgcHJlc2VydmVyIHJlcG9ydHMgaXQgY2Fubm90IGJlIGZhaXRoZnVsLCB0aGUgd2hvbGUgYmxvY2sgaXMgcGFyc2VkIGFuZCB3cml0dGVuIG91dCBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBPYnNpZGlhbidzIG93biBgcHJvY2Vzc0Zyb250TWF0dGVyKClgIGRvZXMuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCBzdHJpbmcgdG8gc2V0IHRoZSBmcm9udCBtYXR0ZXIgaW4uXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgbmV3IGZyb250IG1hdHRlciB0byBzZXQuXG4gKiBAcmV0dXJucyBUaGUgbmV3IGNvbnRlbnQgc3RyaW5nIHdpdGggdGhlIGZyb250IG1hdHRlciBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGcm9udG1hdHRlcihjb250ZW50OiBzdHJpbmcsIG5ld0Zyb250bWF0dGVyOiBvYmplY3QpOiBzdHJpbmcge1xuICBjb25zdCBwcmVzZXJ2ZWRDb250ZW50ID0gcHJlc2VydmVGb3JtYXR0aW5nKGNvbnRlbnQsIG5ld0Zyb250bWF0dGVyKTtcbiAgaWYgKHByZXNlcnZlZENvbnRlbnQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJlc2VydmVkQ29udGVudDtcbiAgfVxuXG4gIGNvbnN0IGZyb250bWF0dGVySW5mbyA9IGdldEZyb250TWF0dGVySW5mbyhjb250ZW50KTtcbiAgaWYgKE9iamVjdC5rZXlzKG5ld0Zyb250bWF0dGVyKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY29udGVudC5zbGljZShmcm9udG1hdHRlckluZm8uY29udGVudFN0YXJ0KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0Zyb250bWF0dGVyU3RyaW5nID0gc3RyaW5naWZ5WWFtbChuZXdGcm9udG1hdHRlcik7XG5cbiAgcmV0dXJuIGZyb250bWF0dGVySW5mby5leGlzdHNcbiAgICA/IGluc2VydEF0KHtcbiAgICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgICBlbmRJbmRleDogZnJvbnRtYXR0ZXJJbmZvLnRvLFxuICAgICAgc3RhcnRJbmRleDogZnJvbnRtYXR0ZXJJbmZvLmZyb20sXG4gICAgICBzdWJzdHJpbmc6IG5ld0Zyb250bWF0dGVyU3RyaW5nXG4gICAgfSlcbiAgICA6IGAtLS1cXG4ke25ld0Zyb250bWF0dGVyU3RyaW5nfS0tLVxcbiR7Y29udGVudH1gO1xufVxuXG5mdW5jdGlvbiBnZXRGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXJXcmFwcGVyKCk6IFZhbHVlV3JhcHBlcjxGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXIgfCBudWxsPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8RnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyIHwgbnVsbD4oRlJPTlRNQVRURVJfRk9STUFUVElOR19QUkVTRVJWRVJfU1RBVEVfS0VZLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gcHJlc2VydmVGb3JtYXR0aW5nKGNvbnRlbnQ6IHN0cmluZywgbmV3RnJvbnRtYXR0ZXI6IG9iamVjdCk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBwcmVzZXJ2ZXIgPSBnZXRGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXJXcmFwcGVyKCkudmFsdWU7XG4gIGlmICghcHJlc2VydmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBIHByZXNlcnZlciBjYW4gYmUgc3VwcGxpZWQgYnkgYW55IHBsdWdpbiwgYW5kIHRoaXMgcnVucyBpbnNpZGUgdGhlIHdyaXRlIHF1ZXVlLCB3aGVyZSBhIHRocm93IHdlZGdlcyBldmVyeSB3cml0ZVxuICAvLyBiZWhpbmQgaXQuIFNvIGEgYnJva2VuIHByZXNlcnZlciBpcyByZXBvcnRlZCBhbmQgc3RlcHBlZCBhcm91bmQgcmF0aGVyIHRoYW4gYWxsb3dlZCB0byB0YWtlIHRoZSB3cml0ZSBkb3duLlxuICB0cnkge1xuICAgIHJldHVybiBwcmVzZXJ2ZXIoY29udGVudCwgbmV3RnJvbnRtYXR0ZXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKCdUaGUgcmVnaXN0ZXJlZCBmcm9udCBtYXR0ZXIgZm9ybWF0dGluZyBwcmVzZXJ2ZXIgdGhyZXcuIEZhbGxpbmcgYmFjayB0byByZXdyaXRpbmcgdGhlIHdob2xlIGJsb2NrLicsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLG1CQUE4QjtBQUM5QixtQkFBMkI7QUFDM0Isb0JBQXlCO0FBQ3pCLHNCQUlPO0FBRVAsc0NBQXlDO0FBMEd6QyxNQUFNLDZDQUE2QztBQUNuRCxNQUFNLHFCQUFxQjtBQU8zQixNQUFNLDZCQUE2QjtBQUFBLEVBQ2hCLGtCQUE0QixDQUFDO0FBQUEsRUFDN0I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBNEM7QUFDN0QsU0FBSywwQkFBMEIsT0FBTywyQkFBMkI7QUFDakUsU0FBSywyQkFBMkIsT0FBTyw0QkFBNEI7QUFDbkUsU0FBSyxvQkFBb0IsT0FBTyxxQkFBcUI7QUFBQSxFQUN2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sT0FBTyxhQUFzQztBQUNsRCxTQUFLLFlBQVksYUFBYSxFQUFFO0FBQ2hDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVRLGFBQWEsT0FBeUI7QUFDNUMsUUFBSSxVQUFVLElBQUk7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFVBQVUsUUFBUSxVQUFVLFFBQVc7QUFDekMsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLFdBQU8sTUFBTSxRQUFRLEtBQUssSUFDdEIsTUFBTSxXQUFXLEtBQUssS0FBSyww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
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgYW5kIG1hbmFnaW5nIFlBTUwgZnJvbnQgbWF0dGVyIGluIE9ic2lkaWFuIG5vdGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlV3JhcHBlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS13cmFwcGVyJztcblxuaW1wb3J0IHsgZmlsdGVySW5QbGFjZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcnJheSc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IGluc2VydEF0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQge1xuICBnZXRGcm9udE1hdHRlckluZm8sXG4gIHBhcnNlWWFtbCxcbiAgc3RyaW5naWZ5WWFtbFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGNvbWJpbmVkIGZyb250IG1hdHRlciBvZiBhIGRvY3VtZW50LlxuICogSXQgaXMgYSB1bmlvbiBvZiBjdXN0b20gZnJvbnQgbWF0dGVyLCBPYnNpZGlhbiBmcm9udCBtYXR0ZXIsIGFuZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+ID0gR2VuZXJpY09iamVjdDxDdXN0b21Gcm9udG1hdHRlciAmIE9ic2lkaWFuRnJvbnRtYXR0ZXI+O1xuXG4vKipcbiAqIEEgcmV3cml0ZSBvZiBhIG5vdGUncyBmcm9udCBtYXR0ZXIgdGhhdCBrZWVwcyB0aGUgYXV0aG9yJ3Mgb3JpZ2luYWwgZm9ybWF0dGluZyB3aGVyZXZlciB0aGUgY2hhbmdlIGRvZXMgbm90IHJlYWNoIGl0LlxuICpcbiAqIEl0IGlzIGhhbmRlZCB0aGUgd2hvbGUgbm90ZSBhbmQgdGhlIGZyb250IG1hdHRlciB0byB3cml0ZSwgYW5kIHJldHVybnMgdGhlIHdob2xlIG5ldyBub3RlIOKAlCBvciBgbnVsbGAgd2hlbiBpdCBjYW5ub3QgYmUgZmFpdGhmdWwsIHdoaWNoIGhhbmRzIHRoZSB3cml0ZSBiYWNrIHRvIHtAbGluayBzZXRGcm9udG1hdHRlcn0ncyBvd24gcGFyc2UtYW5kLXN0cmluZ2lmeSBwYXRoLiBSZXR1cm5pbmcgYG51bGxgIGlzIG5ldmVyIGFuIGVycm9yOiBpdCBpcyBob3cgdGhlIHByZXNlcnZlciBndWFyYW50ZWVzIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggb3IgaW1wcm92ZSBvbiB0aGF0IHBhdGgsIG5ldmVyIGRvIHdvcnNlIHRoYW4gaXQuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbm90ZSB0byByZXdyaXRlIHRoZSBmcm9udCBtYXR0ZXIgb2YuXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRvIHdyaXRlLlxuICogQHJldHVybnMgVGhlIG5ldyBub3RlLCBvciBgbnVsbGAgdG8gbGV0IHtAbGluayBzZXRGcm9udG1hdHRlcn0gd3JpdGUgaXQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyID0gKHRoaXM6IHZvaWQsIGNvbnRlbnQ6IHN0cmluZywgbmV3RnJvbnRtYXR0ZXI6IG9iamVjdCkgPT4gbnVsbCB8IHN0cmluZztcblxuLyoqXG4gKiBBIGZyb250IG1hdHRlciBvZiBhbiBPYnNpZGlhbiBmaWxlLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaGVscC5vYnNpZGlhbi5tZC9FZGl0aW5nK2FuZCtmb3JtYXR0aW5nL1Byb3BlcnRpZXMjRGVmYXVsdCtwcm9wZXJ0aWVzfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuRnJvbnRtYXR0ZXIge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgYWxpYXNlcyBmb3IgdGhlIG5vdGUuXG4gICAqL1xuICBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIENTUyBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSBub3RlLlxuICAgKi9cbiAgY3NzY2xhc3Nlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiB0YWdzIGZvciB0aGUgbm90ZS5cbiAgICovXG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGZyb250IG1hdHRlciBmb3IgcHVibGlzaGluZyBpbiBPYnNpZGlhbi5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2hlbHAub2JzaWRpYW4ubWQvRWRpdGluZythbmQrZm9ybWF0dGluZy9Qcm9wZXJ0aWVzI1Byb3BlcnRpZXMrZm9yK09ic2lkaWFuK1B1Ymxpc2h9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5QdWJsaXNoRnJvbnRtYXR0ZXIge1xuICAvKipcbiAgICogQSBjb3ZlciBpbWFnZSBmb3IgdGhlIG5vdGUuXG4gICAqL1xuICBjb3Zlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIG5vdGUuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gaW1hZ2UgZm9yIHRoZSBub3RlLlxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcGVybWFuZW50IGxpbmsgZm9yIHRoZSBub3RlLlxuICAgKi9cbiAgcGVybWFsaW5rPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RlIGlzIHB1Ymxpc2hlZC5cbiAgICovXG4gIHB1Ymxpc2g/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW1vdmVFbXB0eUZyb250bWF0dGVyVmFsdWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVFbXB0eUZyb250bWF0dGVyVmFsdWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmcm9udCBtYXR0ZXIgb2JqZWN0IHRvIHJlbW92ZSB0aGUgZW1wdHkgdmFsdWVzIGZyb20uIEl0IGlzIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IEdlbmVyaWNPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVtb3ZlIGFycmF5cyB0aGF0IGFyZSBlbXB0eSwgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYmVjYW1lIGVtcHR5IGFmdGVyIHRoZWlyIG93biBpdGVtcyB3ZXJlIHJlbW92ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlbW92ZUVtcHR5QXJyYXlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW1vdmUgcGxhaW4gb2JqZWN0cyB0aGF0IGFyZSBlbXB0eSwgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYmVjYW1lIGVtcHR5IGFmdGVyIHRoZWlyIG93biBwcm9wZXJ0aWVzIHdlcmUgcmVtb3ZlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlRW1wdHlPYmplY3RzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW1vdmUgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIEJvdGggYXJlIHRyZWF0ZWQgdGhlIHNhbWU6IHRoZXkgYXJlIHRoZSB0d28gd2F5cyBhIGtleSBjYW4gYmUgcHJlc2VudCBidXQgY2Fycnkgbm8gdmFsdWUsIGFuZCBgdW5kZWZpbmVkYCBjYW5ub3Qgc3Vydml2ZSBhIFlBTUwgcm91bmQtdHJpcCBhbnl3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlbW92ZU51bGxzPzogYm9vbGVhbjtcbn1cblxuY29uc3QgRlJPTlRNQVRURVJfRk9STUFUVElOR19QUkVTRVJWRVJfU1RBVEVfS0VZID0gJ2Zyb250bWF0dGVyRm9ybWF0dGluZ1ByZXNlcnZlcic7XG5jb25zdCBLRVlfUEFUSF9TRVBBUkFUT1IgPSAnLic7XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSB2YWx1ZXMgZnJvbSBhIGZyb250IG1hdHRlciBvYmplY3QsIHJlY3Vyc2luZyBpbnRvIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMuXG4gKlxuICogVGhlIHRyYXZlcnNhbCBpcyBib3R0b20tdXA6IGEgY29udGFpbmVyIGlzIHBydW5lZCBiZWZvcmUgaXQgaXMgaXRzZWxmIHRlc3RlZCBmb3IgZW1wdGluZXNzLCBzbyBhIGNvbnRhaW5lciB0aGF0IGhvbGRzIG5vdGhpbmcgYnV0IGVtcHR5IHZhbHVlcyBpcyByZW1vdmVkIGFzIHdlbGwgd2hlbiB0aGUgbWF0Y2hpbmcgb3B0aW9uIGlzIGVuYWJsZWQuXG4gKi9cbmNsYXNzIEVtcHR5RnJvbnRtYXR0ZXJWYWx1ZVJlbW92ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW92ZWRLZXlQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRSZW1vdmVFbXB0eUFycmF5czogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRSZW1vdmVFbXB0eU9iamVjdHM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlTnVsbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcmVtb3ZlciwgcmVzb2x2aW5nIHRoZSBwcm92aWRlZCBvcHRpb25zIGFnYWluc3QgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbW92aW5nIHRoZSBlbXB0eSBmcm9udCBtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUmVtb3ZlRW1wdHlGcm9udG1hdHRlclZhbHVlc1BhcmFtcykge1xuICAgIHRoaXMuc2hvdWxkUmVtb3ZlRW1wdHlBcnJheXMgPSBwYXJhbXMuc2hvdWxkUmVtb3ZlRW1wdHlBcnJheXMgPz8gZmFsc2U7XG4gICAgdGhpcy5zaG91bGRSZW1vdmVFbXB0eU9iamVjdHMgPSBwYXJhbXMuc2hvdWxkUmVtb3ZlRW1wdHlPYmplY3RzID8/IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkUmVtb3ZlTnVsbHMgPSBwYXJhbXMuc2hvdWxkUmVtb3ZlTnVsbHMgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZW1wdHkgdmFsdWVzIGZyb20gdGhlIGdpdmVuIGZyb250IG1hdHRlciBvYmplY3QsIG1vZGlmeWluZyBpdCBpbiBwbGFjZS5cbiAgICpcbiAgICogQHBhcmFtIGZyb250bWF0dGVyIC0gVGhlIGZyb250IG1hdHRlciBvYmplY3QgdG8gcmVtb3ZlIHRoZSBlbXB0eSB2YWx1ZXMgZnJvbS5cbiAgICogQHJldHVybnMgVGhlIGtleSBwYXRocyBvZiB0aGUgcmVtb3ZlZCB2YWx1ZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVtb3ZlZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoZnJvbnRtYXR0ZXI6IEdlbmVyaWNPYmplY3QpOiBzdHJpbmdbXSB7XG4gICAgdGhpcy5wcnVuZU9iamVjdChmcm9udG1hdHRlciwgJycpO1xuICAgIHJldHVybiB0aGlzLnJlbW92ZWRLZXlQYXRocztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJc0VtcHR5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFJlbW92ZU51bGxzO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgPyB2YWx1ZS5sZW5ndGggPT09IDAgJiYgdGhpcy5zaG91bGRSZW1vdmVFbXB0eUFycmF5c1xuICAgICAgOiBjaGVja0lzUGxhaW5PYmplY3QodmFsdWUpICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDAgJiYgdGhpcy5zaG91bGRSZW1vdmVFbXB0eU9iamVjdHM7XG4gIH1cblxuICBwcml2YXRlIGpvaW5LZXlQYXRoKGtleVBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBrZXlQYXRoID8gYCR7a2V5UGF0aH0ke0tFWV9QQVRIX1NFUEFSQVRPUn0ke2tleX1gIDoga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBwcnVuZSh2YWx1ZTogdW5rbm93biwga2V5UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnBydW5lQXJyYXkodmFsdWUsIGtleVBhdGgpO1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgdGhpcy5wcnVuZU9iamVjdCh2YWx1ZSwga2V5UGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcnVuZUFycmF5KGFycmF5OiB1bmtub3duW10sIGtleVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGZpbHRlckluUGxhY2UoYXJyYXksIChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXRlbUtleVBhdGggPSB0aGlzLmpvaW5LZXlQYXRoKGtleVBhdGgsIFN0cmluZyhpbmRleCkpO1xuICAgICAgdGhpcy5wcnVuZShpdGVtLCBpdGVtS2V5UGF0aCk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJc0VtcHR5KGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZWRLZXlQYXRocy5wdXNoKGl0ZW1LZXlQYXRoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJ1bmVPYmplY3QoJG9iamVjdDogR2VuZXJpY09iamVjdCwga2V5UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoJG9iamVjdCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5UGF0aCA9IHRoaXMuam9pbktleVBhdGgoa2V5UGF0aCwga2V5KTtcbiAgICAgIHRoaXMucHJ1bmUodmFsdWUsIHZhbHVlS2V5UGF0aCk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVkS2V5UGF0aHMucHVzaCh2YWx1ZUtleVBhdGgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICAgICAgZGVsZXRlICRvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QsIGkuZS4gYW4gb2JqZWN0IGxpdGVyYWwgcmF0aGVyIHRoYW4gYW4gYXJyYXkgb3IgYSBjbGFzcyBpbnN0YW5jZS5cbiAqXG4gKiBgcGFyc2VZYW1sKClgIHR1cm5zIGEgWUFNTCB0aW1lc3RhbXAgaW50byBhIHtAbGluayBEYXRlfSwgd2hpY2ggaGFzIG5vIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHNvIGEgcGxhaW4gYHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdgIHRlc3Qgd291bGQgcmVwb3J0IGV2ZXJ5IGRhdGUgYXMgYW4gZW1wdHkgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgR2VuZXJpY09iamVjdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBjb250ZW50IHN0cmluZy5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KGNvbnRlbnQ6IHN0cmluZyk6IENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+IHtcbiAgY29uc3QgZnJvbnRtYXR0ZXJJbmZvID0gZ2V0RnJvbnRNYXR0ZXJJbmZvKGNvbnRlbnQpO1xuICByZXR1cm4gKHBhcnNlWWFtbChmcm9udG1hdHRlckluZm8uZnJvbnRtYXR0ZXIpID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHtAbGluayBGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXJ9IGV2ZXJ5IGZyb250LW1hdHRlciB3cml0ZSBpbiB0aGlzIGxpYnJhcnkgcm91dGVzIHRocm91Z2guXG4gKlxuICogVGhlcmUgaXMgYXQgbW9zdCBvbmUsIHNoYXJlZCBieSBldmVyeSBwbHVnaW4gbG9hZGVkIGluIHRoZSBzYW1lIHJlYWxtIOKAlCBsaWtlIGV2ZXJ5IG90aGVyIHJlZ2lzdHJhdGlvbiBpbiB0aGlzIGxpYnJhcnkgaXQgbGl2ZXMgaW4gdGhlIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5EZXZVdGlsc2AgYmFnIOKAlCBzbyBhIHNpbmdsZSBjYWxsIG1ha2VzIGV2ZXJ5IHdyaXRlIHRoaXMgbGlicmFyeSBwZXJmb3JtcyBmb3JtYXR0aW5nLXByZXNlcnZpbmcsIGBwcm9jZXNzRnJvbnRtYXR0ZXIoKWAgYW5kIGBhcHBseUZpbGVDaGFuZ2VzKClgIGluY2x1ZGVkLiBQYXNzIGBudWxsYCB0byB1bnJlZ2lzdGVyLlxuICpcbiAqIFRoZSBwcmVzZXJ2ZXIgaXMgTk9UIHJlZ2lzdGVyZWQgYnkgZGVmYXVsdCwgYW5kIHRoYXQgaXMgYSBidW5kbGUtc2l6ZSBkZWNpc2lvbiByYXRoZXIgdGhhbiBhIGRvdWJ0IGFib3V0IHRoZSBlbmdpbmU6IHRoZSBvbmUgdGhpcyBsaWJyYXJ5IHNoaXBzIG5lZWRzIHRoZSBgeWFtbGAgcGFja2FnZSdzIENTVCBBUEksIHdoaWNoIE9ic2lkaWFuIGRvZXMgbm90IGhhbmQgdG8gcGx1Z2lucyBhbmQgd2hpY2ggY29zdHMgYWJvdXQgMTAwIEtCIG9mIGEgcGx1Z2luJ3MgYG1haW4uanNgLiBBIHBsdWdpbiB0aGF0IHdhbnRzIGl0IGNhbGxzIGBlbmFibGVGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2YXRpb24oKWAgZnJvbSBgb2JzaWRpYW4tZGV2LXV0aWxzL29ic2lkaWFuL2Zyb250bWF0dGVyLWZvcm1hdHRpbmdgLCBhbmQgcGF5cyBmb3IgaXQgb25seSB0aGVuLlxuICpcbiAqIEBwYXJhbSBwcmVzZXJ2ZXIgLSBUaGUgcHJlc2VydmVyIHRvIHJvdXRlIGZyb250LW1hdHRlciB3cml0ZXMgdGhyb3VnaCwgb3IgYG51bGxgIHRvIHVucmVnaXN0ZXIgdGhlIGN1cnJlbnQgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXIocHJlc2VydmVyOiBGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXIgfCBudWxsKTogdm9pZCB7XG4gIGdldEZyb250bWF0dGVyRm9ybWF0dGluZ1ByZXNlcnZlcldyYXBwZXIoKS52YWx1ZSA9IHByZXNlcnZlcjtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBlbXB0eSB2YWx1ZXMgZnJvbSBhIGZyb250IG1hdHRlciBvYmplY3QsIGF0IGFueSBuZXN0aW5nIGRlcHRoLlxuICpcbiAqIEJ5IGRlZmF1bHQgb25seSBlbXB0eSBzdHJpbmdzIGFyZSByZW1vdmVkIOKAlCBib3RoIGFzIHByb3BlcnR5IHZhbHVlcyBhbmQgYXMgYXJyYXkgaXRlbXMuIGBudWxsYCwgYHVuZGVmaW5lZGAsIGVtcHR5IGFycmF5cyBhbmQgZW1wdHkgb2JqZWN0cyBhcmUga2VwdCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogVGhlIG9iamVjdCBpcyBtb2RpZmllZCBpbiBwbGFjZSwgc28gdGhlIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc3RyYWlnaHQgZnJvbSBhIGBwcm9jZXNzRnJvbnRtYXR0ZXIoKWAgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW1vdmluZyB0aGUgZW1wdHkgZnJvbnQgbWF0dGVyIHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBkb3Qtc2VwYXJhdGVkIGtleSBwYXRocyBvZiB0aGUgcmVtb3ZlZCB2YWx1ZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVtb3ZlZC4gQW4gYXJyYXkgaXRlbSBpcyByZXBvcnRlZCBieSBpdHMgaW5kZXggd2l0aGluIHRoZSBhcnJheSBhcyBpdCB3YXMgYmVmb3JlIGFueSBvZiBpdHMgc2libGluZ3Mgd2VyZSByZW1vdmVkLCBlLmcuIGB0YWdzLjBgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW1wdHlGcm9udG1hdHRlclZhbHVlcyhwYXJhbXM6IFJlbW92ZUVtcHR5RnJvbnRtYXR0ZXJWYWx1ZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBuZXcgRW1wdHlGcm9udG1hdHRlclZhbHVlUmVtb3ZlcihwYXJhbXMpLnJlbW92ZShwYXJhbXMuZnJvbnRtYXR0ZXIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGNvbnRlbnQgc3RyaW5nLlxuICpcbiAqIFdoZW4gYSB7QGxpbmsgRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyfSBpcyByZWdpc3RlcmVkIChzZWUge0BsaW5rIHJlZ2lzdGVyRnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyfSkgdGhlIHdyaXRlIGdvZXMgdGhyb3VnaCBpdCBmaXJzdCwgc28gdGhlIHBhcnRzIG9mIHRoZSBibG9jayB0aGUgY2hhbmdlIGRvZXMgbm90IHJlYWNoIGtlZXAgdGhlIGJ5dGVzIHRoZWlyIGF1dGhvciB3cm90ZSDigJQgdGhlaXIgY29tbWVudHMsIHF1b3RpbmcsIGJsYW5rIGxpbmVzIGFuZCBpbmRlbnRhdGlvbi4gV2l0aG91dCBvbmUsIGFuZCB3aGVuZXZlciB0aGUgcHJlc2VydmVyIHJlcG9ydHMgaXQgY2Fubm90IGJlIGZhaXRoZnVsLCB0aGUgd2hvbGUgYmxvY2sgaXMgcGFyc2VkIGFuZCB3cml0dGVuIG91dCBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBPYnNpZGlhbidzIG93biBgcHJvY2Vzc0Zyb250TWF0dGVyKClgIGRvZXMuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCBzdHJpbmcgdG8gc2V0IHRoZSBmcm9udCBtYXR0ZXIgaW4uXG4gKiBAcGFyYW0gbmV3RnJvbnRtYXR0ZXIgLSBUaGUgbmV3IGZyb250IG1hdHRlciB0byBzZXQuXG4gKiBAcmV0dXJucyBUaGUgbmV3IGNvbnRlbnQgc3RyaW5nIHdpdGggdGhlIGZyb250IG1hdHRlciBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGcm9udG1hdHRlcihjb250ZW50OiBzdHJpbmcsIG5ld0Zyb250bWF0dGVyOiBvYmplY3QpOiBzdHJpbmcge1xuICBjb25zdCBwcmVzZXJ2ZWRDb250ZW50ID0gcHJlc2VydmVGb3JtYXR0aW5nKGNvbnRlbnQsIG5ld0Zyb250bWF0dGVyKTtcbiAgaWYgKHByZXNlcnZlZENvbnRlbnQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJlc2VydmVkQ29udGVudDtcbiAgfVxuXG4gIGNvbnN0IGZyb250bWF0dGVySW5mbyA9IGdldEZyb250TWF0dGVySW5mbyhjb250ZW50KTtcbiAgaWYgKE9iamVjdC5rZXlzKG5ld0Zyb250bWF0dGVyKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY29udGVudC5zbGljZShmcm9udG1hdHRlckluZm8uY29udGVudFN0YXJ0KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0Zyb250bWF0dGVyU3RyaW5nID0gc3RyaW5naWZ5WWFtbChuZXdGcm9udG1hdHRlcik7XG5cbiAgcmV0dXJuIGZyb250bWF0dGVySW5mby5leGlzdHNcbiAgICA/IGluc2VydEF0KHtcbiAgICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgICBlbmRJbmRleDogZnJvbnRtYXR0ZXJJbmZvLnRvLFxuICAgICAgc3RhcnRJbmRleDogZnJvbnRtYXR0ZXJJbmZvLmZyb20sXG4gICAgICBzdWJzdHJpbmc6IG5ld0Zyb250bWF0dGVyU3RyaW5nXG4gICAgfSlcbiAgICA6IGAtLS1cXG4ke25ld0Zyb250bWF0dGVyU3RyaW5nfS0tLVxcbiR7Y29udGVudH1gO1xufVxuXG5mdW5jdGlvbiBnZXRGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXJXcmFwcGVyKCk6IFZhbHVlV3JhcHBlcjxGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXIgfCBudWxsPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8RnJvbnRtYXR0ZXJGb3JtYXR0aW5nUHJlc2VydmVyIHwgbnVsbD4oRlJPTlRNQVRURVJfRk9STUFUVElOR19QUkVTRVJWRVJfU1RBVEVfS0VZLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gcHJlc2VydmVGb3JtYXR0aW5nKGNvbnRlbnQ6IHN0cmluZywgbmV3RnJvbnRtYXR0ZXI6IG9iamVjdCk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBwcmVzZXJ2ZXIgPSBnZXRGcm9udG1hdHRlckZvcm1hdHRpbmdQcmVzZXJ2ZXJXcmFwcGVyKCkudmFsdWU7XG4gIGlmICghcHJlc2VydmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBIHByZXNlcnZlciBjYW4gYmUgc3VwcGxpZWQgYnkgYW55IHBsdWdpbiwgYW5kIHRoaXMgcnVucyBpbnNpZGUgdGhlIHdyaXRlIHF1ZXVlLCB3aGVyZSBhIHRocm93IHdlZGdlcyBldmVyeSB3cml0ZVxuICAvLyBiZWhpbmQgaXQuIFNvIGEgYnJva2VuIHByZXNlcnZlciBpcyByZXBvcnRlZCBhbmQgc3RlcHBlZCBhcm91bmQgcmF0aGVyIHRoYW4gYWxsb3dlZCB0byB0YWtlIHRoZSB3cml0ZSBkb3duLlxuICB0cnkge1xuICAgIHJldHVybiBwcmVzZXJ2ZXIoY29udGVudCwgbmV3RnJvbnRtYXR0ZXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKCdUaGUgcmVnaXN0ZXJlZCBmcm9udCBtYXR0ZXIgZm9ybWF0dGluZyBwcmVzZXJ2ZXIgdGhyZXcuIEZhbGxpbmcgYmFjayB0byByZXdyaXRpbmcgdGhlIHdob2xlIGJsb2NrLicsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxtQkFBOEI7QUFDOUIsbUJBQTJCO0FBQzNCLG9CQUF5QjtBQUN6QixzQkFJTztBQUVQLHNDQUF5QztBQTBHekMsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSxxQkFBcUI7QUFPM0IsTUFBTSw2QkFBNkI7QUFBQSxFQUNoQixrQkFBNEIsQ0FBQztBQUFBLEVBQzdCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQTRDO0FBQzdELFNBQUssMEJBQTBCLE9BQU8sMkJBQTJCO0FBQ2pFLFNBQUssMkJBQTJCLE9BQU8sNEJBQTRCO0FBQ25FLFNBQUssb0JBQW9CLE9BQU8scUJBQXFCO0FBQUEsRUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLE9BQU8sYUFBc0M7QUFDbEQsU0FBSyxZQUFZLGFBQWEsRUFBRTtBQUNoQyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFUSxhQUFhLE9BQXlCO0FBQzVDLFFBQUksVUFBVSxJQUFJO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxVQUFVLFFBQVEsVUFBVSxRQUFXO0FBQ3pDLGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFFQSxXQUFPLE1BQU0sUUFBUSxLQUFLLElBQ3RCLE1BQU0sV0FBVyxLQUFLLEtBQUss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