@mnaoumov/obsidian-lib 2.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/dist/lib/cjs/__merged.cjs +3 -1
  2. package/dist/lib/cjs/__merged.d.cts +1 -1
  3. package/dist/lib/cjs/attachment-path.cjs +8 -5
  4. package/dist/lib/cjs/attachment-path.d.cts +4 -4
  5. package/dist/lib/cjs/attachment-unit-folder.cjs +1 -1
  6. package/dist/lib/cjs/attachment-unit-folder.d.cts +3 -3
  7. package/dist/lib/cjs/callout.cjs +1 -1
  8. package/dist/lib/cjs/callout.d.cts +2 -2
  9. package/dist/lib/cjs/canvas.cjs +1 -1
  10. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +9 -9
  11. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.d.cts +14 -14
  12. package/dist/lib/cjs/components/plugin-gate-component.cjs +3 -3
  13. package/dist/lib/cjs/components/plugin-gate-component.d.cts +8 -2
  14. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +4 -3
  15. package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +5 -1
  16. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +1 -1
  17. package/dist/lib/cjs/dataview-link.cjs +1 -1
  18. package/dist/lib/cjs/dataview-link.d.cts +1 -1
  19. package/dist/lib/cjs/dataview.cjs +1 -1
  20. package/dist/lib/cjs/dataview.d.cts +16 -10
  21. package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -1
  22. package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
  23. package/dist/lib/cjs/demo-vault-helper.cjs +1 -1
  24. package/dist/lib/cjs/demo-vault-helper.d.cts +11 -11
  25. package/dist/lib/cjs/file-system.cjs +1 -1
  26. package/dist/lib/cjs/file-system.d.cts +2 -2
  27. package/dist/lib/cjs/folder-note.cjs +1 -1
  28. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  29. package/dist/lib/cjs/html-element.cjs +6 -1
  30. package/dist/lib/cjs/html-element.d.cts +11 -0
  31. package/dist/lib/cjs/metadata-cache.cjs +2 -2
  32. package/dist/lib/cjs/metadata-cache.d.cts +6 -6
  33. package/dist/lib/cjs/note-priority.cjs +1 -1
  34. package/dist/lib/cjs/note-priority.d.cts +1 -1
  35. package/dist/lib/cjs/notebook-navigator.cjs +1 -1
  36. package/dist/lib/cjs/notebook-navigator.d.cts +12 -12
  37. package/dist/lib/cjs/plugin/plugin.cjs +2 -2
  38. package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
  39. package/dist/lib/cjs/templater.cjs +4 -4
  40. package/dist/lib/cjs/templater.d.cts +35 -35
  41. package/dist/lib/esm/__merged.d.mts +1 -1
  42. package/dist/lib/esm/__merged.mjs +3 -1
  43. package/dist/lib/esm/attachment-path.d.mts +4 -4
  44. package/dist/lib/esm/attachment-path.mjs +8 -5
  45. package/dist/lib/esm/attachment-unit-folder.d.mts +3 -3
  46. package/dist/lib/esm/attachment-unit-folder.mjs +1 -1
  47. package/dist/lib/esm/callout.d.mts +2 -2
  48. package/dist/lib/esm/callout.mjs +1 -1
  49. package/dist/lib/esm/canvas.mjs +1 -1
  50. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.d.mts +14 -14
  51. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +9 -9
  52. package/dist/lib/esm/components/plugin-gate-component.d.mts +8 -2
  53. package/dist/lib/esm/components/plugin-gate-component.mjs +4 -3
  54. package/dist/lib/esm/components/plugin-suggestion-component.d.mts +5 -1
  55. package/dist/lib/esm/components/plugin-suggestion-component.mjs +4 -3
  56. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  57. package/dist/lib/esm/dataview-link.d.mts +1 -1
  58. package/dist/lib/esm/dataview-link.mjs +1 -1
  59. package/dist/lib/esm/dataview.d.mts +16 -10
  60. package/dist/lib/esm/dataview.mjs +1 -1
  61. package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
  62. package/dist/lib/esm/demo-vault-helper.d.mts +11 -11
  63. package/dist/lib/esm/demo-vault-helper.mjs +1 -1
  64. package/dist/lib/esm/file-system.d.mts +2 -2
  65. package/dist/lib/esm/file-system.mjs +1 -1
  66. package/dist/lib/esm/folder-note.mjs +1 -1
  67. package/dist/lib/esm/generated-during-build.mjs +1 -1
  68. package/dist/lib/esm/html-element.d.mts +11 -0
  69. package/dist/lib/esm/html-element.mjs +5 -1
  70. package/dist/lib/esm/metadata-cache.d.mts +6 -6
  71. package/dist/lib/esm/metadata-cache.mjs +2 -2
  72. package/dist/lib/esm/note-priority.d.mts +1 -1
  73. package/dist/lib/esm/note-priority.mjs +1 -1
  74. package/dist/lib/esm/notebook-navigator.d.mts +12 -12
  75. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  76. package/dist/lib/esm/plugin/plugin.d.mts +1 -1
  77. package/dist/lib/esm/plugin/plugin.mjs +2 -2
  78. package/dist/lib/esm/templater.d.mts +35 -35
  79. package/dist/lib/esm/templater.mjs +4 -4
  80. package/package.json +4 -135
  81. package/@types/dataview/api/data-array/package.json +0 -4
  82. package/@types/dataview/api/extensions/package.json +0 -4
  83. package/@types/dataview/api/inline-api/package.json +0 -4
  84. package/@types/dataview/api/plugin-api/package.json +0 -4
  85. package/@types/dataview/api/result/package.json +0 -4
  86. package/@types/dataview/data-import/common/package.json +0 -4
  87. package/@types/dataview/data-import/csv/package.json +0 -4
  88. package/@types/dataview/data-import/inline-field/package.json +0 -4
  89. package/@types/dataview/data-import/markdown-file/package.json +0 -4
  90. package/@types/dataview/data-import/persister/package.json +0 -4
  91. package/@types/dataview/data-import/web-worker/import-entry/package.json +0 -4
  92. package/@types/dataview/data-import/web-worker/import-impl/package.json +0 -4
  93. package/@types/dataview/data-import/web-worker/import-manager/package.json +0 -4
  94. package/@types/dataview/data-index/index/package.json +0 -4
  95. package/@types/dataview/data-index/package.json +0 -4
  96. package/@types/dataview/data-index/resolver/package.json +0 -4
  97. package/@types/dataview/data-index/source/package.json +0 -4
  98. package/@types/dataview/data-model/markdown/package.json +0 -4
  99. package/@types/dataview/data-model/serialized/markdown/package.json +0 -4
  100. package/@types/dataview/data-model/transferable/package.json +0 -4
  101. package/@types/dataview/data-model/value/package.json +0 -4
  102. package/@types/dataview/expression/binaryop/package.json +0 -4
  103. package/@types/dataview/expression/context/package.json +0 -4
  104. package/@types/dataview/expression/field/package.json +0 -4
  105. package/@types/dataview/expression/functions/package.json +0 -4
  106. package/@types/dataview/expression/parse/package.json +0 -4
  107. package/@types/dataview/index/package.json +0 -4
  108. package/@types/dataview/main/package.json +0 -4
  109. package/@types/dataview/package.json +0 -4
  110. package/@types/dataview/query/engine/package.json +0 -4
  111. package/@types/dataview/query/parse/package.json +0 -4
  112. package/@types/dataview/query/query/package.json +0 -4
  113. package/@types/dataview/settings/package.json +0 -4
  114. package/@types/dataview/typings/obsidian-ex/package.json +0 -4
  115. package/@types/dataview/typings/workers/package.json +0 -4
  116. package/@types/dataview/ui/export/markdown/package.json +0 -4
  117. package/@types/dataview/ui/lp-render/package.json +0 -4
  118. package/@types/dataview/ui/markdown/package.json +0 -4
  119. package/@types/dataview/ui/refreshable-view/package.json +0 -4
  120. package/@types/dataview/ui/render/package.json +0 -4
  121. package/@types/dataview/ui/views/calendar-view/package.json +0 -4
  122. package/@types/dataview/ui/views/inline-field-live-preview/package.json +0 -4
  123. package/@types/dataview/ui/views/inline-view/package.json +0 -4
  124. package/@types/dataview/ui/views/js-view/package.json +0 -4
  125. package/@types/dataview/ui/views/list-view/package.json +0 -4
  126. package/@types/dataview/ui/views/table-view/package.json +0 -4
  127. package/@types/dataview/ui/views/task-view/package.json +0 -4
  128. package/@types/dataview/util/hash/package.json +0 -4
  129. package/@types/dataview/util/locale/package.json +0 -4
  130. package/@types/dataview/util/media/package.json +0 -4
  131. package/@types/dataview/util/normalize/package.json +0 -4
  132. package/dist/lib/cjs/@types/dataview/api/data-array.d.cts +0 -137
  133. package/dist/lib/cjs/@types/dataview/api/extensions.d.cts +0 -16
  134. package/dist/lib/cjs/@types/dataview/api/inline-api.d.cts +0 -187
  135. package/dist/lib/cjs/@types/dataview/api/plugin-api.d.cts +0 -210
  136. package/dist/lib/cjs/@types/dataview/api/result.d.cts +0 -39
  137. package/dist/lib/cjs/@types/dataview/data-import/common.d.cts +0 -4
  138. package/dist/lib/cjs/@types/dataview/data-import/csv.d.cts +0 -4
  139. package/dist/lib/cjs/@types/dataview/data-import/inline-field.d.cts +0 -43
  140. package/dist/lib/cjs/@types/dataview/data-import/markdown-file.d.cts +0 -53
  141. package/dist/lib/cjs/@types/dataview/data-import/persister.d.cts +0 -33
  142. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-entry.d.cts +0 -2
  143. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-impl.d.cts +0 -7
  144. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-manager.d.cts +0 -38
  145. package/dist/lib/cjs/@types/dataview/data-index/index.d.cts +0 -187
  146. package/dist/lib/cjs/@types/dataview/data-index/resolver.d.cts +0 -24
  147. package/dist/lib/cjs/@types/dataview/data-index/source.d.cts +0 -72
  148. package/dist/lib/cjs/@types/dataview/data-model/markdown.d.cts +0 -116
  149. package/dist/lib/cjs/@types/dataview/data-model/serialized/markdown.d.cts +0 -107
  150. package/dist/lib/cjs/@types/dataview/data-model/transferable.d.cts +0 -8
  151. package/dist/lib/cjs/@types/dataview/data-model/value.d.cts +0 -176
  152. package/dist/lib/cjs/@types/dataview/expression/binaryop.d.cts +0 -44
  153. package/dist/lib/cjs/@types/dataview/expression/context.d.cts +0 -50
  154. package/dist/lib/cjs/@types/dataview/expression/field.d.cts +0 -83
  155. package/dist/lib/cjs/@types/dataview/expression/functions.d.cts +0 -150
  156. package/dist/lib/cjs/@types/dataview/expression/parse.d.cts +0 -164
  157. package/dist/lib/cjs/@types/dataview/index.d.cts +0 -56
  158. package/dist/lib/cjs/@types/dataview/main.d.cts +0 -53
  159. package/dist/lib/cjs/@types/dataview/query/engine.d.cts +0 -104
  160. package/dist/lib/cjs/@types/dataview/query/parse.d.cts +0 -45
  161. package/dist/lib/cjs/@types/dataview/query/query.d.cts +0 -96
  162. package/dist/lib/cjs/@types/dataview/settings.d.cts +0 -61
  163. package/dist/lib/cjs/@types/dataview/typings/obsidian-ex.d.cts +0 -29
  164. package/dist/lib/cjs/@types/dataview/typings/workers.d.cts +0 -5
  165. package/dist/lib/cjs/@types/dataview/ui/export/markdown.d.cts +0 -16
  166. package/dist/lib/cjs/@types/dataview/ui/lp-render.d.cts +0 -38
  167. package/dist/lib/cjs/@types/dataview/ui/markdown.d.cts +0 -87
  168. package/dist/lib/cjs/@types/dataview/ui/refreshable-view.d.cts +0 -19
  169. package/dist/lib/cjs/@types/dataview/ui/render.d.cts +0 -34
  170. package/dist/lib/cjs/@types/dataview/ui/views/calendar-view.d.cts +0 -18
  171. package/dist/lib/cjs/@types/dataview/ui/views/inline-field-live-preview.d.cts +0 -43
  172. package/dist/lib/cjs/@types/dataview/ui/views/inline-view.d.cts +0 -29
  173. package/dist/lib/cjs/@types/dataview/ui/views/js-view.d.cts +0 -24
  174. package/dist/lib/cjs/@types/dataview/ui/views/list-view.d.cts +0 -26
  175. package/dist/lib/cjs/@types/dataview/ui/views/table-view.d.cts +0 -29
  176. package/dist/lib/cjs/@types/dataview/ui/views/task-view.d.cts +0 -52
  177. package/dist/lib/cjs/@types/dataview/util/hash.d.cts +0 -2
  178. package/dist/lib/cjs/@types/dataview/util/locale.d.cts +0 -3
  179. package/dist/lib/cjs/@types/dataview/util/media.d.cts +0 -7
  180. package/dist/lib/cjs/@types/dataview/util/normalize.d.cts +0 -45
  181. package/dist/lib/esm/@types/dataview/api/data-array.d.mts +0 -137
  182. package/dist/lib/esm/@types/dataview/api/extensions.d.mts +0 -16
  183. package/dist/lib/esm/@types/dataview/api/inline-api.d.mts +0 -187
  184. package/dist/lib/esm/@types/dataview/api/plugin-api.d.mts +0 -210
  185. package/dist/lib/esm/@types/dataview/api/result.d.mts +0 -39
  186. package/dist/lib/esm/@types/dataview/data-import/common.d.mts +0 -4
  187. package/dist/lib/esm/@types/dataview/data-import/csv.d.mts +0 -4
  188. package/dist/lib/esm/@types/dataview/data-import/inline-field.d.mts +0 -43
  189. package/dist/lib/esm/@types/dataview/data-import/markdown-file.d.mts +0 -53
  190. package/dist/lib/esm/@types/dataview/data-import/persister.d.mts +0 -33
  191. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-entry.d.mts +0 -2
  192. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-impl.d.mts +0 -7
  193. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-manager.d.mts +0 -38
  194. package/dist/lib/esm/@types/dataview/data-index/index.d.mts +0 -187
  195. package/dist/lib/esm/@types/dataview/data-index/resolver.d.mts +0 -24
  196. package/dist/lib/esm/@types/dataview/data-index/source.d.mts +0 -72
  197. package/dist/lib/esm/@types/dataview/data-model/markdown.d.mts +0 -116
  198. package/dist/lib/esm/@types/dataview/data-model/serialized/markdown.d.mts +0 -107
  199. package/dist/lib/esm/@types/dataview/data-model/transferable.d.mts +0 -8
  200. package/dist/lib/esm/@types/dataview/data-model/value.d.mts +0 -176
  201. package/dist/lib/esm/@types/dataview/expression/binaryop.d.mts +0 -44
  202. package/dist/lib/esm/@types/dataview/expression/context.d.mts +0 -50
  203. package/dist/lib/esm/@types/dataview/expression/field.d.mts +0 -83
  204. package/dist/lib/esm/@types/dataview/expression/functions.d.mts +0 -150
  205. package/dist/lib/esm/@types/dataview/expression/parse.d.mts +0 -164
  206. package/dist/lib/esm/@types/dataview/index.d.mts +0 -56
  207. package/dist/lib/esm/@types/dataview/main.d.mts +0 -53
  208. package/dist/lib/esm/@types/dataview/query/engine.d.mts +0 -104
  209. package/dist/lib/esm/@types/dataview/query/parse.d.mts +0 -45
  210. package/dist/lib/esm/@types/dataview/query/query.d.mts +0 -96
  211. package/dist/lib/esm/@types/dataview/settings.d.mts +0 -61
  212. package/dist/lib/esm/@types/dataview/typings/obsidian-ex.d.mts +0 -29
  213. package/dist/lib/esm/@types/dataview/typings/workers.d.mts +0 -5
  214. package/dist/lib/esm/@types/dataview/ui/export/markdown.d.mts +0 -16
  215. package/dist/lib/esm/@types/dataview/ui/lp-render.d.mts +0 -38
  216. package/dist/lib/esm/@types/dataview/ui/markdown.d.mts +0 -87
  217. package/dist/lib/esm/@types/dataview/ui/refreshable-view.d.mts +0 -19
  218. package/dist/lib/esm/@types/dataview/ui/render.d.mts +0 -34
  219. package/dist/lib/esm/@types/dataview/ui/views/calendar-view.d.mts +0 -18
  220. package/dist/lib/esm/@types/dataview/ui/views/inline-field-live-preview.d.mts +0 -43
  221. package/dist/lib/esm/@types/dataview/ui/views/inline-view.d.mts +0 -29
  222. package/dist/lib/esm/@types/dataview/ui/views/js-view.d.mts +0 -24
  223. package/dist/lib/esm/@types/dataview/ui/views/list-view.d.mts +0 -26
  224. package/dist/lib/esm/@types/dataview/ui/views/table-view.d.mts +0 -29
  225. package/dist/lib/esm/@types/dataview/ui/views/task-view.d.mts +0 -52
  226. package/dist/lib/esm/@types/dataview/util/hash.d.mts +0 -2
  227. package/dist/lib/esm/@types/dataview/util/locale.d.mts +0 -3
  228. package/dist/lib/esm/@types/dataview/util/media.d.mts +0 -7
  229. package/dist/lib/esm/@types/dataview/util/normalize.d.mts +0 -45
@@ -2,22 +2,28 @@
2
2
  /**
3
3
  * @file
4
4
  *
5
- * This module provides utility functions for working with Dataview in Obsidian.
5
+ * This module provides utility functions for working with `Dataview` in Obsidian.
6
6
  */
7
+ import type { DataArray, DataviewApi, SMarkdownPage } from '@mnaoumov/obsidian-dataview';
8
+ import type { DataviewInlineApi as DataviewInlineApiOriginal } from '@mnaoumov/obsidian-dataview/api/inline-api';
7
9
  import type { Promisable } from 'type-fest';
8
- import type { DataviewInlineApi as DataviewInlineApiOriginal } from './@types/dataview/api/inline-api.d.mjs';
9
- import type { DataArray, DataviewApi, SMarkdownPage } from './@types/dataview/index.d.mjs';
10
10
  import type { PathOrFile } from './file-system.mjs';
11
11
  import type { CombinedFrontmatter } from './frontmatter.mjs';
12
12
  /**
13
- * Export DateTime and Link types from the Dataview API.
13
+ * Export DateTime and Link types from the `Dataview` API.
14
14
  */
15
- export type { DateTime, Link } from './@types/dataview/index.d.mjs';
15
+ export type { DateTime, Link } from '@mnaoumov/obsidian-dataview';
16
16
  declare global {
17
17
  /**
18
- * A {@link DataviewApi} object represents the API for interacting with Dataview in Obsidian.
18
+ * A {@link DataviewApi} object represents the API for interacting with `Dataview` in Obsidian.
19
19
  */
20
20
  var DataviewAPI: DataviewApi | undefined;
21
+ interface Window {
22
+ /**
23
+ * The global {@link DataviewApi} object `Dataview` installs on every window.
24
+ */
25
+ DataviewAPI?: DataviewApi;
26
+ }
21
27
  }
22
28
  /**
23
29
  * A combined page type, which includes the front matter and the SMarkdownPage.
@@ -26,7 +32,7 @@ declare global {
26
32
  */
27
33
  export type CombinedPage<CustomFrontmatter = unknown> = CombinedFrontmatter<CustomFrontmatter> & SMarkdownPage;
28
34
  /**
29
- * Extended interface for the Dataview Inline API, providing additional methods for custom page types and array handling.
35
+ * Extended interface for the `Dataview` Inline API, providing additional methods for custom page types and array handling.
30
36
  */
31
37
  export interface DataviewInlineApi extends DataviewInlineApiOriginal {
32
38
  /**
@@ -77,7 +83,7 @@ interface ContainerInfo {
77
83
  container?: HTMLElement;
78
84
  }
79
85
  /**
80
- * Reloads the current file cache using the Dataview API.
86
+ * Reloads the current file cache using the `Dataview` API.
81
87
  *
82
88
  * @param dv - The DataviewInlineApi instance.
83
89
  * @returns A {@link Promise} that resolves when the cache is reloaded.
@@ -216,13 +222,13 @@ export interface RenderPaginatedTableParams<T> {
216
222
  */
217
223
  export declare function getRenderedContainer(dv: DataviewInlineApi, renderer: () => Promisable<void>): Promise<HTMLParagraphElement>;
218
224
  /**
219
- * Inserts a code block into the specified Dataview instance using the provided language and code.
225
+ * Inserts a code block into the specified `Dataview` instance using the provided language and code.
220
226
  *
221
227
  * @param params - The parameters for inserting the code block.
222
228
  */
223
229
  export declare function insertCodeBlock(params: InsertCodeBlockParams): void;
224
230
  /**
225
- * Renders an iframe in the Dataview container with the specified relative path, width, and height.
231
+ * Renders an iframe in the `Dataview` container with the specified relative path, width, and height.
226
232
  *
227
233
  * @param params - The parameters for rendering the iframe.
228
234
  */
@@ -277,4 +277,4 @@ export {
277
277
  renderPaginatedList,
278
278
  renderPaginatedTable
279
279
  };
280
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RhdGF2aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBEYXRhdmlldyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgZXJyb3JUb1N0cmluZyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgRGF0YXZpZXdJbmxpbmVBcGkgYXMgRGF0YXZpZXdJbmxpbmVBcGlPcmlnaW5hbCB9IGZyb20gJy4vQHR5cGVzL2RhdGF2aWV3L2FwaS9pbmxpbmUtYXBpLmQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBEYXRhQXJyYXksXG4gIERhdGF2aWV3QXBpLFxuICBTTWFya2Rvd25QYWdlXG59IGZyb20gJy4vQHR5cGVzL2RhdGF2aWV3L2luZGV4LmQudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsIH0gZnJvbSAnLi9yZXNvdXJjZS11cmwudHMnO1xuXG4vKipcbiAqIEV4cG9ydCBEYXRlVGltZSBhbmQgTGluayB0eXBlcyBmcm9tIHRoZSBEYXRhdmlldyBBUEkuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgRGF0ZVRpbWUsXG4gIExpbmtcbn0gZnJvbSAnLi9AdHlwZXMvZGF0YXZpZXcvaW5kZXguZC50cyc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3QXBpfSBvYmplY3QgcmVwcmVzZW50cyB0aGUgQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIERhdGF2aWV3IGluIE9ic2lkaWFuLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhcnMtb24tdG9wIC0tIEl0IGlzIGEgYHZhcmAgaW4gbW9kdWxlIGRlY2xhcmF0aW9uLiBFU0xpbnQgbWlzdGFrZW5seSBjb25mdXNlcyBpdCB3aXRoIGB2YXJgIGFzIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gIHZhciBEYXRhdmlld0FQSTogRGF0YXZpZXdBcGkgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBjb21iaW5lZCBwYWdlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25QYWdlLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gPSBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiAmIFNNYXJrZG93blBhZ2U7XG5cbi8qKlxuICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciB0aGUgRGF0YXZpZXcgSW5saW5lIEFQSSwgcHJvdmlkaW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgY3VzdG9tIHBhZ2UgdHlwZXMgYW5kIGFycmF5IGhhbmRsaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGF2aWV3SW5saW5lQXBpIGV4dGVuZHMgRGF0YXZpZXdJbmxpbmVBcGlPcmlnaW5hbCB7XG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhcnJheSBvZiBpdGVtcyBpbnRvIGEge0BsaW5rIERhdGFBcnJheX0gb2JqZWN0LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LlxuICAgKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gd3JhcC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YUFycmF5fSBjb250YWluaW5nIHRoZSBpdGVtcy5cbiAgICovXG4gIGFycmF5OiA8VD4oYXJyYXk6IFRbXSkgPT4gRGF0YUFycmF5PFQ+O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2l0aCBhbiBvcHRpb25hbCBjdXN0b20gcGFnZSB0eXBlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEN1c3RvbVBhZ2UgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIHBhZ2UuIERlZmF1bHRzIHRvIGBTTWFya2Rvd25QYWdlYC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcGFnZS5cbiAgICovXG4gIGN1cnJlbnQ6IDxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KCkgPT4gQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyPjtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHBhZ2VzIGJhc2VkIG9uIGFuIG9wdGlvbmFsIHF1ZXJ5LCB3aXRoIGFuIG9wdGlvbmFsIGN1c3RvbSBwYWdlIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gQ3VzdG9tUGFnZSAtIFRoZSB0eXBlIG9mIHRoZSBjdXN0b20gcGFnZS4gRGVmYXVsdHMgdG8gYFNNYXJrZG93blBhZ2VgLlxuICAgKiBAcGFyYW0gcXVlcnkgLSBBbiBvcHRpb25hbCBzdHJpbmcgcXVlcnkgdG8gZmlsdGVyIHRoZSBwYWdlcy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YUFycmF5fSBvZiBwYWdlcyBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAqL1xuICBwYWdlczogPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4ocXVlcnk/OiBzdHJpbmcpID0+IERhdGFBcnJheTxDb21iaW5lZFBhZ2U8Q3VzdG9tRnJvbnRtYXR0ZXI+PjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBhcmFncmFwaCBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgb3B0aW9uYWwgRE9NIGVsZW1lbnQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUaGUgY29udGVudCBvZiB0aGUgcGFyYWdyYXBoLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIERPTSBlbGVtZW50IG9wdGlvbnMsIGluY2x1ZGluZyBhbiBvcHRpb25hbCBjb250YWluZXIuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEhUTUwgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqL1xuICBwYXJhZ3JhcGg6IChcbiAgICB0ZXh0OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBEb21FbGVtZW50SW5mb1dpdGhDb250YWluZXJcbiAgKSA9PiBIVE1MUGFyYWdyYXBoRWxlbWVudDtcbn1cblxuLyoqXG4gKiBEb21FbGVtZW50SW5mbyB3aXRoIGFuIG9wdGlvbmFsIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IHR5cGUgRG9tRWxlbWVudEluZm9XaXRoQ29udGFpbmVyID0gQ29udGFpbmVySW5mbyAmIERvbUVsZW1lbnRJbmZvO1xuXG4vKipcbiAqIEEgY29tYmluZWQgZmlsZSB0eXBlLCB3aGljaCBpbmNsdWRlcyB0aGUgZnJvbnQgbWF0dGVyIGFuZCB0aGUgU01hcmtkb3duRmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFnZUZpbGUgPSBTTWFya2Rvd25QYWdlWydmaWxlJ107XG5cbi8qKlxuICogTGlzdCBvZiBwYWdlIGZpbGVzLlxuICovXG5leHBvcnQgdHlwZSBQYWdlRmlsZXMgPSBBcnJheU9yRGF0YUFycmF5PFBhZ2VGaWxlPjtcblxuaW50ZXJmYWNlIENvbnRhaW5lckluZm8ge1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBjdXJyZW50IGZpbGUgY2FjaGUgdXNpbmcgdGhlIERhdGF2aWV3IEFQSS5cbiAqXG4gKiBAcGFyYW0gZHYgLSBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNhY2hlIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkQ3VycmVudEZpbGVDYWNoZShkdjogRGF0YXZpZXdJbmxpbmVBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWN0aXZlV2luZG93LkRhdGF2aWV3QVBJPy5pbmRleC5yZWxvYWQoZ2V0RmlsZSh7XG4gICAgYXBwOiBkdi5hcHAsXG4gICAgcGF0aE9yRmlsZTogZHYuY3VycmVudCgpLmZpbGUucGF0aFxuICB9KSk7XG59XG5cbmNvbnN0IHBhZ2luYXRpb25Dc3MgPSBgXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rLmRpc2FibGVkIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGNvbG9yOiBncmF5O1xufVxuXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBibHVlO1xufVxuXG4ucGFnaW5hdGlvbiAucGFnZS1saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ucGFnaW5hdGlvbiAucGFnZS1saW5rLmN1cnJlbnQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5wYWdpbmF0aW9uIHNlbGVjdCxcbi5wYWdpbmF0aW9uIGlucHV0IHtcbiAgbWFyZ2luOiAwIDVweDtcbn1cbmA7XG5cbi8qKlxuICogQXJyYXkgb3IgRGF0YUFycmF5IHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBBcnJheU9yRGF0YUFycmF5PFQ+ID0gRGF0YUFycmF5PFQ+IHwgVFtdO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnNlcnRDb2RlQmxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydENvZGVCbG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSBjb250ZW50IHRvIGJlIGluc2VydGVkIGludG8gdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBEYXRhdmlld0lubGluZUFwaSBpbnN0YW5jZSB0byBpbnNlcnQgdGhlIGNvZGUgYmxvY2sgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIGlkZW50aWZpZXIgZm9yIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVySWZyYW1lfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJJZnJhbWVQYXJhbXMge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBBIGhlaWdodCBvZiB0aGUgaWZyYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJzYwMHB4J2BcbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodD86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByZXNvdXJjZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlmcmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSB3aWR0aCBvZiB0aGUgaWZyYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJzEwMCUnYFxuICAgKi9cbiAgcmVhZG9ubHkgd2lkdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlclBhZ2luYXRlZExpc3R9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBsaXN0IGl0ZW1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclBhZ2luYXRlZExpc3RQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsxMCwgMjAsIDUwLCAxMDBdYFxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaXRlbXMgdG8gcGFnaW5hdGUuXG4gICAqL1xuICByZWFkb25seSByb3dzOiBBcnJheU9yRGF0YUFycmF5PFQ+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZW5kZXJQYWdpbmF0ZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsxMCwgMjAsIDUwLCAxMDBdYFxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBwYWdpbmF0ZWQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NGb3JPbmVQYWdlIC0gVGhlIHJvd3MgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbnRlbnQgaXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSByZW5kZXJlcjogKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSb3dzIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVyUGFnaW5hdGVkVGFibGV9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB0YWJsZSByb3cgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRUYWJsZVBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBBIHtAbGluayBEYXRhdmlld0lubGluZUFwaX0gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBkdjogRGF0YXZpZXdJbmxpbmVBcGk7XG5cbiAgLyoqXG4gICAqIEEgaGVhZGVycyBvZiB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogUm93cyBvZiB0aGUgdGFibGUgdG8gcGFnaW5hdGUuXG4gICAqL1xuICByZWFkb25seSByb3dzOiBBcnJheU9yRGF0YUFycmF5PFQ+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjcmVhdGVQYWdlTGlua30uXG4gKi9cbmludGVyZmFjZSBDcmVhdGVQYWdlTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFnZSBudW1iZXIgdGhlIGxpbmsgcG9pbnRzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFBhZ2VOdW1iZXI6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGluayBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCB1c2luZyB0aGUgcHJvdmlkZWQgcmVuZGVyZXIgZnVuY3Rpb24gaW4gYSB0ZW1wb3JhcnkgY29udGFpbmVyLFxuICogYW5kIHRoZW4gcmV0dXJucyB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBkdiAtIFRoZSBEYXRhdmlld0lubGluZUFwaSBpbnN0YW5jZS5cbiAqIEBwYXJhbSByZW5kZXJlciAtIFRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHRoZSBjb250ZW50LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgSFRNTCBwYXJhZ3JhcGggZWxlbWVudFxuICogdGhhdCB3YXMgdXNlZCBhcyB0aGUgdGVtcG9yYXJ5IGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29udGFpbmVyKGR2OiBEYXRhdmlld0lubGluZUFwaSwgcmVuZGVyZXI6ICgpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPEhUTUxQYXJhZ3JhcGhFbGVtZW50PiB7XG4gIGNvbnN0IG9sZENvbnRhaW5lciA9IGR2LmNvbnRhaW5lcjtcbiAgY29uc3QgdGVtcG9yYXJ5Q29udGFpbmVyID0gZHYucGFyYWdyYXBoKCcnKTtcbiAgZHYuY29udGFpbmVyID0gdGVtcG9yYXJ5Q29udGFpbmVyO1xuICBkdi5jb250YWluZXIuZW1wdHkoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHJlbmRlcmVyKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZHYucGFyYWdyYXBoKGBcdTI3NEMke2Vycm9yVG9TdHJpbmcoZXJyb3IpfWApO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICBkdi5jb250YWluZXIgPSBvbGRDb250YWluZXI7XG4gICAgdGVtcG9yYXJ5Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBvcmFyeUNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGEgY29kZSBibG9jayBpbnRvIHRoZSBzcGVjaWZpZWQgRGF0YXZpZXcgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIGFuZCBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW5nIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29kZUJsb2NrKHBhcmFtczogSW5zZXJ0Q29kZUJsb2NrUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIGR2LFxuICAgIGxhbmd1YWdlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IE1JTl9GRU5DRV9MRU5HVEggPSAzO1xuICBjb25zdCBmZW5jZVJlZ0V4cCA9IG5ldyBSZWdFeHAoYF5cXGB7JHtTdHJpbmcoTUlOX0ZFTkNFX0xFTkdUSCl9LH1gLCAnZ20nKTtcbiAgY29uc3QgZmVuY2VNYXRjaGVzID0gY29kZS5tYXRjaEFsbChmZW5jZVJlZ0V4cCk7XG4gIGNvbnN0IGZlbmNlTGVuZ3RocyA9IFsuLi5mZW5jZU1hdGNoZXNdLm1hcCgoZmVuY2VNYXRjaCkgPT4gZmVuY2VNYXRjaFswXS5sZW5ndGgpO1xuICBjb25zdCBtYXhGZW5jZUxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLmZlbmNlTGVuZ3Rocyk7XG4gIGNvbnN0IHJlc3VsdEZlbmNlTGVuZ3RoID0gTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbWF4RmVuY2VMZW5ndGggKyAxKTtcbiAgY29uc3QgcmVzdWx0RmVuY2UgPSAnYCcucmVwZWF0KHJlc3VsdEZlbmNlTGVuZ3RoKTtcblxuICBkdi5wYXJhZ3JhcGgoYCR7cmVzdWx0RmVuY2V9JHtsYW5ndWFnZX1cbiR7Y29kZX1cbiR7cmVzdWx0RmVuY2V9YCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpZnJhbWUgaW4gdGhlIERhdGF2aWV3IGNvbnRhaW5lciB3aXRoIHRoZSBzcGVjaWZpZWQgcmVsYXRpdmUgcGF0aCwgd2lkdGgsIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGlmcmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcklmcmFtZShwYXJhbXM6IFJlbmRlcklmcmFtZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgaGVpZ2h0ID0gJzYwMHB4JyxcbiAgICByZWxhdGl2ZVBhdGhPckZpbGUsXG4gICAgd2lkdGggPSAnMTAwJSdcbiAgfSA9IHBhcmFtcztcbiAgZHYuZWwoJ2lmcmFtZScsICcnLCB7XG4gICAgYXR0cjoge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc3JjOiByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsKHtcbiAgICAgICAgYXBwOiBkdi5hcHAsXG4gICAgICAgIG5vdGVQYXRoOiBkdi5jdXJyZW50KCkuZmlsZS5wYXRoLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGdldFBhdGgoZHYuYXBwLCByZWxhdGl2ZVBhdGhPckZpbGUpXG4gICAgICB9KSxcbiAgICAgIHdpZHRoXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgcGFnaW5hdGVkIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGl0ZW1zIGluIHRoZSBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0ZWQgbGlzdC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpc3QgaXMgcmVuZGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdpbmF0ZWRMaXN0PFQ+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkTGlzdFBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCByZW5kZXJQYWdpbmF0ZWQoe1xuICAgIGR2LFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgcmVuZGVyZXI6IGFzeW5jIChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZHYubGlzdChyb3dzRm9yT25lUGFnZSk7XG4gICAgfSxcbiAgICByb3dzXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdpbmF0ZWQgdGFibGUgdXNpbmcgdGhlIHByb3ZpZGVkIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGl0ZW1zIGluIHRoZSB0YWJsZSByb3dzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0ZWQgdGFibGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0YWJsZSBpcyByZW5kZXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRlZFRhYmxlPFQgZXh0ZW5kcyB1bmtub3duW10+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkVGFibGVQYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGR2LFxuICAgIGhlYWRlcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCByZW5kZXJQYWdpbmF0ZWQoe1xuICAgIGR2LFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgcmVuZGVyZXI6IGFzeW5jIChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZHYudGFibGUoaGVhZGVycywgcm93c0Zvck9uZVBhZ2UpO1xuICAgIH0sXG4gICAgcm93c1xuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVuZGVyIHBhZ2luYXRlZCBjb250ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgcmVuZGVyZXIuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgdG8gcGFnaW5hdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCBjb250ZW50LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29udGVudCBpcyByZW5kZXJlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGVkPFQ+KHBhcmFtczogUmVuZGVyUGFnaW5hdGVkUGFyYW1zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFNFQ09ORF9QQUdFX05VTUJFUiA9IDI7XG4gIGNvbnN0IE1PUkVfUEFHRV9OVU1CRVIgPSAzO1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gWzEwLCAyMCwgNTAsIDEwMF0sXG4gICAgcm93c1xuICB9ID0gcGFyYW1zO1xuICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICBkdi5wYXJhZ3JhcGgoJ05vIGl0ZW1zIGZvdW5kJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lciA9IGR2LmNvbnRhaW5lcjtcbiAgbGV0IGl0ZW1zUGVyUGFnZSA9IGVuc3VyZU5vbk51bGxhYmxlKGl0ZW1zUGVyUGFnZU9wdGlvbnNbMF0sICdJdGVtcyBwZXIgcGFnZSBvcHRpb25zIGFyZSBlbXB0eScpO1xuICBsZXQgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFnaW5hdGlvbkNvbnRyb2xzKHBhZ2VOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2luYXRpb25EaXYgPSBjb250YWluZXIuY3JlYXRlRGl2KHsgY2xzOiAncGFnaW5hdGlvbicgfSk7XG4gICAgY29uc3QgcGFnaW5hdGlvblJvdzFEaXYgPSBwYWdpbmF0aW9uRGl2LmNyZWF0ZURpdigpO1xuXG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IDEsIHRleHQ6ICdGaXJzdCcgfSk7XG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogcGFnZU51bWJlciAtIDEsIGRpc2FibGVkOiBwYWdlTnVtYmVyID09PSAxLCB0ZXh0OiAnUHJldicgfSk7XG5cbiAgICBpZiAocGFnZU51bWJlciA+IE1PUkVfUEFHRV9OVU1CRVIpIHtcbiAgICAgIHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiAnLi4uJyB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IE1hdGgubWF4KDEsIHBhZ2VOdW1iZXIgLSBTRUNPTkRfUEFHRV9OVU1CRVIpOyBpbmRleCA8PSBNYXRoLm1pbih0b3RhbFBhZ2VzLCBwYWdlTnVtYmVyICsgU0VDT05EX1BBR0VfTlVNQkVSKTsgaW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZUxpbmsgPSBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBpbmRleCwgZGlzYWJsZWQ6IGluZGV4ID09PSBwYWdlTnVtYmVyLCB0ZXh0OiBTdHJpbmcoaW5kZXgpIH0pO1xuICAgICAgaWYgKGluZGV4ID09PSBwYWdlTnVtYmVyKSB7XG4gICAgICAgIHBhZ2VMaW5rLmFkZENsYXNzKCdjdXJyZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VOdW1iZXIgPCB0b3RhbFBhZ2VzIC0gU0VDT05EX1BBR0VfTlVNQkVSKSB7XG4gICAgICBwYWdpbmF0aW9uUm93MURpdi5jcmVhdGVTcGFuKHsgdGV4dDogJy4uLicgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogcGFnZU51bWJlciArIDEsIGRpc2FibGVkOiBwYWdlTnVtYmVyID09PSB0b3RhbFBhZ2VzLCB0ZXh0OiAnTmV4dCcgfSk7XG4gICAgY3JlYXRlUGFnZUxpbmsoeyBjdXJyZW50UGFnZU51bWJlcjogdG90YWxQYWdlcywgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IHRvdGFsUGFnZXMsIHRleHQ6ICdMYXN0JyB9KTtcblxuICAgIGNvbnN0IHBhZ2luYXRpb25Sb3cyRGl2ID0gcGFnaW5hdGlvbkRpdi5jcmVhdGVEaXYoKTtcblxuICAgIHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiBgICR7dCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3Lml0ZW1zUGVyUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBpdGVtc1BlclBhZ2VTZWxlY3QgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnc2VsZWN0Jyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgaXRlbXNQZXJQYWdlT3B0aW9ucykge1xuICAgICAgaXRlbXNQZXJQYWdlU2VsZWN0LmNyZWF0ZUVsKCdvcHRpb24nLCB7IHRleHQ6IFN0cmluZyhvcHRpb24pLCB2YWx1ZTogU3RyaW5nKG9wdGlvbikgfSk7XG4gICAgfVxuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC52YWx1ZSA9IFN0cmluZyhpdGVtc1BlclBhZ2UpO1xuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpdGVtc1BlclBhZ2UgPSBwYXJzZUludChpdGVtc1BlclBhZ2VTZWxlY3QudmFsdWUsIDEwKTtcbiAgICAgICAgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogYCAke3QoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5kYXRhdmlldy5qdW1wVG9QYWdlKX0gYCB9KTtcblxuICAgIGNvbnN0IGp1bXBUb1BhZ2VJbnB1dCA9IHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZUVsKCdpbnB1dCcsIHsgYXR0cjogeyBtYXg6IHRvdGFsUGFnZXMsIG1pbjogMSB9LCB0eXBlOiAnbnVtYmVyJyB9KTtcbiAgICBqdW1wVG9QYWdlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChqdW1wVG9QYWdlSW5wdXQudmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3LnBhZ2VIZWFkZXIsIHsgcGFnZU51bWJlciwgdG90YWxJdGVtczogcm93cy5sZW5ndGgsIHRvdGFsUGFnZXMgfSkgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWdlTGluayhwYXJhbXMyOiBDcmVhdGVQYWdlTGlua1BhcmFtcyk6IEhUTUxBbmNob3JFbGVtZW50IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudFBhZ2VOdW1iZXIsXG4gICAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICAgIHRleHRcbiAgICAgIH0gPSBwYXJhbXMyO1xuICAgICAgY29uc3QgbGluayA9IHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZUVsKCdhJywgeyBjbHM6ICdwYWdlLWxpbmsnLCBocmVmOiBgIyR7U3RyaW5nKGN1cnJlbnRQYWdlTnVtYmVyKX1gLCB0ZXh0IH0pO1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIGxpbmsuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gY29udmVydEFzeW5jVG9TeW5jKGFzeW5jIChldmVudDogTW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYXdhaXQgcmVuZGVyUGFnZShjdXJyZW50UGFnZU51bWJlcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbms7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb250YWluZXIuZW1wdHkoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1mb3JiaWRkZW4tZWxlbWVudHMgLS0gV2UgbmVlZCB0byBjcmVhdGUgYSBzdHlsZSBlbGVtZW50IHRvIGFwcGx5IHRoZSBwYWdpbmF0aW9uIENTUy5cbiAgICBjb250YWluZXIuY3JlYXRlRWwoJ3N0eWxlJywgeyB0ZXh0OiBwYWdpbmF0aW9uQ3NzIH0pO1xuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlTnVtYmVyIC0gMSkgKiBpdGVtc1BlclBhZ2U7XG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgaXRlbXNQZXJQYWdlO1xuICAgIGNvbnN0IHJvd3NGb3JDdXJyZW50UGFnZSA9IHJvd3Muc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXG4gICAgY29uc3Qgb2xkQ29udGFpbmVyID0gZHYuY29udGFpbmVyO1xuXG4gICAgZHYuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwYXJhbXMucmVuZGVyZXIocm93c0ZvckN1cnJlbnRQYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZHYucGFyYWdyYXBoKGBcdTI3NEMke2Vycm9yVG9TdHJpbmcoZXJyb3IpfWApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgICBkdi5jb250YWluZXIgPSBvbGRDb250YWluZXI7XG4gICAgfVxuXG4gICAgY3JlYXRlUGFnaW5hdGlvbkNvbnRyb2xzKHBhZ2VOdW1iZXIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMs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
280
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RhdGF2aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBgRGF0YXZpZXdgIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRGF0YUFycmF5LFxuICBEYXRhdmlld0FwaSxcbiAgU01hcmtkb3duUGFnZVxufSBmcm9tICdAbW5hb3Vtb3Yvb2JzaWRpYW4tZGF0YXZpZXcnO1xuaW1wb3J0IHR5cGUgeyBEYXRhdmlld0lubGluZUFwaSBhcyBEYXRhdmlld0lubGluZUFwaU9yaWdpbmFsIH0gZnJvbSAnQG1uYW91bW92L29ic2lkaWFuLWRhdGF2aWV3L2FwaS9pbmxpbmUtYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlcnJvclRvU3RyaW5nIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsIH0gZnJvbSAnLi9yZXNvdXJjZS11cmwudHMnO1xuXG4vKipcbiAqIEV4cG9ydCBEYXRlVGltZSBhbmQgTGluayB0eXBlcyBmcm9tIHRoZSBgRGF0YXZpZXdgIEFQSS5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBEYXRlVGltZSxcbiAgTGlua1xufSBmcm9tICdAbW5hb3Vtb3Yvb2JzaWRpYW4tZGF0YXZpZXcnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBBIHtAbGluayBEYXRhdmlld0FwaX0gb2JqZWN0IHJlcHJlc2VudHMgdGhlIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBgRGF0YXZpZXdgIGluIE9ic2lkaWFuLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhcnMtb24tdG9wIC0tIEl0IGlzIGEgYHZhcmAgaW4gbW9kdWxlIGRlY2xhcmF0aW9uLiBFU0xpbnQgbWlzdGFrZW5seSBjb25mdXNlcyBpdCB3aXRoIGB2YXJgIGFzIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gIHZhciBEYXRhdmlld0FQSTogRGF0YXZpZXdBcGkgfCB1bmRlZmluZWQ7XG5cbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyoqXG4gICAgICogVGhlIGdsb2JhbCB7QGxpbmsgRGF0YXZpZXdBcGl9IG9iamVjdCBgRGF0YXZpZXdgIGluc3RhbGxzIG9uIGV2ZXJ5IHdpbmRvdy5cbiAgICAgKi9cbiAgICBEYXRhdmlld0FQST86IERhdGF2aWV3QXBpO1xuICB9XG59XG5cbi8qKlxuICogQSBjb21iaW5lZCBwYWdlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25QYWdlLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gPSBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiAmIFNNYXJrZG93blBhZ2U7XG5cbi8qKlxuICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciB0aGUgYERhdGF2aWV3YCBJbmxpbmUgQVBJLCBwcm92aWRpbmcgYWRkaXRpb25hbCBtZXRob2RzIGZvciBjdXN0b20gcGFnZSB0eXBlcyBhbmQgYXJyYXkgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXZpZXdJbmxpbmVBcGkgZXh0ZW5kcyBEYXRhdmlld0lubGluZUFwaU9yaWdpbmFsIHtcbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gYSB7QGxpbmsgRGF0YUFycmF5fSBvYmplY3QuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkuXG4gICAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byB3cmFwLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhQXJyYXl9IGNvbnRhaW5pbmcgdGhlIGl0ZW1zLlxuICAgKi9cbiAgYXJyYXk6IDxUPihhcnJheTogVFtdKSA9PiBEYXRhQXJyYXk8VD47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwYWdlLCB3aXRoIGFuIG9wdGlvbmFsIGN1c3RvbSBwYWdlIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gQ3VzdG9tUGFnZSAtIFRoZSB0eXBlIG9mIHRoZSBjdXN0b20gcGFnZS4gRGVmYXVsdHMgdG8gYFNNYXJrZG93blBhZ2VgLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgY3VycmVudDogPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oKSA9PiBDb21iaW5lZFBhZ2U8Q3VzdG9tRnJvbnRtYXR0ZXI+O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgcGFnZXMgYmFzZWQgb24gYW4gb3B0aW9uYWwgcXVlcnksIHdpdGggYW4gb3B0aW9uYWwgY3VzdG9tIHBhZ2UgdHlwZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBDdXN0b21QYWdlIC0gVGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBwYWdlLiBEZWZhdWx0cyB0byBgU01hcmtkb3duUGFnZWAuXG4gICAqIEBwYXJhbSBxdWVyeSAtIEFuIG9wdGlvbmFsIHN0cmluZyBxdWVyeSB0byBmaWx0ZXIgdGhlIHBhZ2VzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhQXJyYXl9IG9mIHBhZ2VzIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICovXG4gIHBhZ2VzOiA8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihxdWVyeT86IHN0cmluZykgPT4gRGF0YUFycmF5PENvbWJpbmVkUGFnZTxDdXN0b21Gcm9udG1hdHRlcj4+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFyYWdyYXBoIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCBvcHRpb25hbCBET00gZWxlbWVudCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRoZSBjb250ZW50IG9mIHRoZSBwYXJhZ3JhcGguXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgRE9NIGVsZW1lbnQgb3B0aW9ucywgaW5jbHVkaW5nIGFuIG9wdGlvbmFsIGNvbnRhaW5lci5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgSFRNTCBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICovXG4gIHBhcmFncmFwaDogKFxuICAgIHRleHQ6IHVua25vd24sXG4gICAgb3B0aW9ucz86IERvbUVsZW1lbnRJbmZvV2l0aENvbnRhaW5lclxuICApID0+IEhUTUxQYXJhZ3JhcGhFbGVtZW50O1xufVxuXG4vKipcbiAqIERvbUVsZW1lbnRJbmZvIHdpdGggYW4gb3B0aW9uYWwgY29udGFpbmVyLlxuICovXG5leHBvcnQgdHlwZSBEb21FbGVtZW50SW5mb1dpdGhDb250YWluZXIgPSBDb250YWluZXJJbmZvICYgRG9tRWxlbWVudEluZm87XG5cbi8qKlxuICogQSBjb21iaW5lZCBmaWxlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25GaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYWdlRmlsZSA9IFNNYXJrZG93blBhZ2VbJ2ZpbGUnXTtcblxuLyoqXG4gKiBMaXN0IG9mIHBhZ2UgZmlsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VGaWxlcyA9IEFycmF5T3JEYXRhQXJyYXk8UGFnZUZpbGU+O1xuXG5pbnRlcmZhY2UgQ29udGFpbmVySW5mbyB7XG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIGN1cnJlbnQgZmlsZSBjYWNoZSB1c2luZyB0aGUgYERhdGF2aWV3YCBBUEkuXG4gKlxuICogQHBhcmFtIGR2IC0gVGhlIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjYWNoZSBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZEN1cnJlbnRGaWxlQ2FjaGUoZHY6IERhdGF2aWV3SW5saW5lQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGFjdGl2ZVdpbmRvdy5EYXRhdmlld0FQST8uaW5kZXgucmVsb2FkKGdldEZpbGUoe1xuICAgIGFwcDogZHYuYXBwLFxuICAgIHBhdGhPckZpbGU6IGR2LmN1cnJlbnQoKS5maWxlLnBhdGhcbiAgfSkpO1xufVxuXG5jb25zdCBwYWdpbmF0aW9uQ3NzID0gYFxuLnBhZ2luYXRpb24gLnBhZ2UtbGluay5kaXNhYmxlZCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBjb2xvcjogZ3JheTtcbn1cblxuLnBhZ2luYXRpb24gLnBhZ2UtbGluayB7XG4gIG1hcmdpbjogMCA1cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogYmx1ZTtcbn1cblxuLnBhZ2luYXRpb24gLnBhZ2UtbGluazpob3Zlcjpub3QoLmRpc2FibGVkKSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLnBhZ2luYXRpb24gLnBhZ2UtbGluay5jdXJyZW50IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ucGFnaW5hdGlvbiBzZWxlY3QsXG4ucGFnaW5hdGlvbiBpbnB1dCB7XG4gIG1hcmdpbjogMCA1cHg7XG59XG5gO1xuXG4vKipcbiAqIEFycmF5IG9yIERhdGFBcnJheSB0eXBlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQXJyYXlPckRhdGFBcnJheTxUPiA9IERhdGFBcnJheTxUPiB8IFRbXTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5zZXJ0Q29kZUJsb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRDb2RlQmxvY2tQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvZGUgY29udGVudCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UgdG8gaW5zZXJ0IHRoZSBjb2RlIGJsb2NrIGludG8uXG4gICAqL1xuICByZWFkb25seSBkdjogRGF0YXZpZXdJbmxpbmVBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBpZGVudGlmaWVyIGZvciB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlcklmcmFtZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySWZyYW1lUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogQSBoZWlnaHQgb2YgdGhlIGlmcmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCc2MDBweCdgXG4gICAqL1xuICByZWFkb25seSBoZWlnaHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgcmVzb3VyY2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBpZnJhbWUuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgd2lkdGggb2YgdGhlIGlmcmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMDAlJ2BcbiAgICovXG4gIHJlYWRvbmx5IHdpZHRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZW5kZXJQYWdpbmF0ZWRMaXN0fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgbGlzdCBpdGVtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRMaXN0UGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGl0ZW1zIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVyUGFnaW5hdGVkfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgdG8gcGFnaW5hdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUGFnaW5hdGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgcGFnaW5hdGVkIGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSByb3dzRm9yT25lUGFnZSAtIFRoZSByb3dzIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb250ZW50IGlzIHJlbmRlcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyZXI6IChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPikgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogUm93cyB0byBwYWdpbmF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvd3M6IEFycmF5T3JEYXRhQXJyYXk8VD47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlclBhZ2luYXRlZFRhYmxlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUGFnaW5hdGVkVGFibGVQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBBIGhlYWRlcnMgb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGl0ZW1zIHBlciBwYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgWzEwLCAyMCwgNTAsIDEwMF1gXG4gICAqL1xuICByZWFkb25seSBpdGVtc1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJvd3Mgb2YgdGhlIHRhYmxlIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY3JlYXRlUGFnZUxpbmt9LlxuICovXG5pbnRlcmZhY2UgQ3JlYXRlUGFnZUxpbmtQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBhZ2UgbnVtYmVyIHRoZSBsaW5rIHBvaW50cyB0by5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlTnVtYmVyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxpbmsgaXMgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgdXNpbmcgdGhlIHByb3ZpZGVkIHJlbmRlcmVyIGZ1bmN0aW9uIGluIGEgdGVtcG9yYXJ5IGNvbnRhaW5lcixcbiAqIGFuZCB0aGVuIHJldHVybnMgdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gZHYgLSBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcmVuZGVyZXIgLSBUaGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyB0aGUgY29udGVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIEhUTUwgcGFyYWdyYXBoIGVsZW1lbnRcbiAqIHRoYXQgd2FzIHVzZWQgYXMgdGhlIHRlbXBvcmFyeSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbnRhaW5lcihkdjogRGF0YXZpZXdJbmxpbmVBcGksIHJlbmRlcmVyOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTxIVE1MUGFyYWdyYXBoRWxlbWVudD4ge1xuICBjb25zdCBvbGRDb250YWluZXIgPSBkdi5jb250YWluZXI7XG4gIGNvbnN0IHRlbXBvcmFyeUNvbnRhaW5lciA9IGR2LnBhcmFncmFwaCgnJyk7XG4gIGR2LmNvbnRhaW5lciA9IHRlbXBvcmFyeUNvbnRhaW5lcjtcbiAgZHYuY29udGFpbmVyLmVtcHR5KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZW5kZXJlcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGR2LnBhcmFncmFwaChgXHUyNzRDJHtlcnJvclRvU3RyaW5nKGVycm9yKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgZHYuY29udGFpbmVyID0gb2xkQ29udGFpbmVyO1xuICAgIHRlbXBvcmFyeUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxuXG4gIHJldHVybiB0ZW1wb3JhcnlDb250YWluZXI7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBhIGNvZGUgYmxvY2sgaW50byB0aGUgc3BlY2lmaWVkIGBEYXRhdmlld2AgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIGFuZCBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW5nIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29kZUJsb2NrKHBhcmFtczogSW5zZXJ0Q29kZUJsb2NrUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIGR2LFxuICAgIGxhbmd1YWdlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IE1JTl9GRU5DRV9MRU5HVEggPSAzO1xuICBjb25zdCBmZW5jZVJlZ0V4cCA9IG5ldyBSZWdFeHAoYF5cXGB7JHtTdHJpbmcoTUlOX0ZFTkNFX0xFTkdUSCl9LH1gLCAnZ20nKTtcbiAgY29uc3QgZmVuY2VNYXRjaGVzID0gY29kZS5tYXRjaEFsbChmZW5jZVJlZ0V4cCk7XG4gIGNvbnN0IGZlbmNlTGVuZ3RocyA9IFsuLi5mZW5jZU1hdGNoZXNdLm1hcCgoZmVuY2VNYXRjaCkgPT4gZmVuY2VNYXRjaFswXS5sZW5ndGgpO1xuICBjb25zdCBtYXhGZW5jZUxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLmZlbmNlTGVuZ3Rocyk7XG4gIGNvbnN0IHJlc3VsdEZlbmNlTGVuZ3RoID0gTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbWF4RmVuY2VMZW5ndGggKyAxKTtcbiAgY29uc3QgcmVzdWx0RmVuY2UgPSAnYCcucmVwZWF0KHJlc3VsdEZlbmNlTGVuZ3RoKTtcblxuICBkdi5wYXJhZ3JhcGgoYCR7cmVzdWx0RmVuY2V9JHtsYW5ndWFnZX1cbiR7Y29kZX1cbiR7cmVzdWx0RmVuY2V9YCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpZnJhbWUgaW4gdGhlIGBEYXRhdmlld2AgY29udGFpbmVyIHdpdGggdGhlIHNwZWNpZmllZCByZWxhdGl2ZSBwYXRoLCB3aWR0aCwgYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgaWZyYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySWZyYW1lKHBhcmFtczogUmVuZGVySWZyYW1lUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICBoZWlnaHQgPSAnNjAwcHgnLFxuICAgIHJlbGF0aXZlUGF0aE9yRmlsZSxcbiAgICB3aWR0aCA9ICcxMDAlJ1xuICB9ID0gcGFyYW1zO1xuICBkdi5lbCgnaWZyYW1lJywgJycsIHtcbiAgICBhdHRyOiB7XG4gICAgICBoZWlnaHQsXG4gICAgICBzcmM6IHJlbGF0aXZlUGF0aFRvUmVzb3VyY2VVcmwoe1xuICAgICAgICBhcHA6IGR2LmFwcCxcbiAgICAgICAgbm90ZVBhdGg6IGR2LmN1cnJlbnQoKS5maWxlLnBhdGgsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogZ2V0UGF0aChkdi5hcHAsIHJlbGF0aXZlUGF0aE9yRmlsZSlcbiAgICAgIH0pLFxuICAgICAgd2lkdGhcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdpbmF0ZWQgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgaW4gdGhlIGxpc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCBsaXN0LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbGlzdCBpcyByZW5kZXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRlZExpc3Q8VD4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRMaXN0UGFyYW1zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHJlbmRlclBhZ2luYXRlZCh7XG4gICAgZHYsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICByZW5kZXJlcjogYXN5bmMgKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBkdi5saXN0KHJvd3NGb3JPbmVQYWdlKTtcbiAgICB9LFxuICAgIHJvd3NcbiAgfSk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHBhZ2luYXRlZCB0YWJsZSB1c2luZyB0aGUgcHJvdmlkZWQgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgaW4gdGhlIHRhYmxlIHJvd3MuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCB0YWJsZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhYmxlIGlzIHJlbmRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGVkVGFibGU8VCBleHRlbmRzIHVua25vd25bXT4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRUYWJsZVBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgaGVhZGVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHJlbmRlclBhZ2luYXRlZCh7XG4gICAgZHYsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICByZW5kZXJlcjogYXN5bmMgKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBkdi50YWJsZShoZWFkZXJzLCByb3dzRm9yT25lUGFnZSk7XG4gICAgfSxcbiAgICByb3dzXG4gIH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byByZW5kZXIgcGFnaW5hdGVkIGNvbnRlbnQgdXNpbmcgdGhlIHNwZWNpZmllZCByZW5kZXJlci5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgcGFnaW5hdGVkIGNvbnRlbnQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb250ZW50IGlzIHJlbmRlcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXJQYWdpbmF0ZWQ8VD4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRQYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgU0VDT05EX1BBR0VfTlVNQkVSID0gMjtcbiAgY29uc3QgTU9SRV9QQUdFX05VTUJFUiA9IDM7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIGR2LnBhcmFncmFwaCgnTm8gaXRlbXMgZm91bmQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29udGFpbmVyID0gZHYuY29udGFpbmVyO1xuICBsZXQgaXRlbXNQZXJQYWdlID0gZW5zdXJlTm9uTnVsbGFibGUoaXRlbXNQZXJQYWdlT3B0aW9uc1swXSwgJ0l0ZW1zIHBlciBwYWdlIG9wdGlvbnMgYXJlIGVtcHR5Jyk7XG4gIGxldCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHJvd3MubGVuZ3RoIC8gaXRlbXNQZXJQYWdlKTtcbiAgYXdhaXQgcmVuZGVyUGFnZSgxKTtcblxuICBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uQ29udHJvbHMocGFnZU51bWJlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkRpdiA9IGNvbnRhaW5lci5jcmVhdGVEaXYoeyBjbHM6ICdwYWdpbmF0aW9uJyB9KTtcbiAgICBjb25zdCBwYWdpbmF0aW9uUm93MURpdiA9IHBhZ2luYXRpb25EaXYuY3JlYXRlRGl2KCk7XG5cbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiAxLCBkaXNhYmxlZDogcGFnZU51bWJlciA9PT0gMSwgdGV4dDogJ0ZpcnN0JyB9KTtcbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBwYWdlTnVtYmVyIC0gMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IDEsIHRleHQ6ICdQcmV2JyB9KTtcblxuICAgIGlmIChwYWdlTnVtYmVyID4gTU9SRV9QQUdFX05VTUJFUikge1xuICAgICAgcGFnaW5hdGlvblJvdzFEaXYuY3JlYXRlU3Bhbih7IHRleHQ6ICcuLi4nIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4ID0gTWF0aC5tYXgoMSwgcGFnZU51bWJlciAtIFNFQ09ORF9QQUdFX05VTUJFUik7IGluZGV4IDw9IE1hdGgubWluKHRvdGFsUGFnZXMsIHBhZ2VOdW1iZXIgKyBTRUNPTkRfUEFHRV9OVU1CRVIpOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBwYWdlTGluayA9IGNyZWF0ZVBhZ2VMaW5rKHsgY3VycmVudFBhZ2VOdW1iZXI6IGluZGV4LCBkaXNhYmxlZDogaW5kZXggPT09IHBhZ2VOdW1iZXIsIHRleHQ6IFN0cmluZyhpbmRleCkgfSk7XG4gICAgICBpZiAoaW5kZXggPT09IHBhZ2VOdW1iZXIpIHtcbiAgICAgICAgcGFnZUxpbmsuYWRkQ2xhc3MoJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFnZU51bWJlciA8IHRvdGFsUGFnZXMgLSBTRUNPTkRfUEFHRV9OVU1CRVIpIHtcbiAgICAgIHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiAnLi4uJyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBwYWdlTnVtYmVyICsgMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IHRvdGFsUGFnZXMsIHRleHQ6ICdOZXh0JyB9KTtcbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiB0b3RhbFBhZ2VzLCBkaXNhYmxlZDogcGFnZU51bWJlciA9PT0gdG90YWxQYWdlcywgdGV4dDogJ0xhc3QnIH0pO1xuXG4gICAgY29uc3QgcGFnaW5hdGlvblJvdzJEaXYgPSBwYWdpbmF0aW9uRGl2LmNyZWF0ZURpdigpO1xuXG4gICAgcGFnaW5hdGlvblJvdzJEaXYuY3JlYXRlU3Bhbih7IHRleHQ6IGAgJHt0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuZGF0YXZpZXcuaXRlbXNQZXJQYWdlKX0gYCB9KTtcblxuICAgIGNvbnN0IGl0ZW1zUGVyUGFnZVNlbGVjdCA9IHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZUVsKCdzZWxlY3QnKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBpdGVtc1BlclBhZ2VPcHRpb25zKSB7XG4gICAgICBpdGVtc1BlclBhZ2VTZWxlY3QuY3JlYXRlRWwoJ29wdGlvbicsIHsgdGV4dDogU3RyaW5nKG9wdGlvbiksIHZhbHVlOiBTdHJpbmcob3B0aW9uKSB9KTtcbiAgICB9XG4gICAgaXRlbXNQZXJQYWdlU2VsZWN0LnZhbHVlID0gU3RyaW5nKGl0ZW1zUGVyUGFnZSk7XG4gICAgaXRlbXNQZXJQYWdlU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2hhbmdlJyxcbiAgICAgIGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGl0ZW1zUGVyUGFnZSA9IHBhcnNlSW50KGl0ZW1zUGVyUGFnZVNlbGVjdC52YWx1ZSwgMTApO1xuICAgICAgICB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHJvd3MubGVuZ3RoIC8gaXRlbXNQZXJQYWdlKTtcbiAgICAgICAgYXdhaXQgcmVuZGVyUGFnZSgxKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiBgICR7dCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmRhdGF2aWV3Lmp1bXBUb1BhZ2UpfSBgIH0pO1xuXG4gICAgY29uc3QganVtcFRvUGFnZUlucHV0ID0gcGFnaW5hdGlvblJvdzJEaXYuY3JlYXRlRWwoJ2lucHV0JywgeyBhdHRyOiB7IG1heDogdG90YWxQYWdlcywgbWluOiAxIH0sIHR5cGU6ICdudW1iZXInIH0pO1xuICAgIGp1bXBUb1BhZ2VJbnB1dC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgY29udmVydEFzeW5jVG9TeW5jKGFzeW5jIChldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFnZSA9IHBhcnNlSW50KGp1bXBUb1BhZ2VJbnB1dC52YWx1ZSwgMTApO1xuICAgICAgICBpZiAocGFnZSA+PSAxICYmIHBhZ2UgPD0gdG90YWxQYWdlcykge1xuICAgICAgICAgIGF3YWl0IHJlbmRlclBhZ2UocGFnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHBhZ2luYXRpb25Sb3cyRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuZGF0YXZpZXcucGFnZUhlYWRlciwgeyBwYWdlTnVtYmVyLCB0b3RhbEl0ZW1zOiByb3dzLmxlbmd0aCwgdG90YWxQYWdlcyB9KSB9KTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZ2VMaW5rKHBhcmFtczI6IENyZWF0ZVBhZ2VMaW5rUGFyYW1zKTogSFRNTEFuY2hvckVsZW1lbnQge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50UGFnZU51bWJlcixcbiAgICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgdGV4dFxuICAgICAgfSA9IHBhcmFtczI7XG4gICAgICBjb25zdCBsaW5rID0gcGFnaW5hdGlvblJvdzFEaXYuY3JlYXRlRWwoJ2EnLCB7IGNsczogJ3BhZ2UtbGluaycsIGhyZWY6IGAjJHtTdHJpbmcoY3VycmVudFBhZ2VOdW1iZXIpfWAsIHRleHQgfSk7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgbGluay5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWFkZC1ldmVudC1saXN0ZW5lciAtLSBUaGUgaGFuZGxlciBpcyBhc3NpZ25lZCB0byBgb25jbGlja2Agc28gaXQgc3RheXMgcmVhZGFibGUgYmFjayBvZmYgdGhlIGVsZW1lbnQsIHdoaWNoIGlzIGhvdyBpdCBpcyBpbnZva2VkIGluIHRlc3RzIGFuZCBob3cgYSBsYXRlciBhc3NpZ25tZW50IGNhbiByZXBsYWNlIGl0LlxuICAgICAgICBsaW5rLm9uY2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWFkZC1ldmVudC1saXN0ZW5lciAtLSBUaGUgaGFuZGxlciBpcyBhc3NpZ25lZCB0byBgb25jbGlja2Agc28gaXQgc3RheXMgcmVhZGFibGUgYmFjayBvZmYgdGhlIGVsZW1lbnQsIHdoaWNoIGlzIGhvdyBpdCBpcyBpbnZva2VkIGluIHRlc3RzIGFuZCBob3cgYSBsYXRlciBhc3NpZ25tZW50IGNhbiByZXBsYWNlIGl0LlxuICAgICAgICBsaW5rLm9uY2xpY2sgPSBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKGV2ZW50OiBNb3VzZUV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKGN1cnJlbnRQYWdlTnVtYmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGluaztcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnRhaW5lci5lbXB0eSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL25vLWZvcmJpZGRlbi1lbGVtZW50cyAtLSBXZSBuZWVkIHRvIGNyZWF0ZSBhIHN0eWxlIGVsZW1lbnQgdG8gYXBwbHkgdGhlIHBhZ2luYXRpb24gQ1NTLlxuICAgIGNvbnRhaW5lci5jcmVhdGVFbCgnc3R5bGUnLCB7IHRleHQ6IHBhZ2luYXRpb25Dc3MgfSk7XG5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHBhZ2VOdW1iZXIgLSAxKSAqIGl0ZW1zUGVyUGFnZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBpdGVtc1BlclBhZ2U7XG4gICAgY29uc3Qgcm93c0ZvckN1cnJlbnRQYWdlID0gcm93cy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICBjb25zdCBvbGRDb250YWluZXIgPSBkdi5jb250YWluZXI7XG5cbiAgICBkdi5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhcmFtcy5yZW5kZXJlcihyb3dzRm9yQ3VycmVudFBhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkdi5wYXJhZ3JhcGgoYFx1Mjc0QyR7ZXJyb3JUb1N0cmluZyhlcnJvcil9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICAgIGR2LmNvbnRhaW5lciA9IG9sZENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBjcmVhdGVQYWdpbmF0aW9uQ29udHJvbHMocGFnZU51bWJlcik7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyx5QkFBeUI7QUFLbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFNBQVM7QUFDbEIsU0FBUyxpQ0FBaUM7QUFvRzFDLGVBQXNCLHVCQUF1QixJQUFzQztBQUNqRixRQUFNLGFBQWEsYUFBYSxNQUFNLE9BQU8sUUFBUTtBQUFBLElBQ25ELEtBQUssR0FBRztBQUFBLElBQ1IsWUFBWSxHQUFHLFFBQVEsRUFBRSxLQUFLO0FBQUEsRUFDaEMsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxNQUFNLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcU10QixlQUFzQixxQkFBcUIsSUFBdUIsVUFBaUU7QUFDakksUUFBTSxlQUFlLEdBQUc7QUFDeEIsUUFBTSxxQkFBcUIsR0FBRyxVQUFVLEVBQUU7QUFDMUMsS0FBRyxZQUFZO0FBQ2YsS0FBRyxVQUFVLE1BQU07QUFFbkIsTUFBSTtBQUNGLFVBQU0sU0FBUztBQUFBLEVBQ2pCLFNBQVMsT0FBTztBQUNkLE9BQUcsVUFBVSxTQUFJLGNBQWMsS0FBSyxDQUFDLEVBQUU7QUFBQSxFQUN6QyxVQUFFO0FBRUEsT0FBRyxZQUFZO0FBQ2YsdUJBQW1CLE9BQU87QUFBQSxFQUM1QjtBQUVBLFNBQU87QUFDVDtBQU9PLFNBQVMsZ0JBQWdCLFFBQXFDO0FBQ25FLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixRQUFNLG1CQUFtQjtBQUN6QixRQUFNLGNBQWMsSUFBSSxPQUFPLE9BQU8sT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUk7QUFDeEUsUUFBTSxlQUFlLEtBQUssU0FBUyxXQUFXO0FBQzlDLFFBQU0sZUFBZSxDQUFDLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLFdBQVcsQ0FBQyxFQUFFLE1BQU07QUFDL0UsUUFBTSxpQkFBaUIsS0FBSyxJQUFJLEdBQUcsR0FBRyxZQUFZO0FBQ2xELFFBQU0sb0JBQW9CLEtBQUssSUFBSSxrQkFBa0IsaUJBQWlCLENBQUM7QUFDdkUsUUFBTSxjQUFjLElBQUksT0FBTyxpQkFBaUI7QUFFaEQsS0FBRyxVQUFVLEdBQUcsV0FBVyxHQUFHLFFBQVE7QUFBQSxFQUN0QyxJQUFJO0FBQUEsRUFDSixXQUFXLEVBQUU7QUFDZjtBQU9PLFNBQVMsYUFBYSxRQUFrQztBQUM3RCxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBLFFBQVE7QUFBQSxFQUNWLElBQUk7QUFDSixLQUFHLEdBQUcsVUFBVSxJQUFJO0FBQUEsSUFDbEIsTUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLEtBQUssMEJBQTBCO0FBQUEsUUFDN0IsS0FBSyxHQUFHO0FBQUEsUUFDUixVQUFVLEdBQUcsUUFBUSxFQUFFLEtBQUs7QUFBQSxRQUM1QixjQUFjLFFBQVEsR0FBRyxLQUFLLGtCQUFrQjtBQUFBLE1BQ2xELENBQUM7QUFBQSxNQUNEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBV0EsZUFBc0Isb0JBQXVCLFFBQXFEO0FBQ2hHLFFBQU07QUFBQSxJQUNKO0FBQUE7QUFBQSxJQUVBLHNCQUFzQixDQUFDLElBQUksSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUN0QztBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0sZ0JBQWdCO0FBQUEsSUFDcEI7QUFBQSxJQUNBO0FBQUEsSUFDQSxVQUFVLE9BQU8sbUJBQXVEO0FBQ3RFLFlBQU0sR0FBRyxLQUFLLGNBQWM7QUFBQSxJQUM5QjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVdBLGVBQXNCLHFCQUEwQyxRQUFzRDtBQUNwSCxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQTtBQUFBLElBRUEsc0JBQXNCLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRztBQUFBLElBQ3RDO0FBQUEsRUFDRixJQUFJO0FBQ0osUUFBTSxnQkFBZ0I7QUFBQSxJQUNwQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVUsT0FBTyxtQkFBdUQ7QUFDdEUsWUFBTSxHQUFHLE1BQU0sU0FBUyxjQUFjO0FBQUEsSUFDeEM7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFXQSxlQUFlLGdCQUFtQixRQUFpRDtBQUNqRixRQUFNLHFCQUFxQjtBQUMzQixRQUFNLG1CQUFtQjtBQUN6QixRQUFNO0FBQUEsSUFDSjtBQUFBO0FBQUEsSUFFQSxzQkFBc0IsQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHO0FBQUEsSUFDdEM7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLE9BQUcsVUFBVSxnQkFBZ0I7QUFDN0I7QUFBQSxFQUNGO0FBQ0EsUUFBTSxZQUFZLEdBQUc7QUFDckIsTUFBSSxlQUFlLGtCQUFrQixvQkFBb0IsQ0FBQyxHQUFHLGtDQUFrQztBQUMvRixNQUFJLGFBQWEsS0FBSyxLQUFLLEtBQUssU0FBUyxZQUFZO0FBQ3JELFFBQU0sV0FBVyxDQUFDO0FBRWxCLFdBQVMseUJBQXlCLFlBQTBCO0FBQzFELFVBQU0sZ0JBQWdCLFVBQVUsVUFBVSxFQUFFLEtBQUssYUFBYSxDQUFDO0FBQy9ELFVBQU0sb0JBQW9CLGNBQWMsVUFBVTtBQUVsRCxtQkFBZSxFQUFFLG1CQUFtQixHQUFHLFVBQVUsZUFBZSxHQUFHLE1BQU0sUUFBUSxDQUFDO0FBQ2xGLG1CQUFlLEVBQUUsbUJBQW1CLGFBQWEsR0FBRyxVQUFVLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUU5RixRQUFJLGFBQWEsa0JBQWtCO0FBQ2pDLHdCQUFrQixXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFBQSxJQUM5QztBQUVBLGFBQVMsUUFBUSxLQUFLLElBQUksR0FBRyxhQUFhLGtCQUFrQixHQUFHLFNBQVMsS0FBSyxJQUFJLFlBQVksYUFBYSxrQkFBa0IsR0FBRyxTQUFTO0FBQ3RJLFlBQU0sV0FBVyxlQUFlLEVBQUUsbUJBQW1CLE9BQU8sVUFBVSxVQUFVLFlBQVksTUFBTSxPQUFPLEtBQUssRUFBRSxDQUFDO0FBQ2pILFVBQUksVUFBVSxZQUFZO0FBQ3hCLGlCQUFTLFNBQVMsU0FBUztBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUVBLFFBQUksYUFBYSxhQUFhLG9CQUFvQjtBQUNoRCx3QkFBa0IsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQUEsSUFDOUM7QUFFQSxtQkFBZSxFQUFFLG1CQUFtQixhQUFhLEdBQUcsVUFBVSxlQUFlLFlBQVksTUFBTSxPQUFPLENBQUM7QUFDdkcsbUJBQWUsRUFBRSxtQkFBbUIsWUFBWSxVQUFVLGVBQWUsWUFBWSxNQUFNLE9BQU8sQ0FBQztBQUVuRyxVQUFNLG9CQUFvQixjQUFjLFVBQVU7QUFFbEQsc0JBQWtCLFdBQVcsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsU0FBUyxZQUFZLENBQUMsSUFBSSxDQUFDO0FBRWhHLFVBQU0scUJBQXFCLGtCQUFrQixTQUFTLFFBQVE7QUFDOUQsZUFBVyxVQUFVLHFCQUFxQjtBQUN4Qyx5QkFBbUIsU0FBUyxVQUFVLEVBQUUsTUFBTSxPQUFPLE1BQU0sR0FBRyxPQUFPLE9BQU8sTUFBTSxFQUFFLENBQUM7QUFBQSxJQUN2RjtBQUNBLHVCQUFtQixRQUFRLE9BQU8sWUFBWTtBQUM5Qyx1QkFBbUI7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsbUJBQW1CLFlBQTJCO0FBQzVDLHVCQUFlLFNBQVMsbUJBQW1CLE9BQU8sRUFBRTtBQUNwRCxxQkFBYSxLQUFLLEtBQUssS0FBSyxTQUFTLFlBQVk7QUFDakQsY0FBTSxXQUFXLENBQUM7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDSDtBQUVBLHNCQUFrQixXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLFNBQVMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUU5RixVQUFNLGtCQUFrQixrQkFBa0IsU0FBUyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssWUFBWSxLQUFLLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQztBQUNqSCxvQkFBZ0I7QUFBQSxNQUNkO0FBQUEsTUFDQSxtQkFBbUIsT0FBTyxVQUF3QztBQUNoRSxZQUFJLE1BQU0sUUFBUSxTQUFTO0FBQ3pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sT0FBTyxTQUFTLGdCQUFnQixPQUFPLEVBQUU7QUFDL0MsWUFBSSxRQUFRLEtBQUssUUFBUSxZQUFZO0FBQ25DLGdCQUFNLFdBQVcsSUFBSTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLHNCQUFrQixXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixTQUFTLFlBQVksRUFBRSxZQUFZLFlBQVksS0FBSyxRQUFRLFdBQVcsQ0FBQyxFQUFFLENBQUM7QUFFNUksYUFBUyxlQUFlLFNBQWtEO0FBQ3hFLFlBQU07QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWDtBQUFBLE1BQ0YsSUFBSTtBQUNKLFlBQU0sT0FBTyxrQkFBa0IsU0FBUyxLQUFLLEVBQUUsS0FBSyxhQUFhLE1BQU0sSUFBSSxPQUFPLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDO0FBQzlHLFVBQUksVUFBVTtBQUNaLGFBQUssU0FBUyxVQUFVO0FBRXhCLGFBQUssVUFBVSxDQUFDLFVBQTRCO0FBQzFDLGdCQUFNLGVBQWU7QUFBQSxRQUN2QjtBQUFBLE1BQ0YsT0FBTztBQUVMLGFBQUssVUFBVSxtQkFBbUIsT0FBTyxVQUFxQztBQUM1RSxnQkFBTSxlQUFlO0FBQ3JCLGdCQUFNLFdBQVcsaUJBQWlCO0FBQUEsUUFDcEMsQ0FBQztBQUFBLE1BQ0g7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxXQUFXLFlBQW1DO0FBQzNELGNBQVUsTUFBTTtBQUVoQixjQUFVLFNBQVMsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5ELFVBQU0sY0FBYyxhQUFhLEtBQUs7QUFDdEMsVUFBTSxXQUFXLGFBQWE7QUFDOUIsVUFBTSxxQkFBcUIsS0FBSyxNQUFNLFlBQVksUUFBUTtBQUUxRCxVQUFNLGVBQWUsR0FBRztBQUV4QixPQUFHLFlBQVk7QUFDZixRQUFJO0FBQ0YsWUFBTSxPQUFPLFNBQVMsa0JBQWtCO0FBQUEsSUFDMUMsU0FBUyxPQUFPO0FBQ2QsU0FBRyxVQUFVLFNBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtBQUFBLElBQ3pDLFVBQUU7QUFFQSxTQUFHLFlBQVk7QUFBQSxJQUNqQjtBQUVBLDZCQUF5QixVQUFVO0FBQUEsRUFDckM7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -6,7 +6,7 @@
6
6
  * and the bootstrap that runs inside the opened vault.
7
7
  *
8
8
  * The helper has to name the plugin the vault demonstrates, and nothing inside the vault reliably says
9
- * which one that is: the plugin folders also hold the helper itself, CodeScript Toolkit once the
9
+ * which one that is: the plugin folders also hold the helper itself, `CodeScript Toolkit` once the
10
10
  * bootstrap has installed it, and anything a demo note's prerequisites installed, so counting them
11
11
  * guesses (and guesses differently on a re-open). The packaging step, on the other hand, KNOWS — it
12
12
  * reads the plugin's `manifest.json` to name the archive — so it writes the id down here and the
@@ -2,27 +2,27 @@
2
2
  /**
3
3
  * @file
4
4
  *
5
- * Bootstraps a demo vault by installing, configuring, and enabling CodeScript Toolkit.
5
+ * Bootstraps a demo vault by installing, configuring, and enabling `CodeScript Toolkit`.
6
6
  *
7
7
  * A plugin's demo vault showcases the plugin through notes whose `code-button`s run TypeScript via
8
- * CodeScript Toolkit. A demo vault that does not itself ship CodeScript Toolkit therefore needs it
8
+ * `CodeScript Toolkit`. A demo vault that does not itself ship `CodeScript Toolkit` therefore needs it
9
9
  * installed, configured, and enabled before those buttons work. {@link bootstrapDemoVault} does exactly
10
- * that with no committed CodeScript Toolkit config and no manual setup, so it can be driven from a tiny
10
+ * that with no committed `CodeScript Toolkit` config and no manual setup, so it can be driven from a tiny
11
11
  * committed bootstrap plugin (`demo-vault-helper`) that is injected into every demo vault at release
12
12
  * time.
13
13
  *
14
14
  * The plugin the vault demonstrates is read from the helper's own `data.json`, written by the packaging
15
15
  * step ({@link DemoVaultHelperSettings}); a vault without that marker is refused as not a demo vault.
16
16
  *
17
- * It writes CodeScript Toolkit's settings BEFORE enabling it, so the plugin loads already configured —
18
- * no reload. CodeScript Toolkit then runs the vault's `startup.ts` (via its `startupScriptPath`
17
+ * It writes `CodeScript Toolkit`'s settings BEFORE enabling it, so the plugin loads already configured —
18
+ * no reload. `CodeScript Toolkit` then runs the vault's `startup.ts` (via its `startupScriptPath`
19
19
  * setting), which is where each vault opens its start note and does any plugin-specific setup.
20
20
  *
21
- * It also creates CodeScript Toolkit's invocable-scripts folder if it is missing, so every demo vault
21
+ * It also creates `CodeScript Toolkit`'s invocable-scripts folder if it is missing, so every demo vault
22
22
  * has the same layout even when the vault ships no invocable scripts — the vaults themselves commit no
23
23
  * empty folder for it.
24
24
  *
25
- * It then installs the Folder Notes plugin, configured to treat `README.md` as a folder's own note. A
25
+ * It then installs the `Folder Notes` plugin, configured to treat `README.md` as a folder's own note. A
26
26
  * demo vault that has outgrown a flat note list groups its notes into folders, and a group folder only
27
27
  * says what it is for if it has a note of its own — `README.md`, because that is also the file GitHub
28
28
  * renders under the file list when the same vault is browsed as a repository, so one file serves both
@@ -46,16 +46,16 @@ export interface BootstrapDemoVaultParams {
46
46
  * Bootstraps a demo vault so its notes' `code-button`s work with no manual setup: installs CodeScript
47
47
  * Toolkit from the community store (if it is not already installed), writes its settings, then enables
48
48
  * it — writing the settings BEFORE enabling so a fresh enable loads it already configured, with no
49
- * reload. If CodeScript Toolkit is already enabled but the settings just changed, it is reloaded
49
+ * reload. If `CodeScript Toolkit` is already enabled but the settings just changed, it is reloaded
50
50
  * (disabled then enabled) so it re-reads `data.json`; when the settings were already in place, nothing is
51
- * reloaded (so a routine vault re-open does not re-run CodeScript Toolkit's startup). CodeScript Toolkit
52
- * then runs the vault's `startup.ts`. Folder Notes is installed next, configured to treat `README.md` as
51
+ * reloaded (so a routine vault re-open does not re-run `CodeScript Toolkit`'s startup). `CodeScript Toolkit`
52
+ * then runs the vault's `startup.ts`. `Folder Notes` is installed next, configured to treat `README.md` as
53
53
  * a folder's own note, so a vault whose notes are grouped into folders describes each group in the file
54
54
  * explorer. Finally it closes Settings (so the notice cannot be raised inside the settings popout) and
55
55
  * raises the sandbox notice describing the opened vault as a throwaway copy.
56
56
  *
57
57
  * @param params - The {@link BootstrapDemoVaultParams}.
58
- * @returns A {@link Promise} that resolves once CodeScript Toolkit is installed, configured, and enabled
58
+ * @returns A {@link Promise} that resolves once `CodeScript Toolkit` is installed, configured, and enabled
59
59
  * and the sandbox notice has been shown.
60
60
  */
61
61
  export declare function bootstrapDemoVault(params: BootstrapDemoVaultParams): Promise<void>;
@@ -140,4 +140,4 @@ function showSandboxNotice(app, demoedPluginId) {
140
140
  export {
141
141
  bootstrapDemoVault
142
142
  };
143
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBDb2RlU2NyaXB0IFRvb2xraXQuXG4gKlxuICogQSBwbHVnaW4ncyBkZW1vIHZhdWx0IHNob3djYXNlcyB0aGUgcGx1Z2luIHRocm91Z2ggbm90ZXMgd2hvc2UgYGNvZGUtYnV0dG9uYHMgcnVuIFR5cGVTY3JpcHQgdmlhXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQuIEEgZGVtbyB2YXVsdCB0aGF0IGRvZXMgbm90IGl0c2VsZiBzaGlwIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIENvZGVTY3JpcHQgVG9vbGtpdCBjb25maWcgYW5kIG5vIG1hbnVhbCBzZXR1cCwgc28gaXQgY2FuIGJlIGRyaXZlbiBmcm9tIGEgdGlueVxuICogY29tbWl0dGVkIGJvb3RzdHJhcCBwbHVnaW4gKGBkZW1vLXZhdWx0LWhlbHBlcmApIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBldmVyeSBkZW1vIHZhdWx0IGF0IHJlbGVhc2VcbiAqIHRpbWUuXG4gKlxuICogVGhlIHBsdWdpbiB0aGUgdmF1bHQgZGVtb25zdHJhdGVzIGlzIHJlYWQgZnJvbSB0aGUgaGVscGVyJ3Mgb3duIGBkYXRhLmpzb25gLCB3cml0dGVuIGJ5IHRoZSBwYWNrYWdpbmdcbiAqIHN0ZXAgKHtAbGluayBEZW1vVmF1bHRIZWxwZXJTZXR0aW5nc30pOyBhIHZhdWx0IHdpdGhvdXQgdGhhdCBtYXJrZXIgaXMgcmVmdXNlZCBhcyBub3QgYSBkZW1vIHZhdWx0LlxuICpcbiAqIEl0IHdyaXRlcyBDb2RlU2NyaXB0IFRvb2xraXQncyBzZXR0aW5ncyBCRUZPUkUgZW5hYmxpbmcgaXQsIHNvIHRoZSBwbHVnaW4gbG9hZHMgYWxyZWFkeSBjb25maWd1cmVkIFx1MjAxNFxuICogbm8gcmVsb2FkLiBDb2RlU2NyaXB0IFRvb2xraXQgdGhlbiBydW5zIHRoZSB2YXVsdCdzIGBzdGFydHVwLnRzYCAodmlhIGl0cyBgc3RhcnR1cFNjcmlwdFBhdGhgXG4gKiBzZXR0aW5nKSwgd2hpY2ggaXMgd2hlcmUgZWFjaCB2YXVsdCBvcGVucyBpdHMgc3RhcnQgbm90ZSBhbmQgZG9lcyBhbnkgcGx1Z2luLXNwZWNpZmljIHNldHVwLlxuICpcbiAqIEl0IGFsc28gY3JlYXRlcyBDb2RlU2NyaXB0IFRvb2xraXQncyBpbnZvY2FibGUtc2NyaXB0cyBmb2xkZXIgaWYgaXQgaXMgbWlzc2luZywgc28gZXZlcnkgZGVtbyB2YXVsdFxuICogaGFzIHRoZSBzYW1lIGxheW91dCBldmVuIHdoZW4gdGhlIHZhdWx0IHNoaXBzIG5vIGludm9jYWJsZSBzY3JpcHRzIFx1MjAxNCB0aGUgdmF1bHRzIHRoZW1zZWx2ZXMgY29tbWl0IG5vXG4gKiBlbXB0eSBmb2xkZXIgZm9yIGl0LlxuICpcbiAqIEl0IHRoZW4gaW5zdGFsbHMgdGhlIEZvbGRlciBOb3RlcyBwbHVnaW4sIGNvbmZpZ3VyZWQgdG8gdHJlYXQgYFJFQURNRS5tZGAgYXMgYSBmb2xkZXIncyBvd24gbm90ZS4gQVxuICogZGVtbyB2YXVsdCB0aGF0IGhhcyBvdXRncm93biBhIGZsYXQgbm90ZSBsaXN0IGdyb3VwcyBpdHMgbm90ZXMgaW50byBmb2xkZXJzLCBhbmQgYSBncm91cCBmb2xkZXIgb25seVxuICogc2F5cyB3aGF0IGl0IGlzIGZvciBpZiBpdCBoYXMgYSBub3RlIG9mIGl0cyBvd24gXHUyMDE0IGBSRUFETUUubWRgLCBiZWNhdXNlIHRoYXQgaXMgYWxzbyB0aGUgZmlsZSBHaXRIdWJcbiAqIHJlbmRlcnMgdW5kZXIgdGhlIGZpbGUgbGlzdCB3aGVuIHRoZSBzYW1lIHZhdWx0IGlzIGJyb3dzZWQgYXMgYSByZXBvc2l0b3J5LCBzbyBvbmUgZmlsZSBzZXJ2ZXMgYm90aFxuICogcmVhZGVycy5cbiAqXG4gKiBGaW5hbGx5IGl0IHJhaXNlcyB0aGUgc2FuZGJveCBub3RpY2UgZXhwbGFpbmluZyB0aGF0IHRoZSBvcGVuZWQgdmF1bHQgaXMgYSB0aHJvd2F3YXkgY29weSwgc28gYSB1c2VyXG4gKiB3aG8gd3JpdGVzIHRoZWlyIG93biBub3RlcyBpbiBpdCBpcyBuZXZlciBzdXJwcmlzZWQgYnkgdGhlbSBiZWluZyBhYnNlbnQgZnJvbSB0aGUgbmV4dCBjb3B5LiBTZXR0aW5nc1xuICogaXMgY2xvc2VkIGZpcnN0LCBzbyB0aGUgbm90aWNlIGxhbmRzIGluIHRoZSB2YXVsdCdzIG1haW4gd2luZG93IHJhdGhlciB0aGFuIGluIHRoZSBzZXR0aW5ncyBwb3BvdXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBFTVBUWSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IERlbW9WYXVsdEhlbHBlclNldHRpbmdzIH0gZnJvbSAnLi9kZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncy50cyc7XG5cbmltcG9ydCB7XG4gIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbixcbiAgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LFxuICBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBlbmFibGVDb21tdW5pdHlQbHVnaW4sXG4gIGluc3RhbGxDb21tdW5pdHlQbHVnaW4sXG4gIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5cbn0gZnJvbSAnLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBhcHBlbmRDb2RlQmxvY2sgfSBmcm9tICcuL2h0bWwtZWxlbWVudC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbn1cblxuLyoqXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQncyBzZXR0aW5ncywgd3JpdHRlbiBpbnRvIGl0cyBgZGF0YS5qc29uYCBiZWZvcmUgaXQgaXMgZW5hYmxlZC5cbiAqL1xuaW50ZXJmYWNlIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIFlBTUwgZnJvbnRtYXR0ZXIgbWVyZ2VkIGludG8gZXZlcnkgYGNvZGUtYnV0dG9uYCBibG9jaydzIG93biBjb25maWcsIHVzZWQgaGVyZSB0byB0dXJuIHRoZVxuICAgKiBzb3VyY2Ugdmlld2VyIG9uIGZvciBldmVyeSBidXR0b24gaW4gZXZlcnkgZGVtbyB2YXVsdCB3aXRob3V0IGVkaXRpbmcgYSBzaW5nbGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb2RlQnV0dG9uQ29uZmlnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgaG9sZGluZyBpbnZvY2FibGUgc2NyaXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IGludm9jYWJsZVNjcmlwdHNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGF0IGByZXF1aXJlKCcvXHUyMDI2JylgIHJlc29sdmVzIG1vZHVsZSBwYXRocyBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlc1Jvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBDb2RlU2NyaXB0IFRvb2xraXQgaGFuZGxlcyBgb2JzaWRpYW46Ly9gIHByb3RvY29sIFVSTHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVQcm90b2NvbFVybHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoICh1bmRlciB7QGxpbmsgQ29kZVNjcmlwdFRvb2xraXRTZXR0aW5ncy5tb2R1bGVzUm9vdH0pIG9mIHRoZSBzY3JpcHQgcnVuIG9uIGxvYWQuXG4gICAqL1xuICByZWFkb25seSBzdGFydHVwU2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvbGRlciBOb3Rlcycgc2V0dGluZ3MsIHdyaXR0ZW4gaW50byBpdHMgYGRhdGEuanNvbmAgYmVmb3JlIGl0IGlzIGVuYWJsZWQuXG4gKi9cbmludGVyZmFjZSBGb2xkZXJOb3Rlc1NldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGEgZm9sZGVyJ3Mgb3duIG5vdGUgaXMgbG9va2VkIGZvciB1bmRlciwgd2l0aG91dCB0aGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyTm90ZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBhIGZvbGRlcidzIG93biBub3RlIGlzIGhpZGRlbiBmcm9tIHRoZSBmaWxlIGV4cGxvcmVyLCBzbyB0aGUgZm9sZGVyIGl0c2VsZiBzdGFuZHMgZm9yIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaGlkZUZvbGRlck5vdGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIGEgZm9sZGVyJ3Mgb3duIG5vdGUgaXMga2VwdCwgcmVsYXRpdmUgdG8gdGhlIGZvbGRlciBpdCBkZXNjcmliZXMuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlTG9jYXRpb246IHN0cmluZztcbn1cblxuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgPSAnZml4LXJlcXVpcmUtbW9kdWxlcyc7XG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCA9ICdfYXNzZXRzL0NvZGVTY3JpcHRUb29sa2l0JztcbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfU0VUVElOR1M6IENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3MgPSB7XG4gIGRlZmF1bHRDb2RlQnV0dG9uQ29uZmlnOiAnLS0tXFxuc291cmNlVmlzaWJpbGl0eTogY29sbGFwc2VkXFxuLS0tJyxcbiAgaW52b2NhYmxlU2NyaXB0c0ZvbGRlcjogJ0ludm9jYWJsZXMnLFxuICBtb2R1bGVzUm9vdDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QsXG4gIHNob3VsZEhhbmRsZVByb3RvY29sVXJsczogdHJ1ZSxcbiAgc3RhcnR1cFNjcmlwdFBhdGg6ICdzdGFydHVwLnRzJ1xufTtcblxuY29uc3QgRk9MREVSX05PVEVTX1BMVUdJTl9JRCA9ICdmb2xkZXItbm90ZXMnO1xuLy8gYFJFQURNRWAgcmF0aGVyIHRoYW4gRm9sZGVyIE5vdGVzJyBvd24gYHt7Zm9sZGVyX25hbWV9fWAgZGVmYXVsdDogdGhlIHNhbWUgZmlsZSBoYXMgdG8gYmUgdGhlIGZvbGRlcidzXG4vLyBub3RlIGluIE9ic2lkaWFuIEFORCB0aGUgcGFnZSBHaXRIdWIgcmVuZGVycyB3aGVuIHRoZSB2YXVsdCBpcyBicm93c2VkIGFzIGEgcmVwb3NpdG9yeSwgYW5kIEdpdEh1YlxuLy8gb25seSBkb2VzIHRoYXQgZm9yIGBSRUFETUUubWRgLiBgaW5zaWRlRm9sZGVyYCBrZWVwcyBpdCB3aXRoIHRoZSBub3RlcyBpdCBkZXNjcmliZXMgcmF0aGVyIHRoYW4gYmVzaWRlXG4vLyB0aGUgZm9sZGVyLCBhbmQgaGlkaW5nIGl0IGxldHMgdGhlIGZvbGRlciBpdHNlbGYgc3RhbmQgZm9yIHRoZSBub3RlIGluc3RlYWQgb2YgbGlzdGluZyBib3RoLlxuY29uc3QgRk9MREVSX05PVEVTX1NFVFRJTkdTOiBGb2xkZXJOb3Rlc1NldHRpbmdzID0ge1xuICBmb2xkZXJOb3RlTmFtZTogJ1JFQURNRScsXG4gIGhpZGVGb2xkZXJOb3RlOiB0cnVlLFxuICBzdG9yYWdlTG9jYXRpb246ICdpbnNpZGVGb2xkZXInXG59O1xuXG5jb25zdCBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSUQgPSAnZGVtby12YXVsdC1oZWxwZXInO1xuY29uc3QgUExVR0lOU19GT0xERVJfTkFNRSA9ICdwbHVnaW5zJztcbmNvbnN0IERBVEFfSlNPTl9GSUxFX05BTUUgPSAnZGF0YS5qc29uJztcbmNvbnN0IElOVkFMSURfREVNT19WQVVMVF9FUlJPUl9NRVNTQUdFID0gJ0ludmFsaWQgZGVtbyB2YXVsdCc7XG5jb25zdCBPUEVOX0RFTU9fVkFVTFRfQ09NTUFORF9OQU1FID0gJ09wZW4gZGVtbyB2YXVsdCc7XG4vLyBgMGAgYXNrcyBPYnNpZGlhbiB0byBrZWVwIHRoZSBub3RpY2UgdXAgdW50aWwgdGhlIHVzZXIgY2xpY2tzIGl0IFx1MjAxNCB0aGUgc2FtZSB0cmVhdG1lbnQgT2JzaWRpYW4gZ2l2ZXNcbi8vIGl0cyBvd24gc2FuZGJveC12YXVsdCBub3RpY2UsIGFuZCB3aGF0IHRoZSBkZW1vLXZhdWx0IG5vdGljZSBpcyBtb2RlbGxlZCBvbi5cbmNvbnN0IFNBTkRCT1hfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5cbi8qKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgc28gaXRzIG5vdGVzJyBgY29kZS1idXR0b25gcyB3b3JrIHdpdGggbm8gbWFudWFsIHNldHVwOiBpbnN0YWxscyBDb2RlU2NyaXB0XG4gKiBUb29sa2l0IGZyb20gdGhlIGNvbW11bml0eSBzdG9yZSAoaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkKSwgd3JpdGVzIGl0cyBzZXR0aW5ncywgdGhlbiBlbmFibGVzXG4gKiBpdCBcdTIwMTQgd3JpdGluZyB0aGUgc2V0dGluZ3MgQkVGT1JFIGVuYWJsaW5nIHNvIGEgZnJlc2ggZW5hYmxlIGxvYWRzIGl0IGFscmVhZHkgY29uZmlndXJlZCwgd2l0aCBub1xuICogcmVsb2FkLiBJZiBDb2RlU2NyaXB0IFRvb2xraXQgaXMgYWxyZWFkeSBlbmFibGVkIGJ1dCB0aGUgc2V0dGluZ3MganVzdCBjaGFuZ2VkLCBpdCBpcyByZWxvYWRlZFxuICogKGRpc2FibGVkIHRoZW4gZW5hYmxlZCkgc28gaXQgcmUtcmVhZHMgYGRhdGEuanNvbmA7IHdoZW4gdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBpbiBwbGFjZSwgbm90aGluZyBpc1xuICogcmVsb2FkZWQgKHNvIGEgcm91dGluZSB2YXVsdCByZS1vcGVuIGRvZXMgbm90IHJlLXJ1biBDb2RlU2NyaXB0IFRvb2xraXQncyBzdGFydHVwKS4gQ29kZVNjcmlwdCBUb29sa2l0XG4gKiB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgLiBGb2xkZXIgTm90ZXMgaXMgaW5zdGFsbGVkIG5leHQsIGNvbmZpZ3VyZWQgdG8gdHJlYXQgYFJFQURNRS5tZGAgYXNcbiAqIGEgZm9sZGVyJ3Mgb3duIG5vdGUsIHNvIGEgdmF1bHQgd2hvc2Ugbm90ZXMgYXJlIGdyb3VwZWQgaW50byBmb2xkZXJzIGRlc2NyaWJlcyBlYWNoIGdyb3VwIGluIHRoZSBmaWxlXG4gKiBleHBsb3Jlci4gRmluYWxseSBpdCBjbG9zZXMgU2V0dGluZ3MgKHNvIHRoZSBub3RpY2UgY2Fubm90IGJlIHJhaXNlZCBpbnNpZGUgdGhlIHNldHRpbmdzIHBvcG91dCkgYW5kXG4gKiByYWlzZXMgdGhlIHNhbmRib3ggbm90aWNlIGRlc2NyaWJpbmcgdGhlIG9wZW5lZCB2YXVsdCBhcyBhIHRocm93YXdheSBjb3B5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWRcbiAqIGFuZCB0aGUgc2FuZGJveCBub3RpY2UgaGFzIGJlZW4gc2hvd24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBEZW1vVmF1bHQocGFyYW1zOiBCb290c3RyYXBEZW1vVmF1bHRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgLy8gUmVzb2x2ZWQgZmlyc3QsIHNvIGEgdmF1bHQgdGhhdCBpcyBub3QgYSBkZW1vIHZhdWx0IGlzIHJlZnVzZWQgYmVmb3JlIGFueXRoaW5nIGlzIGluc3RhbGxlZCBpbnRvIGl0LlxuICBjb25zdCBkZW1vZWRQbHVnaW5JZCA9IGF3YWl0IGdldERlbW9lZFBsdWdpbklkKGFwcCk7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTXG4gIH0pO1xuICBhd2FpdCBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcCk7XG5cbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMoQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQpKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIH0gZWxzZSBpZiAocmVzdWx0ID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2Vzcykge1xuICAgIC8vIEFscmVhZHkgZW5hYmxlZCB3aXRoIHN0YWxlIHNldHRpbmdzIFx1MjAxNCByZWxvYWQgc28gQ29kZVNjcmlwdCBUb29sa2l0IHJlLXJlYWRzIHRoZSBmcmVzaGx5IHdyaXR0ZW4gZGF0YS5qc29uLlxuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgfVxuXG4gIC8vIEFmdGVyIENvZGVTY3JpcHQgVG9vbGtpdCwgc28gdGhlIHZhdWx0J3Mgc3RhcnR1cCBzY3JpcHQgaGFzIGFscmVhZHkgb3BlbmVkIHRoZSBzdGFydCBub3RlIGJ5IHRoZSB0aW1lXG4gIC8vIHRoZSBmaWxlIGV4cGxvcmVyIGdhaW5zIGl0cyBmb2xkZXItbm90ZSBiZWhhdmlvci5cbiAgYXdhaXQgaW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpbih7XG4gICAgYXBwLFxuICAgIHBsdWdpbklkOiBGT0xERVJfTk9URVNfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBGT0xERVJfTk9URVNfU0VUVElOR1NcbiAgfSk7XG5cbiAgc2hvd1NhbmRib3hOb3RpY2UoYXBwLCBkZW1vZWRQbHVnaW5JZCk7XG59XG5cbi8vIEJ1aWxkcyB0aGUgc2FuZGJveCBub3RpY2UgY29udGVudDogd2hhdCB0aGlzIHZhdWx0IGlzLCB3aGVyZSBpdCBsaXZlcywgaG93IGxvbmcgaXQgbGl2ZXMsIGFuZCB3aHlcbi8vIHJlLXJ1bm5pbmcgdGhlIGNvbW1hbmQgcHJvZHVjZXMgYSB2YXVsdCB3aXRob3V0IHRoZSBub3RlcyBqdXN0IHdyaXR0ZW4gaGVyZS5cbi8vXG4vLyBFdmVyeSBjbGFpbSBoYXMgdG8gc3RheSB0cnVlIG9mIHRoZSBvcGVuZXIgKGBkZXNrdG9wLWRlbW8tdmF1bHQtb3BlbmVyLnRzYCk6IGl0IGV4dHJhY3RzIGEgRlJFU0ggY29weVxuLy8gaW50byBpdHMgb3duIGZvbGRlciBvbiBldmVyeSBvcGVuLCBhbmQgZGVsZXRlcyBleHRyYWN0ZWQgZm9sZGVycyBvbGRlciB0aGFuIGEgZGF5IG9uIGVhY2ggbGF0ZXIgb3Blbi5cbi8vIFNvIHRoZSB2YXVsdCBpcyBhIHRlbXBvcmFyeSBzYW5kYm94IFx1MjAxNCBpdCBtdXN0IG5ldmVyIGJlIGRlc2NyaWJlZCBhcyBhIHBsYWNlIHdvcmsgY2FuIGJlIGxlZnQuXG5mdW5jdGlvbiBidWlsZFNhbmRib3hOb3RpY2VGcmFnbWVudChwbHVnaW5OYW1lOiBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50KChmcmFnbWVudCkgPT4ge1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ1RoaXMgaXMgYSBkZW1vIHZhdWx0IGZvciAnKTtcbiAgICBhcHBlbmRDb2RlQmxvY2soZnJhZ21lbnQsIHBsdWdpbk5hbWUpO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJy4nKTtcblxuICAgIGZyYWdtZW50LmNyZWF0ZUVsKCdicicpO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ0l0IGlzIGEgdGVtcG9yYXJ5IHNhbmRib3gsIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBhYm91dCBhIGRheSBhZnRlciB5b3UgbGFzdCB1c2UgaXQuJyk7XG5cbiAgICBmcmFnbWVudC5jcmVhdGVFbCgnYnInKTtcbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdFeGVjdXRpbmcgJyk7XG4gICAgZnJhZ21lbnQuY3JlYXRlRWwoJ2InLCB7IHRleHQ6IGAke3BsdWdpbk5hbWV9OiAke09QRU5fREVNT19WQVVMVF9DT01NQU5EX05BTUV9YCB9KTtcbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgY29tbWFuZCBhZ2FpbiBjcmVhdGVzIGEgbmV3IGNvcHkgd2l0aCB0aGUgbGF0ZXN0IHBsdWdpbiB2ZXJzaW9uLCBzbyB5b3VyIG5vdGVzIHdpbGwgbm90IGFwcGVhciBpbiBpdC4nKTtcbiAgfSk7XG59XG5cbi8vIENyZWF0ZXMgQ29kZVNjcmlwdCBUb29sa2l0J3MgaW52b2NhYmxlLXNjcmlwdHMgZm9sZGVyICh1bmRlciBgbW9kdWxlc1Jvb3RgKSBpZiBpdCBpcyBtaXNzaW5nLlxuLy8gRXZlcnkgZGVtbyB2YXVsdCB0aGVuIGhhcyB0aGUgc2FtZSBDb2RlU2NyaXB0IFRvb2xraXQgbGF5b3V0IGV2ZW4gd2hlbiBpdCBzaGlwcyBubyBpbnZvY2FibGUgc2NyaXB0cy5cbi8vIFRoZSBjb21taXR0ZWQgdmF1bHQgdGhlcmVmb3JlIGNhcnJpZXMgbm8gb3RoZXJ3aXNlLWVtcHR5IHBsYWNlaG9sZGVyIGZvbGRlci5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUludm9jYWJsZVNjcmlwdHNGb2xkZXIoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaW52b2NhYmxlU2NyaXB0c0ZvbGRlclBhdGggPSBqb2luKENPREVfU0NSSVBUX1RPT0xLSVRfTU9EVUxFU19ST09ULCBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTLmludm9jYWJsZVNjcmlwdHNGb2xkZXIpO1xuICBpZiAoIWF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCkpIHtcbiAgICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5ta2RpcihpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCk7XG4gIH1cbn1cblxuLy8gUmVhZHMgdGhlIHBsdWdpbiB0aGUgdmF1bHQgZGVtb25zdHJhdGVzIG91dCBvZiB0aGlzIGhlbHBlcidzIG93biBgZGF0YS5qc29uYCwgd3JpdHRlbiBieSB0aGVcbi8vIHBhY2thZ2luZyBzdGVwIChzZWUgYERlbW9WYXVsdEhlbHBlclNldHRpbmdzYCkuIEEgdmF1bHQgd2l0aG91dCBhIHJlYWRhYmxlIG1hcmtlciB3YXMgbm90IHByb2R1Y2VkIGJ5XG4vLyB0aGF0IHN0ZXAgXHUyMDE0IGhhbmQtYXNzZW1ibGVkLCBvciB1bnBhY2tlZCBmcm9tIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGRlbW8gdmF1bHQgXHUyMDE0IHNvIGl0IGlzIHJlZnVzZWRcbi8vIHJhdGhlciB0aGFuIGJvb3RzdHJhcHBlZCBhZ2FpbnN0IGEgZ3Vlc3MuXG5hc3luYyBmdW5jdGlvbiBnZXREZW1vZWRQbHVnaW5JZChhcHA6IEFwcCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNldHRpbmdzUGF0aCA9IGpvaW4oYXBwLnZhdWx0LmNvbmZpZ0RpciwgUExVR0lOU19GT0xERVJfTkFNRSwgREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lELCBEQVRBX0pTT05fRklMRV9OQU1FKTtcbiAgaWYgKCFhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoc2V0dGluZ3NQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihJTlZBTElEX0RFTU9fVkFVTFRfRVJST1JfTUVTU0FHRSk7XG4gIH1cblxuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChzZXR0aW5nc1BhdGgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9ERU1PX1ZBVUxUX0VSUk9SX01FU1NBR0UsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG5cbiAgY29uc3QgZGVtb2VkUGx1Z2luSWQgPSAocGFyc2VkIGFzIG51bGwgfCBQYXJ0aWFsPERlbW9WYXVsdEhlbHBlclNldHRpbmdzPik/LmRlbW9lZFBsdWdpbklkO1xuICBpZiAodHlwZW9mIGRlbW9lZFBsdWdpbklkICE9PSAnc3RyaW5nJyB8fCBkZW1vZWRQbHVnaW5JZCA9PT0gRU1QVFkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9ERU1PX1ZBVUxUX0VSUk9SX01FU1NBR0UpO1xuICB9XG4gIHJldHVybiBkZW1vZWRQbHVnaW5JZDtcbn1cblxuLy8gVGVsbHMgdGhlIHVzZXIgdGhpcyB2YXVsdCBpcyBhIHNhbmRib3gsIHVzaW5nIE9ic2lkaWFuJ3Mgb3duIHNhbmRib3gtdmF1bHQgdHJlYXRtZW50OiBhbiBpbmZpbml0ZVxuLy8gZHVyYXRpb24sIGRpc21pc3NlZCBieSBjbGlja2luZyBpdC4gUmFpc2VkIGxhc3QsIHNvIGl0IGlzIHRoZSBuZXdlc3Qgbm90aWNlIG9uIHNjcmVlbiBvbmNlXG4vLyBDb2RlU2NyaXB0IFRvb2xraXQncyBzdGFydHVwIHNjcmlwdCBoYXMgZG9uZSBpdHMgb3duIHdvcmsuXG4vL1xuLy8gQSBgTm90aWNlYCBpcyBidWlsdCBpbnNpZGUgd2hhdGV2ZXIgd2luZG93IGlzIGFjdGl2ZSBhdCB0aGF0IG1vbWVudCwgYW5kIFNldHRpbmdzIGlzIGEgUE9QT1VUIFdJTkRPV1xuLy8gKHZlcmlmaWVkIG9uIDEuMTMuNikgdGhhdCBiZWNvbWVzIHRoZSBhY3RpdmUgb25lIHdoaWxlIGl0IGlzIG9wZW4gXHUyMDE0IHNvIGEgbm90aWNlIHJhaXNlZCB0aGVuIHdvdWxkIGJlXG4vLyBjcmVhdGVkIGluIHRoZSBzZXR0aW5ncyB3aW5kb3cgYW5kIHZhbmlzaCB3aXRoIGl0LiBTZXR0aW5ncyBpcyB0aGVyZWZvcmUgY2xvc2VkIGZpcnN0OiBPYnNpZGlhbiBoYW5kc1xuLy8gdGhlIG1haW4gd2luZG93IGJhY2sgYXMgdGhlIHBvcG91dCBnb2VzIGF3YXkgKHN5bmNocm9ub3VzbHksIGJlZm9yZSB0aGUgbm90aWNlIGlzIGJ1aWx0KSwgYW5kIGEgdXNlclxuLy8gd2hvIGhhcyBqdXN0IG9wZW5lZCBhIGRlbW8gdmF1bHQgd2FudHMgdG8gc2VlIHRoZSB2YXVsdCByYXRoZXIgdGhhbiBhIHNldHRpbmdzIHdpbmRvdyBhbnl3YXkuIENsb3Npbmdcbi8vIGFuIGFscmVhZHktY2xvc2VkIFNldHRpbmdzIGlzIGEgbm8tb3AsIHNvIG5vIG9wZW4tc3RhdGUgcHJvYmUgaXMgbmVlZGVkLlxuZnVuY3Rpb24gc2hvd1NhbmRib3hOb3RpY2UoYXBwOiBBcHAsIGRlbW9lZFBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcGx1Z2luTmFtZSA9IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1tkZW1vZWRQbHVnaW5JZF0/Lm5hbWUgPz8gZGVtb2VkUGx1Z2luSWQ7XG4gIGNvbnN0IGZyYWdtZW50ID0gYnVpbGRTYW5kYm94Tm90aWNlRnJhZ21lbnQocGx1Z2luTmFtZSk7XG4gIGFwcC5zZXR0aW5nLmNsb3NlKCk7XG4gIG5ldyBOb3RpY2UoZnJhZ21lbnQsIFNBTkRCT1hfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9DQSxTQUFTLFlBQVk7QUFDckIsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsY0FBYztBQUl2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQStEaEMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxtQ0FBbUM7QUFDekMsTUFBTSwrQkFBMEQ7QUFBQSxFQUM5RCx5QkFBeUI7QUFBQSxFQUN6Qix3QkFBd0I7QUFBQSxFQUN4QixhQUFhO0FBQUEsRUFDYiwwQkFBMEI7QUFBQSxFQUMxQixtQkFBbUI7QUFDckI7QUFFQSxNQUFNLHlCQUF5QjtBQUsvQixNQUFNLHdCQUE2QztBQUFBLEVBQ2pELGdCQUFnQjtBQUFBLEVBQ2hCLGdCQUFnQjtBQUFBLEVBQ2hCLGlCQUFpQjtBQUNuQjtBQUVBLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sbUNBQW1DO0FBQ3pDLE1BQU0sK0JBQStCO0FBR3JDLE1BQU0sMENBQTBDO0FBa0JoRCxlQUFzQixtQkFBbUIsUUFBaUQ7QUFDeEYsUUFBTSxFQUFF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
143
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBgQ29kZVNjcmlwdCBUb29sa2l0YC5cbiAqXG4gKiBBIHBsdWdpbidzIGRlbW8gdmF1bHQgc2hvd2Nhc2VzIHRoZSBwbHVnaW4gdGhyb3VnaCBub3RlcyB3aG9zZSBgY29kZS1idXR0b25gcyBydW4gVHlwZVNjcmlwdCB2aWFcbiAqIGBDb2RlU2NyaXB0IFRvb2xraXRgLiBBIGRlbW8gdmF1bHQgdGhhdCBkb2VzIG5vdCBpdHNlbGYgc2hpcCBgQ29kZVNjcmlwdCBUb29sa2l0YCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIGBDb2RlU2NyaXB0IFRvb2xraXRgIGNvbmZpZyBhbmQgbm8gbWFudWFsIHNldHVwLCBzbyBpdCBjYW4gYmUgZHJpdmVuIGZyb20gYSB0aW55XG4gKiBjb21taXR0ZWQgYm9vdHN0cmFwIHBsdWdpbiAoYGRlbW8tdmF1bHQtaGVscGVyYCkgdGhhdCBpcyBpbmplY3RlZCBpbnRvIGV2ZXJ5IGRlbW8gdmF1bHQgYXQgcmVsZWFzZVxuICogdGltZS5cbiAqXG4gKiBUaGUgcGx1Z2luIHRoZSB2YXVsdCBkZW1vbnN0cmF0ZXMgaXMgcmVhZCBmcm9tIHRoZSBoZWxwZXIncyBvd24gYGRhdGEuanNvbmAsIHdyaXR0ZW4gYnkgdGhlIHBhY2thZ2luZ1xuICogc3RlcCAoe0BsaW5rIERlbW9WYXVsdEhlbHBlclNldHRpbmdzfSk7IGEgdmF1bHQgd2l0aG91dCB0aGF0IG1hcmtlciBpcyByZWZ1c2VkIGFzIG5vdCBhIGRlbW8gdmF1bHQuXG4gKlxuICogSXQgd3JpdGVzIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3Mgc2V0dGluZ3MgQkVGT1JFIGVuYWJsaW5nIGl0LCBzbyB0aGUgcGx1Z2luIGxvYWRzIGFscmVhZHkgY29uZmlndXJlZCBcdTIwMTRcbiAqIG5vIHJlbG9hZC4gYENvZGVTY3JpcHQgVG9vbGtpdGAgdGhlbiBydW5zIHRoZSB2YXVsdCdzIGBzdGFydHVwLnRzYCAodmlhIGl0cyBgc3RhcnR1cFNjcmlwdFBhdGhgXG4gKiBzZXR0aW5nKSwgd2hpY2ggaXMgd2hlcmUgZWFjaCB2YXVsdCBvcGVucyBpdHMgc3RhcnQgbm90ZSBhbmQgZG9lcyBhbnkgcGx1Z2luLXNwZWNpZmljIHNldHVwLlxuICpcbiAqIEl0IGFsc28gY3JlYXRlcyBgQ29kZVNjcmlwdCBUb29sa2l0YCdzIGludm9jYWJsZS1zY3JpcHRzIGZvbGRlciBpZiBpdCBpcyBtaXNzaW5nLCBzbyBldmVyeSBkZW1vIHZhdWx0XG4gKiBoYXMgdGhlIHNhbWUgbGF5b3V0IGV2ZW4gd2hlbiB0aGUgdmF1bHQgc2hpcHMgbm8gaW52b2NhYmxlIHNjcmlwdHMgXHUyMDE0IHRoZSB2YXVsdHMgdGhlbXNlbHZlcyBjb21taXQgbm9cbiAqIGVtcHR5IGZvbGRlciBmb3IgaXQuXG4gKlxuICogSXQgdGhlbiBpbnN0YWxscyB0aGUgYEZvbGRlciBOb3Rlc2AgcGx1Z2luLCBjb25maWd1cmVkIHRvIHRyZWF0IGBSRUFETUUubWRgIGFzIGEgZm9sZGVyJ3Mgb3duIG5vdGUuIEFcbiAqIGRlbW8gdmF1bHQgdGhhdCBoYXMgb3V0Z3Jvd24gYSBmbGF0IG5vdGUgbGlzdCBncm91cHMgaXRzIG5vdGVzIGludG8gZm9sZGVycywgYW5kIGEgZ3JvdXAgZm9sZGVyIG9ubHlcbiAqIHNheXMgd2hhdCBpdCBpcyBmb3IgaWYgaXQgaGFzIGEgbm90ZSBvZiBpdHMgb3duIFx1MjAxNCBgUkVBRE1FLm1kYCwgYmVjYXVzZSB0aGF0IGlzIGFsc28gdGhlIGZpbGUgR2l0SHViXG4gKiByZW5kZXJzIHVuZGVyIHRoZSBmaWxlIGxpc3Qgd2hlbiB0aGUgc2FtZSB2YXVsdCBpcyBicm93c2VkIGFzIGEgcmVwb3NpdG9yeSwgc28gb25lIGZpbGUgc2VydmVzIGJvdGhcbiAqIHJlYWRlcnMuXG4gKlxuICogRmluYWxseSBpdCByYWlzZXMgdGhlIHNhbmRib3ggbm90aWNlIGV4cGxhaW5pbmcgdGhhdCB0aGUgb3BlbmVkIHZhdWx0IGlzIGEgdGhyb3dhd2F5IGNvcHksIHNvIGEgdXNlclxuICogd2hvIHdyaXRlcyB0aGVpciBvd24gbm90ZXMgaW4gaXQgaXMgbmV2ZXIgc3VycHJpc2VkIGJ5IHRoZW0gYmVpbmcgYWJzZW50IGZyb20gdGhlIG5leHQgY29weS4gU2V0dGluZ3NcbiAqIGlzIGNsb3NlZCBmaXJzdCwgc28gdGhlIG5vdGljZSBsYW5kcyBpbiB0aGUgdmF1bHQncyBtYWluIHdpbmRvdyByYXRoZXIgdGhhbiBpbiB0aGUgc2V0dGluZ3MgcG9wb3V0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncyB9IGZyb20gJy4vZGVtby12YXVsdC1oZWxwZXItc2V0dGluZ3MudHMnO1xuXG5pbXBvcnQge1xuICBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4sXG4gIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdCxcbiAgZGlzYWJsZUNvbW11bml0eVBsdWdpbixcbiAgZW5hYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luLFxuICBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgYXBwZW5kQ29kZUJsb2NrIH0gZnJvbSAnLi9odG1sLWVsZW1lbnQudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogYENvZGVTY3JpcHQgVG9vbGtpdGAncyBzZXR0aW5ncywgd3JpdHRlbiBpbnRvIGl0cyBgZGF0YS5qc29uYCBiZWZvcmUgaXQgaXMgZW5hYmxlZC5cbiAqL1xuaW50ZXJmYWNlIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIFlBTUwgZnJvbnRtYXR0ZXIgbWVyZ2VkIGludG8gZXZlcnkgYGNvZGUtYnV0dG9uYCBibG9jaydzIG93biBjb25maWcsIHVzZWQgaGVyZSB0byB0dXJuIHRoZVxuICAgKiBzb3VyY2Ugdmlld2VyIG9uIGZvciBldmVyeSBidXR0b24gaW4gZXZlcnkgZGVtbyB2YXVsdCB3aXRob3V0IGVkaXRpbmcgYSBzaW5nbGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb2RlQnV0dG9uQ29uZmlnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgaG9sZGluZyBpbnZvY2FibGUgc2NyaXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IGludm9jYWJsZVNjcmlwdHNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGF0IGByZXF1aXJlKCcvXHUyMDI2JylgIHJlc29sdmVzIG1vZHVsZSBwYXRocyBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlc1Jvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBgQ29kZVNjcmlwdCBUb29sa2l0YCBoYW5kbGVzIGBvYnNpZGlhbjovL2AgcHJvdG9jb2wgVVJMcy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhhbmRsZVByb3RvY29sVXJsczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgb2YgdGhlIHNjcmlwdCBydW4gb24gbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0dXBTY3JpcHRQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogYEZvbGRlciBOb3Rlc2AnIHNldHRpbmdzLCB3cml0dGVuIGludG8gaXRzIGBkYXRhLmpzb25gIGJlZm9yZSBpdCBpcyBlbmFibGVkLlxuICovXG5pbnRlcmZhY2UgRm9sZGVyTm90ZXNTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBhIGZvbGRlcidzIG93biBub3RlIGlzIGxvb2tlZCBmb3IgdW5kZXIsIHdpdGhvdXQgdGhlIGV4dGVuc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlck5vdGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBmb2xkZXIncyBvd24gbm90ZSBpcyBoaWRkZW4gZnJvbSB0aGUgZmlsZSBleHBsb3Jlciwgc28gdGhlIGZvbGRlciBpdHNlbGYgc3RhbmRzIGZvciBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGhpZGVGb2xkZXJOb3RlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSBhIGZvbGRlcidzIG93biBub3RlIGlzIGtlcHQsIHJlbGF0aXZlIHRvIHRoZSBmb2xkZXIgaXQgZGVzY3JpYmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lEID0gJ2ZpeC1yZXF1aXJlLW1vZHVsZXMnO1xuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QgPSAnX2Fzc2V0cy9Db2RlU2NyaXB0VG9vbGtpdCc7XG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTOiBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzID0ge1xuICBkZWZhdWx0Q29kZUJ1dHRvbkNvbmZpZzogJy0tLVxcbnNvdXJjZVZpc2liaWxpdHk6IGNvbGxhcHNlZFxcbi0tLScsXG4gIGludm9jYWJsZVNjcmlwdHNGb2xkZXI6ICdJbnZvY2FibGVzJyxcbiAgbW9kdWxlc1Jvb3Q6IENPREVfU0NSSVBUX1RPT0xLSVRfTU9EVUxFU19ST09ULFxuICBzaG91bGRIYW5kbGVQcm90b2NvbFVybHM6IHRydWUsXG4gIHN0YXJ0dXBTY3JpcHRQYXRoOiAnc3RhcnR1cC50cydcbn07XG5cbmNvbnN0IEZPTERFUl9OT1RFU19QTFVHSU5fSUQgPSAnZm9sZGVyLW5vdGVzJztcbi8vIGBSRUFETUVgIHJhdGhlciB0aGFuIGBGb2xkZXIgTm90ZXNgJyBvd24gYHt7Zm9sZGVyX25hbWV9fWAgZGVmYXVsdDogdGhlIHNhbWUgZmlsZSBoYXMgdG8gYmUgdGhlIGZvbGRlcidzXG4vLyBub3RlIGluIE9ic2lkaWFuIEFORCB0aGUgcGFnZSBHaXRIdWIgcmVuZGVycyB3aGVuIHRoZSB2YXVsdCBpcyBicm93c2VkIGFzIGEgcmVwb3NpdG9yeSwgYW5kIEdpdEh1YlxuLy8gb25seSBkb2VzIHRoYXQgZm9yIGBSRUFETUUubWRgLiBgaW5zaWRlRm9sZGVyYCBrZWVwcyBpdCB3aXRoIHRoZSBub3RlcyBpdCBkZXNjcmliZXMgcmF0aGVyIHRoYW4gYmVzaWRlXG4vLyB0aGUgZm9sZGVyLCBhbmQgaGlkaW5nIGl0IGxldHMgdGhlIGZvbGRlciBpdHNlbGYgc3RhbmQgZm9yIHRoZSBub3RlIGluc3RlYWQgb2YgbGlzdGluZyBib3RoLlxuY29uc3QgRk9MREVSX05PVEVTX1NFVFRJTkdTOiBGb2xkZXJOb3Rlc1NldHRpbmdzID0ge1xuICBmb2xkZXJOb3RlTmFtZTogJ1JFQURNRScsXG4gIGhpZGVGb2xkZXJOb3RlOiB0cnVlLFxuICBzdG9yYWdlTG9jYXRpb246ICdpbnNpZGVGb2xkZXInXG59O1xuXG5jb25zdCBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSUQgPSAnZGVtby12YXVsdC1oZWxwZXInO1xuY29uc3QgUExVR0lOU19GT0xERVJfTkFNRSA9ICdwbHVnaW5zJztcbmNvbnN0IERBVEFfSlNPTl9GSUxFX05BTUUgPSAnZGF0YS5qc29uJztcbmNvbnN0IElOVkFMSURfREVNT19WQVVMVF9FUlJPUl9NRVNTQUdFID0gJ0ludmFsaWQgZGVtbyB2YXVsdCc7XG5jb25zdCBPUEVOX0RFTU9fVkFVTFRfQ09NTUFORF9OQU1FID0gJ09wZW4gZGVtbyB2YXVsdCc7XG4vLyBgMGAgYXNrcyBPYnNpZGlhbiB0byBrZWVwIHRoZSBub3RpY2UgdXAgdW50aWwgdGhlIHVzZXIgY2xpY2tzIGl0IFx1MjAxNCB0aGUgc2FtZSB0cmVhdG1lbnQgT2JzaWRpYW4gZ2l2ZXNcbi8vIGl0cyBvd24gc2FuZGJveC12YXVsdCBub3RpY2UsIGFuZCB3aGF0IHRoZSBkZW1vLXZhdWx0IG5vdGljZSBpcyBtb2RlbGxlZCBvbi5cbmNvbnN0IFNBTkRCT1hfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5cbi8qKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgc28gaXRzIG5vdGVzJyBgY29kZS1idXR0b25gcyB3b3JrIHdpdGggbm8gbWFudWFsIHNldHVwOiBpbnN0YWxscyBDb2RlU2NyaXB0XG4gKiBUb29sa2l0IGZyb20gdGhlIGNvbW11bml0eSBzdG9yZSAoaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkKSwgd3JpdGVzIGl0cyBzZXR0aW5ncywgdGhlbiBlbmFibGVzXG4gKiBpdCBcdTIwMTQgd3JpdGluZyB0aGUgc2V0dGluZ3MgQkVGT1JFIGVuYWJsaW5nIHNvIGEgZnJlc2ggZW5hYmxlIGxvYWRzIGl0IGFscmVhZHkgY29uZmlndXJlZCwgd2l0aCBub1xuICogcmVsb2FkLiBJZiBgQ29kZVNjcmlwdCBUb29sa2l0YCBpcyBhbHJlYWR5IGVuYWJsZWQgYnV0IHRoZSBzZXR0aW5ncyBqdXN0IGNoYW5nZWQsIGl0IGlzIHJlbG9hZGVkXG4gKiAoZGlzYWJsZWQgdGhlbiBlbmFibGVkKSBzbyBpdCByZS1yZWFkcyBgZGF0YS5qc29uYDsgd2hlbiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IGluIHBsYWNlLCBub3RoaW5nIGlzXG4gKiByZWxvYWRlZCAoc28gYSByb3V0aW5lIHZhdWx0IHJlLW9wZW4gZG9lcyBub3QgcmUtcnVuIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3Mgc3RhcnR1cCkuIGBDb2RlU2NyaXB0IFRvb2xraXRgXG4gKiB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgLiBgRm9sZGVyIE5vdGVzYCBpcyBpbnN0YWxsZWQgbmV4dCwgY29uZmlndXJlZCB0byB0cmVhdCBgUkVBRE1FLm1kYCBhc1xuICogYSBmb2xkZXIncyBvd24gbm90ZSwgc28gYSB2YXVsdCB3aG9zZSBub3RlcyBhcmUgZ3JvdXBlZCBpbnRvIGZvbGRlcnMgZGVzY3JpYmVzIGVhY2ggZ3JvdXAgaW4gdGhlIGZpbGVcbiAqIGV4cGxvcmVyLiBGaW5hbGx5IGl0IGNsb3NlcyBTZXR0aW5ncyAoc28gdGhlIG5vdGljZSBjYW5ub3QgYmUgcmFpc2VkIGluc2lkZSB0aGUgc2V0dGluZ3MgcG9wb3V0KSBhbmRcbiAqIHJhaXNlcyB0aGUgc2FuZGJveCBub3RpY2UgZGVzY3JpYmluZyB0aGUgb3BlbmVkIHZhdWx0IGFzIGEgdGhyb3dhd2F5IGNvcHkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBgQ29kZVNjcmlwdCBUb29sa2l0YCBpcyBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQsIGFuZCBlbmFibGVkXG4gKiBhbmQgdGhlIHNhbmRib3ggbm90aWNlIGhhcyBiZWVuIHNob3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwRGVtb1ZhdWx0KHBhcmFtczogQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIC8vIFJlc29sdmVkIGZpcnN0LCBzbyBhIHZhdWx0IHRoYXQgaXMgbm90IGEgZGVtbyB2YXVsdCBpcyByZWZ1c2VkIGJlZm9yZSBhbnl0aGluZyBpcyBpbnN0YWxsZWQgaW50byBpdC5cbiAgY29uc3QgZGVtb2VkUGx1Z2luSWQgPSBhd2FpdCBnZXREZW1vZWRQbHVnaW5JZChhcHApO1xuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbih7XG4gICAgYXBwLFxuICAgIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCxcbiAgICBzZXR0aW5nczogQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HU1xuICB9KTtcbiAgYXdhaXQgZW5zdXJlSW52b2NhYmxlU2NyaXB0c0ZvbGRlcihhcHApO1xuXG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lEKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbih7IGFwcCwgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lEIH0pO1xuICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3MpIHtcbiAgICAvLyBBbHJlYWR5IGVuYWJsZWQgd2l0aCBzdGFsZSBzZXR0aW5ncyBcdTIwMTQgcmVsb2FkIHNvIGBDb2RlU2NyaXB0IFRvb2xraXRgIHJlLXJlYWRzIHRoZSBmcmVzaGx5IHdyaXR0ZW4gZGF0YS5qc29uLlxuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgfVxuXG4gIC8vIEFmdGVyIGBDb2RlU2NyaXB0IFRvb2xraXRgLCBzbyB0aGUgdmF1bHQncyBzdGFydHVwIHNjcmlwdCBoYXMgYWxyZWFkeSBvcGVuZWQgdGhlIHN0YXJ0IG5vdGUgYnkgdGhlIHRpbWVcbiAgLy8gdGhlIGZpbGUgZXhwbG9yZXIgZ2FpbnMgaXRzIGZvbGRlci1ub3RlIGJlaGF2aW9yLlxuICBhd2FpdCBpbnN0YWxsQ29uZmlndXJlRW5hYmxlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQ6IEZPTERFUl9OT1RFU19QTFVHSU5fSUQsXG4gICAgc2V0dGluZ3M6IEZPTERFUl9OT1RFU19TRVRUSU5HU1xuICB9KTtcblxuICBzaG93U2FuZGJveE5vdGljZShhcHAsIGRlbW9lZFBsdWdpbklkKTtcbn1cblxuLy8gQnVpbGRzIHRoZSBzYW5kYm94IG5vdGljZSBjb250ZW50OiB3aGF0IHRoaXMgdmF1bHQgaXMsIHdoZXJlIGl0IGxpdmVzLCBob3cgbG9uZyBpdCBsaXZlcywgYW5kIHdoeVxuLy8gcmUtcnVubmluZyB0aGUgY29tbWFuZCBwcm9kdWNlcyBhIHZhdWx0IHdpdGhvdXQgdGhlIG5vdGVzIGp1c3Qgd3JpdHRlbiBoZXJlLlxuLy9cbi8vIEV2ZXJ5IGNsYWltIGhhcyB0byBzdGF5IHRydWUgb2YgdGhlIG9wZW5lciAoYGRlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHNgKTogaXQgZXh0cmFjdHMgYSBGUkVTSCBjb3B5XG4vLyBpbnRvIGl0cyBvd24gZm9sZGVyIG9uIGV2ZXJ5IG9wZW4sIGFuZCBkZWxldGVzIGV4dHJhY3RlZCBmb2xkZXJzIG9sZGVyIHRoYW4gYSBkYXkgb24gZWFjaCBsYXRlciBvcGVuLlxuLy8gU28gdGhlIHZhdWx0IGlzIGEgdGVtcG9yYXJ5IHNhbmRib3ggXHUyMDE0IGl0IG11c3QgbmV2ZXIgYmUgZGVzY3JpYmVkIGFzIGEgcGxhY2Ugd29yayBjYW4gYmUgbGVmdC5cbmZ1bmN0aW9uIGJ1aWxkU2FuZGJveE5vdGljZUZyYWdtZW50KHBsdWdpbk5hbWU6IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICByZXR1cm4gY3JlYXRlRnJhZ21lbnQoKGZyYWdtZW50KSA9PiB7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnVGhpcyBpcyBhIGRlbW8gdmF1bHQgZm9yICcpO1xuICAgIGFwcGVuZENvZGVCbG9jayhmcmFnbWVudCwgcGx1Z2luTmFtZSk7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnLicpO1xuXG4gICAgZnJhZ21lbnQuY3JlYXRlRWwoJ2JyJyk7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnSXQgaXMgYSB0ZW1wb3Jhcnkgc2FuZGJveCwgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IGFib3V0IGEgZGF5IGFmdGVyIHlvdSBsYXN0IHVzZSBpdC4nKTtcblxuICAgIGZyYWdtZW50LmNyZWF0ZUVsKCdicicpO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ0V4ZWN1dGluZyAnKTtcbiAgICBmcmFnbWVudC5jcmVhdGVFbCgnYicsIHsgdGV4dDogYCR7cGx1Z2luTmFtZX06ICR7T1BFTl9ERU1PX1ZBVUxUX0NPTU1BTkRfTkFNRX1gIH0pO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJyBjb21tYW5kIGFnYWluIGNyZWF0ZXMgYSBuZXcgY29weSB3aXRoIHRoZSBsYXRlc3QgcGx1Z2luIHZlcnNpb24sIHNvIHlvdXIgbm90ZXMgd2lsbCBub3QgYXBwZWFyIGluIGl0LicpO1xuICB9KTtcbn1cblxuLy8gQ3JlYXRlcyBgQ29kZVNjcmlwdCBUb29sa2l0YCdzIGludm9jYWJsZS1zY3JpcHRzIGZvbGRlciAodW5kZXIgYG1vZHVsZXNSb290YCkgaWYgaXQgaXMgbWlzc2luZy5cbi8vIEV2ZXJ5IGRlbW8gdmF1bHQgdGhlbiBoYXMgdGhlIHNhbWUgYENvZGVTY3JpcHQgVG9vbGtpdGAgbGF5b3V0IGV2ZW4gd2hlbiBpdCBzaGlwcyBubyBpbnZvY2FibGUgc2NyaXB0cy5cbi8vIFRoZSBjb21taXR0ZWQgdmF1bHQgdGhlcmVmb3JlIGNhcnJpZXMgbm8gb3RoZXJ3aXNlLWVtcHR5IHBsYWNlaG9sZGVyIGZvbGRlci5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUludm9jYWJsZVNjcmlwdHNGb2xkZXIoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaW52b2NhYmxlU2NyaXB0c0ZvbGRlclBhdGggPSBqb2luKENPREVfU0NSSVBUX1RPT0xLSVRfTU9EVUxFU19ST09ULCBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTLmludm9jYWJsZVNjcmlwdHNGb2xkZXIpO1xuICBpZiAoIWF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCkpIHtcbiAgICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5ta2RpcihpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCk7XG4gIH1cbn1cblxuLy8gUmVhZHMgdGhlIHBsdWdpbiB0aGUgdmF1bHQgZGVtb25zdHJhdGVzIG91dCBvZiB0aGlzIGhlbHBlcidzIG93biBgZGF0YS5qc29uYCwgd3JpdHRlbiBieSB0aGVcbi8vIHBhY2thZ2luZyBzdGVwIChzZWUgYERlbW9WYXVsdEhlbHBlclNldHRpbmdzYCkuIEEgdmF1bHQgd2l0aG91dCBhIHJlYWRhYmxlIG1hcmtlciB3YXMgbm90IHByb2R1Y2VkIGJ5XG4vLyB0aGF0IHN0ZXAgXHUyMDE0IGhhbmQtYXNzZW1ibGVkLCBvciB1bnBhY2tlZCBmcm9tIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGRlbW8gdmF1bHQgXHUyMDE0IHNvIGl0IGlzIHJlZnVzZWRcbi8vIHJhdGhlciB0aGFuIGJvb3RzdHJhcHBlZCBhZ2FpbnN0IGEgZ3Vlc3MuXG5hc3luYyBmdW5jdGlvbiBnZXREZW1vZWRQbHVnaW5JZChhcHA6IEFwcCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNldHRpbmdzUGF0aCA9IGpvaW4oYXBwLnZhdWx0LmNvbmZpZ0RpciwgUExVR0lOU19GT0xERVJfTkFNRSwgREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lELCBEQVRBX0pTT05fRklMRV9OQU1FKTtcbiAgaWYgKCFhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoc2V0dGluZ3NQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihJTlZBTElEX0RFTU9fVkFVTFRfRVJST1JfTUVTU0FHRSk7XG4gIH1cblxuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChzZXR0aW5nc1BhdGgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9ERU1PX1ZBVUxUX0VSUk9SX01FU1NBR0UsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG5cbiAgY29uc3QgZGVtb2VkUGx1Z2luSWQgPSAocGFyc2VkIGFzIG51bGwgfCBQYXJ0aWFsPERlbW9WYXVsdEhlbHBlclNldHRpbmdzPik/LmRlbW9lZFBsdWdpbklkO1xuICBpZiAodHlwZW9mIGRlbW9lZFBsdWdpbklkICE9PSAnc3RyaW5nJyB8fCBkZW1vZWRQbHVnaW5JZCA9PT0gRU1QVFkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9ERU1PX1ZBVUxUX0VSUk9SX01FU1NBR0UpO1xuICB9XG4gIHJldHVybiBkZW1vZWRQbHVnaW5JZDtcbn1cblxuLy8gVGVsbHMgdGhlIHVzZXIgdGhpcyB2YXVsdCBpcyBhIHNhbmRib3gsIHVzaW5nIE9ic2lkaWFuJ3Mgb3duIHNhbmRib3gtdmF1bHQgdHJlYXRtZW50OiBhbiBpbmZpbml0ZVxuLy8gZHVyYXRpb24sIGRpc21pc3NlZCBieSBjbGlja2luZyBpdC4gUmFpc2VkIGxhc3QsIHNvIGl0IGlzIHRoZSBuZXdlc3Qgbm90aWNlIG9uIHNjcmVlbiBvbmNlXG4vLyBgQ29kZVNjcmlwdCBUb29sa2l0YCdzIHN0YXJ0dXAgc2NyaXB0IGhhcyBkb25lIGl0cyBvd24gd29yay5cbi8vXG4vLyBBIGBOb3RpY2VgIGlzIGJ1aWx0IGluc2lkZSB3aGF0ZXZlciB3aW5kb3cgaXMgYWN0aXZlIGF0IHRoYXQgbW9tZW50LCBhbmQgU2V0dGluZ3MgaXMgYSBQT1BPVVQgV0lORE9XXG4vLyAodmVyaWZpZWQgb24gMS4xMy42KSB0aGF0IGJlY29tZXMgdGhlIGFjdGl2ZSBvbmUgd2hpbGUgaXQgaXMgb3BlbiBcdTIwMTQgc28gYSBub3RpY2UgcmFpc2VkIHRoZW4gd291bGQgYmVcbi8vIGNyZWF0ZWQgaW4gdGhlIHNldHRpbmdzIHdpbmRvdyBhbmQgdmFuaXNoIHdpdGggaXQuIFNldHRpbmdzIGlzIHRoZXJlZm9yZSBjbG9zZWQgZmlyc3Q6IE9ic2lkaWFuIGhhbmRzXG4vLyB0aGUgbWFpbiB3aW5kb3cgYmFjayBhcyB0aGUgcG9wb3V0IGdvZXMgYXdheSAoc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBub3RpY2UgaXMgYnVpbHQpLCBhbmQgYSB1c2VyXG4vLyB3aG8gaGFzIGp1c3Qgb3BlbmVkIGEgZGVtbyB2YXVsdCB3YW50cyB0byBzZWUgdGhlIHZhdWx0IHJhdGhlciB0aGFuIGEgc2V0dGluZ3Mgd2luZG93IGFueXdheS4gQ2xvc2luZ1xuLy8gYW4gYWxyZWFkeS1jbG9zZWQgU2V0dGluZ3MgaXMgYSBuby1vcCwgc28gbm8gb3Blbi1zdGF0ZSBwcm9iZSBpcyBuZWVkZWQuXG5mdW5jdGlvbiBzaG93U2FuZGJveE5vdGljZShhcHA6IEFwcCwgZGVtb2VkUGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwbHVnaW5OYW1lID0gYXBwLnBsdWdpbnMubWFuaWZlc3RzW2RlbW9lZFBsdWdpbklkXT8ubmFtZSA/PyBkZW1vZWRQbHVnaW5JZDtcbiAgY29uc3QgZnJhZ21lbnQgPSBidWlsZFNhbmRib3hOb3RpY2VGcmFnbWVudChwbHVnaW5OYW1lKTtcbiAgYXBwLnNldHRpbmcuY2xvc2UoKTtcbiAgbmV3IE5vdGljZShmcmFnbWVudCwgU0FOREJPWF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0NBLFNBQVMsWUFBWTtBQUNyQixTQUFTLGFBQWE7QUFDdEIsU0FBUyxjQUFjO0FBSXZCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsdUJBQXVCO0FBK0RoQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLG1DQUFtQztBQUN6QyxNQUFNLCtCQUEwRDtBQUFBLEVBQzlELHlCQUF5QjtBQUFBLEVBQ3pCLHdCQUF3QjtBQUFBLEVBQ3hCLGFBQWE7QUFBQSxFQUNiLDBCQUEwQjtBQUFBLEVBQzFCLG1CQUFtQjtBQUNyQjtBQUVBLE1BQU0seUJBQXlCO0FBSy9CLE1BQU0sd0JBQTZDO0FBQUEsRUFDakQsZ0JBQWdCO0FBQUEsRUFDaEIsZ0JBQWdCO0FBQUEsRUFDaEIsaUJBQWlCO0FBQ25CO0FBRUEsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxtQ0FBbUM7QUFDekMsTUFBTSwrQkFBK0I7QUFHckMsTUFBTSwwQ0FBMEM7QUFrQmhELGVBQXNCLG1CQUFtQixRQUFpRDtBQUN4RixRQUFNLEVBQUUsSUFBSSxJQUFJO0FBRWhCLFFBQU0saUJBQWlCLE1BQU0sa0JBQWtCLEdBQUc7QUFDbEQsUUFBTSx1QkFBdUIsRUFBRSxLQUFLLFVBQVUsOEJBQThCLENBQUM7QUFDN0UsUUFBTSxTQUFTLE1BQU0seUJBQXlCO0FBQUEsSUFDNUM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFDRCxRQUFNLDZCQUE2QixHQUFHO0FBRXRDLE1BQUksQ0FBQyxJQUFJLFFBQVEsZUFBZSxJQUFJLDZCQUE2QixHQUFHO0FBQ2xFLFVBQU0sc0JBQXNCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQUEsRUFDOUUsV0FBVyxXQUFXLCtCQUErQixTQUFTO0FBRTVELFVBQU0sdUJBQXVCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQzdFLFVBQU0sc0JBQXNCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQUEsRUFDOUU7QUFJQSxRQUFNLHNDQUFzQztBQUFBLElBQzFDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWixDQUFDO0FBRUQsb0JBQWtCLEtBQUssY0FBYztBQUN2QztBQVFBLFNBQVMsMkJBQTJCLFlBQXNDO0FBQ3hFLFNBQU8sZUFBZSxDQUFDLGFBQWE7QUFDbEMsYUFBUyxXQUFXLDJCQUEyQjtBQUMvQyxvQkFBZ0IsVUFBVSxVQUFVO0FBQ3BDLGFBQVMsV0FBVyxHQUFHO0FBRXZCLGFBQVMsU0FBUyxJQUFJO0FBQ3RCLGFBQVMsV0FBVyx3RkFBd0Y7QUFFNUcsYUFBUyxTQUFTLElBQUk7QUFDdEIsYUFBUyxXQUFXLFlBQVk7QUFDaEMsYUFBUyxTQUFTLEtBQUssRUFBRSxNQUFNLEdBQUcsVUFBVSxLQUFLLDRCQUE0QixHQUFHLENBQUM7QUFDakYsYUFBUyxXQUFXLHdHQUF3RztBQUFBLEVBQzlILENBQUM7QUFDSDtBQUtBLGVBQWUsNkJBQTZCLEtBQXlCO0FBQ25FLFFBQU0sNkJBQTZCLEtBQUssa0NBQWtDLDZCQUE2QixzQkFBc0I7QUFDN0gsTUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTywwQkFBMEIsR0FBRztBQUMvRCxVQUFNLElBQUksTUFBTSxRQUFRLE1BQU0sMEJBQTBCO0FBQUEsRUFDMUQ7QUFDRjtBQU1BLGVBQWUsa0JBQWtCLEtBQTJCO0FBQzFELFFBQU0sZUFBZSxLQUFLLElBQUksTUFBTSxXQUFXLHFCQUFxQiw2QkFBNkIsbUJBQW1CO0FBQ3BILE1BQUksQ0FBQyxNQUFNLElBQUksTUFBTSxRQUFRLE9BQU8sWUFBWSxHQUFHO0FBQ2pELFVBQU0sSUFBSSxNQUFNLGdDQUFnQztBQUFBLEVBQ2xEO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDRixhQUFTLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxRQUFRLEtBQUssWUFBWSxDQUFDO0FBQUEsRUFDaEUsU0FBUyxPQUFPO0FBQ2QsVUFBTSxJQUFJLE1BQU0sa0NBQWtDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxFQUNwRTtBQUVBLFFBQU0saUJBQWtCLFFBQW9EO0FBQzVFLE1BQUksT0FBTyxtQkFBbUIsWUFBWSxtQkFBbUIsT0FBTztBQUNsRSxVQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFBQSxFQUNsRDtBQUNBLFNBQU87QUFDVDtBQVlBLFNBQVMsa0JBQWtCLEtBQVUsZ0JBQThCO0FBQ2pFLFFBQU0sYUFBYSxJQUFJLFFBQVEsVUFBVSxjQUFjLEdBQUcsUUFBUTtBQUNsRSxRQUFNLFdBQVcsMkJBQTJCLFVBQVU7QUFDdEQsTUFBSSxRQUFRLE1BQU07QUFDbEIsTUFBSSxPQUFPLFVBQVUsdUNBQXVDO0FBQzlEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -538,11 +538,11 @@ export declare function isPathOrFile(value: unknown): value is PathOrFile;
538
538
  /**
539
539
  * Checks if the given file should be treated as an attachment because of its extension.
540
540
  *
541
- * Some plugins store their data in files that are markdown on disk but are not prose — Excalidraw, for example, saves each drawing as `sketch.excalidraw.md`.
541
+ * Some plugins store their data in files that are markdown on disk but are not prose — `Excalidraw`, for example, saves each drawing as `sketch.excalidraw.md`.
542
542
  * Obsidian reports such a file's extension as `md`, so a caller that wants to tell a drawing apart from a note has to match the full multi-part extension
543
543
  * (`.excalidraw.md`) against the file name. Which extensions count is the caller's configuration, not this library's — only the matching rule is shared.
544
544
  *
545
- * A drawing can also be recognized by its frontmatter, the way Excalidraw itself recognizes one (`excalidraw-plugin: parsed`), through a
545
+ * A drawing can also be recognized by its frontmatter, the way `Excalidraw` itself recognizes one (`excalidraw-plugin: parsed`), through a
546
546
  * `property:name[=value]` entry. That answer comes from the metadata cache, which can be cold at startup or right after the file is created, so an
547
547
  * uncached file answers "no match" and is treated as a note. That is the conservative side for every current caller: a note is not moved as an
548
548
  * attachment, and it spares its folder from a delete sweep.