@sbb-esta/lyne-elements 1.9.0 → 1.10.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 (291) hide show
  1. package/accordion/accordion.d.ts +5 -5
  2. package/accordion/accordion.d.ts.map +1 -1
  3. package/accordion.js +17 -17
  4. package/action-group/action-group.d.ts +1 -1
  5. package/action-group/action-group.d.ts.map +1 -1
  6. package/action-group.js +3 -3
  7. package/alert/alert/alert.d.ts +1 -1
  8. package/alert/alert/alert.d.ts.map +1 -1
  9. package/alert/alert.js +3 -3
  10. package/autocomplete/autocomplete-base-element.d.ts +1 -1
  11. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  12. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -1
  13. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  14. package/autocomplete-grid/autocomplete-grid-option.js +1 -1
  15. package/autocomplete-grid/autocomplete-grid.js +18 -18
  16. package/autocomplete.js +9 -9
  17. package/button/button.js +9 -9
  18. package/button/common.js +5 -5
  19. package/button/mini-button/mini-button.d.ts.map +1 -1
  20. package/button/mini-button.js +17 -15
  21. package/button/secondary-button.js +6 -6
  22. package/button/tertiary-button.js +13 -13
  23. package/button/transparent-button.js +8 -8
  24. package/calendar/calendar.d.ts +2 -2
  25. package/calendar/calendar.d.ts.map +1 -1
  26. package/calendar.js +5 -4
  27. package/clock/clock.d.ts +2 -2
  28. package/clock/clock.d.ts.map +1 -1
  29. package/core/a11y/focus-visible-within-controller.d.ts +1 -1
  30. package/core/a11y/focus-visible-within-controller.d.ts.map +1 -1
  31. package/core/a11y/input-modality-detector.d.ts +2 -2
  32. package/core/a11y/input-modality-detector.d.ts.map +1 -1
  33. package/core/a11y.js +3 -3
  34. package/core/base-elements/action-base-element.d.ts +1 -0
  35. package/core/base-elements/action-base-element.d.ts.map +1 -1
  36. package/core/base-elements/button-base-element.d.ts +1 -1
  37. package/core/base-elements/button-base-element.d.ts.map +1 -1
  38. package/core/base-elements/link-base-element.d.ts.map +1 -1
  39. package/core/base-elements.js +47 -45
  40. package/core/controllers/slot-state-controller.d.ts +1 -1
  41. package/core/controllers/slot-state-controller.d.ts.map +1 -1
  42. package/core/mixins/disabled-mixin.d.ts +8 -0
  43. package/core/mixins/disabled-mixin.d.ts.map +1 -1
  44. package/core/mixins.js +97 -89
  45. package/core/styles/mixins/panel.scss +0 -2
  46. package/core/styles/mixins/table.scss +11 -0
  47. package/core/styles/mixins/typo.scss +0 -30
  48. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +1 -0
  49. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +2 -1
  50. package/core/styles/table.scss +6 -1
  51. package/core.css +2 -14
  52. package/custom-elements.json +370 -298
  53. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  54. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +2 -0
  55. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  56. package/datepicker/datepicker-toggle.js +56 -46
  57. package/datepicker/datepicker.js +1 -0
  58. package/development/accordion/accordion.d.ts +5 -5
  59. package/development/accordion/accordion.d.ts.map +1 -1
  60. package/development/accordion.js +25 -38
  61. package/development/action-group/action-group.d.ts +1 -1
  62. package/development/action-group/action-group.d.ts.map +1 -1
  63. package/development/action-group.js +8 -21
  64. package/development/alert/alert/alert.d.ts +1 -1
  65. package/development/alert/alert/alert.d.ts.map +1 -1
  66. package/development/alert/alert-group.js +2 -15
  67. package/development/alert/alert.js +6 -19
  68. package/development/autocomplete/autocomplete-base-element.d.ts +1 -1
  69. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  70. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -1
  71. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  72. package/development/autocomplete-grid/autocomplete-grid-button.js +2 -15
  73. package/development/autocomplete-grid/autocomplete-grid-cell.js +2 -15
  74. package/development/autocomplete-grid/autocomplete-grid-option.js +4 -17
  75. package/development/autocomplete-grid/autocomplete-grid-row.js +2 -15
  76. package/development/autocomplete-grid/autocomplete-grid.js +6 -6
  77. package/development/autocomplete.js +7 -20
  78. package/development/breadcrumb/breadcrumb-group.js +2 -15
  79. package/development/breadcrumb/breadcrumb.js +2 -15
  80. package/development/button/button.js +3 -3
  81. package/development/button/common.js +2 -17
  82. package/development/button/mini-button/mini-button.d.ts.map +1 -1
  83. package/development/button/mini-button-group.js +2 -15
  84. package/development/button/mini-button.js +6 -17
  85. package/development/button/secondary-button.js +3 -3
  86. package/development/button/tertiary-button.js +3 -3
  87. package/development/button/transparent-button.js +3 -3
  88. package/development/calendar/calendar.d.ts +2 -2
  89. package/development/calendar/calendar.d.ts.map +1 -1
  90. package/development/calendar.js +7 -19
  91. package/development/card/card-badge.js +2 -15
  92. package/development/card/card.js +2 -15
  93. package/development/card/common.js +2 -15
  94. package/development/checkbox/checkbox-group.js +2 -15
  95. package/development/checkbox/checkbox.js +2 -15
  96. package/development/checkbox/common.js +1 -14
  97. package/development/chip.js +2 -15
  98. package/development/clock/clock.d.ts +2 -2
  99. package/development/clock/clock.d.ts.map +1 -1
  100. package/development/clock.js +2 -15
  101. package/development/container/container.js +1 -14
  102. package/development/container/sticky-bar.js +2 -15
  103. package/development/core/a11y/focus-visible-within-controller.d.ts +1 -1
  104. package/development/core/a11y/focus-visible-within-controller.d.ts.map +1 -1
  105. package/development/core/a11y/input-modality-detector.d.ts +2 -2
  106. package/development/core/a11y/input-modality-detector.d.ts.map +1 -1
  107. package/development/core/a11y.js +6 -6
  108. package/development/core/base-elements/action-base-element.d.ts +1 -0
  109. package/development/core/base-elements/action-base-element.d.ts.map +1 -1
  110. package/development/core/base-elements/button-base-element.d.ts +1 -1
  111. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  112. package/development/core/base-elements/link-base-element.d.ts.map +1 -1
  113. package/development/core/base-elements.js +11 -2
  114. package/development/core/controllers/slot-state-controller.d.ts +1 -1
  115. package/development/core/controllers/slot-state-controller.d.ts.map +1 -1
  116. package/development/core/controllers.js +1 -1
  117. package/development/core/mixins/disabled-mixin.d.ts +8 -0
  118. package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
  119. package/development/core/mixins.js +24 -15
  120. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  121. package/development/datepicker/datepicker-next-day.js +2 -15
  122. package/development/datepicker/datepicker-previous-day.js +2 -15
  123. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +2 -0
  124. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  125. package/development/datepicker/datepicker-toggle.js +20 -22
  126. package/development/datepicker/datepicker.js +3 -15
  127. package/development/dialog/dialog-actions.js +2 -15
  128. package/development/dialog/dialog-content.js +2 -15
  129. package/development/dialog/dialog-title.js +2 -15
  130. package/development/dialog/dialog.js +3 -16
  131. package/development/divider.js +2 -15
  132. package/development/expansion-panel/expansion-panel-content.js +2 -15
  133. package/development/expansion-panel/expansion-panel-header.js +5 -17
  134. package/development/expansion-panel/expansion-panel.js +2 -15
  135. package/development/file-selector/file-selector.d.ts +4 -4
  136. package/development/file-selector/file-selector.d.ts.map +1 -1
  137. package/development/file-selector.js +2 -17
  138. package/development/flip-card/flip-card-details.js +2 -15
  139. package/development/flip-card/flip-card-summary.js +2 -15
  140. package/development/flip-card/flip-card.js +2 -15
  141. package/development/footer.js +2 -15
  142. package/development/form-error.js +2 -15
  143. package/development/form-field/form-field-clear.js +2 -15
  144. package/development/form-field/form-field.js +1 -14
  145. package/development/header/common.js +2 -15
  146. package/development/header/header.js +2 -15
  147. package/development/icon/icon.d.ts +6 -0
  148. package/development/icon/icon.d.ts.map +1 -1
  149. package/development/icon.js +10 -15
  150. package/development/image.js +4 -17
  151. package/development/journey-header.js +2 -15
  152. package/development/lead-container.js +2 -15
  153. package/development/link/block-link-button.js +3 -3
  154. package/development/link/common.js +4 -43
  155. package/development/link/link-button.js +3 -3
  156. package/development/link-list/common.js +2 -15
  157. package/development/link-list/link-list-anchor.js +2 -15
  158. package/development/link-list/link-list.js +2 -15
  159. package/development/loading-indicator.js +2 -15
  160. package/development/logo.js +2 -15
  161. package/development/map-container.js +2 -15
  162. package/development/menu/common.js +2 -15
  163. package/development/menu/menu/menu.d.ts.map +1 -1
  164. package/development/menu/menu-button.js +3 -3
  165. package/development/menu/menu.js +3 -18
  166. package/development/message.js +2 -15
  167. package/development/navigation/common.js +2 -17
  168. package/development/navigation/navigation-list.js +2 -15
  169. package/development/navigation/navigation-marker.js +2 -17
  170. package/development/navigation/navigation-section.js +2 -19
  171. package/development/navigation/navigation.js +2 -15
  172. package/development/notification.js +2 -15
  173. package/development/option/optgroup/optgroup-base-element.d.ts +2 -2
  174. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  175. package/development/option/optgroup.js +2 -15
  176. package/development/option/option/option-base-element.d.ts +14 -4
  177. package/development/option/option/option-base-element.d.ts.map +1 -1
  178. package/development/option/option.js +15 -21
  179. package/development/overlay/overlay-base-element.d.ts +1 -1
  180. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  181. package/development/overlay.js +2 -15
  182. package/development/popover/popover-trigger.js +4 -17
  183. package/development/popover/popover.js +2 -15
  184. package/development/radio-button/common.js +2 -15
  185. package/development/radio-button/radio-button-group/radio-button-group.d.ts +1 -1
  186. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  187. package/development/radio-button/radio-button-group.js +9 -22
  188. package/development/radio-button/radio-button.js +2 -15
  189. package/development/screen-reader-only.js +2 -15
  190. package/development/select/select.d.ts.map +1 -1
  191. package/development/select.js +30 -43
  192. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +12 -3
  193. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  194. package/development/selection-expansion-panel.js +38 -18
  195. package/development/signet.js +2 -15
  196. package/development/skiplink-list.js +2 -15
  197. package/development/slider/slider.d.ts.map +1 -1
  198. package/development/slider.js +10 -16
  199. package/development/status.js +2 -15
  200. package/development/stepper/step-label/step-label.d.ts +6 -6
  201. package/development/stepper/step-label/step-label.d.ts.map +1 -1
  202. package/development/stepper/step-label.js +31 -44
  203. package/development/stepper/step.js +2 -15
  204. package/development/stepper/stepper/stepper.d.ts +3 -3
  205. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  206. package/development/stepper/stepper.js +2 -15
  207. package/development/table/table-wrapper.js +2 -15
  208. package/development/tabs/tab-group/tab-group.d.ts +4 -4
  209. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  210. package/development/tabs/tab-group.js +22 -35
  211. package/development/tabs/tab-label.js +2 -19
  212. package/development/tabs/tab.js +1 -14
  213. package/development/tag/tag-group.js +2 -15
  214. package/development/tag/tag.js +4 -17
  215. package/development/teaser-hero.js +3 -23
  216. package/development/teaser-product/common.js +2 -15
  217. package/development/teaser-product/teaser-product.js +3 -16
  218. package/development/teaser.js +2 -15
  219. package/development/time-input.js +2 -15
  220. package/development/timetable-occupancy-icon.js +2 -15
  221. package/development/timetable-occupancy.js +2 -15
  222. package/development/title.js +3 -41
  223. package/development/toast.js +2 -17
  224. package/development/toggle/toggle/toggle.d.ts +2 -2
  225. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  226. package/development/toggle/toggle-option.js +2 -15
  227. package/development/toggle/toggle.js +23 -36
  228. package/development/toggle-check.js +1 -14
  229. package/development/train/train-blocked-passage.js +2 -15
  230. package/development/train/train-formation.js +2 -15
  231. package/development/train/train-wagon.js +2 -17
  232. package/development/train/train.js +2 -15
  233. package/development/visual-checkbox.js +2 -15
  234. package/dialog/dialog.js +1 -1
  235. package/expansion-panel/expansion-panel-header.js +5 -5
  236. package/file-selector/file-selector.d.ts +4 -4
  237. package/file-selector/file-selector.d.ts.map +1 -1
  238. package/file-selector.js +1 -1
  239. package/icon/icon.d.ts +6 -0
  240. package/icon/icon.d.ts.map +1 -1
  241. package/icon.js +27 -19
  242. package/image.js +2 -2
  243. package/link/block-link-button.js +10 -10
  244. package/link/link-button.js +4 -4
  245. package/lists.css +0 -13
  246. package/menu/menu/menu.d.ts.map +1 -1
  247. package/menu/menu-button.js +13 -13
  248. package/menu/menu.js +7 -9
  249. package/navigation/common.js +1 -1
  250. package/navigation/navigation-marker.js +1 -1
  251. package/navigation/navigation-section.js +1 -1
  252. package/option/optgroup/optgroup-base-element.d.ts +2 -2
  253. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  254. package/option/option/option-base-element.d.ts +14 -4
  255. package/option/option/option-base-element.d.ts.map +1 -1
  256. package/option/option.js +32 -25
  257. package/overlay/overlay-base-element.d.ts +1 -1
  258. package/overlay/overlay-base-element.d.ts.map +1 -1
  259. package/package.json +1 -1
  260. package/popover/popover-trigger.js +1 -1
  261. package/radio-button/radio-button-group/radio-button-group.d.ts +1 -1
  262. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  263. package/radio-button/radio-button-group.js +5 -5
  264. package/select/select.d.ts.map +1 -1
  265. package/select.js +23 -23
  266. package/selection-expansion-panel/selection-expansion-panel.d.ts +12 -3
  267. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  268. package/selection-expansion-panel.js +70 -49
  269. package/slider/slider.d.ts.map +1 -1
  270. package/slider.js +2 -2
  271. package/standard-theme.css +35 -23
  272. package/stepper/step-label/step-label.d.ts +6 -6
  273. package/stepper/step-label/step-label.d.ts.map +1 -1
  274. package/stepper/step-label.js +20 -20
  275. package/stepper/stepper/stepper.d.ts +3 -3
  276. package/stepper/stepper/stepper.d.ts.map +1 -1
  277. package/tabs/tab-group/tab-group.d.ts +4 -4
  278. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  279. package/tabs/tab-group.js +15 -15
  280. package/tabs/tab-label.js +12 -12
  281. package/tag/tag.js +19 -19
  282. package/teaser-hero.js +13 -13
  283. package/teaser-product/teaser-product.js +5 -5
  284. package/teaser.js +15 -15
  285. package/title.js +23 -23
  286. package/toast.js +4 -4
  287. package/toggle/toggle/toggle.d.ts +2 -2
  288. package/toggle/toggle/toggle.d.ts.map +1 -1
  289. package/toggle/toggle.js +10 -10
  290. package/train/train-wagon.js +7 -7
  291. package/typography.css +0 -13
@@ -4,20 +4,7 @@ import { SbbFocusVisibleWithinController } from "../core/a11y.js";
4
4
  import { findReferencedElement } from "../core/dom.js";
5
5
  import { SbbHydrationMixin } from "../core/mixins.js";
6
6
  import "../logo.js";
7
- const style = css`/**
8
- * Better font rendering (on OS X)
9
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
10
- *
11
- * Usage:
12
- *
13
- * .var_dark_on_light {
14
- * @include font-smoothing;
15
- * }
16
- * .var_light_on_dark {
17
- * @include font-smoothing-reset;
18
- * }
19
- */
20
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
7
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
21
8
  /*
22
9
  * SBB table mixin
23
10
  * Notes:
@@ -335,4 +322,4 @@ SbbHeaderElement = __decorateClass([
335
322
  export {
336
323
  SbbHeaderElement
337
324
  };
338
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvaGVhZGVyL2hlYWRlci9oZWFkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDU1NSZXN1bHRHcm91cCwgaHRtbCwgaXNTZXJ2ZXIsIExpdEVsZW1lbnQsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJGb2N1c1Zpc2libGVXaXRoaW5Db250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9oZWFkZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9sb2dvLmpzJztcblxuY29uc3QgSVNfTUVOVV9PUEVORURfUVVFUlkgPSBcIlthcmlhLWNvbnRyb2xzXVthcmlhLWV4cGFuZGVkPSd0cnVlJ11cIjtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGhlYWRlciBzZWN0aW9uIGZvciB0aGUgcGFnZS5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBhY3Rpb25zIG9yIGNvbnRlbnQgdG8gdGhlIGhlYWRlci5cbiAqIEBzbG90IGxvZ28gLSBTbG90IHVzZWQgdG8gcmVuZGVyIHRoZSBsb2dvIG9uIHRoZSByaWdodCBzaWRlIChzYmItbG9nbyBhcyBkZWZhdWx0KS5cbiAqIEBjc3Nwcm9wIFstLXNiYi1oZWFkZXItei1pbmRleD0xMF0gLSBDYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIHotaW5kZXggb2YgdGhlIGhlYWRlci5cbiAqIEBjc3Nwcm9wIFstLXNiYi1oZWFkZXItaGVpZ2h0PXplcm8tc21hbGw6dmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMTR4KTttZWRpdW0tdWx0cmE6dmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMjR4KV0gLSBDYW4gYmUgdXNlZCB0byBtb2RpZnkgaGVpZ2h0IG9mIHRoZSBoZWFkZXIuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItaGVhZGVyJylcbmV4cG9ydCBjbGFzcyBTYmJIZWFkZXJFbGVtZW50IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgaGVhZGVyIGNvbnRlbnQgdG8gc3RyZXRjaCB0byBmdWxsIHdpZHRoLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgY29udGVudCBoYXMgdGhlIGFwcHJvcHJpYXRlIHBhZ2Ugc2l6ZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBlbGVtZW50J3MgaWQgb3IgdGhlIGVsZW1lbnQgb24gd2hpY2ggdGhlIHNjcm9sbCBsaXN0ZW5lciBpcyBhdHRhY2hlZC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2Nyb2xsLW9yaWdpbicgfSlcbiAgcHVibGljIHNldCBzY3JvbGxPcmlnaW4odmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3Njcm9sbE9yaWdpbjtcbiAgICB0aGlzLl9zY3JvbGxPcmlnaW4gPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVTY3JvbGxPcmlnaW4odGhpcy5fc2Nyb2xsT3JpZ2luLCBvbGRWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBzY3JvbGxPcmlnaW4oKTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBEb2N1bWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbE9yaWdpbjtcbiAgfVxuICBwcml2YXRlIF9zY3JvbGxPcmlnaW46IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPSAhaXNTZXJ2ZXIgPyBkb2N1bWVudCA6IG51bGwhO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIGhpZGUgYW5kIHNob3cgb24gc2Nyb2xsLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRlLW9uLXNjcm9sbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGhpZGVPblNjcm9sbCA9XG4gICAgZmFsc2U7XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfaGVhZGVyT25Ub3AgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3Njcm9sbEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9zY3JvbGxFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9zY3JvbGxGdW5jdGlvbjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYXN0U2Nyb2xsID0gMDtcblxuICBwcml2YXRlIF91cGRhdGVTY3JvbGxPcmlnaW4oXG4gICAgbmV3VmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgb2xkVmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICk6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldExpc3RlbmVyT25TY3JvbGxFbGVtZW50KG5ld1ZhbHVlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSB0aGlzLl9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkoJ3Njcm9sbFRvcCcpO1xuICAgICAgLy8gYGN1cnJlbnRTY3JvbGxgIGNhbiBiZSBuZWdhdGl2ZSwgZS5nLiBvbiBtb2JpbGU7IHRoaXMgaXMgbm90IGFsbG93ZWQuXG4gICAgICB0aGlzLl9sYXN0U2Nyb2xsID0gY3VycmVudFNjcm9sbCA8PSAwID8gMCA6IGN1cnJlbnRTY3JvbGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIElmIGBoaWRlT25TY3JvbGxgIGlzIHNldCwgY2hlY2tzIHRoZSBlbGVtZW50IHRvIGhvb2sgdGhlIGxpc3RlbmVyIG9uLCBhbmQgcG9zc2libHkgYWRkIGl0LiovXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3NldExpc3RlbmVyT25TY3JvbGxFbGVtZW50KHRoaXMuc2Nyb2xsT3JpZ2luKTtcbiAgICBuZXcgU2JiRm9jdXNWaXNpYmxlV2l0aGluQ29udHJvbGxlcih0aGlzKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBzY3JvbGwgbGlzdGVuZXIsIGlmIHByZXZpb3VzbHkgYXR0YWNoZWQuICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgdmFsdWUgb2YgYF9zY3JvbGxFbGVtZW50YCBhbmQgYF9zY3JvbGxGdW5jdGlvbmAgYW5kIHBvc3NpYmx5IGFkZHMgdGhlIGZ1bmN0aW9uIG9uIHRoZSBjb3JyZWN0IGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldExpc3RlbmVyT25TY3JvbGxFbGVtZW50KHNjcm9sbE9yaWdpbjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBEb2N1bWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fc2Nyb2xsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID1cbiAgICAgIGZpbmRSZWZlcmVuY2VkRWxlbWVudChzY3JvbGxPcmlnaW4gYXMgc3RyaW5nIHwgSFRNTEVsZW1lbnQpIHx8ICghaXNTZXJ2ZXIgPyBkb2N1bWVudCA6IG51bGwpO1xuICAgIHRoaXMuX3Njcm9sbEZ1bmN0aW9uID0gdGhpcy5fZ2V0U2Nyb2xsRnVuY3Rpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLl9zY3JvbGxFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLl9zY3JvbGxGdW5jdGlvbiwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fc2Nyb2xsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cbiAgLyoqIFJldHVybnMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gYXR0YWNoIG9uIHNjcm9sbC4gKi9cbiAgcHJpdmF0ZSBfZ2V0U2Nyb2xsRnVuY3Rpb24oKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZU9uU2Nyb2xsID8gdGhpcy5fc2Nyb2xsTGlzdGVuZXIoKSA6IHRoaXMuX3Njcm9sbFNoYWRvd0xpc3RlbmVyKCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IG9mIHRoZSBzY3JvbGxDb250ZXh0LiAqL1xuICBwcml2YXRlIF9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkocHJvcGVydHk6ICdzY3JvbGxUb3AnIHwgJ3Njcm9sbEhlaWdodCcpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9zY3JvbGxFbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LmRvY3VtZW50RWxlbWVudFtwcm9wZXJ0eV0gfHwgdGhpcy5fc2Nyb2xsRWxlbWVudC5ib2R5W3Byb3BlcnR5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQ/Lltwcm9wZXJ0eV0gfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBgc2Nyb2xsVG9wYCwgdGhlbjpcbiAgICogLSBhcHBseSB0aGUgc2hhZG93IGlmIHRoZSBlbGVtZW50L2RvY3VtZW50IGhhcyBiZWVuIHNjcm9sbGVkIGRvd247XG4gICAqIC0gaGlkZXMgdGhlIGhlYWRlciwgcmVtb3ZlIHRoZSBzaGFkb3cgYW5kIHBvc3NpYmx5IGNsb3NlIGFueSBvcGVuIG1lbnUgb24gdGhlIGhlYWRlciBpZiBpdCBpcyBub3QgdmlzaWJsZSBhbnltb3JlO1xuICAgKiAtIHNob3dzIHRoZSBoZWFkZXIgYW5kIHJlLWFwcGx5IHRoZSBzaGFkb3cgaWYgdGhlIGVsZW1lbnQvZG9jdW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQgdXAuXG4gICAqL1xuICBwcml2YXRlIF9zY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gdGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxUb3AnKTtcblxuICAgIC8vIFdoZXRoZXIgdGhlIHNjcm9sbCB2aWV3IGlzIGJvdW5jaW5nIHBhc3QgdGhlIGVkZ2Ugb2YgY29udGVudCBhbmQgYmFjayBhZ2Fpbi5cbiAgICBpZiAodGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxIZWlnaHQnKSAtIHdpbmRvdy5pbm5lckhlaWdodCAtIGN1cnJlbnRTY3JvbGwgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXNoYWRvdycsIGN1cnJlbnRTY3JvbGwgIT09IDApO1xuXG4gICAgLy8gQ2xvc2Ugb3BlbiBvdmVybGF5cyB3aGVuIHNjcm9sbGluZyBkb3duIGlmIHRoZSBoZWFkZXIgaXMgc2Nyb2xsZWQgb3V0IG9mIHNpZ2h0LlxuICAgIGlmIChcbiAgICAgIGN1cnJlbnRTY3JvbGwgPiB0aGlzLm9mZnNldEhlaWdodCAmJlxuICAgICAgY3VycmVudFNjcm9sbCA+IDAgJiZcbiAgICAgIHRoaXMuX2xhc3RTY3JvbGwgPCBjdXJyZW50U2Nyb2xsXG4gICAgKSB7XG4gICAgICB0aGlzLl9jbG9zZU9wZW5PdmVybGF5cygpO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBoZWFkZXIgaXMgc2Nyb2xsZWQgb3V0IG9mIHNpZ2h0LCBzY3JvbGwgcG9zaXRpb24gPiBoZWFkZXIgaGVpZ2h0ICogMi5cbiAgICBpZiAoY3VycmVudFNjcm9sbCA+IHRoaXMub2Zmc2V0SGVpZ2h0ICogMikge1xuICAgICAgdGhpcy5faGVhZGVyT25Ub3AgPSBmYWxzZTtcbiAgICAgIGlmIChjdXJyZW50U2Nyb2xsID4gMCAmJiB0aGlzLl9sYXN0U2Nyb2xsIDwgY3VycmVudFNjcm9sbCkge1xuICAgICAgICAvLyBTY3JvbGxpbmcgZG93blxuICAgICAgICBbJ2RhdGEtc2hhZG93JywgJ2RhdGEtdmlzaWJsZSddLmZvckVhY2goKG5hbWUpID0+IHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNjcm9sbGluZyB1cFxuICAgICAgICBbJ2RhdGEtZml4ZWQnLCAnZGF0YS1zaGFkb3cnLCAnZGF0YS1hbmltYXRlZCcsICdkYXRhLXZpc2libGUnXS5mb3JFYWNoKChuYW1lKSA9PlxuICAgICAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKG5hbWUsIHRydWUpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDaGVjayBpZiBoZWFkZXIgaW4gaXRzIG9yaWdpbmFsIHBvc2l0aW9uLCBzY3JvbGwgcG9zaXRpb24gPCBoZWFkZXIgaGVpZ2h0LlxuICAgICAgLy8gUmVzZXQgaGVhZGVyIGJlaGF2aW91ciB3aGVuIHNjcm9sbCBoaXRzIHRvcCBvZiB0aGUgcGFnZSwgb24gc2Nyb2xsIHBvc2l0aW9uID0gMC5cbiAgICAgIGlmIChjdXJyZW50U2Nyb2xsID09PSAwKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlck9uVG9wID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9oZWFkZXJPblRvcCkge1xuICAgICAgICBbJ2RhdGEtc2hhZG93JywgJ2RhdGEtYW5pbWF0ZWQnLCAnZGF0YS1maXhlZCcsICdkYXRhLXZpc2libGUnXS5mb3JFYWNoKChuYW1lKSA9PlxuICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBgY3VycmVudFNjcm9sbGAgY2FuIGJlIG5lZ2F0aXZlLCBlLmcuIG9uIG1vYmlsZTsgdGhpcyBpcyBub3QgYWxsb3dlZC5cbiAgICB0aGlzLl9sYXN0U2Nyb2xsID0gY3VycmVudFNjcm9sbCA8PSAwID8gMCA6IGN1cnJlbnRTY3JvbGw7XG4gIH1cblxuICAvKiogQXBwbHkgdGhlIHNoYWRvdyBpZiB0aGUgZWxlbWVudC9kb2N1bWVudCBoYXMgYmVlbiBzY3JvbGxlZCBkb3duLiAqL1xuICBwcml2YXRlIF9zY3JvbGxTaGFkb3dMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zaGFkb3cnLCB0aGlzLl9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkoJ3Njcm9sbFRvcCcpICE9PSAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlT3Blbk92ZXJsYXlzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1oYXMtdmlzaWJsZS1mb2N1cy13aXRoaW4nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdmVybGF5VHJpZ2dlcnM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKElTX01FTlVfT1BFTkVEX1FVRVJZKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PixcbiAgICApO1xuICAgIGZvciAoY29uc3Qgb3ZlcmxheVRyaWdnZXIgb2Ygb3ZlcmxheVRyaWdnZXJzKSB7XG4gICAgICBjb25zdCBvdmVybGF5SWQ6IHN0cmluZyA9IG92ZXJsYXlUcmlnZ2VyLmdldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpITtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdmVybGF5SWQpIGFzIEhUTUxFbGVtZW50ICYgeyBjbG9zZTogKCkgPT4gdm9pZCB9O1xuICAgICAgaWYgKHR5cGVvZiBvdmVybGF5Py5jbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdmVybGF5LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8aGVhZGVyIGNsYXNzPVwic2JiLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWhlYWRlcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWhlYWRlcl9fbG9nb1wiPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImxvZ29cIj5cbiAgICAgICAgICAgICAgPHNiYi1sb2dvIHByb3RlY3RpdmUtcm9vbT1cIm5vbmVcIj48L3NiYi1sb2dvPlxuICAgICAgICAgICAgPC9zbG90PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaGVhZGVyPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1oZWFkZXInOiBTYmJIZWFkZXJFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsicHJvcGVydHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxNQUFNLHVCQUF1QjtBQVd0QixJQUFNLG1CQUFOLGNBQStCLGtCQUFrQixVQUFVLEVBQUU7QUFBQSxFQUE3RCxjQUFBO0FBQUEsVUFBQSxHQUFBLFNBQUE7QUFPdUMsU0FBTyxXQUFXO0FBWXRELFNBQUEsZ0JBQWlELENBQUMsV0FBVyxXQUFXO0FBR1AsU0FBTyxlQUM5RTtBQUVPLFNBQVEsZUFBZTtBQUtoQyxTQUFRLGNBQWM7QUFBQSxFQUFBO0FBQUEsRUFuQnRCLElBQVcsYUFBYSxPQUF3QztBQUM5RCxVQUFNLFdBQVcsS0FBSztBQUN0QixTQUFLLGdCQUFnQjtBQUNoQixTQUFBLG9CQUFvQixLQUFLLGVBQWUsUUFBUTtBQUFBLEVBQ3ZEO0FBQUEsRUFDQSxJQUFXLGVBQWdEO0FBQ3pELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQWNRLG9CQUNOLFVBQ0EsVUFDTTtBQUNOLFFBQUksYUFBYSxVQUFVO0FBQ3pCLFdBQUssNEJBQTRCLFFBQVE7QUFDbkMsWUFBQSxnQkFBZ0IsS0FBSywwQkFBMEIsV0FBVztBQUUzRCxXQUFBLGNBQWMsaUJBQWlCLElBQUksSUFBSTtBQUFBLElBQzlDO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFHZ0Isb0JBQTBCO0FBQ3hDLFVBQU0sa0JBQWtCO0FBQ25CLFNBQUEsNEJBQTRCLEtBQUssWUFBWTtBQUNsRCxRQUFJLGdDQUFnQyxJQUFJO0FBQUEs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
325
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvaGVhZGVyL2hlYWRlci9oZWFkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDU1NSZXN1bHRHcm91cCwgaHRtbCwgaXNTZXJ2ZXIsIExpdEVsZW1lbnQsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJGb2N1c1Zpc2libGVXaXRoaW5Db250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9oZWFkZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9sb2dvLmpzJztcblxuY29uc3QgSVNfTUVOVV9PUEVORURfUVVFUlkgPSBcIlthcmlhLWNvbnRyb2xzXVthcmlhLWV4cGFuZGVkPSd0cnVlJ11cIjtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGhlYWRlciBzZWN0aW9uIGZvciB0aGUgcGFnZS5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBhY3Rpb25zIG9yIGNvbnRlbnQgdG8gdGhlIGhlYWRlci5cbiAqIEBzbG90IGxvZ28gLSBTbG90IHVzZWQgdG8gcmVuZGVyIHRoZSBsb2dvIG9uIHRoZSByaWdodCBzaWRlIChzYmItbG9nbyBhcyBkZWZhdWx0KS5cbiAqIEBjc3Nwcm9wIFstLXNiYi1oZWFkZXItei1pbmRleD0xMF0gLSBDYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIHotaW5kZXggb2YgdGhlIGhlYWRlci5cbiAqIEBjc3Nwcm9wIFstLXNiYi1oZWFkZXItaGVpZ2h0PXplcm8tc21hbGw6dmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMTR4KTttZWRpdW0tdWx0cmE6dmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMjR4KV0gLSBDYW4gYmUgdXNlZCB0byBtb2RpZnkgaGVpZ2h0IG9mIHRoZSBoZWFkZXIuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItaGVhZGVyJylcbmV4cG9ydCBjbGFzcyBTYmJIZWFkZXJFbGVtZW50IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgaGVhZGVyIGNvbnRlbnQgdG8gc3RyZXRjaCB0byBmdWxsIHdpZHRoLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgY29udGVudCBoYXMgdGhlIGFwcHJvcHJpYXRlIHBhZ2Ugc2l6ZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBlbGVtZW50J3MgaWQgb3IgdGhlIGVsZW1lbnQgb24gd2hpY2ggdGhlIHNjcm9sbCBsaXN0ZW5lciBpcyBhdHRhY2hlZC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2Nyb2xsLW9yaWdpbicgfSlcbiAgcHVibGljIHNldCBzY3JvbGxPcmlnaW4odmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3Njcm9sbE9yaWdpbjtcbiAgICB0aGlzLl9zY3JvbGxPcmlnaW4gPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVTY3JvbGxPcmlnaW4odGhpcy5fc2Nyb2xsT3JpZ2luLCBvbGRWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBzY3JvbGxPcmlnaW4oKTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBEb2N1bWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbE9yaWdpbjtcbiAgfVxuICBwcml2YXRlIF9zY3JvbGxPcmlnaW46IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPSAhaXNTZXJ2ZXIgPyBkb2N1bWVudCA6IG51bGwhO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIGhpZGUgYW5kIHNob3cgb24gc2Nyb2xsLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRlLW9uLXNjcm9sbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGhpZGVPblNjcm9sbCA9XG4gICAgZmFsc2U7XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfaGVhZGVyT25Ub3AgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3Njcm9sbEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9zY3JvbGxFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9zY3JvbGxGdW5jdGlvbjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYXN0U2Nyb2xsID0gMDtcblxuICBwcml2YXRlIF91cGRhdGVTY3JvbGxPcmlnaW4oXG4gICAgbmV3VmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgb2xkVmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICk6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldExpc3RlbmVyT25TY3JvbGxFbGVtZW50KG5ld1ZhbHVlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSB0aGlzLl9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkoJ3Njcm9sbFRvcCcpO1xuICAgICAgLy8gYGN1cnJlbnRTY3JvbGxgIGNhbiBiZSBuZWdhdGl2ZSwgZS5nLiBvbiBtb2JpbGU7IHRoaXMgaXMgbm90IGFsbG93ZWQuXG4gICAgICB0aGlzLl9sYXN0U2Nyb2xsID0gY3VycmVudFNjcm9sbCA8PSAwID8gMCA6IGN1cnJlbnRTY3JvbGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIElmIGBoaWRlT25TY3JvbGxgIGlzIHNldCwgY2hlY2tzIHRoZSBlbGVtZW50IHRvIGhvb2sgdGhlIGxpc3RlbmVyIG9uLCBhbmQgcG9zc2libHkgYWRkIGl0LiovXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3NldExpc3RlbmVyT25TY3JvbGxFbGVtZW50KHRoaXMuc2Nyb2xsT3JpZ2luKTtcbiAgICBuZXcgU2JiRm9jdXNWaXNpYmxlV2l0aGluQ29udHJvbGxlcih0aGlzKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBzY3JvbGwgbGlzdGVuZXIsIGlmIHByZXZpb3VzbHkgYXR0YWNoZWQuICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgdmFsdWUgb2YgYF9zY3JvbGxFbGVtZW50YCBhbmQgYF9zY3JvbGxGdW5jdGlvbmAgYW5kIHBvc3NpYmx5IGFkZHMgdGhlIGZ1bmN0aW9uIG9uIHRoZSBjb3JyZWN0IGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldExpc3RlbmVyT25TY3JvbGxFbGVtZW50KHNjcm9sbE9yaWdpbjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBEb2N1bWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fc2Nyb2xsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID1cbiAgICAgIGZpbmRSZWZlcmVuY2VkRWxlbWVudChzY3JvbGxPcmlnaW4gYXMgc3RyaW5nIHwgSFRNTEVsZW1lbnQpIHx8ICghaXNTZXJ2ZXIgPyBkb2N1bWVudCA6IG51bGwpO1xuICAgIHRoaXMuX3Njcm9sbEZ1bmN0aW9uID0gdGhpcy5fZ2V0U2Nyb2xsRnVuY3Rpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLl9zY3JvbGxFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLl9zY3JvbGxGdW5jdGlvbiwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fc2Nyb2xsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cbiAgLyoqIFJldHVybnMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gYXR0YWNoIG9uIHNjcm9sbC4gKi9cbiAgcHJpdmF0ZSBfZ2V0U2Nyb2xsRnVuY3Rpb24oKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZU9uU2Nyb2xsID8gdGhpcy5fc2Nyb2xsTGlzdGVuZXIoKSA6IHRoaXMuX3Njcm9sbFNoYWRvd0xpc3RlbmVyKCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IG9mIHRoZSBzY3JvbGxDb250ZXh0LiAqL1xuICBwcml2YXRlIF9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkocHJvcGVydHk6ICdzY3JvbGxUb3AnIHwgJ3Njcm9sbEhlaWdodCcpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9zY3JvbGxFbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LmRvY3VtZW50RWxlbWVudFtwcm9wZXJ0eV0gfHwgdGhpcy5fc2Nyb2xsRWxlbWVudC5ib2R5W3Byb3BlcnR5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQ/Lltwcm9wZXJ0eV0gfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBgc2Nyb2xsVG9wYCwgdGhlbjpcbiAgICogLSBhcHBseSB0aGUgc2hhZG93IGlmIHRoZSBlbGVtZW50L2RvY3VtZW50IGhhcyBiZWVuIHNjcm9sbGVkIGRvd247XG4gICAqIC0gaGlkZXMgdGhlIGhlYWRlciwgcmVtb3ZlIHRoZSBzaGFkb3cgYW5kIHBvc3NpYmx5IGNsb3NlIGFueSBvcGVuIG1lbnUgb24gdGhlIGhlYWRlciBpZiBpdCBpcyBub3QgdmlzaWJsZSBhbnltb3JlO1xuICAgKiAtIHNob3dzIHRoZSBoZWFkZXIgYW5kIHJlLWFwcGx5IHRoZSBzaGFkb3cgaWYgdGhlIGVsZW1lbnQvZG9jdW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQgdXAuXG4gICAqL1xuICBwcml2YXRlIF9zY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gdGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxUb3AnKTtcblxuICAgIC8vIFdoZXRoZXIgdGhlIHNjcm9sbCB2aWV3IGlzIGJvdW5jaW5nIHBhc3QgdGhlIGVkZ2Ugb2YgY29udGVudCBhbmQgYmFjayBhZ2Fpbi5cbiAgICBpZiAodGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxIZWlnaHQnKSAtIHdpbmRvdy5pbm5lckhlaWdodCAtIGN1cnJlbnRTY3JvbGwgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXNoYWRvdycsIGN1cnJlbnRTY3JvbGwgIT09IDApO1xuXG4gICAgLy8gQ2xvc2Ugb3BlbiBvdmVybGF5cyB3aGVuIHNjcm9sbGluZyBkb3duIGlmIHRoZSBoZWFkZXIgaXMgc2Nyb2xsZWQgb3V0IG9mIHNpZ2h0LlxuICAgIGlmIChcbiAgICAgIGN1cnJlbnRTY3JvbGwgPiB0aGlzLm9mZnNldEhlaWdodCAmJlxuICAgICAgY3VycmVudFNjcm9sbCA+IDAgJiZcbiAgICAgIHRoaXMuX2xhc3RTY3JvbGwgPCBjdXJyZW50U2Nyb2xsXG4gICAgKSB7XG4gICAgICB0aGlzLl9jbG9zZU9wZW5PdmVybGF5cygpO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBoZWFkZXIgaXMgc2Nyb2xsZWQgb3V0IG9mIHNpZ2h0LCBzY3JvbGwgcG9zaXRpb24gPiBoZWFkZXIgaGVpZ2h0ICogMi5cbiAgICBpZiAoY3VycmVudFNjcm9sbCA+IHRoaXMub2Zmc2V0SGVpZ2h0ICogMikge1xuICAgICAgdGhpcy5faGVhZGVyT25Ub3AgPSBmYWxzZTtcbiAgICAgIGlmIChjdXJyZW50U2Nyb2xsID4gMCAmJiB0aGlzLl9sYXN0U2Nyb2xsIDwgY3VycmVudFNjcm9sbCkge1xuICAgICAgICAvLyBTY3JvbGxpbmcgZG93blxuICAgICAgICBbJ2RhdGEtc2hhZG93JywgJ2RhdGEtdmlzaWJsZSddLmZvckVhY2goKG5hbWUpID0+IHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNjcm9sbGluZyB1cFxuICAgICAgICBbJ2RhdGEtZml4ZWQnLCAnZGF0YS1zaGFkb3cnLCAnZGF0YS1hbmltYXRlZCcsICdkYXRhLXZpc2libGUnXS5mb3JFYWNoKChuYW1lKSA9PlxuICAgICAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKG5hbWUsIHRydWUpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDaGVjayBpZiBoZWFkZXIgaW4gaXRzIG9yaWdpbmFsIHBvc2l0aW9uLCBzY3JvbGwgcG9zaXRpb24gPCBoZWFkZXIgaGVpZ2h0LlxuICAgICAgLy8gUmVzZXQgaGVhZGVyIGJlaGF2aW91ciB3aGVuIHNjcm9sbCBoaXRzIHRvcCBvZiB0aGUgcGFnZSwgb24gc2Nyb2xsIHBvc2l0aW9uID0gMC5cbiAgICAgIGlmIChjdXJyZW50U2Nyb2xsID09PSAwKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlck9uVG9wID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9oZWFkZXJPblRvcCkge1xuICAgICAgICBbJ2RhdGEtc2hhZG93JywgJ2RhdGEtYW5pbWF0ZWQnLCAnZGF0YS1maXhlZCcsICdkYXRhLXZpc2libGUnXS5mb3JFYWNoKChuYW1lKSA9PlxuICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBgY3VycmVudFNjcm9sbGAgY2FuIGJlIG5lZ2F0aXZlLCBlLmcuIG9uIG1vYmlsZTsgdGhpcyBpcyBub3QgYWxsb3dlZC5cbiAgICB0aGlzLl9sYXN0U2Nyb2xsID0gY3VycmVudFNjcm9sbCA8PSAwID8gMCA6IGN1cnJlbnRTY3JvbGw7XG4gIH1cblxuICAvKiogQXBwbHkgdGhlIHNoYWRvdyBpZiB0aGUgZWxlbWVudC9kb2N1bWVudCBoYXMgYmVlbiBzY3JvbGxlZCBkb3duLiAqL1xuICBwcml2YXRlIF9zY3JvbGxTaGFkb3dMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zaGFkb3cnLCB0aGlzLl9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkoJ3Njcm9sbFRvcCcpICE9PSAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlT3Blbk92ZXJsYXlzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1oYXMtdmlzaWJsZS1mb2N1cy13aXRoaW4nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdmVybGF5VHJpZ2dlcnM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKElTX01FTlVfT1BFTkVEX1FVRVJZKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PixcbiAgICApO1xuICAgIGZvciAoY29uc3Qgb3ZlcmxheVRyaWdnZXIgb2Ygb3ZlcmxheVRyaWdnZXJzKSB7XG4gICAgICBjb25zdCBvdmVybGF5SWQ6IHN0cmluZyA9IG92ZXJsYXlUcmlnZ2VyLmdldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpITtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdmVybGF5SWQpIGFzIEhUTUxFbGVtZW50ICYgeyBjbG9zZTogKCkgPT4gdm9pZCB9O1xuICAgICAgaWYgKHR5cGVvZiBvdmVybGF5Py5jbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdmVybGF5LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8aGVhZGVyIGNsYXNzPVwic2JiLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWhlYWRlcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWhlYWRlcl9fbG9nb1wiPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImxvZ29cIj5cbiAgICAgICAgICAgICAgPHNiYi1sb2dvIHByb3RlY3RpdmUtcm9vbT1cIm5vbmVcIj48L3NiYi1sb2dvPlxuICAgICAgICAgICAgPC9zbG90PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaGVhZGVyPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1oZWFkZXInOiBTYmJIZWFkZXJFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsicHJvcGVydHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBLE1BQU0sdUJBQXVCO0FBV3RCLElBQU0sbUJBQU4sY0FBK0Isa0JBQWtCLFVBQVUsRUFBRTtBQUFBLEVBQTdELGNBQUE7QUFBQSxVQUFBLEdBQUEsU0FBQTtBQU91QyxTQUFPLFdBQVc7QUFZdEQsU0FBQSxnQkFBaUQsQ0FBQyxXQUFXLFdBQVc7QUFHUCxTQUFPLGVBQzlFO0FBRU8sU0FBUSxlQUFlO0FBS2hDLFNBQVEsY0FBYztBQUFBLEVBQUE7QUFBQSxFQW5CdEIsSUFBVyxhQUFhLE9BQXdDO0FBQzlELFVBQU0sV0FBVyxLQUFLO0FBQ3RCLFNBQUssZ0JBQWdCO0FBQ2hCLFNBQUEsb0JBQW9CLEtBQUssZUFBZSxRQUFRO0FBQUEsRUFDdkQ7QUFBQSxFQUNBLElBQVcsZUFBZ0Q7QUFDekQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBY1Esb0JBQ04sVUFDQSxVQUNNO0FBQ04sUUFBSSxhQUFhLFVBQVU7QUFDekIsV0FBSyw0QkFBNEIsUUFBUTtBQUNuQyxZQUFBLGdCQUFnQixLQUFLLDBCQUEwQixXQUFXO0FBRTNELFdBQUEsY0FBYyxpQkFBaUIsSUFBSSxJQUFJO0FBQUEsSUFDOUM7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUdnQixvQkFBMEI7QUFDeEMsVUFBTSxrQkFBa0I7QUFDbkIsU0FBQSw0QkFBNEIsS0FBSyxZQUFZO0FBQ2xELFFBQUksZ0NBQWdDLElBQUk7QUFBQSxFQUMxQztBQUFBO0FB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
@@ -4,6 +4,12 @@ import { SbbIconBase } from './icon-base.js';
4
4
  * It displays an icon loaded from a registered namespace.
5
5
  */
6
6
  export declare class SbbIconElement extends SbbIconBase {
7
+ /**
8
+ * We need to additionally observe the svgicon attribute
9
+ * for sbb-angular compatibility.
10
+ * @internal
11
+ */
12
+ static get observedAttributes(): string[];
7
13
  /**
8
14
  * The provided name consisting of the namespace and the name of the icon.
9
15
  * If the namespace is missing, the default namespace "sbb" will be used.
@@ -1 +1 @@
1
- {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../../src/elements/icon/icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,qBACa,cAAe,SAAQ,WAAW;IAC7C;;;;OAIG;IACiC,IAAI,EAAG,MAAM,CAAC;IAElD,OAAO,CAAC,iBAAiB,CAAM;IAE/B;;;;OAIG;IACM,OAAO,CAAC,wBAAwB,CAAS;cAEzB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBpE,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQ5D,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI;cAQY,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQ3D,MAAM,IAAI,cAAc;CAG5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,UAAU,EAAE,cAAc,CAAC;KAC5B;CACF"}
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../../src/elements/icon/icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,qBACa,cAAe,SAAQ,WAAW;IAC7C;;;;OAIG;IACH,WAA2B,kBAAkB,IAAI,MAAM,EAAE,CAExD;IAED;;;;OAIG;IACiC,IAAI,EAAG,MAAM,CAAC;IAElD,OAAO,CAAC,iBAAiB,CAAM;IAE/B;;;;OAIG;IACM,OAAO,CAAC,wBAAwB,CAAS;cAEzB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBpE,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQ5D,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI;cAQY,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQ3D,MAAM,IAAI,cAAc;CAG5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,UAAU,EAAE,cAAc,CAAC;KAC5B;CACF"}
@@ -83,20 +83,7 @@ const getSvgContent = (namespace, name, sanitize) => {
83
83
  }
84
84
  return req;
85
85
  };
86
- const style = css`/**
87
- * Better font rendering (on OS X)
88
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
89
- *
90
- * Usage:
91
- *
92
- * .var_dark_on_light {
93
- * @include font-smoothing;
94
- * }
95
- * .var_light_on_dark {
96
- * @include font-smoothing-reset;
97
- * }
98
- */
99
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
86
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
100
87
  /*
101
88
  * SBB table mixin
102
89
  * Notes:
@@ -242,6 +229,14 @@ let SbbIconElement = class extends SbbIconBase {
242
229
  this._defaultAriaLabel = "";
243
230
  this._sbbAngularCompatibility = false;
244
231
  }
232
+ /**
233
+ * We need to additionally observe the svgicon attribute
234
+ * for sbb-angular compatibility.
235
+ * @internal
236
+ */
237
+ static get observedAttributes() {
238
+ return super.observedAttributes.concat("svgicon");
239
+ }
245
240
  async fetchSvgIcon(namespace, name) {
246
241
  if (this.getAttribute("aria-label") === this._defaultAriaLabel) {
247
242
  this.removeAttribute("aria-label");
@@ -316,4 +311,4 @@ export {
316
311
  isValid,
317
312
  validateContent
318
313
  };
319
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ljb24vaWNvbi12YWxpZGF0ZS50cyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pY29uL2ljb24tcmVxdWVzdC50cyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pY29uL2ljb24tYmFzZS50cyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pY29uL2ljb24udHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaWNvbi9pY29uLW5hbWUtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNTdHIgPSAodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xuXG4vKipcbiAqIFNhbml0aXplcyB0aGUgU1ZHIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGQgbm9kZXMuXG4gKiBEb2VzIG5vdCBhbGxvdyBgPHNjcmlwdD5gIGVsZW1lbnRzLCBvciBhbnkgYXR0cmlidXRlcyB0aGF0IHN0YXJ0IHdpdGggYG9uYCwgc3VjaCBhcyBgb25jbGlja2AuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkID0gKGVsbTogSFRNTEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgaWYgKGVsbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgIC8vIGlzIGFuIEVsZW1lbnQgbm9kZSBsaWtlIDxkaXY+LCA8cD4gb3IgPHN2Zz5cbiAgICBpZiAoZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzY3JpcHQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZG8gbm90IGFsbG93IGF0dHJpYnV0ZXMgc3RhcnRpbmcgd2l0aCBgb25gXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbG0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsID0gZWxtLmF0dHJpYnV0ZXNbaV0ubmFtZTtcbiAgICAgIGlmIChpc1N0cih2YWwpICYmIHZhbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ29uJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxtLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghaXNWYWxpZChlbG0uY2hpbGROb2Rlc1tpXSBhcyBhbnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgU1ZHIGNvbnRlbnQgYnkgY2hlY2tpbmcgdGhhdCBpdCBoYXMgb25seSBvbmUgcm9vdCBlbGVtZW50IGA8c3ZnPmAsXG4gKiBhZGRpbmcgdGhlIGBjb2xvci1pbW11dGFibGVgIGNsYXNzIGlmIHRoZSBgY29sb3JJbW11dGFibGVgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLFxuICogYW5kIHNhbml0aXppbmcgdGhlIHByb3ZpZGVkIGNvbnRlbnQgYXMgbG9uZyBhcyB0aGUgYHNhbml0aXplYCBwcm9wZXJ0eSBpcyBub3QgZXhwbGljaXRseSBzZXQgdG8gYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQ29udGVudCA9IChcbiAgc3ZnQ29udGVudDogc3RyaW5nLFxuICBzYW5pdGl6ZSA9IHRydWUsXG4gIGNvbG9ySW1tdXRhYmxlID0gZmFsc2UsXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmlubmVySFRNTCA9IHN2Z0NvbnRlbnQ7XG5cbiAgZm9yIChsZXQgaSA9IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGRpdi5jaGlsZE5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdzdmcnKSB7XG4gICAgICBkaXYucmVtb3ZlQ2hpbGQoZGl2LmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3Qgb25seSBoYXZlIDEgcm9vdCBlbGVtZW50XG4gIGNvbnN0IHN2Z0VsbSA9IGRpdi5maXJzdEVsZW1lbnRDaGlsZDtcblxuICBpZiAoc3ZnRWxtICYmIHN2Z0VsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc3ZnJykge1xuICAgIGlmIChjb2xvckltbXV0YWJsZSAmJiAhc3ZnRWxtLmNsYXNzTGlzdC5jb250YWlucygnY29sb3ItaW1tdXRhYmxlJykpIHtcbiAgICAgIHN2Z0VsbS5jbGFzc0xpc3QuYWRkKCdjb2xvci1pbW11dGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3Qgc2FuaXRpemUgdGhlIHN2ZyBlbGVtZW50XG4gICAgaWYgKHNhbml0aXplID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgLy8gc2FuaXRpemUgdGhlIHN2ZyBlbGVtZW50XG4gICAgaWYgKGlzVmFsaWQoc3ZnRWxtIGFzIGFueSkpIHtcbiAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59O1xuIiwiaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYkljb25Db25maWcgfSBmcm9tICcuLi9jb3JlL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9jb25maWcuanMnO1xuXG5pbXBvcnQgeyB2YWxpZGF0ZUNvbnRlbnQgfSBmcm9tICcuL2ljb24tdmFsaWRhdGUuanMnO1xuXG5jb25zdCBpY29uQ2RuID0gJ2h0dHBzOi8vaWNvbnMuYXBwLnNiYi5jaC8nO1xuXG5jb25zdCBpY29uTmFtZXNwYWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgLnNldCgnZGVmYXVsdCcsIGAke2ljb25DZG59aWNvbnMvYClcbiAgLnNldCgncGljdG8nLCBgJHtpY29uQ2RufXBpY3RvL2ApO1xuY29uc3QgcmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxhbnk+PigpO1xuXG4vKiogRmV0Y2hlcyBpY29uIHN2ZyBjb250ZW50IGZyb20gcHJvdmlkZXJzIGFuZCBhc3NlcnRzIG9ubHkgb25lIHJlcXVlc3QgcGVyIGljb24gaXMgbWFkZS4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdmdDb250ZW50ID0gKFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBzYW5pdGl6ZTogYm9vbGVhbixcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGNvbmZpZzogU2JiSWNvbkNvbmZpZyA9IHJlYWRDb25maWcoKS5pY29uID8/IHt9O1xuXG4gIGNvbnN0IHJlc29sdmVkTmFtZXNwYWNlID0gY29uZmlnLm5hbWVzcGFjZXM/LmdldChuYW1lc3BhY2UpID8/IGljb25OYW1lc3BhY2VzLmdldChuYW1lc3BhY2UpO1xuICBpZiAocmVzb2x2ZWROYW1lc3BhY2UgPT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYFVuYWJsZSB0byBmaW5kIHRoZSBuYW1lc3BhY2UgXCIke25hbWVzcGFjZX1cIi4gUGxlYXNlIHJlZ2lzdGVyIHlvdXIgY3VzdG9tIG5hbWVzcGFjZS5gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdXJsID0gYCR7cmVzb2x2ZWROYW1lc3BhY2V9JHtuYW1lfS5zdmdgO1xuXG4gIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlcXVlc3QgZm9yIHRoaXMgdXJsXG4gIGxldCByZXEgPSByZXF1ZXN0cy5nZXQodXJsKTtcblxuICBpZiAoIXJlcSkge1xuICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IHNlcnZlciBzaWRlIHJlbmRlcmVkIGljb25zICh5ZXQpLCBhcyB0aGUgdmFsaWRhdGlvblxuICAgIC8vIGlzIGRvbmUgdmlhIERPTSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgU1NSLlxuICAgIGlmICh0eXBlb2YgZmV0Y2ggIT09ICd1bmRlZmluZWQnICYmICFpc1NlcnZlcikge1xuICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSBjb25maWcuaW50ZXJjZXB0b3IgPz8gKChpKSA9PiBpLnJlcXVlc3QoKSk7XG5cbiAgICAgIHJlcSA9IGludGVyY2VwdG9yKHtcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICB1cmwsXG4gICAgICAgIHJlcXVlc3Q6ICgpID0+XG4gICAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGljb24gJyArIG5hbWVzcGFjZSArICc6JyArIG5hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbnRlbnQoYXdhaXQgcmVzcG9uc2UudGV4dCgpLCBzYW5pdGl6ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgLy8gQ2FjaGUgZm9yIHRoZSBzYW1lIHJlcXVlc3RzXG4gICAgICByZXF1ZXN0cy5zZXQodXJsLCByZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXNvbHZlIHByb21pc2UgZm9yIHNzciBzY2VuYXJpb3NcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXE7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RpdmVSZXN1bHQgfSBmcm9tICdsaXQvZGlyZWN0aXZlLmpzJztcbmltcG9ydCB0eXBlIHsgVW5zYWZlSFRNTERpcmVjdGl2ZSB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyB1bnRpbCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzJztcblxuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXRTdmdDb250ZW50IH0gZnJvbSAnLi9pY29uLXJlcXVlc3QuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vaWNvbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIEBjc3Nwcm9wIFstLXNiYi1pY29uLXN2Zy13aWR0aD1hdXRvXSAtIENhbiBiZSB1c2VkIHRvIHNldCBhIGN1c3RvbSB3aWR0aC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pY29uLXN2Zy1oZWlnaHQ9YXV0b10gLSBDYW4gYmUgdXNlZCB0byBzZXQgYSBjdXN0b20gaGVpZ2h0LlxuICovXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICAnZGF0YS1uYW1lc3BhY2UnOiBTYmJJY29uQmFzZS5fZGVmYXVsdE5hbWVzcGFjZSxcbiAgJ2RhdGEtZW1wdHknOiAnJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2JiSWNvbkJhc2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kZWZhdWx0TmFtZXNwYWNlID0gJ2RlZmF1bHQnO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgX3N2Z05hbWVzcGFjZSA9IFNiYkljb25CYXNlLl9kZWZhdWx0TmFtZXNwYWNlO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiBzdmcgY29udGVudCByZW5kZXJlZCBvbiB0aGUgcGFnZTogPHN2Zz4uLi48L3N2Zz4uXG4gICAqL1xuICBAc3RhdGUoKSBwcml2YXRlIF9zdmdJY29uPzogUHJvbWlzZTxEaXJlY3RpdmVSZXN1bHQ8dHlwZW9mIFVuc2FmZUhUTUxEaXJlY3RpdmU+PjtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCBTVkcgY29udGVudCB0aGF0IGlzIEhUVFAgZmV0Y2hlZCB3aWxsIG5vdCBiZSBjaGVja2VkXG4gICAqIGlmIHRoZSByZXNwb25zZSBTVkcgY29udGVudCBoYXMgYW55IGA8c2NyaXB0PmAgZWxlbWVudHMsIG9yIGFueSBhdHRyaWJ1dGVzXG4gICAqIHRoYXQgc3RhcnQgd2l0aCBgb25gLCBzdWNoIGFzIGBvbmNsaWNrYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ25vLXNhbml0aXplJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgbm9TYW5pdGl6ZSA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkU3ZnSWNvbihpY29uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpY29uTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtuYW1lc3BhY2UsIG5hbWVdID0gdGhpcy5fc3BsaXRJY29uTmFtZShpY29uTmFtZSk7XG4gICAgdGhpcy5fc3ZnTmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLW5hbWVzcGFjZScsIHRoaXMuX3N2Z05hbWVzcGFjZSk7XG5cbiAgICBjb25zdCBzdmdJY29uID0gdGhpcy5mZXRjaFN2Z0ljb24odGhpcy5fc3ZnTmFtZXNwYWNlLCBuYW1lKTtcbiAgICB0aGlzLl9zdmdJY29uID0gc3ZnSWNvbi50aGVuKCh2KSA9PiB1bnNhZmVIVE1MKHYpKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZW1wdHknLCAhKGF3YWl0IHN2Z0ljb24pKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWVtcHR5JywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGZldGNoU3ZnSWNvbihuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgZ2V0U3ZnQ29udGVudChuYW1lc3BhY2UsIG5hbWUsICF0aGlzLm5vU2FuaXRpemUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3BsaXRJY29uTmFtZShpY29uTmFtZTogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgaWYgKCFpY29uTmFtZSkge1xuICAgICAgcmV0dXJuIFsnJywgJyddO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IGljb25OYW1lLnNwbGl0KCc6Jyk7XG4gICAgc3dpdGNoIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gVXNlIGRlZmF1bHQgbmFtZXNwYWNlIGlmIGVtcHR5LlxuICAgICAgICByZXR1cm4gW1NiYkljb25CYXNlLl9kZWZhdWx0TmFtZXNwYWNlLCBwYXJ0c1swXV07XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBwYXJ0cyBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaWNvbiBuYW1lOiBcIiR7aWNvbk5hbWV9XCJgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsIHRoaXMuZ2V0QXR0cmlidXRlKCdyb2xlJykgPz8gJ2ltZycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItaWNvbi1pbm5lclwiXG4gICAgICA+JHt1bnRpbChcbiAgICAgICAgdGhpcy5fc3ZnSWNvbixcbiAgICAgICAgLy8gVG8gcmVzZXJ2ZSBzcGFjZSwgd2UgbmVlZCBhbiBlbXB0eSBzdmcgdG8gYXBwbHkgZGltZW5zaW9uIHRvLlxuICAgICAgICBodG1sYDxzdmcgd2lkdGg9XCIwXCIgaGVpZ2h0PVwiMFwiPjwvc3ZnPmAsXG4gICAgICApfTwvc3BhblxuICAgID5gO1xuICB9XG59XG4iLCJpbXBvcnQgeyBodG1sLCB0eXBlIFByb3BlcnR5VmFsdWVzLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgU2JiSWNvbkJhc2UgfSBmcm9tICcuL2ljb24tYmFzZS5qcyc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaWNvbiBsb2FkZWQgZnJvbSBhIHJlZ2lzdGVyZWQgbmFtZXNwYWNlLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLWljb24nKVxuZXhwb3J0IGNsYXNzIFNiYkljb25FbGVtZW50IGV4dGVuZHMgU2JiSWNvbkJhc2Uge1xuICAvKipcbiAgICogVGhlIHByb3ZpZGVkIG5hbWUgY29uc2lzdGluZyBvZiB0aGUgbmFtZXNwYWNlIGFuZCB0aGUgbmFtZSBvZiB0aGUgaWNvbi5cbiAgICogSWYgdGhlIG5hbWVzcGFjZSBpcyBtaXNzaW5nLCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgXCJzYmJcIiB3aWxsIGJlIHVzZWQuXG4gICAqIEUuZy4gYG5hbWVgICh3aWxsIHVzZSBcInNiYlwiIGFzIG5hbWVzcGFjZSkgb3IgYG5hbWVzcGFjZTpuYW1lYC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIG5hbWUhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfZGVmYXVsdEFyaWFMYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgc2JiLWFuZ3VsYXIgbGlicmFyeSBoYXMgYSBzYmItaWNvbiBjb21wb25lbnQgYXMgd2VsbC4gSW4gb3JkZXIgdG8gcHJvdmlkZVxuICAgKiBjb21wYXRpYmlsaXR5IHdpdGggaXQgKGFzIHNvbWUgaWNvbnMgYXJlIHVzZWQgaW50ZXJuYWxseSBpbnNpZGUgdGhlIG90aGVyIHNiYi1hbmd1bGFyXG4gICAqIGNvbXBvbmVudHMpIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgYXR0cmlidXRlIHN2Z2ljb24gaXMgdXNlZC5cbiAgICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX3NiYkFuZ3VsYXJDb21wYXRpYmlsaXR5ID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGZldGNoU3ZnSWNvbihuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBJZiB0aGUgaWNvbiBpcyBjaGFuZ2luZywgYW5kIHdlIHdlcmUgdXNpbmcgdGhlIGRlZmF1bHRBcmlhTGFiZWwsIHJlc2V0IGl0XG4gICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgPT09IHRoaXMuX2RlZmF1bHRBcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmYXVsdEFyaWFMYWJlbCA9IGBJY29uICR7bmFtZS5yZXBsYWNlKC8tL2csICcgJyl9YDtcblxuICAgIC8vIGdlbmVyYXRlIGEgZGVmYXVsdCBsYWJlbCBpbiBjYXNlIHVzZXIgZG9lcyBub3QgcHJvdmlkZSB0aGVpciBvd25cbiAgICAvLyBhbmQgYXJpYS1oaWRkZW4gaXMgc2V0IHRvIFwiZmFsc2VcIlxuICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PT0gJ2ZhbHNlJyAmJiAhdGhpcy5oYXNBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiBuYW1lKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMuX2RlZmF1bHRBcmlhTGFiZWwpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5mZXRjaFN2Z0ljb24obmFtZXNwYWNlLCBuYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmFtZScpKSB7XG4gICAgICB0aGlzLmxvYWRTdmdJY29uKHRoaXMubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgX29sZDogc3RyaW5nIHwgbnVsbCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKG5hbWUgPT09ICdzdmdpY29uJykge1xuICAgICAgdGhpcy5fc2JiQW5ndWxhckNvbXBhdGliaWxpdHkgPSAhIXZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgX29sZCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuX3NiYkFuZ3VsYXJDb21wYXRpYmlsaXR5ID8gaHRtbGA8c2xvdD48L3Nsb3Q+YCA6IHN1cGVyLnJlbmRlcigpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItaWNvbic6IFNiYkljb25FbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBodG1sLCB0eXBlIExpdEVsZW1lbnQsIG5vdGhpbmcsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcblxuaW1wb3J0ICcuL2ljb24uanMnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJJY29uTmFtZU1peGluVHlwZSB7XG4gIHB1YmxpYyBpY29uTmFtZT86IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlbmRlckljb25TbG90KGNsYXNzbmFtZT86IHN0cmluZyk6IFRlbXBsYXRlUmVzdWx0O1xufVxuXG4vKipcbiAqIEVuaGFuY2UgeW91ciBjb21wb25lbnQgd2l0aCBhbiBpY29uTmFtZSBwcm9wZXJ0eSBhbmQgcHJvdmlkZXMgYSB0ZW1wbGF0ZSBmb3IgdGhlIGljb24gc2xvdC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkljb25OYW1lTWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJJY29uTmFtZU1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSWNvbk5hbWVFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiSWNvbk5hbWVNaXhpblR5cGU+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWNvbiBuYW1lIHdlIHdhbnQgdG8gdXNlLCBjaG9vc2UgZnJvbSB0aGUgc21hbGwgaWNvbiB2YXJpYW50c1xuICAgICAqIGZyb20gdGhlIHVpLWljb25zIGNhdGVnb3J5IGZyb20gaGVyZVxuICAgICAqIGh0dHBzOi8vaWNvbnMuYXBwLnNiYi5jaC5cbiAgICAgKi9cbiAgICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdpY29uLW5hbWUnLCByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBpY29uTmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCByZW5kZXJJY29uU2xvdChjbGFzc25hbWU/OiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHNsb3QgbmFtZT1cImljb25cIj5cbiAgICAgICAgICAke3RoaXMuaWNvbk5hbWVcbiAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb24gbmFtZT0ke3RoaXMuaWNvbk5hbWV9IGNsYXNzPSR7Y2xhc3NuYW1lIHx8IG5vdGhpbmd9Pjwvc2JiLWljb24+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8L3Nsb3Q+XG4gICAgICBgO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJJY29uTmFtZUVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkljb25OYW1lTWl4aW5UeXBlPiAmIFQ7XG59O1xuIl0sIm5hbWVzIjpbIl9fZGVjb3JhdGVDbGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTSxRQUFRLENBQUMsUUFBNEIsT0FBTyxRQUFRO0FBTTdDLE1BQUEsVUFBVSxDQUFDLFFBQThCO0FBQ2hELE1BQUEsSUFBSSxhQUFhLEdBQUc7QUFFdEIsUUFBSSxJQUFJLFNBQVMsWUFBWSxNQUFNLFVBQVU7QUFDcEMsYUFBQTtBQUFBLElBQ1Q7QUFHQSxhQUFTLElBQUksR0FBRyxJQUFJLElBQUksV0FBVyxRQUFRLEtBQUs7QUFDOUMsWUFBTSxNQUFNLElBQUksV0FBVyxDQUFDLEVBQUU7QUFDMUIsVUFBQSxNQUFNLEdBQUcsS0FBSyxJQUFJLGNBQWMsUUFBUSxJQUFJLE1BQU0sR0FBRztBQUNoRCxlQUFBO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxhQUFTLElBQUksR0FBRyxJQUFJLElBQUksV0FBVyxRQUFRLEtBQUs7QUFDOUMsVUFBSSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsQ0FBUSxHQUFHO0FBQy9CLGVBQUE7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDTyxTQUFBO0FBQ1Q7QUFPTyxNQUFNLGtCQUFrQixDQUM3QixZQUNBLFdBQVcsTUFDWCxpQkFBaUIsVUFDTjtBQUNMLFFBQUEsTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN4QyxNQUFJLFlBQVk7QUFFaEIsV0FBUyxJQUFJLElBQUksV0FBVyxTQUFTLEdBQUcsS0FBSyxHQUFHLEtBQUs7QUFDbkQsUUFBSSxJQUFJLFdBQVcsQ0FBQyxFQUFFLFNBQVMsa0JBQWtCLE9BQU87QUFDdEQsVUFBSSxZQUFZLElBQUksV0FBVyxDQUFDLENBQUM7QUFBQSxJQUNuQztB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
314
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ljb24vaWNvbi12YWxpZGF0ZS50cyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pY29uL2ljb24tcmVxdWVzdC50cyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pY29uL2ljb24tYmFzZS50cyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pY29uL2ljb24udHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaWNvbi9pY29uLW5hbWUtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNTdHIgPSAodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xuXG4vKipcbiAqIFNhbml0aXplcyB0aGUgU1ZHIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGQgbm9kZXMuXG4gKiBEb2VzIG5vdCBhbGxvdyBgPHNjcmlwdD5gIGVsZW1lbnRzLCBvciBhbnkgYXR0cmlidXRlcyB0aGF0IHN0YXJ0IHdpdGggYG9uYCwgc3VjaCBhcyBgb25jbGlja2AuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkID0gKGVsbTogSFRNTEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgaWYgKGVsbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgIC8vIGlzIGFuIEVsZW1lbnQgbm9kZSBsaWtlIDxkaXY+LCA8cD4gb3IgPHN2Zz5cbiAgICBpZiAoZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzY3JpcHQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZG8gbm90IGFsbG93IGF0dHJpYnV0ZXMgc3RhcnRpbmcgd2l0aCBgb25gXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbG0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsID0gZWxtLmF0dHJpYnV0ZXNbaV0ubmFtZTtcbiAgICAgIGlmIChpc1N0cih2YWwpICYmIHZhbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ29uJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxtLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghaXNWYWxpZChlbG0uY2hpbGROb2Rlc1tpXSBhcyBhbnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgU1ZHIGNvbnRlbnQgYnkgY2hlY2tpbmcgdGhhdCBpdCBoYXMgb25seSBvbmUgcm9vdCBlbGVtZW50IGA8c3ZnPmAsXG4gKiBhZGRpbmcgdGhlIGBjb2xvci1pbW11dGFibGVgIGNsYXNzIGlmIHRoZSBgY29sb3JJbW11dGFibGVgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLFxuICogYW5kIHNhbml0aXppbmcgdGhlIHByb3ZpZGVkIGNvbnRlbnQgYXMgbG9uZyBhcyB0aGUgYHNhbml0aXplYCBwcm9wZXJ0eSBpcyBub3QgZXhwbGljaXRseSBzZXQgdG8gYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQ29udGVudCA9IChcbiAgc3ZnQ29udGVudDogc3RyaW5nLFxuICBzYW5pdGl6ZSA9IHRydWUsXG4gIGNvbG9ySW1tdXRhYmxlID0gZmFsc2UsXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmlubmVySFRNTCA9IHN2Z0NvbnRlbnQ7XG5cbiAgZm9yIChsZXQgaSA9IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGRpdi5jaGlsZE5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdzdmcnKSB7XG4gICAgICBkaXYucmVtb3ZlQ2hpbGQoZGl2LmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3Qgb25seSBoYXZlIDEgcm9vdCBlbGVtZW50XG4gIGNvbnN0IHN2Z0VsbSA9IGRpdi5maXJzdEVsZW1lbnRDaGlsZDtcblxuICBpZiAoc3ZnRWxtICYmIHN2Z0VsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc3ZnJykge1xuICAgIGlmIChjb2xvckltbXV0YWJsZSAmJiAhc3ZnRWxtLmNsYXNzTGlzdC5jb250YWlucygnY29sb3ItaW1tdXRhYmxlJykpIHtcbiAgICAgIHN2Z0VsbS5jbGFzc0xpc3QuYWRkKCdjb2xvci1pbW11dGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3Qgc2FuaXRpemUgdGhlIHN2ZyBlbGVtZW50XG4gICAgaWYgKHNhbml0aXplID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgLy8gc2FuaXRpemUgdGhlIHN2ZyBlbGVtZW50XG4gICAgaWYgKGlzVmFsaWQoc3ZnRWxtIGFzIGFueSkpIHtcbiAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59O1xuIiwiaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYkljb25Db25maWcgfSBmcm9tICcuLi9jb3JlL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9jb25maWcuanMnO1xuXG5pbXBvcnQgeyB2YWxpZGF0ZUNvbnRlbnQgfSBmcm9tICcuL2ljb24tdmFsaWRhdGUuanMnO1xuXG5jb25zdCBpY29uQ2RuID0gJ2h0dHBzOi8vaWNvbnMuYXBwLnNiYi5jaC8nO1xuXG5jb25zdCBpY29uTmFtZXNwYWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgLnNldCgnZGVmYXVsdCcsIGAke2ljb25DZG59aWNvbnMvYClcbiAgLnNldCgncGljdG8nLCBgJHtpY29uQ2RufXBpY3RvL2ApO1xuY29uc3QgcmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxhbnk+PigpO1xuXG4vKiogRmV0Y2hlcyBpY29uIHN2ZyBjb250ZW50IGZyb20gcHJvdmlkZXJzIGFuZCBhc3NlcnRzIG9ubHkgb25lIHJlcXVlc3QgcGVyIGljb24gaXMgbWFkZS4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdmdDb250ZW50ID0gKFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBzYW5pdGl6ZTogYm9vbGVhbixcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGNvbmZpZzogU2JiSWNvbkNvbmZpZyA9IHJlYWRDb25maWcoKS5pY29uID8/IHt9O1xuXG4gIGNvbnN0IHJlc29sdmVkTmFtZXNwYWNlID0gY29uZmlnLm5hbWVzcGFjZXM/LmdldChuYW1lc3BhY2UpID8/IGljb25OYW1lc3BhY2VzLmdldChuYW1lc3BhY2UpO1xuICBpZiAocmVzb2x2ZWROYW1lc3BhY2UgPT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYFVuYWJsZSB0byBmaW5kIHRoZSBuYW1lc3BhY2UgXCIke25hbWVzcGFjZX1cIi4gUGxlYXNlIHJlZ2lzdGVyIHlvdXIgY3VzdG9tIG5hbWVzcGFjZS5gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdXJsID0gYCR7cmVzb2x2ZWROYW1lc3BhY2V9JHtuYW1lfS5zdmdgO1xuXG4gIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlcXVlc3QgZm9yIHRoaXMgdXJsXG4gIGxldCByZXEgPSByZXF1ZXN0cy5nZXQodXJsKTtcblxuICBpZiAoIXJlcSkge1xuICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IHNlcnZlciBzaWRlIHJlbmRlcmVkIGljb25zICh5ZXQpLCBhcyB0aGUgdmFsaWRhdGlvblxuICAgIC8vIGlzIGRvbmUgdmlhIERPTSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgU1NSLlxuICAgIGlmICh0eXBlb2YgZmV0Y2ggIT09ICd1bmRlZmluZWQnICYmICFpc1NlcnZlcikge1xuICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSBjb25maWcuaW50ZXJjZXB0b3IgPz8gKChpKSA9PiBpLnJlcXVlc3QoKSk7XG5cbiAgICAgIHJlcSA9IGludGVyY2VwdG9yKHtcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICB1cmwsXG4gICAgICAgIHJlcXVlc3Q6ICgpID0+XG4gICAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGljb24gJyArIG5hbWVzcGFjZSArICc6JyArIG5hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbnRlbnQoYXdhaXQgcmVzcG9uc2UudGV4dCgpLCBzYW5pdGl6ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgLy8gQ2FjaGUgZm9yIHRoZSBzYW1lIHJlcXVlc3RzXG4gICAgICByZXF1ZXN0cy5zZXQodXJsLCByZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXNvbHZlIHByb21pc2UgZm9yIHNzciBzY2VuYXJpb3NcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXE7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RpdmVSZXN1bHQgfSBmcm9tICdsaXQvZGlyZWN0aXZlLmpzJztcbmltcG9ydCB0eXBlIHsgVW5zYWZlSFRNTERpcmVjdGl2ZSB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyB1bnRpbCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzJztcblxuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXRTdmdDb250ZW50IH0gZnJvbSAnLi9pY29uLXJlcXVlc3QuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vaWNvbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIEBjc3Nwcm9wIFstLXNiYi1pY29uLXN2Zy13aWR0aD1hdXRvXSAtIENhbiBiZSB1c2VkIHRvIHNldCBhIGN1c3RvbSB3aWR0aC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pY29uLXN2Zy1oZWlnaHQ9YXV0b10gLSBDYW4gYmUgdXNlZCB0byBzZXQgYSBjdXN0b20gaGVpZ2h0LlxuICovXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICAnZGF0YS1uYW1lc3BhY2UnOiBTYmJJY29uQmFzZS5fZGVmYXVsdE5hbWVzcGFjZSxcbiAgJ2RhdGEtZW1wdHknOiAnJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2JiSWNvbkJhc2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kZWZhdWx0TmFtZXNwYWNlID0gJ2RlZmF1bHQnO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgX3N2Z05hbWVzcGFjZSA9IFNiYkljb25CYXNlLl9kZWZhdWx0TmFtZXNwYWNlO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiBzdmcgY29udGVudCByZW5kZXJlZCBvbiB0aGUgcGFnZTogPHN2Zz4uLi48L3N2Zz4uXG4gICAqL1xuICBAc3RhdGUoKSBwcml2YXRlIF9zdmdJY29uPzogUHJvbWlzZTxEaXJlY3RpdmVSZXN1bHQ8dHlwZW9mIFVuc2FmZUhUTUxEaXJlY3RpdmU+PjtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCBTVkcgY29udGVudCB0aGF0IGlzIEhUVFAgZmV0Y2hlZCB3aWxsIG5vdCBiZSBjaGVja2VkXG4gICAqIGlmIHRoZSByZXNwb25zZSBTVkcgY29udGVudCBoYXMgYW55IGA8c2NyaXB0PmAgZWxlbWVudHMsIG9yIGFueSBhdHRyaWJ1dGVzXG4gICAqIHRoYXQgc3RhcnQgd2l0aCBgb25gLCBzdWNoIGFzIGBvbmNsaWNrYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ25vLXNhbml0aXplJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgbm9TYW5pdGl6ZSA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkU3ZnSWNvbihpY29uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpY29uTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtuYW1lc3BhY2UsIG5hbWVdID0gdGhpcy5fc3BsaXRJY29uTmFtZShpY29uTmFtZSk7XG4gICAgdGhpcy5fc3ZnTmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLW5hbWVzcGFjZScsIHRoaXMuX3N2Z05hbWVzcGFjZSk7XG5cbiAgICBjb25zdCBzdmdJY29uID0gdGhpcy5mZXRjaFN2Z0ljb24odGhpcy5fc3ZnTmFtZXNwYWNlLCBuYW1lKTtcbiAgICB0aGlzLl9zdmdJY29uID0gc3ZnSWNvbi50aGVuKCh2KSA9PiB1bnNhZmVIVE1MKHYpKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZW1wdHknLCAhKGF3YWl0IHN2Z0ljb24pKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWVtcHR5JywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGZldGNoU3ZnSWNvbihuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgZ2V0U3ZnQ29udGVudChuYW1lc3BhY2UsIG5hbWUsICF0aGlzLm5vU2FuaXRpemUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3BsaXRJY29uTmFtZShpY29uTmFtZTogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgaWYgKCFpY29uTmFtZSkge1xuICAgICAgcmV0dXJuIFsnJywgJyddO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IGljb25OYW1lLnNwbGl0KCc6Jyk7XG4gICAgc3dpdGNoIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gVXNlIGRlZmF1bHQgbmFtZXNwYWNlIGlmIGVtcHR5LlxuICAgICAgICByZXR1cm4gW1NiYkljb25CYXNlLl9kZWZhdWx0TmFtZXNwYWNlLCBwYXJ0c1swXV07XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBwYXJ0cyBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaWNvbiBuYW1lOiBcIiR7aWNvbk5hbWV9XCJgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsIHRoaXMuZ2V0QXR0cmlidXRlKCdyb2xlJykgPz8gJ2ltZycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItaWNvbi1pbm5lclwiXG4gICAgICA+JHt1bnRpbChcbiAgICAgICAgdGhpcy5fc3ZnSWNvbixcbiAgICAgICAgLy8gVG8gcmVzZXJ2ZSBzcGFjZSwgd2UgbmVlZCBhbiBlbXB0eSBzdmcgdG8gYXBwbHkgZGltZW5zaW9uIHRvLlxuICAgICAgICBodG1sYDxzdmcgd2lkdGg9XCIwXCIgaGVpZ2h0PVwiMFwiPjwvc3ZnPmAsXG4gICAgICApfTwvc3BhblxuICAgID5gO1xuICB9XG59XG4iLCJpbXBvcnQgeyBodG1sLCB0eXBlIFByb3BlcnR5VmFsdWVzLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgU2JiSWNvbkJhc2UgfSBmcm9tICcuL2ljb24tYmFzZS5qcyc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaWNvbiBsb2FkZWQgZnJvbSBhIHJlZ2lzdGVyZWQgbmFtZXNwYWNlLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLWljb24nKVxuZXhwb3J0IGNsYXNzIFNiYkljb25FbGVtZW50IGV4dGVuZHMgU2JiSWNvbkJhc2Uge1xuICAvKipcbiAgICogV2UgbmVlZCB0byBhZGRpdGlvbmFsbHkgb2JzZXJ2ZSB0aGUgc3ZnaWNvbiBhdHRyaWJ1dGVcbiAgICogZm9yIHNiYi1hbmd1bGFyIGNvbXBhdGliaWxpdHkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzLmNvbmNhdCgnc3ZnaWNvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlZCBuYW1lIGNvbnNpc3Rpbmcgb2YgdGhlIG5hbWVzcGFjZSBhbmQgdGhlIG5hbWUgb2YgdGhlIGljb24uXG4gICAqIElmIHRoZSBuYW1lc3BhY2UgaXMgbWlzc2luZywgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIFwic2JiXCIgd2lsbCBiZSB1c2VkLlxuICAgKiBFLmcuIGBuYW1lYCAod2lsbCB1c2UgXCJzYmJcIiBhcyBuYW1lc3BhY2UpIG9yIGBuYW1lc3BhY2U6bmFtZWAuXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBuYW1lITogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2RlZmF1bHRBcmlhTGFiZWwgPSAnJztcblxuICAvKipcbiAgICogVGhlIHNiYi1hbmd1bGFyIGxpYnJhcnkgaGFzIGEgc2JiLWljb24gY29tcG9uZW50IGFzIHdlbGwuIEluIG9yZGVyIHRvIHByb3ZpZGVcbiAgICogY29tcGF0aWJpbGl0eSB3aXRoIGl0IChhcyBzb21lIGljb25zIGFyZSB1c2VkIGludGVybmFsbHkgaW5zaWRlIHRoZSBvdGhlciBzYmItYW5ndWxhclxuICAgKiBjb21wb25lbnRzKSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBzdmdpY29uIGlzIHVzZWQuXG4gICAqL1xuICBAc3RhdGUoKSBwcml2YXRlIF9zYmJBbmd1bGFyQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBmZXRjaFN2Z0ljb24obmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gSWYgdGhlIGljb24gaXMgY2hhbmdpbmcsIGFuZCB3ZSB3ZXJlIHVzaW5nIHRoZSBkZWZhdWx0QXJpYUxhYmVsLCByZXNldCBpdFxuICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpID09PSB0aGlzLl9kZWZhdWx0QXJpYUxhYmVsKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmF1bHRBcmlhTGFiZWwgPSBgSWNvbiAke25hbWUucmVwbGFjZSgvLS9nLCAnICcpfWA7XG5cbiAgICAvLyBnZW5lcmF0ZSBhIGRlZmF1bHQgbGFiZWwgaW4gY2FzZSB1c2VyIGRvZXMgbm90IHByb3ZpZGUgdGhlaXIgb3duXG4gICAgLy8gYW5kIGFyaWEtaGlkZGVuIGlzIHNldCB0byBcImZhbHNlXCJcbiAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICdmYWxzZScgJiYgIXRoaXMuaGFzQXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgbmFtZSkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aGlzLl9kZWZhdWx0QXJpYUxhYmVsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZmV0Y2hTdmdJY29uKG5hbWVzcGFjZSwgbmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25hbWUnKSkge1xuICAgICAgdGhpcy5sb2FkU3ZnSWNvbih0aGlzLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIF9vbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmIChuYW1lID09PSAnc3ZnaWNvbicpIHtcbiAgICAgIHRoaXMuX3NiYkFuZ3VsYXJDb21wYXRpYmlsaXR5ID0gISF2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIF9vbGQsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLl9zYmJBbmd1bGFyQ29tcGF0aWJpbGl0eSA/IGh0bWxgPHNsb3Q+PC9zbG90PmAgOiBzdXBlci5yZW5kZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWljb24nOiBTYmJJY29uRWxlbWVudDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaHRtbCwgdHlwZSBMaXRFbGVtZW50LCBub3RoaW5nLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi9jb3JlL21peGlucy5qcyc7XG5cbmltcG9ydCAnLi9pY29uLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiSWNvbk5hbWVNaXhpblR5cGUge1xuICBwdWJsaWMgaWNvbk5hbWU/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZW5kZXJJY29uU2xvdChjbGFzc25hbWU/OiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdDtcbn1cblxuLyoqXG4gKiBFbmhhbmNlIHlvdXIgY29tcG9uZW50IHdpdGggYW4gaWNvbk5hbWUgcHJvcGVydHkgYW5kIHByb3ZpZGVzIGEgdGVtcGxhdGUgZm9yIHRoZSBpY29uIHNsb3QuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJJY29uTmFtZU1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSWNvbk5hbWVNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkljb25OYW1lRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkljb25OYW1lTWl4aW5UeXBlPiB7XG4gICAgLyoqXG4gICAgICogVGhlIGljb24gbmFtZSB3ZSB3YW50IHRvIHVzZSwgY2hvb3NlIGZyb20gdGhlIHNtYWxsIGljb24gdmFyaWFudHNcbiAgICAgKiBmcm9tIHRoZSB1aS1pY29ucyBjYXRlZ29yeSBmcm9tIGhlcmVcbiAgICAgKiBodHRwczovL2ljb25zLmFwcC5zYmIuY2guXG4gICAgICovXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaWNvbi1uYW1lJywgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgaWNvbk5hbWU/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgcmVuZGVySWNvblNsb3QoY2xhc3NuYW1lPzogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHQge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxzbG90IG5hbWU9XCJpY29uXCI+XG4gICAgICAgICAgJHt0aGlzLmljb25OYW1lXG4gICAgICAgICAgICA/IGh0bWxgPHNiYi1pY29uIG5hbWU9JHt0aGlzLmljb25OYW1lfSBjbGFzcz0ke2NsYXNzbmFtZSB8fCBub3RoaW5nfT48L3NiYi1pY29uPmBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPC9zbG90PlxuICAgICAgYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiSWNvbk5hbWVFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJJY29uTmFtZU1peGluVHlwZT4gJiBUO1xufTtcbiJdLCJuYW1lcyI6WyJfX2RlY29yYXRlQ2xhc3MiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU0sUUFBUSxDQUFDLFFBQTRCLE9BQU8sUUFBUTtBQU03QyxNQUFBLFVBQVUsQ0FBQyxRQUE4QjtBQUNoRCxNQUFBLElBQUksYUFBYSxHQUFHO0FBRXRCLFFBQUksSUFBSSxTQUFTLFlBQVksTUFBTSxVQUFVO0FBQ3BDLGFBQUE7QUFBQSxJQUNUO0FBR0EsYUFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQzlDLFlBQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxFQUFFO0FBQzFCLFVBQUEsTUFBTSxHQUFHLEtBQUssSUFBSSxjQUFjLFFBQVEsSUFBSSxNQUFNLEdBQUc7QUFDaEQsZUFBQTtBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsYUFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQzlDLFVBQUksQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLENBQVEsR0FBRztBQUMvQixlQUFBO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ08s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
@@ -17,20 +17,7 @@ const SbbBreakpointWideMax = 1439;
17
17
  const SbbBreakpointUltraMin = 1440;
18
18
  const SbbBreakpointUltraMax = 2579;
19
19
  const SbbTypoScaleDefault = 16;
20
- const style = css`/**
21
- * Better font rendering (on OS X)
22
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
23
- *
24
- * Usage:
25
- *
26
- * .var_dark_on_light {
27
- * @include font-smoothing;
28
- * }
29
- * .var_light_on_dark {
30
- * @include font-smoothing-reset;
31
- * }
32
- */
33
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
20
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
34
21
  /*
35
22
  * SBB table mixin
36
23
  * Notes:
@@ -364,7 +351,7 @@ let SbbImageElement = class extends LitElement {
364
351
  "conditionFeature": "min-width",
365
352
  "conditionFeatureValue": {
366
353
  "lyneDesignToken": true,
367
- "value": "sbb-breakpoint-small-min"
354
+ "value": "sbb-breakpoint-micro-min"
368
355
  },
369
356
  "conditionOperator": false
370
357
  }
@@ -380,7 +367,7 @@ let SbbImageElement = class extends LitElement {
380
367
  "conditionFeature": "max-width",
381
368
  "conditionFeatureValue": {
382
369
  "lyneDesignToken": true,
383
- "value": "sbb-breakpoint-micro-max"
370
+ "value": "sbb-breakpoint-zero-max"
384
371
  },
385
372
  "conditionOperator": false
386
373
  }
@@ -551,4 +538,4 @@ SbbImageElement = __decorateClass([
551
538
  export {
552
539
  SbbImageElement
553
540
  };
554
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ac2JiLWVzdGEvbHluZS1kZXNpZ24tdG9rZW5zL2Rpc3QvanMvc2JiLXRva2Vucy5tanMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaW1hZ2UvaW1hZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEbyBub3QgZWRpdCBkaXJlY3RseVxuICogR2VuZXJhdGVkIG9uIE1vbiwgMTUgSnVsIDIwMjQgMDk6NDA6MTYgR01UXG4gKi9cblxuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uMXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjJ4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb24zeCA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjR4ID0gMTYwO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uNXggPSAyMDA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb242eCA9IDI0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjEyeCA9IDQ4MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25FYXNpbmcgPSBcImN1YmljLWJlemllciguNDcsIC4xLCAxLCAuNjMpXCI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgxeCA9IDE7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgyeCA9IDI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgzeCA9IDM7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzMXggPSAyO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czJ4ID0gNDtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM0eCA9IDg7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzNnggPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM4eCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czE2eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRaZXJvTWluID0gMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50WmVyb01heCA9IDM1OTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWljcm9NaW4gPSAzNjA7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1pY3JvTWF4ID0gNTk5O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRTbWFsbE1pbiA9IDYwMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50U21hbGxNYXggPSA4Mzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1lZGl1bU1pbiA9IDg0MDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWVkaXVtTWF4ID0gMTAyMztcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TGFyZ2VNaW4gPSAxMDI0O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRMYXJnZU1heCA9IDEyNzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludFdpZGVNaW4gPSAxMjgwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRXaWRlTWF4ID0gMTQzOTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50VWx0cmFNaW4gPSAxNDQwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRVbHRyYU1heCA9IDI1Nzk7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFjayA9IFwiIzAwMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTAgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGExMCA9IFwicmdiYSgwLCAwLCAwLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMTUgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGEyMCA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMzAgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTQwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGE1MCA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhNjAgPSBcInJnYmEoMCwgMCwgMCwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTcwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pZG5pZ2h0ID0gXCIjMTUxNTE1XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDaGFyY29hbCA9IFwiIzIxMjEyMVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9ySXJvbiA9IFwiIzQ0NDQ0NFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQW50aHJhY2l0ZSA9IFwiIzVhNWE1YVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3Jhbml0ZSA9IFwiIzY4Njg2OFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTWV0YWwgPSBcIiM3Njc2NzZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1ldGFsQWxwaGEwID0gXCJyZ2JhKDExOCwgMTE4LCAxMTgsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JNZXRhbEFscGhhMjAgPSBcInJnYmEoMTE4LCAxMTgsIDExOCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2UgPSBcIiM4ZDhkOGRcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTbW9rZUFscGhhNSA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2VBbHBoYTEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEyMCA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTdG9ybSA9IFwiI2E4YThhOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3JhcGhpdGUgPSBcIiNiN2I3YjdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckNlbWVudCA9IFwiI2JkYmRiZFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2VtZW50QWxwaGEwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDZW1lbnRBbHBoYTIwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBsYXRpbnVtID0gXCIjY2RjZGNkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQbGF0aW51bUFscGhhMCA9IFwicmdiYSgyMDUsIDIwNSwgMjA1LCAwKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGxhdGludW1BbHBoYTIwID0gXCJyZ2JhKDIwNSwgMjA1LCAyMDUsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckFsdW1pbml1bSA9IFwiI2QyZDJkMlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU2lsdmVyID0gXCIjZGNkY2RjXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDbG91ZCA9IFwiI2U1ZTVlNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2xvdWRBbHBoYTgwID0gXCJyZ2JhKDIyOSwgMjI5LCAyMjksIDAuOClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pbGsgPSBcIiNmNmY2ZjZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZCA9IFwiI2ViMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkQWxwaGEwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZEFscGhhMjAgPSBcInJnYmEoMjM1LCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWRBbHBoYTkwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMC45KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkTW9kZURhcmsgPSBcIiNmZjM4MzhcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDEyNSA9IFwiI2M2MDAxOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkMTI1QWxwaGEwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWQxMjVBbHBoYTIwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDE1MCA9IFwiI2EyMDAxM1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGUgPSBcIiNmZmZmZmZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGEwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhMjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTMwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGE1MCA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhNjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTcwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNreSA9IFwiIzAwNzljN1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTmlnaHQgPSBcIiMxNDNhODVcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclZpb2xldCA9IFwiIzZmMjI4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGluayA9IFwiI2NmNDA4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQXV0dW1uID0gXCIjZTg0ZTEwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JPcmFuZ2UgPSBcIiNmMjdlMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBlYWNoID0gXCIjZmNiYjAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JMZW1vbiA9IFwiI2ZmZGUxNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQnJvd24gPSBcIiNiNzYwMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckdyZWVuID0gXCIjMDA4YTM2XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JUdXJxdW9pc2UgPSBcIiMwMGE1OWJcIjtcbmV4cG9ydCBjb25zdCBTYmJGb2N1c091dGxpbmVPZmZzZXQgPSAzO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1plcm8gPSA0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc01pY3JvID0gNDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNTbWFsbCA9IDQ7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zTWVkaXVtID0gODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNMYXJnZSA9IDg7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zV2lkZSA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1VsdHJhID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlWmVybyA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZU1pY3JvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlU21hbGwgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVNZWRpdW0gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVMYXJnZSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZVdpZGUgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVVbHRyYSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlWmVybyA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlTWljcm8gPSAyMDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVNtYWxsID0gNDg7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVNZWRpdW0gPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZUxhcmdlID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVXaWRlID0gNzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVVbHRyYSA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlUGFnZU1heFdpZHRoID0gMTIwMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MU9mZnNldFkgPSAyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzFCbHVyID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MVNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93Mk9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzJPZmZzZXRZID0gMTtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyQmx1ciA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MlNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NvZnROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjE1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NvZnROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzSGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzSGFyZDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzSGFyZE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cxT2Zmc2V0WSA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MUJsdXIgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93Mk9mZnNldFkgPSAxO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJCbHVyID0gODtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cyU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U29mdDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U29mdE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMTUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVIYXJkMUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVIYXJkMkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjQpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MU9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzFPZmZzZXRZID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MUJsdXIgPSAxMjg7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MVNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93Mk9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJPZmZzZXRZID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cyQmx1ciA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4wNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTb2Z0MkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTb2Z0TmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOUhhcmQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOUhhcmROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjMpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93MU9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxT2Zmc2V0WSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxQmx1ciA9IDE5MjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93MVNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93Mk9mZnNldFkgPSA0O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyQmx1ciA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU29mdDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0MkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU29mdE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMTUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNvZnROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMUhhcmQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkMkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExSGFyZE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExSGFyZE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNaZXJvID0gMjg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTWljcm8gPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNTbWFsbCA9IDI4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c01lZGl1bSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c0xhcmdlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzV2lkZSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1VsdHJhID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNaZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNNaWNybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzU21hbGwgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c01lZGl1bSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzTGFyZ2UgPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c1dpZGUgPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c1VsdHJhID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYc1plcm8gPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzTWljcm8gPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzU21hbGwgPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzTWVkaXVtID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYc0xhcmdlID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYc1dpZGUgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzVWx0cmEgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNaZXJvID0gNDQ7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTWljcm8gPSA0NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNTbWFsbCA9IDQ0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U01lZGl1bSA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U0xhcmdlID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTV2lkZSA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1VsdHJhID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNWmVybyA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TU1pY3JvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNU21hbGwgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1NZWRpdW0gPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1MYXJnZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TVdpZGUgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1VbHRyYSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFplcm8gPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExNaWNybyA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFNtYWxsID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMTWVkaXVtID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMTGFyZ2UgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExXaWRlID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMVWx0cmEgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpU21hbGwgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpTWVkaXVtID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUljb25VaUxhcmdlID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMXggPSA0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDJ4ID0gODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQzeCA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDR4ID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkNXggPSAyMDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ2eCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDd4ID0gMjg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkOHggPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ5eCA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDEweCA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDEyeCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDE0eCA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDE2eCA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDE4eCA9IDcyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDIweCA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDI0eCA9IDk2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDMweCA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNaZXJvID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTWljcm8gPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNTbWFsbCA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c01lZGl1bSA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c0xhcmdlID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzV2lkZSA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1VsdHJhID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNNaWNybyA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzU21hbGwgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c01lZGl1bSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzTGFyZ2UgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c1dpZGUgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c1VsdHJhID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYc1plcm8gPSAyMDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzTWljcm8gPSAyMDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzU21hbGwgPSAyMDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzTWVkaXVtID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYc0xhcmdlID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYc1dpZGUgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzVWx0cmEgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNaZXJvID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTWljcm8gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU01lZGl1bSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU0xhcmdlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTV2lkZSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1VsdHJhID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNWmVybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTU1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNU21hbGwgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1NZWRpdW0gPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1MYXJnZSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTVdpZGUgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1VbHRyYSA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTFplcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxNaWNybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTFNtYWxsID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMTWVkaXVtID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMTGFyZ2UgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxXaWRlID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMVWx0cmEgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhsWmVybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxNaWNybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxTbWFsbCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxNZWRpdW0gPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhsTGFyZ2UgPSA4MDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhsV2lkZSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxVbHRyYSA9IDk2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsWmVybyA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsTWljcm8gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFNtYWxsID0gNzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxNZWRpdW0gPSA4MDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bExhcmdlID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxXaWRlID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxVbHRyYSA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvRm9udEZhbWlseSA9IFwiXFxcIlNCQlxcXCIsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWZcIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvTGV0dGVyU3BhY2luZ1RpdGxlcyA9IFwiMFwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MZXR0ZXJTcGFjaW5nQm9keVRleHQgPSBcIjAuMDNlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MaW5lSGVpZ2h0VGl0bGVzID0gXCIxLjNcIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvTGluZUhlaWdodEJvZHlUZXh0ID0gXCIxLjc1XCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDc1eCA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTA4MTI1eCA9IDEzO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTA4NzV4ID0gMTQ7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlRGVmYXVsdCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTExMjV4ID0gMTg7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTI1eCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTE1eCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTJ4ID0gMzI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMjV4ID0gNDA7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlM3ggPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUzNXggPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGU0eCA9IDY0O1xuIiwiaW1wb3J0IHtcbiAgU2JiQnJlYWtwb2ludFplcm9NaW4sXG4gIFNiYkJyZWFrcG9pbnRaZXJvTWF4LFxuICBTYmJCcmVha3BvaW50TWljcm9NaW4sXG4gIFNiYkJyZWFrcG9pbnRNaWNyb01heCxcbiAgU2JiQnJlYWtwb2ludFNtYWxsTWluLFxuICBTYmJCcmVha3BvaW50U21hbGxNYXgsXG4gIFNiYkJyZWFrcG9pbnRNZWRpdW1NaW4sXG4gIFNiYkJyZWFrcG9pbnRNZWRpdW1NYXgsXG4gIFNiYkJyZWFrcG9pbnRMYXJnZU1pbixcbiAgU2JiQnJlYWtwb2ludExhcmdlTWF4LFxuICBTYmJCcmVha3BvaW50V2lkZU1pbixcbiAgU2JiQnJlYWtwb2ludFdpZGVNYXgsXG4gIFNiYkJyZWFrcG9pbnRVbHRyYU1pbixcbiAgU2JiQnJlYWtwb2ludFVsdHJhTWF4LFxuICBTYmJUeXBvU2NhbGVEZWZhdWx0LFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1kZXNpZ24tdG9rZW5zJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBldmVudE9wdGlvbnMsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHsgaG9zdENvbnRleHQgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2ltYWdlLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWcge1xuICBicmVha3BvaW50czogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50IHtcbiAgaW1hZ2U6IHtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICB9O1xuICBtZWRpYVF1ZXJpZXM6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeSB7XG4gIGNvbmRpdGlvbkZlYXR1cmU6IHN0cmluZztcbiAgY29uZGl0aW9uRmVhdHVyZVZhbHVlOiB7XG4gICAgbHluZURlc2lnblRva2VuOiBib29sZWFuO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGNvbmRpdGlvbk9wZXJhdG9yOiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3ZSBjaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIG1hbnVhbGx5LCBzbyBpdCdzIHNhZmUgdG8gdXNlIGBhbnlgIGFzIHJldHVybiB0eXBlXG4gKi9cbmNvbnN0IGltYWdlSGVscGVyR2V0QnJlYWtwb2ludHMgPSAoXG4gIGpzb25TdHJpbmc6IHN0cmluZyxcbik6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnQnJlYWtwb2ludFtdID0+IHtcbiAgaWYgKCFqc29uU3RyaW5nIHx8IGpzb25TdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBgYnJlYWtwb2ludHNgIGtleSBpbiBvYmplY3RcbiAgY29uc3QgbG9nV2FybmluZyA9IGltcG9ydC5tZXRhLmVudi5ERVZcbiAgICA/ICgpID0+XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnc2JiLWltYWdlIGVycm9yOiBhdHRyaWJ1dGUgYnJlYWtwb2ludHMgaGFzIHdyb25nIGRhdGEgZm9ybWF0LiBSZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gc2VlIGhvdyB5b3Ugc2hvdWxkIGZvcm1hdCB0aGUgZGF0YSBmb3IgdGhpcyBhdHRyaWJ1dGUuJyxcbiAgICAgICAgKVxuICAgIDogbnVsbDtcbiAgbGV0IGpzb25PYmplY3Q6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnO1xuXG4gIHRyeSB7XG4gICAganNvbk9iamVjdCA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICghanNvbk9iamVjdC5icmVha3BvaW50cyB8fCBqc29uT2JqZWN0LmJyZWFrcG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSBnZXQgYW4gYXJyYXkgb2YgYnJlYWtwb2ludHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25PYmplY3QuYnJlYWtwb2ludHMpKSB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIDEuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggZW50cnkgd2l0aGluIHRoZSBicmVha3BvaW50cyBvYmplY3QgY29udGFpbnMgb25seSBhbGxvd2VkIGtleXNcbiAgICogMi4gbWFrZSBzdXJlIHRoYXQgYWxsIG5lY2Vzc2FyeSBrZXlzIGFyZSBwcmVzZW50XG4gICAqL1xuICBsZXQgd3JvbmdLZXlEZXRlY3RlZCA9IGZhbHNlO1xuICBsZXQgbWlzc2luZ0tleURldGVjdGVkID0gZmFsc2U7XG5cbiAgY29uc3QgYWxsb3dlZEtleXMgPSBbJ2ltYWdlJywgJ21lZGlhUXVlcmllcyddO1xuXG4gIGpzb25PYmplY3QuYnJlYWtwb2ludHMuZm9yRWFjaCgoYnJlYWtwb2ludCkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludCk7XG5cbiAgICBicmVha3BvaW50S2V5cy5mb3JFYWNoKChicmVha3BvaW50S2V5KSA9PiB7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmluY2x1ZGVzKGJyZWFrcG9pbnRLZXkpKSB7XG4gICAgICAgIHdyb25nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsb3dlZEtleXMuZm9yRWFjaCgoYWxsb3dlZEtleSkgPT4ge1xuICAgICAgaWYgKCFicmVha3BvaW50S2V5cy5pbmNsdWRlcyhhbGxvd2VkS2V5KSkge1xuICAgICAgICBtaXNzaW5nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpZiAod3JvbmdLZXlEZXRlY3RlZCB8fCBtaXNzaW5nS2V5RGV0ZWN0ZWQpIHtcbiAgICBsb2dXYXJuaW5nPy4oKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4ganNvbk9iamVjdC5icmVha3BvaW50cztcbn07XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICBvbmNlOiB0cnVlLFxuICBwYXNzaXZlOiB0cnVlLFxufTtcblxuY29uc3QgcHhUb1JlbSA9IChweDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgcmV0dXJuIHB4IC8gU2JiVHlwb1NjYWxlRGVmYXVsdDtcbn07XG5cbmNvbnN0IGJyZWFrcG9pbnRNYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICdzYmItYnJlYWtwb2ludC16ZXJvLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFplcm9NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtemVyby1tYXgnOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRaZXJvTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LW1pY3JvLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1pY3JvTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LW1pY3JvLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1pY3JvTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXNtYWxsLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFNtYWxsTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LXNtYWxsLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFNtYWxsTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LW1lZGl1bS1taW4nOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRNZWRpdW1NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtbWVkaXVtLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1lZGl1bU1heCksXG4gICdzYmItYnJlYWtwb2ludC1sYXJnZS1taW4nOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRMYXJnZU1pbiksXG4gICdzYmItYnJlYWtwb2ludC1sYXJnZS1tYXgnOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRMYXJnZU1heCksXG4gICdzYmItYnJlYWtwb2ludC13aWRlLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFdpZGVNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtd2lkZS1tYXgnOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRXaWRlTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXVsdHJhLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFVsdHJhTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LXVsdHJhLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFVsdHJhTWF4KSxcbn07XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW1hZ2UuXG4gKlxuICogQGV2ZW50IHtFdmVudH0gbG9hZCAtIEVtaXRzIHdoZW4gdGhlIGltYWdlIGhhcyBiZWVuIGxvYWRlZC5cbiAqIEBldmVudCB7RXZlbnR9IGVycm9yIC0gRW1pdHMgd2hlbiB0aGUgaW1hZ2UgbG9hZGluZyBlbmRlZCBpbiBhbiBlcnJvci5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pbWFnZS1hc3BlY3QtcmF0aW89YXV0b10gLSBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSBgYXNwZWN0UmF0aW9gIHByb3BlcnR5LlxuICogVGhpcyB3YXkgd2UgY2FuIGhhdmUsIGZvciBleGFtcGxlLCBhbiBpbWFnZSBjb21wb25lbnQgd2l0aCBhbiBhc3BlY3RcbiAqIHJhdGlvIG9mIDQvMyBpbiBzbWFsbGVyIHZpZXdwb3J0cyBhbmQgMTYvOSBpbiBsYXJnZXIgdmlld3BvcnRzLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLWJvcmRlci1yYWRpdXM9dmFyKC0tc2JiLWJvcmRlci1yYWRpdXMtNHgpXSAtIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogYGJvcmRlclJhZGl1c2AgcHJvcGVydHkgaW4gY2FzZSBvZiBkaWZmZXJlbnQgdmFsdWVzIGZvciBkaWZmZXJlbnQgdmlld3BvcnRzLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLW9iamVjdC1wb3NpdGlvbl0gLSBDYW4gYmUgdXNlZCB0byBzZXQgdGhlIG9iamVjdC1wb3NpdGlvbiBjc3MgcHJvcGVydHkgb2YgdGhlIGltYWdlIGl0c2VsZiBpZiB0aGUgaW1hZ2UgaXRzZWxmIGlzIGNyb3BwZWQuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItaW1hZ2UnKVxuZXhwb3J0IGNsYXNzIFNiYkltYWdlRWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZXJyb3I6ICdlcnJvcicsXG4gICAgbG9hZDogJ2xvYWQnLFxuICB9IGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgX2NhcHRpb25FbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2xpbmtzSW5DYXB0aW9uPzogTm9kZUxpc3RPZjxIVE1MTGlua0VsZW1lbnQ+O1xuICBwcml2YXRlIF9jb25maWcgPSB7XG4gICAgbm9uUmV0aW5hUXVhbGl0eTogJzQ1JyxcbiAgICByZXRpbmFRdWFsaXR5OiAnMjAnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBBbiBhbHQgdGV4dCBpcyBub3QgYWx3YXlzIG5lY2Vzc2FyeSAoZS5nLiBpbiB0ZWFzZXIgY2FyZHMgd2hlblxuICAgKiBhZGRpdGlvbmFsIGxpbmsgdGV4dCBpcyBwcm92aWRlZCkuIEluIHRoaXMgY2FzZSB3ZSBjYW4gbGVhdmVcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBhbHQgYXR0cmlidXRlIGJsYW5rLCBidXQgdGhlIGF0dHJpYnV0ZSBpdHNlbGZcbiAgICogc3RpbGwgbmVlZHMgdG8gYmUgcHJlc2VudC4gVGhhdCB3YXkgd2UgY2FuIHNpZ25hbCBhc3Npc3RpdmVcbiAgICogdGVjaG5vbG9neSwgdGhhdCB0aGV5IGNhbiBza2lwIHRoZSBpbWFnZS5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhbHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgd2Ugc2hvdyBhIGJsdXJyZWQgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYXNcbiAgICogcGxhY2Vob2xkZXIgYmVmb3JlIHRoZSBhY3R1YWwgaW1hZ2Ugc2hvd3MgdXAuIFRoaXMgd2lsbCBoZWxwXG4gICAqIHRvIGltcHJvdmUgdGhlIHBlcmNlaXZlZCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBSZWFkIG1vcmUgYWJvdXRcbiAgICogdGhlIGlkZWEgb2YgbHFpcCBoZXJlOlxuICAgKiBodHRwczovL21lZGl1bS5jb20vQGltZ2l4L2xxaXAteW91ci1pbWFnZXMtZm9yLWZhc3QtbG9hZGluZy0yNTIzZDllZTRhNjJcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3NraXAtbHFpcCcsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHNraXBMcWlwID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgY2FwdGlvbiBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIGltYWdlIChlLmcuXG4gICAqIGRlc2NyaXB0aW9ucyBhbmQgdGhlIGxpa2UpLlxuICAgKiBMaW5rcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZSB0YWJpbmRleD0tMSBpZiBoaWRlRnJvbVNjcmVlbnJlYWRlclxuICAgKiBpcyBzZXQgdG8gdHJ1ZS4gVGhhdCB3YXkgdGhleSB3aWxsIG5vIGxvbmdlciBiZWNvbWUgZm9jdXNhYmxlLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGNhcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGEgY29weXJpZ2h0IHRleHQgaXMgcHJvdmlkZWQsIHdlIHdpbGwgYWRkIGl0IHRvIHRoZSBjYXB0aW9uXG4gICAqIGFuZCBjcmVhdGUgYSBzdHJ1Y3R1cmVkIGRhdGEganNvbi1sZCBibG9jayB3aXRoIHRoZSBjb3B5cmlnaHRcbiAgICogaW5mb3JtYXRpb24uXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgY29weXJpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb3B5cmlnaHQgaG9sZGVyIGNhbiBlaXRoZXIgYmUgYW4gT3JnYW5pemF0aW9uIG9yIGEgUGVyc29uXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjb3B5cmlnaHQtaG9sZGVyJyB9KVxuICBwdWJsaWMgY29weXJpZ2h0SG9sZGVyOiAnT3JnYW5pemF0aW9uJyB8ICdQZXJzb24nID0gJ09yZ2FuaXphdGlvbic7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUsIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjdXN0b20gZm9jYWwgcG9pbnRcbiAgICogZm9yIHRoZSBpbWFnZS4gU2VlIGZ1bGwgZG9jdW1lbnRhdGlvbiBoZXJlOlxuICAgKiBodHRwczovL2RvY3MuaW1naXguY29tL2FwaXMvcmVuZGVyaW5nL2ZvY2FscG9pbnQtY3JvcFxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnY3VzdG9tLWZvY2FsLXBvaW50JywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgY3VzdG9tRm9jYWxQb2ludCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbGF6eSBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICogY2hhbmdlIHRoZSBkZWNvZGluZyB0byBhc3luYywgb3RoZXJ3aXNlIHRoZSBkZWNvZGluZyBpcyBzZXQgdG8gYXV0b1xuICAgKiB3aGljaCBsZWF2ZXMgdGhlIGhhbmRsaW5nIHVwIHRvIHRoZSBicm93c2VyLiBSZWFkIG1vcmUgYWJvdXQgdGhlXG4gICAqIGRlY29kaW5nIGF0dHJpYnV0ZSBoZXJlOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEltYWdlRWxlbWVudC9kZWNvZGluZ1xuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGRlY29kaW5nOiAnc3luYycgfCAnYXN5bmMnIHwgJ2F1dG8nID0gJ2F1dG8nO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlLCB0byByZWNlaXZlIHZpc3VhbCBndWlkYW5jZSB3aGVyZSB0aGUgY3VzdG9tIGZvY2FsXG4gICAqIHBvaW50IGlzIGN1cnJlbnRseSBzZXQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC1kZWJ1ZycsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGZvY2FsUG9pbnREZWJ1ZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgZmxvYXRpbmcgbnVtYmVyIGJldHdlZW4gMCAobGVmdCkgYW5kIDEgKHJpZ2h0KS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LXgnLCB0eXBlOiBOdW1iZXIgfSkgcHVibGljIGZvY2FsUG9pbnRYID0gMTtcblxuICAvKipcbiAgICogUGFzcyBpbiBhIGZsb2F0aW5nIG51bWJlciBiZXR3ZWVuIDAgKHRvcCkgYW5kIDEgKGJvdHRvbSkuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC15JywgdHlwZTogTnVtYmVyIH0pIHB1YmxpYyBmb2NhbFBvaW50WSA9IDE7XG5cbiAgLyoqXG4gICAqIFJpZ2h0IG5vdyB0aGUgbW9kdWxlIGlzIGhlYXZpbHkgY291cGxlZCB3aXRoIHRoZSBpbWFnZSBkZWxpdmVyeVxuICAgKiBzZXJ2aWNlIGltZ2l4IGFuZCBkZXBlbmRzIG9uIHRoZSBvcmlnaW5hbCBmaWxlcyBiZWluZyBzdG9yZWRcbiAgICogaW5zaWRlIEFFTS4gWW91IGNhbiBwYXNzIGluIGFueSBodHRwczovL2Nkbi5pbWcuc2JiLmNoIGltZ1xuICAgKiBzcmMgYWRkcmVzcyB5b3UgZmluZCBvbiBzYmIuY2ggdG8gcGxheSBhcm91bmQgd2l0aCBpdC4gSnVzdFxuICAgKiBzdHJpcCB0aGUgdXJsIHBhcmFtZXRlcnMgYW5kIHBhc3RlIGluIHRoZSBwbGFpbiBmaWxlIGFkZHJlc3MuXG4gICAqIElmIHlvdSB3YW50IHRvIGtub3cgaG93IHRvIGJlc3Qgd29yayB3aXRoIHRoaXMgbW9kdWxlIHdpdGhcbiAgICogaW1hZ2VzIGNvbWluZyBmcm9tIGEgZGlmZmVyZW50IHNvdXJjZSwgcGxlYXNlIGNvbnRhY3QgdGhlXG4gICAqIExZTkUgQ29yZSBUZWFtLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaW1hZ2Utc3JjJyB9KSBwdWJsaWMgaW1hZ2VTcmM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbXBvcnRhbmNlIGF0dHJpYnV0ZSBpcyBmYWlybHkgbmV3IGF0dHJpYnV0ZSB3aGljaCBzaG91bGRcbiAgICogaGVscCB0aGUgYnJvd3NlciBkZWNpZGUgd2hpY2ggcmVzb3VyY2VzIGl0IHNob3VsZCBwcmlvcml0aXNlXG4gICAqIGR1cmluZyBwYWdlIGxvYWQuIFdlIHdpbGwgc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYmFzZWQgb24gdGhlXG4gICAqIHZhbHVlLCB3ZSByZWNlaXZlIGluIHRoZSBsb2FkaW5nIGF0dHJpYnV0ZS4gJ2VhZ2VyJywgd2hpY2ggd2UgdXNlXG4gICAqIGZvciB0aGUgbGFyZ2VzdCBpbWFnZSB3aXRoaW4gdGhlIGluaXRpYWwgdmlld3BvcnQsIHdpbGwgc2V0IHRoZVxuICAgKiBhdHRyaWJ1dGUgdmFsdWUgdG8gJ2hpZ2gnLiAnbGF6eScsIHdoaWNoIHdlIHVzZSBmb3IgaW1hZ2VzIGJlbG93XG4gICAqIHRoZSBmb2xkLCB3aWxsIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlIHRvICdsb3cnLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGltcG9ydGFuY2U6ICdhdXRvJyB8ICdoaWdoJyB8ICdsb3cnID0gJ2hpZ2gnO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBzdXBwb3J0IG9mIG5hdGl2ZSBpbWFnZSBsYXp5IGxvYWRpbmcsIHdlIGNhbiBub3dcbiAgICogZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBsb2FkIHRoZSBpbWFnZSBpbW1lZGlhdGVseSBvciBvbmx5XG4gICAqIG9uY2UgaXQgaXMgY2xvc2UgdG8gdGhlIHZpc2libGUgdmlld3BvcnQuIFRoZSB2YWx1ZSBlYWdlciBpc1xuICAgKiBiZXN0IHVzZWQgZm9yIGltYWdlcyB3aXRoaW4gdGhlIGluaXRpYWwgdmlld3BvcnQuIFdlIHdhbnQgdG9cbiAgICogbG9hZCB0aGVzZSBpbWFnZXMgYXMgZmFzdCBhcyBwb3NzaWJsZSB0byBpbXByb3ZlIHRoZSBDb3JlIFdlYlxuICAgKiBWaXRhbHMgdmFsdWVzLiBsYXp5IG9uIHRoZSBvdGhlciBoYW5kIHdvcmtzIGJlc3QgZm9yIGltYWdlc1xuICAgKiB3aGljaCBhcmUgZnVydGhlciBkb3duIHRoZSBwYWdlIG9yIGludmlzaWJsZSBkdXJpbmcgdGhlIGxvYWRpbmdcbiAgICogb2YgdGhlIGluaXRpYWwgdmlld3BvcnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgbG9hZGluZzogJ2VhZ2VyJyB8ICdsYXp5JyA9ICdlYWdlcic7XG5cbiAgLyoqXG4gICAqIFdpdGggcGVyZm9ybWFuY2UubWFyayB5b3UgY2FuIGxvZyBhIHRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhlIG5hbWUgeW91IGRlZmluZSBpbiBwZXJmb3JtYW5jZU1hcmsgd2hlbiBhIGNlcnRhaW4gZXZlbnQgaXNcbiAgICogaGFwcGVuaW5nLiBJbiBvdXIgY2FzZSB3ZSB3aWxsIGxvZyB0aGUgcGVyZm9ybWFuY2UubWFyayBpbnRvXG4gICAqIHRoZSBQZXJmb3JtYW5jZUVudHJ5IEFQSSBvbmNlIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQuXG4gICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdG9vbHMgbGlrZSBTcGVlZEN1cnZlIG9yIExpZ2h0aG91c2UgYXJlXG4gICAqIHRoZW4gYWJsZSB0byBncmFiIHRoZXNlIGVudHJpZXMgZnJvbSB0aGUgUGVyZm9ybWFuY2VFbnRyeSBBUElcbiAgICogYW5kIGdpdmUgdXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhbmQgaW5zaWdodHMgYWJvdXQgb3VyIHBhZ2VcbiAgICogbG9hZGluZyBiZWhhdmlvdXIuIFdlIGFyZSB0aGVuIGFsc28gYWJsZSB0byBtb25pdG9yIHRoZXNlXG4gICAqIHZhbHVlcyBvdmVyIGEgbG9uZyBwZXJpb2QgdG8gc2VlIGlmIG91ciBwZXJmb3JtYW5jZVxuICAgKiBpbmNyZWFzZXMgb3IgZGVjcmVhc2VzIG92ZXIgdGltZS4gQmVzdCB0byB1c2UgbG93ZXJjYXNlIHN0cmluZ3NcbiAgICogaGVyZSwgc2VwYXJhdGUgd29yZHMgd2l0aCB1bmRlcnNjb3JlcyBvciBkYXNoZXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwZXJmb3JtYW5jZS1tYXJrJyB9KSBwdWJsaWMgcGVyZm9ybWFuY2VNYXJrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBwaWN0dXJlU2l6ZXNDb25maWcgb2JqZWN0LCB5b3UgY2FuIHBhc3MgaW4gaW5mb3JtYXRpb25cbiAgICogaW50byBpbWFnZSBhYm91dCB3aGF0IGtpbmQgb2Ygc291cmNlIGVsZW1lbnRzIHNob3VsZCBnZXRcbiAgICogcmVuZGVyZWQuIG1lZGlhUXVlcmllcyBhY2NlcHRzIG11bHRpcGxlIE1lZGlhIFF1ZXJ5IGVudHJpZXNcbiAgICogd2hpY2ggY2FuIGdldCBjb21iaW5lZCBieSBkZWZpbmluZyBhIGNvbmRpdGlvbk9wZXJhdG9yLlxuICAgKiBUeXBlIGlzOiBzdHJpbmdpZmllZCBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZy1PYmplY3RcbiAgICogQW4gZXhhbXBsZSBjb3VsZCBsb29rIGxpa2UgdGhpczpcbiAgICoge1xuICAgKiAgICBcImJyZWFrcG9pbnRzXCI6IFtcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCI2NzVcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjEyMDBcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbGFyZ2UtbWluXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH0sXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNTQ5XCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCI5NzZcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtc21hbGwtbWluXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH0sXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiMTgwXCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCIzMjBcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1heC13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4XCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogXCJhbmRcIlxuICAgKiAgICAgICAgICB9LFxuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwib3JpZW50YXRpb25cIixcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAqICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiBmYWxzZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJsYW5kc2NhcGVcIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfVxuICAgKiAgICBdXG4gICAqICB9XG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwaWN0dXJlLXNpemVzLWNvbmZpZycgfSkgcHVibGljIHBpY3R1cmVTaXplc0NvbmZpZz86IHN0cmluZztcblxuICAvKipcbiAgICogQm9yZGVyIHJhZGl1cyBvZiB0aGUgaW1hZ2UuIENob29zZSBiZXR3ZWVuIGEgZGVmYXVsdCByYWRpdXMsIG5vIHJhZGl1cyBhbmQgYSBjb21wbGV0ZWx5IHJvdW5kIGltYWdlLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYm9yZGVyLXJhZGl1cycsIHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGJvcmRlclJhZGl1czpcbiAgICB8ICdkZWZhdWx0J1xuICAgIHwgJ25vbmUnXG4gICAgfCAncm91bmQnID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBTZXQgYW4gYXNwZWN0IHJhdGlvXG4gICAqIGRlZmF1bHQgaXMgJzE2LTknICgxNi85KVxuICAgKiBvdGhlciB2YWx1ZXM6ICdmcmVlJywgJzEtMScsICcxLTInLCAnMi0xJywgJzItMycsICczLTInLCAnMy00JywgJzQtMycsICc0LTUnLCAnNS00JywgJzktMTYnXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhc3BlY3QtcmF0aW8nLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhc3BlY3RSYXRpbzpcbiAgICB8ICdmcmVlJ1xuICAgIHwgJzEtMSdcbiAgICB8ICcxLTInXG4gICAgfCAnMi0xJ1xuICAgIHwgJzItMydcbiAgICB8ICczLTInXG4gICAgfCAnMy00J1xuICAgIHwgJzQtMydcbiAgICB8ICc0LTUnXG4gICAgfCAnNS00J1xuICAgIHwgJzktMTYnXG4gICAgfCAnMTYtOScgPSAnMTYtOSc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGltYWdlIGlzIGZpbmlzaGVkIGxvYWRpbmcgb3IgZmFpbGVkIHRvIGxvYWQuICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uPEhUTUxJbWFnZUVsZW1lbnQ+KCcuc2JiLWltYWdlX19pbWcnKT8uY29tcGxldGUgPz8gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5lc3RlZCBpbiBhbiBgPHNiYi10ZWFzZXItaGVybz5gIGVsZW1lbnQgb24gaW4gYW4gYDxzYmItdGVhc2VyLXBhaWQ+YCBlbGVtZW50LlxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgJ2RhdGEtdGVhc2VyJyxcbiAgICAgICEhaG9zdENvbnRleHQoJ3NiYi10ZWFzZXItaGVybycsIHRoaXMpIHx8ICEhdGhpcy5jbG9zZXN0KCdzYmItdGVhc2VyLXBhaWQnKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuX2NhcHRpb25FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGlua3NJbkNhcHRpb24gPSB0aGlzLl9jYXB0aW9uRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMaW5rRWxlbWVudD4oJ2EnKTtcblxuICAgIGlmICghdGhpcy5fbGlua3NJbkNhcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRGb2N1c0FiaWxpdHlUb0xpbmtzSW5DYXB0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZSB0byBjaGVjayB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYWxyZWFkeSBiZWVuIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgaWYgKHRoaXMuY29tcGxldGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWxvYWRlZCcsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xvZ1BlcmZvcm1hbmNlTWFya3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGVyZm9ybWFuY2VNYXJrKSB7XG4gICAgICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHRoaXMucGVyZm9ybWFuY2VNYXJrKTtcbiAgICAgIHBlcmZvcm1hbmNlLm1hcmsodGhpcy5wZXJmb3JtYW5jZU1hcmspO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX21hdGNoTWVkaWFRdWVyeURlc2lnblRva2VuKGJyZWFrcG9pbnRTaXplTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJyZWFrcG9pbnRNYXBbYnJlYWtwb2ludFNpemVOYW1lXTtcbiAgICByZXR1cm4gdmFsdWUgPyBgJHt2YWx1ZX1yZW1gIDogJyc7XG4gIH1cblxuICBwcml2YXRlIF9hZGRGb2N1c0FiaWxpdHlUb0xpbmtzSW5DYXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpbmtzSW5DYXB0aW9uPy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXBhcmVJbWFnZVVybChiYXNlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxxdWlwID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICghYmFzZVVybCB8fCBiYXNlVXJsID09PSAnJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIGFuIFVSTCB3aXRob3V0IGEgc2NoZW1hIHdpbGwgZmFpbCwgYnV0IGlzIGEgdmFsaWQgaW5wdXQgZm9yIGJhc2VVcmwuXG4gICAgLy8gZS5nLiBpbWFnZS1zcmMgY2FuIGJlIGh0dHBzOi8vZXhhbXBsZS5jb20vbXktaW1hZ2UucG5nIG9yIC9teS1pbWFnZS5wbmdcbiAgICBjb25zdCBpc0Z1bGx5UXVhbGlmaWVkVXJsID0gISFiYXNlVXJsLm1hdGNoKC9eXFx3KzpcXC9cXC8vKTtcbiAgICBjb25zdCBpbWFnZVVybE9iaiA9IGlzRnVsbHlRdWFsaWZpZWRVcmwgPyBuZXcgVVJMKGJhc2VVcmwpIDogbmV3IFVSTChgaHR0cDovL25vb3AvJHtiYXNlVXJsfWApO1xuXG4gICAgaWYgKGxxdWlwKSB7XG4gICAgICAvLyBibHVyIGFuZCBzaXplOiA/Ymx1cj0xMDAmdz0xMDAmaD01NlxuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnYmx1cicsICcxMDAnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ3cnLCAnMTAwJyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdoJywgJzU2Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENETiBJbmZvcm1hdGlvbjogaHR0cHM6Ly9kb2NzLmltZ2l4LmNvbS9hcGlzL3JlbmRlcmluZ1xuICAgICAgLy8gcGFyYW0uYXV0bzogP2F1dG89Zm9ybWF0LGNvbXByZXNzLGNzPXRpbnlzcmdiXG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdhdXRvJywgJ2Zvcm1hdCxjb21wcmVzcyxjcz10aW55c3JnYicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1c3RvbUZvY2FsUG9pbnQpIHtcbiAgICAgIC8vIGNyb3A6IGAmZml0PWNyb3AmY3JvcD1mb2NhbHBvaW50JmZwLXg9JHt0aGlzLmZvY2FsUG9pbnRYfSZmcC15PSR7dGhpcy5mb2NhbFBvaW50WX0mZnAtej0xYCxcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZpdCcsICdjcm9wJyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdjcm9wJywgJ2ZvY2FscG9pbnQnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLXgnLCB0aGlzLmZvY2FsUG9pbnRYLnRvU3RyaW5nKDEwKSk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC15JywgdGhpcy5mb2NhbFBvaW50WS50b1N0cmluZygxMCkpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAteicsICcxJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9jYWxQb2ludERlYnVnKSB7XG4gICAgICAvLyBmb2NhbFBvaW50RGVidWc6ICcmZnAtZGVidWc9dHJ1ZSdcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLWRlYnVnJywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIG9mIFwibm9vcFwiIGhvc3QsIHdlIGRvbid0IHJldHVybiB0aGUgaG9zdCBhbmQgbXVzdCByZW1vdmUgdGhlXG4gICAgLy8gc3RhcnRpbmcgYC9gIG9mIHRoZSBwYXRobmFtZS5cbiAgICByZXR1cm4gaXNGdWxseVF1YWxpZmllZFVybFxuICAgICAgPyBpbWFnZVVybE9iai5ocmVmXG4gICAgICA6IGltYWdlVXJsT2JqLnBhdGhuYW1lLnN1YnN0cmluZygxKSArIGltYWdlVXJsT2JqLnNlYXJjaDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXBhcmVQaWN0dXJlU2l6ZUNvbmZpZ3MoKTogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W10ge1xuICAgIGxldCBwaWN0dXJlU2l6ZXNDb25maWc7XG5cbiAgICBpZiAodGhpcy5waWN0dXJlU2l6ZXNDb25maWcpIHtcbiAgICAgIHBpY3R1cmVTaXplc0NvbmZpZyA9IHRoaXMucGljdHVyZVNpemVzQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgcGljdHVyZVNpemVzQ29uZmlnID0gYHtcbiAgICAgICAgXCJicmVha3BvaW50c1wiOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDY3NSxcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiAxMjAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgICAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1sYXJnZS1taW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogNTQ5LFxuICAgICAgICAgICAgICBcIndpZHRoXCI6IDk3NlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtc21hbGwtbWluXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDE4MCxcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiAzMjBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtYXgtd2lkdGhcIixcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LW1pY3JvLW1heFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1gO1xuICAgIH1cblxuICAgIHJldHVybiBpbWFnZUhlbHBlckdldEJyZWFrcG9pbnRzKHBpY3R1cmVTaXplc0NvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVNZWRpYVF1ZXJ5U3RyaW5nKFxuICAgIG1lZGlhUXVlcmllczogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5W10sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IG1lZGlhUXVlcnkgPSAnJztcblxuICAgIG1lZGlhUXVlcmllcy5mb3JFYWNoKChtcSkgPT4ge1xuICAgICAgY29uc3QgbXFDb25kaXRpb24gPSBtcS5jb25kaXRpb25GZWF0dXJlO1xuICAgICAgbGV0IG1xVmFsdWU7XG5cbiAgICAgIGlmIChtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUubHluZURlc2lnblRva2VuKSB7XG4gICAgICAgIG1xVmFsdWUgPSB0aGlzLl9tYXRjaE1lZGlhUXVlcnlEZXNpZ25Ub2tlbihtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXFWYWx1ZSA9IG1xLmNvbmRpdGlvbkZlYXR1cmVWYWx1ZS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbXFDb21iaW5lciA9IG1xLmNvbmRpdGlvbk9wZXJhdG9yID8gYCAke21xLmNvbmRpdGlvbk9wZXJhdG9yfSBgIDogJyc7XG5cbiAgICAgIG1lZGlhUXVlcnkgKz0gYCgke21xQ29uZGl0aW9ufTogJHttcVZhbHVlfSkke21xQ29tYmluZXJ9YDtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZWRpYVF1ZXJ5O1xuICB9XG5cbiAgQGV2ZW50T3B0aW9ucyhldmVudExpc3RlbmVyT3B0aW9ucylcbiAgcHJpdmF0ZSBfaW1hZ2VMb2FkZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fbG9nUGVyZm9ybWFuY2VNYXJrcygpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWxvYWRlZCcsIHRydWUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2xvYWQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBsZXQgeyBjYXB0aW9uIH0gPSB0aGlzO1xuICAgIGxldCBzY2hlbWFEYXRhID0gJyc7XG5cbiAgICBjb25zdCBpbWFnZVVybExRSVAgPSB0aGlzLl9wcmVwYXJlSW1hZ2VVcmwodGhpcy5pbWFnZVNyYywgdHJ1ZSk7XG4gICAgY29uc3QgaW1hZ2VVcmxXaXRoUGFyYW1zID0gdGhpcy5fcHJlcGFyZUltYWdlVXJsKHRoaXMuaW1hZ2VTcmMsIGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgPT09ICdsYXp5Jykge1xuICAgICAgdGhpcy5kZWNvZGluZyA9ICdhc3luYyc7XG4gICAgICB0aGlzLmltcG9ydGFuY2UgPSAnbG93JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb3B5cmlnaHQpIHtcbiAgICAgIGNhcHRpb24gPSBgJHt0aGlzLmNhcHRpb259IMKpJHt0aGlzLmNvcHlyaWdodH1gO1xuICAgICAgc2NoZW1hRGF0YSA9IGB7XG4gICAgICAgIFwiQGNvbnRleHRcIjogXCJodHRwczovL3NjaGVtYS5vcmdcIixcbiAgICAgICAgXCJAdHlwZVwiOiBcIlBob3RvZ3JhcGhcIixcbiAgICAgICAgXCJpbWFnZVwiOiBcIiR7dGhpcy5pbWFnZVNyY31cIixcbiAgICAgICAgXCJjb3B5cmlnaHRIb2xkZXJcIjoge1xuICAgICAgICAgIFwiQHR5cGVcIjogXCIke3RoaXMuY29weXJpZ2h0SG9sZGVyfVwiLFxuICAgICAgICAgIFwibmFtZVwiOiBcIiR7dGhpcy5jb3B5cmlnaHR9XCJcbiAgICAgICAgfVxuICAgICAgfWA7XG4gICAgfVxuXG4gICAgY29uc3QgcGljdHVyZVNpemVDb25maWdzID0gdGhpcy5fcHJlcGFyZVBpY3R1cmVTaXplQ29uZmlncygpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFsdCBhdHRyaWJ1dGUgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGZvciB0aGUgaW1nIGVsZW1lbnQuXG4gICAgICogSWYgaXQgaGFzIGFuIGVtcHR5IHN0cmluZyBhcyBpdHMgdmFsdWUsIGl0IGlzIHNpbXBseSBpZ25vcmVkXG4gICAgICogYnkgYXNzaXN0aXZlIHRlY2hub2xvZ2llcy4gSWYgd2UgbGVhdmUgaXQgb3V0IGNvbXBsZXRlbHksXG4gICAgICogdGhleSBtaWdodCB0cnkgdG8gaW50ZXJwcmV0IHRoZSBpbWcgZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxmaWd1cmUgY2xhc3M9XCJzYmItaW1hZ2VfX2ZpZ3VyZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWltYWdlX193cmFwcGVyXCI+XG4gICAgICAgICAgJHshdGhpcy5za2lwTHFpcFxuICAgICAgICAgICAgPyBodG1sYDxpbWdcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19ibHVycmVkXCJcbiAgICAgICAgICAgICAgICBzcmM9JHtpbWFnZVVybExRSVB9XG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1NjJcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9JHt0aGlzLmxvYWRpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgICBkZWNvZGluZz0ke3RoaXMuZGVjb2RpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgLz5gXG4gICAgICAgICAgICA6IG5vdGhpbmd9XG5cbiAgICAgICAgICA8cGljdHVyZT5cbiAgICAgICAgICAgIDwhLS0gcmVuZGVyIHBpY3R1cmUgZWxlbWVudCBzb3VyY2VzIC0tPlxuICAgICAgICAgICAgJHtwaWN0dXJlU2l6ZUNvbmZpZ3MubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBjb25maWcuaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gY29uZmlnLmltYWdlLndpZHRoO1xuICAgICAgICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fY3JlYXRlTWVkaWFRdWVyeVN0cmluZyhjb25maWcubWVkaWFRdWVyaWVzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBodG1sYCA8c291cmNlXG4gICAgICAgICAgICAgICAgICBtZWRpYT0ke2Ake21lZGlhUXVlcnl9YH1cbiAgICAgICAgICAgICAgICAgIHNpemVzPSR7YCR7aW1hZ2VXaWR0aH1weGB9XG4gICAgICAgICAgICAgICAgICBzcmNzZXQ9JHtcbiAgICAgICAgICAgICAgICAgICAgYCR7aW1hZ2VVcmxXaXRoUGFyYW1zfSZ3PSR7aW1hZ2VXaWR0aH0maD0ke2ltYWdlSGVpZ2h0fSZxPSR7dGhpcy5fY29uZmlnLm5vblJldGluYVF1YWxpdHl9ICR7aW1hZ2VXaWR0aH13LCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7aW1hZ2VVcmxXaXRoUGFyYW1zfSZ3PSR7aW1hZ2VXaWR0aCAqIDJ9Jmg9JHtpbWFnZUhlaWdodCAqIDJ9JnE9JHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25maWcucmV0aW5hUXVhbGl0eVxuICAgICAgICAgICAgICAgICAgICB9ICR7aW1hZ2VXaWR0aCAqIDJ9d2BcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+PC9zb3VyY2U+YCxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBhbHQ9JHt0aGlzLmFsdCB8fCAnJ31cbiAgICAgICAgICAgICAgQGxvYWQ9JHt0aGlzLl9pbWFnZUxvYWRlZH1cbiAgICAgICAgICAgICAgQGVycm9yPSR7KCkgPT4gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InKSl9XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19pbWdcIlxuICAgICAgICAgICAgICBzcmM9JHt0aGlzLmltYWdlU3JjIX1cbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAwXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiNTYyXCJcbiAgICAgICAgICAgICAgbG9hZGluZz0ke3RoaXMubG9hZGluZyA/PyBub3RoaW5nfVxuICAgICAgICAgICAgICBkZWNvZGluZz0ke3RoaXMuZGVjb2RpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgLmZldGNoUHJpb3JpdHk9JHt0aGlzLmltcG9ydGFuY2UgPz8gbm90aGluZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9waWN0dXJlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtjYXB0aW9uXG4gICAgICAgICAgPyBodG1sYDxmaWdjYXB0aW9uXG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19jYXB0aW9uXCJcbiAgICAgICAgICAgICAgLmlubmVySFRNTD0ke2NhcHRpb259XG4gICAgICAgICAgICAgICR7cmVmKChlbCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcHRpb25FbGVtZW50ID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPjwvZmlnY2FwdGlvbj5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAke3NjaGVtYURhdGFcbiAgICAgICAgICA/IGh0bWxgPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vbGQranNvblwiIC5pbm5lckhUTUw9JHtzY2hlbWFEYXRhfT48L3NjcmlwdD5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgPC9maWd1cmU+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWltYWdlJzogU2JiSW1hZ2VFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2EiXSwibWFwcGluZ3MiOiI7Ozs7QUFzQk8sTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx5QkFB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QUFwRSxTQUFTLEVBQUUsV0FBVyxzQkFBc0IsTUFBTSxTQUFTO0FBQUEsR0ExRGpELGdCQTBEMEQsV0FBQSxvQkFBQSxDQUFBO0FBU2xELGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBbkVDLGdCQW1FUSxXQUFBLFlBQUEsQ0FBQTtBQU1pRCxnQkFBQTtBQUFBLEVBQW5FLFNBQVMsRUFBRSxXQUFXLHFCQUFxQixNQUFNLFNBQVM7QUFBQSxHQXpFaEQsZ0JBeUV5RCxXQUFBLG1CQUFBLENBQUE7QUFLTCxnQkFBQTtBQUFBLEVBQTlELFNBQVMsRUFBRSxXQUFXLGlCQUFpQixNQUFNLFFBQVE7QUFBQSxHQTlFM0MsZ0JBOEVvRCxXQUFBLGVBQUEsQ0FBQTtBQUtBLGdCQUFBO0FBQUEsRUFBOUQsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLE1BQU0sUUFBUTtBQUFBLEdBbkYzQyxnQkFtRm9ELFdBQUEsZUFBQSxDQUFBO0FBWWxCLGdCQUFBO0FBQUEsRUFBNUMsU0FBUyxFQUFFLFdBQVcsYUFBYTtBQUFBLEdBL0Z6QixnQkErRmtDLFdBQUEsWUFBQSxDQUFBO0FBVzFCLGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBMUdDLGdCQTBHUSxXQUFBLGNBQUEsQ0FBQTtBQVlBLGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBdEhDLGdCQXNIUSxXQUFBLFdBQUEsQ0FBQTtBQWVpQyxnQkFBQTtBQUFBLEVBQW5ELFNBQVMsRUFBRSxXQUFXLG9CQUFvQjtBQUFBLEdBckloQyxnQkFxSXlDLFdBQUEsbUJBQUEsQ0FBQTtBQXNFSSxnQkFBQTtBQUFBLEVBQXZELFNBQVMsRUFBRSxXQUFXLHdCQUF3QjtBQUFBLEdBM01wQyxnQkEyTTZDLFdBQUEsc0JBQUEsQ0FBQTtBQUtRLGdCQUFBO0FBQUEsRUFBL0QsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLFNBQVMsTUFBTTtBQUFBLEdBaE41QyxnQkFnTnFELFdBQUEsZ0JBQUEsQ0FBQTtBQVd6RCxnQkFBQTtBQUFBLEVBRE4sU0FBUyxFQUFFLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtBQUFBLEdBMU4zQyxnQkEyTkosV0FBQSxlQUFBLENBQUE7QUEwTUMsZ0JBQUE7QUFBQSxFQURQLGFBQWEsb0JBQW9CO0FBQUEsR0FwYXZCLGdCQXFhSCxXQUFBLGdCQUFBLENBQUE7QUFyYUcsa0JBQU4sZ0JBQUE7QUFBQSxFQUROLGNBQWMsV0FBVztBQUFBLEdBQ2IsZUFBQTsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19
541
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ac2JiLWVzdGEvbHluZS1kZXNpZ24tdG9rZW5zL2Rpc3QvanMvc2JiLXRva2Vucy5tanMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaW1hZ2UvaW1hZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEbyBub3QgZWRpdCBkaXJlY3RseVxuICogR2VuZXJhdGVkIG9uIE1vbiwgMDIgU2VwIDIwMjQgMTU6NDU6MTEgR01UXG4gKi9cblxuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uMXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjJ4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb24zeCA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjR4ID0gMTYwO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uNXggPSAyMDA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb242eCA9IDI0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjEyeCA9IDQ4MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25FYXNpbmcgPSBcImN1YmljLWJlemllciguNDcsIC4xLCAxLCAuNjMpXCI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgxeCA9IDE7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgyeCA9IDI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgzeCA9IDM7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzMXggPSAyO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czJ4ID0gNDtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM0eCA9IDg7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzNnggPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM4eCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czE2eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRaZXJvTWluID0gMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50WmVyb01heCA9IDM1OTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWljcm9NaW4gPSAzNjA7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1pY3JvTWF4ID0gNTk5O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRTbWFsbE1pbiA9IDYwMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50U21hbGxNYXggPSA4Mzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1lZGl1bU1pbiA9IDg0MDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWVkaXVtTWF4ID0gMTAyMztcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TGFyZ2VNaW4gPSAxMDI0O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRMYXJnZU1heCA9IDEyNzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludFdpZGVNaW4gPSAxMjgwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRXaWRlTWF4ID0gMTQzOTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50VWx0cmFNaW4gPSAxNDQwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRVbHRyYU1heCA9IDI1Nzk7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFjayA9IFwiIzAwMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTAgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGExMCA9IFwicmdiYSgwLCAwLCAwLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMTUgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGEyMCA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMzAgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTQwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGE1MCA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhNjAgPSBcInJnYmEoMCwgMCwgMCwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTcwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pZG5pZ2h0ID0gXCIjMTUxNTE1XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDaGFyY29hbCA9IFwiIzIxMjEyMVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9ySXJvbiA9IFwiIzQ0NDQ0NFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQW50aHJhY2l0ZSA9IFwiIzVhNWE1YVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3Jhbml0ZSA9IFwiIzY4Njg2OFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTWV0YWwgPSBcIiM3Njc2NzZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1ldGFsQWxwaGEwID0gXCJyZ2JhKDExOCwgMTE4LCAxMTgsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JNZXRhbEFscGhhMjAgPSBcInJnYmEoMTE4LCAxMTgsIDExOCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2UgPSBcIiM4ZDhkOGRcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTbW9rZUFscGhhNSA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2VBbHBoYTEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEyMCA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTdG9ybSA9IFwiI2E4YThhOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3JhcGhpdGUgPSBcIiNiN2I3YjdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckNlbWVudCA9IFwiI2JkYmRiZFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2VtZW50QWxwaGEwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDZW1lbnRBbHBoYTIwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBsYXRpbnVtID0gXCIjY2RjZGNkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQbGF0aW51bUFscGhhMCA9IFwicmdiYSgyMDUsIDIwNSwgMjA1LCAwKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGxhdGludW1BbHBoYTIwID0gXCJyZ2JhKDIwNSwgMjA1LCAyMDUsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckFsdW1pbml1bSA9IFwiI2QyZDJkMlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU2lsdmVyID0gXCIjZGNkY2RjXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDbG91ZCA9IFwiI2U1ZTVlNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2xvdWRBbHBoYTgwID0gXCJyZ2JhKDIyOSwgMjI5LCAyMjksIDAuOClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pbGsgPSBcIiNmNmY2ZjZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZCA9IFwiI2ViMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkQWxwaGEwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZEFscGhhMjAgPSBcInJnYmEoMjM1LCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWRBbHBoYTkwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMC45KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkTW9kZURhcmsgPSBcIiNmZjM4MzhcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDEyNSA9IFwiI2M2MDAxOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkMTI1QWxwaGEwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWQxMjVBbHBoYTIwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDE1MCA9IFwiI2EyMDAxM1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGUgPSBcIiNmZmZmZmZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGEwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhMjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTMwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGE1MCA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhNjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTcwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNreSA9IFwiIzAwNzljN1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTmlnaHQgPSBcIiMxNDNhODVcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclZpb2xldCA9IFwiIzZmMjI4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGluayA9IFwiI2NmNDA4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQXV0dW1uID0gXCIjZTg0ZTEwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JPcmFuZ2UgPSBcIiNmMjdlMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBlYWNoID0gXCIjZmNiYjAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JMZW1vbiA9IFwiI2ZmZGUxNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQnJvd24gPSBcIiNiNzYwMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckdyZWVuID0gXCIjMDA4YTM2XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JUdXJxdW9pc2UgPSBcIiMwMGE1OWJcIjtcbmV4cG9ydCBjb25zdCBTYmJGb2N1c091dGxpbmVPZmZzZXQgPSAzO1xuZXhwb3J0IGNvbnN0IFNiYkhvdmVySW1hZ2VCcmlnaHRuZXNzID0gMS4wNzU7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zWmVybyA9IDQ7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zTWljcm8gPSA0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1NtYWxsID0gNDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNNZWRpdW0gPSA4O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc0xhcmdlID0gODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNXaWRlID0gMTI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zVWx0cmEgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlTWljcm8gPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZU1lZGl1bSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZUxhcmdlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlV2lkZSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZVVsdHJhID0gMzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVNaWNybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlU21hbGwgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZU1lZGl1bSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlTGFyZ2UgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVdpZGUgPSA3MjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVVsdHJhID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VQYWdlTWF4V2lkdGggPSAxMjAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzFPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxT2Zmc2V0WSA9IDI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MUJsdXIgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93Mk9mZnNldFkgPSAxO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzJCbHVyID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMTUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkMUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkMkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM0hhcmROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjQpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MU9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFPZmZzZXRZID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cxQmx1ciA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cyT2Zmc2V0WSA9IDE7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MkJsdXIgPSA4O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNvZnQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4wNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0MkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0TmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjMpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1SGFyZE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MU9mZnNldFkgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxQmx1ciA9IDEyODtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93Mk9mZnNldFkgPSA0O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJCbHVyID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MlNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U29mdDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjE1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzFPZmZzZXRZID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzFCbHVyID0gMTkyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93Mk9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyT2Zmc2V0WSA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJCbHVyID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExSGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1plcm8gPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNNaWNybyA9IDI4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1NtYWxsID0gMjg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTWVkaXVtID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTGFyZ2UgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNXaWRlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzVWx0cmEgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c1plcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c01pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNTbWFsbCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzTWVkaXVtID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNMYXJnZSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzV2lkZSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzVWx0cmEgPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzWmVybyA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNNaWNybyA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNTbWFsbCA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNNZWRpdW0gPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzTGFyZ2UgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzV2lkZSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNVbHRyYSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1plcm8gPSA0NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNNaWNybyA9IDQ0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1NtYWxsID0gNDQ7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTWVkaXVtID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTGFyZ2UgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNXaWRlID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTVWx0cmEgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1aZXJvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNTWljcm8gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1TbWFsbCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TU1lZGl1bSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TUxhcmdlID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNV2lkZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TVVsdHJhID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMWmVybyA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TE1pY3JvID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMU21hbGwgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExNZWRpdW0gPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExMYXJnZSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFdpZGUgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExVbHRyYSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlNZWRpdW0gPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpTGFyZ2UgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQxeCA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMnggPSA4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDN4ID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkNHggPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ1eCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDZ4ID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkN3ggPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ4eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDl4ID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTB4ID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTJ4ID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTR4ID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTZ4ID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTh4ID0gNzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjB4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjR4ID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMzB4ID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1plcm8gPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNNaWNybyA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1NtYWxsID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTWVkaXVtID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTGFyZ2UgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNXaWRlID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzVWx0cmEgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c1plcm8gPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c01pY3JvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNTbWFsbCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzTWVkaXVtID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNMYXJnZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzV2lkZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzVWx0cmEgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzWmVybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNNaWNybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNTbWFsbCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNNZWRpdW0gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzTGFyZ2UgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzV2lkZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNVbHRyYSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1plcm8gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNNaWNybyA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1NtYWxsID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTWVkaXVtID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTGFyZ2UgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNXaWRlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTVWx0cmEgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1aZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNTWljcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1TbWFsbCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTU1lZGl1bSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTUxhcmdlID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNV2lkZSA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTVVsdHJhID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMWmVybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTE1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMU21hbGwgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxNZWRpdW0gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxMYXJnZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTFdpZGUgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxVbHRyYSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxaZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbE1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbFNtYWxsID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbE1lZGl1bSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxMYXJnZSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxXaWRlID0gODA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbFVsdHJhID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxaZXJvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxNaWNybyA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsU21hbGwgPSA3MjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bE1lZGl1bSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsTGFyZ2UgPSA5NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFdpZGUgPSA5NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFVsdHJhID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9Gb250RmFtaWx5ID0gXCJcXFwiU0JCXFxcIiwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MZXR0ZXJTcGFjaW5nVGl0bGVzID0gXCIwXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xldHRlclNwYWNpbmdCb2R5VGV4dCA9IFwiMC4wM2VtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xpbmVIZWlnaHRUaXRsZXMgPSBcIjEuM1wiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MaW5lSGVpZ2h0Qm9keVRleHQgPSBcIjEuNzVcIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUwNzV4ID0gMTI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDgxMjV4ID0gMTM7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDg3NXggPSAxNDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGVEZWZhdWx0ID0gMTY7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTEyNXggPSAxODtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUxMjV4ID0gMjA7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTV4ID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMnggPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUyNXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUzeCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTM1eCA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTR4ID0gNjQ7XG4iLCJpbXBvcnQge1xuICBTYmJCcmVha3BvaW50WmVyb01pbixcbiAgU2JiQnJlYWtwb2ludFplcm9NYXgsXG4gIFNiYkJyZWFrcG9pbnRNaWNyb01pbixcbiAgU2JiQnJlYWtwb2ludE1pY3JvTWF4LFxuICBTYmJCcmVha3BvaW50U21hbGxNaW4sXG4gIFNiYkJyZWFrcG9pbnRTbWFsbE1heCxcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1pbixcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1heCxcbiAgU2JiQnJlYWtwb2ludExhcmdlTWluLFxuICBTYmJCcmVha3BvaW50TGFyZ2VNYXgsXG4gIFNiYkJyZWFrcG9pbnRXaWRlTWluLFxuICBTYmJCcmVha3BvaW50V2lkZU1heCxcbiAgU2JiQnJlYWtwb2ludFVsdHJhTWluLFxuICBTYmJCcmVha3BvaW50VWx0cmFNYXgsXG4gIFNiYlR5cG9TY2FsZURlZmF1bHQsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWRlc2lnbi10b2tlbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIGV2ZW50T3B0aW9ucywgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBob3N0Q29udGV4dCB9IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vaW1hZ2Uuc2Nzcz9saXQmaW5saW5lJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZyB7XG4gIGJyZWFrcG9pbnRzOiBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ0JyZWFrcG9pbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ0JyZWFrcG9pbnQge1xuICBpbWFnZToge1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gIH07XG4gIG1lZGlhUXVlcmllczogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5IHtcbiAgY29uZGl0aW9uRmVhdHVyZTogc3RyaW5nO1xuICBjb25kaXRpb25GZWF0dXJlVmFsdWU6IHtcbiAgICBseW5lRGVzaWduVG9rZW46IGJvb2xlYW47XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbiAgY29uZGl0aW9uT3BlcmF0b3I6IGZhbHNlO1xufVxuXG4vKipcbiAqIHdlIGNoZWNrIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEgbWFudWFsbHksIHNvIGl0J3Mgc2FmZSB0byB1c2UgYGFueWAgYXMgcmV0dXJuIHR5cGVcbiAqL1xuY29uc3QgaW1hZ2VIZWxwZXJHZXRCcmVha3BvaW50cyA9IChcbiAganNvblN0cmluZzogc3RyaW5nLFxuKTogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W10gPT4ge1xuICBpZiAoIWpzb25TdHJpbmcgfHwganNvblN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGBicmVha3BvaW50c2Aga2V5IGluIG9iamVjdFxuICBjb25zdCBsb2dXYXJuaW5nID0gaW1wb3J0Lm1ldGEuZW52LkRFVlxuICAgID8gKCkgPT5cbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdzYmItaW1hZ2UgZXJyb3I6IGF0dHJpYnV0ZSBicmVha3BvaW50cyBoYXMgd3JvbmcgZGF0YSBmb3JtYXQuIFJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiB0byBzZWUgaG93IHlvdSBzaG91bGQgZm9ybWF0IHRoZSBkYXRhIGZvciB0aGlzIGF0dHJpYnV0ZS4nLFxuICAgICAgICApXG4gICAgOiBudWxsO1xuICBsZXQganNvbk9iamVjdDogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWc7XG5cbiAgdHJ5IHtcbiAgICBqc29uT2JqZWN0ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfSBjYXRjaCB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKCFqc29uT2JqZWN0LmJyZWFrcG9pbnRzIHx8IGpzb25PYmplY3QuYnJlYWtwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIGdldCBhbiBhcnJheSBvZiBicmVha3BvaW50c1xuICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbk9iamVjdC5icmVha3BvaW50cykpIHtcbiAgICBsb2dXYXJuaW5nPy4oKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogMS4gbWFrZSBzdXJlIHRoYXQgZWFjaCBlbnRyeSB3aXRoaW4gdGhlIGJyZWFrcG9pbnRzIG9iamVjdCBjb250YWlucyBvbmx5IGFsbG93ZWQga2V5c1xuICAgKiAyLiBtYWtlIHN1cmUgdGhhdCBhbGwgbmVjZXNzYXJ5IGtleXMgYXJlIHByZXNlbnRcbiAgICovXG4gIGxldCB3cm9uZ0tleURldGVjdGVkID0gZmFsc2U7XG4gIGxldCBtaXNzaW5nS2V5RGV0ZWN0ZWQgPSBmYWxzZTtcblxuICBjb25zdCBhbGxvd2VkS2V5cyA9IFsnaW1hZ2UnLCAnbWVkaWFRdWVyaWVzJ107XG5cbiAganNvbk9iamVjdC5icmVha3BvaW50cy5mb3JFYWNoKChicmVha3BvaW50KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludEtleXMgPSBPYmplY3Qua2V5cyhicmVha3BvaW50KTtcblxuICAgIGJyZWFrcG9pbnRLZXlzLmZvckVhY2goKGJyZWFrcG9pbnRLZXkpID0+IHtcbiAgICAgIGlmICghYWxsb3dlZEtleXMuaW5jbHVkZXMoYnJlYWtwb2ludEtleSkpIHtcbiAgICAgICAgd3JvbmdLZXlEZXRlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGxvd2VkS2V5cy5mb3JFYWNoKChhbGxvd2VkS2V5KSA9PiB7XG4gICAgICBpZiAoIWJyZWFrcG9pbnRLZXlzLmluY2x1ZGVzKGFsbG93ZWRLZXkpKSB7XG4gICAgICAgIG1pc3NpbmdLZXlEZXRlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmICh3cm9uZ0tleURldGVjdGVkIHx8IG1pc3NpbmdLZXlEZXRlY3RlZCkge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBqc29uT2JqZWN0LmJyZWFrcG9pbnRzO1xufTtcblxuY29uc3QgZXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gIG9uY2U6IHRydWUsXG4gIHBhc3NpdmU6IHRydWUsXG59O1xuXG5jb25zdCBweFRvUmVtID0gKHB4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICByZXR1cm4gcHggLyBTYmJUeXBvU2NhbGVEZWZhdWx0O1xufTtcblxuY29uc3QgYnJlYWtwb2ludE1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgJ3NiYi1icmVha3BvaW50LXplcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50WmVyb01pbiksXG4gICdzYmItYnJlYWtwb2ludC16ZXJvLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFplcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWVkaXVtLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1lZGl1bU1pbiksXG4gICdzYmItYnJlYWtwb2ludC1tZWRpdW0tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWVkaXVtTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXdpZGUtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50V2lkZU1pbiksXG4gICdzYmItYnJlYWtwb2ludC13aWRlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFdpZGVNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNYXgpLFxufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbWFnZS5cbiAqXG4gKiBAZXZlbnQge0V2ZW50fSBsb2FkIC0gRW1pdHMgd2hlbiB0aGUgaW1hZ2UgaGFzIGJlZW4gbG9hZGVkLlxuICogQGV2ZW50IHtFdmVudH0gZXJyb3IgLSBFbWl0cyB3aGVuIHRoZSBpbWFnZSBsb2FkaW5nIGVuZGVkIGluIGFuIGVycm9yLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLWFzcGVjdC1yYXRpbz1hdXRvXSAtIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGBhc3BlY3RSYXRpb2AgcHJvcGVydHkuXG4gKiBUaGlzIHdheSB3ZSBjYW4gaGF2ZSwgZm9yIGV4YW1wbGUsIGFuIGltYWdlIGNvbXBvbmVudCB3aXRoIGFuIGFzcGVjdFxuICogcmF0aW8gb2YgNC8zIGluIHNtYWxsZXIgdmlld3BvcnRzIGFuZCAxNi85IGluIGxhcmdlciB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2UtYm9yZGVyLXJhZGl1cz12YXIoLS1zYmItYm9yZGVyLXJhZGl1cy00eCldIC0gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiBgYm9yZGVyUmFkaXVzYCBwcm9wZXJ0eSBpbiBjYXNlIG9mIGRpZmZlcmVudCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2Utb2JqZWN0LXBvc2l0aW9uXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LXBvc2l0aW9uIGNzcyBwcm9wZXJ0eSBvZiB0aGUgaW1hZ2UgaXRzZWxmIGlmIHRoZSBpbWFnZSBpdHNlbGYgaXMgY3JvcHBlZC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1pbWFnZScpXG5leHBvcnQgY2xhc3MgU2JiSW1hZ2VFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICBsb2FkOiAnbG9hZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSBfY2FwdGlvbkVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfbGlua3NJbkNhcHRpb24/OiBOb2RlTGlzdE9mPEhUTUxMaW5rRWxlbWVudD47XG4gIHByaXZhdGUgX2NvbmZpZyA9IHtcbiAgICBub25SZXRpbmFRdWFsaXR5OiAnNDUnLFxuICAgIHJldGluYVF1YWxpdHk6ICcyMCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIEFuIGFsdCB0ZXh0IGlzIG5vdCBhbHdheXMgbmVjZXNzYXJ5IChlLmcuIGluIHRlYXNlciBjYXJkcyB3aGVuXG4gICAqIGFkZGl0aW9uYWwgbGluayB0ZXh0IGlzIHByb3ZpZGVkKS4gSW4gdGhpcyBjYXNlIHdlIGNhbiBsZWF2ZVxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGFsdCBhdHRyaWJ1dGUgYmxhbmssIGJ1dCB0aGUgYXR0cmlidXRlIGl0c2VsZlxuICAgKiBzdGlsbCBuZWVkcyB0byBiZSBwcmVzZW50LiBUaGF0IHdheSB3ZSBjYW4gc2lnbmFsIGFzc2lzdGl2ZVxuICAgKiB0ZWNobm9sb2d5LCB0aGF0IHRoZXkgY2FuIHNraXAgdGhlIGltYWdlLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFsdD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0IHRvIGZhbHNlLCB3ZSBzaG93IGEgYmx1cnJlZCB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBhc1xuICAgKiBwbGFjZWhvbGRlciBiZWZvcmUgdGhlIGFjdHVhbCBpbWFnZSBzaG93cyB1cC4gVGhpcyB3aWxsIGhlbHBcbiAgICogdG8gaW1wcm92ZSB0aGUgcGVyY2VpdmVkIGxvYWRpbmcgcGVyZm9ybWFuY2UuIFJlYWQgbW9yZSBhYm91dFxuICAgKiB0aGUgaWRlYSBvZiBscWlwIGhlcmU6XG4gICAqIGh0dHBzOi8vbWVkaXVtLmNvbS9AaW1naXgvbHFpcC15b3VyLWltYWdlcy1mb3ItZmFzdC1sb2FkaW5nLTI1MjNkOWVlNGE2MlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2tpcC1scWlwJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgc2tpcExxaXAgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBjYXB0aW9uIGNhbiBwcm92aWRlIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgaW1hZ2UgKGUuZy5cbiAgICogZGVzY3JpcHRpb25zIGFuZCB0aGUgbGlrZSkuXG4gICAqIExpbmtzIHdpbGwgYXV0b21hdGljYWxseSByZWNlaXZlIHRhYmluZGV4PS0xIGlmIGhpZGVGcm9tU2NyZWVucmVhZGVyXG4gICAqIGlzIHNldCB0byB0cnVlLiBUaGF0IHdheSB0aGV5IHdpbGwgbm8gbG9uZ2VyIGJlY29tZSBmb2N1c2FibGUuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgY2FwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYSBjb3B5cmlnaHQgdGV4dCBpcyBwcm92aWRlZCwgd2Ugd2lsbCBhZGQgaXQgdG8gdGhlIGNhcHRpb25cbiAgICogYW5kIGNyZWF0ZSBhIHN0cnVjdHVyZWQgZGF0YSBqc29uLWxkIGJsb2NrIHdpdGggdGhlIGNvcHlyaWdodFxuICAgKiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBjb3B5cmlnaHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvcHlyaWdodCBob2xkZXIgY2FuIGVpdGhlciBiZSBhbiBPcmdhbml6YXRpb24gb3IgYSBQZXJzb25cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2NvcHlyaWdodC1ob2xkZXInIH0pXG4gIHB1YmxpYyBjb3B5cmlnaHRIb2xkZXI6ICdPcmdhbml6YXRpb24nIHwgJ1BlcnNvbicgPSAnT3JnYW5pemF0aW9uJztcblxuICAvKipcbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSwgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGN1c3RvbSBmb2NhbCBwb2ludFxuICAgKiBmb3IgdGhlIGltYWdlLiBTZWUgZnVsbCBkb2N1bWVudGF0aW9uIGhlcmU6XG4gICAqIGh0dHBzOi8vZG9jcy5pbWdpeC5jb20vYXBpcy9yZW5kZXJpbmcvZm9jYWxwb2ludC1jcm9wXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjdXN0b20tZm9jYWwtcG9pbnQnLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBjdXN0b21Gb2NhbFBvaW50ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBsYXp5IHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgbW9kdWxlIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBjaGFuZ2UgdGhlIGRlY29kaW5nIHRvIGFzeW5jLCBvdGhlcndpc2UgdGhlIGRlY29kaW5nIGlzIHNldCB0byBhdXRvXG4gICAqIHdoaWNoIGxlYXZlcyB0aGUgaGFuZGxpbmcgdXAgdG8gdGhlIGJyb3dzZXIuIFJlYWQgbW9yZSBhYm91dCB0aGVcbiAgICogZGVjb2RpbmcgYXR0cmlidXRlIGhlcmU6XG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW1hZ2VFbGVtZW50L2RlY29kaW5nXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgZGVjb2Rpbmc6ICdzeW5jJyB8ICdhc3luYycgfCAnYXV0bycgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUsIHRvIHJlY2VpdmUgdmlzdWFsIGd1aWRhbmNlIHdoZXJlIHRoZSBjdXN0b20gZm9jYWxcbiAgICogcG9pbnQgaXMgY3VycmVudGx5IHNldC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LWRlYnVnJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgZm9jYWxQb2ludERlYnVnID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBhc3MgaW4gYSBmbG9hdGluZyBudW1iZXIgYmV0d2VlbiAwIChsZWZ0KSBhbmQgMSAocmlnaHQpLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZm9jYWwtcG9pbnQteCcsIHR5cGU6IE51bWJlciB9KSBwdWJsaWMgZm9jYWxQb2ludFggPSAxO1xuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgZmxvYXRpbmcgbnVtYmVyIGJldHdlZW4gMCAodG9wKSBhbmQgMSAoYm90dG9tKS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LXknLCB0eXBlOiBOdW1iZXIgfSkgcHVibGljIGZvY2FsUG9pbnRZID0gMTtcblxuICAvKipcbiAgICogUmlnaHQgbm93IHRoZSBtb2R1bGUgaXMgaGVhdmlseSBjb3VwbGVkIHdpdGggdGhlIGltYWdlIGRlbGl2ZXJ5XG4gICAqIHNlcnZpY2UgaW1naXggYW5kIGRlcGVuZHMgb24gdGhlIG9yaWdpbmFsIGZpbGVzIGJlaW5nIHN0b3JlZFxuICAgKiBpbnNpZGUgQUVNLiBZb3UgY2FuIHBhc3MgaW4gYW55IGh0dHBzOi8vY2RuLmltZy5zYmIuY2ggaW1nXG4gICAqIHNyYyBhZGRyZXNzIHlvdSBmaW5kIG9uIHNiYi5jaCB0byBwbGF5IGFyb3VuZCB3aXRoIGl0LiBKdXN0XG4gICAqIHN0cmlwIHRoZSB1cmwgcGFyYW1ldGVycyBhbmQgcGFzdGUgaW4gdGhlIHBsYWluIGZpbGUgYWRkcmVzcy5cbiAgICogSWYgeW91IHdhbnQgdG8ga25vdyBob3cgdG8gYmVzdCB3b3JrIHdpdGggdGhpcyBtb2R1bGUgd2l0aFxuICAgKiBpbWFnZXMgY29taW5nIGZyb20gYSBkaWZmZXJlbnQgc291cmNlLCBwbGVhc2UgY29udGFjdCB0aGVcbiAgICogTFlORSBDb3JlIFRlYW0uXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdpbWFnZS1zcmMnIH0pIHB1YmxpYyBpbWFnZVNyYz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGltcG9ydGFuY2UgYXR0cmlidXRlIGlzIGZhaXJseSBuZXcgYXR0cmlidXRlIHdoaWNoIHNob3VsZFxuICAgKiBoZWxwIHRoZSBicm93c2VyIGRlY2lkZSB3aGljaCByZXNvdXJjZXMgaXQgc2hvdWxkIHByaW9yaXRpc2VcbiAgICogZHVyaW5nIHBhZ2UgbG9hZC4gV2Ugd2lsbCBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiYXNlZCBvbiB0aGVcbiAgICogdmFsdWUsIHdlIHJlY2VpdmUgaW4gdGhlIGxvYWRpbmcgYXR0cmlidXRlLiAnZWFnZXInLCB3aGljaCB3ZSB1c2VcbiAgICogZm9yIHRoZSBsYXJnZXN0IGltYWdlIHdpdGhpbiB0aGUgaW5pdGlhbCB2aWV3cG9ydCwgd2lsbCBzZXQgdGhlXG4gICAqIGF0dHJpYnV0ZSB2YWx1ZSB0byAnaGlnaCcuICdsYXp5Jywgd2hpY2ggd2UgdXNlIGZvciBpbWFnZXMgYmVsb3dcbiAgICogdGhlIGZvbGQsIHdpbGwgc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgdG8gJ2xvdycuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgaW1wb3J0YW5jZTogJ2F1dG8nIHwgJ2hpZ2gnIHwgJ2xvdycgPSAnaGlnaCc7XG5cbiAgLyoqXG4gICAqIFdpdGggdGhlIHN1cHBvcnQgb2YgbmF0aXZlIGltYWdlIGxhenkgbG9hZGluZywgd2UgY2FuIG5vd1xuICAgKiBkZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGxvYWQgdGhlIGltYWdlIGltbWVkaWF0ZWx5IG9yIG9ubHlcbiAgICogb25jZSBpdCBpcyBjbG9zZSB0byB0aGUgdmlzaWJsZSB2aWV3cG9ydC4gVGhlIHZhbHVlIGVhZ2VyIGlzXG4gICAqIGJlc3QgdXNlZCBmb3IgaW1hZ2VzIHdpdGhpbiB0aGUgaW5pdGlhbCB2aWV3cG9ydC4gV2Ugd2FudCB0b1xuICAgKiBsb2FkIHRoZXNlIGltYWdlcyBhcyBmYXN0IGFzIHBvc3NpYmxlIHRvIGltcHJvdmUgdGhlIENvcmUgV2ViXG4gICAqIFZpdGFscyB2YWx1ZXMuIGxhenkgb24gdGhlIG90aGVyIGhhbmQgd29ya3MgYmVzdCBmb3IgaW1hZ2VzXG4gICAqIHdoaWNoIGFyZSBmdXJ0aGVyIGRvd24gdGhlIHBhZ2Ugb3IgaW52aXNpYmxlIGR1cmluZyB0aGUgbG9hZGluZ1xuICAgKiBvZiB0aGUgaW5pdGlhbCB2aWV3cG9ydC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBsb2FkaW5nOiAnZWFnZXInIHwgJ2xhenknID0gJ2VhZ2VyJztcblxuICAvKipcbiAgICogV2l0aCBwZXJmb3JtYW5jZS5tYXJrIHlvdSBjYW4gbG9nIGEgdGltZXN0YW1wIGFzc29jaWF0ZWQgd2l0aFxuICAgKiB0aGUgbmFtZSB5b3UgZGVmaW5lIGluIHBlcmZvcm1hbmNlTWFyayB3aGVuIGEgY2VydGFpbiBldmVudCBpc1xuICAgKiBoYXBwZW5pbmcuIEluIG91ciBjYXNlIHdlIHdpbGwgbG9nIHRoZSBwZXJmb3JtYW5jZS5tYXJrIGludG9cbiAgICogdGhlIFBlcmZvcm1hbmNlRW50cnkgQVBJIG9uY2UgdGhlIGltYWdlIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICogUGVyZm9ybWFuY2UgbW9uaXRvcmluZyB0b29scyBsaWtlIFNwZWVkQ3VydmUgb3IgTGlnaHRob3VzZSBhcmVcbiAgICogdGhlbiBhYmxlIHRvIGdyYWIgdGhlc2UgZW50cmllcyBmcm9tIHRoZSBQZXJmb3JtYW5jZUVudHJ5IEFQSVxuICAgKiBhbmQgZ2l2ZSB1cyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFuZCBpbnNpZ2h0cyBhYm91dCBvdXIgcGFnZVxuICAgKiBsb2FkaW5nIGJlaGF2aW91ci4gV2UgYXJlIHRoZW4gYWxzbyBhYmxlIHRvIG1vbml0b3IgdGhlc2VcbiAgICogdmFsdWVzIG92ZXIgYSBsb25nIHBlcmlvZCB0byBzZWUgaWYgb3VyIHBlcmZvcm1hbmNlXG4gICAqIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgb3ZlciB0aW1lLiBCZXN0IHRvIHVzZSBsb3dlcmNhc2Ugc3RyaW5nc1xuICAgKiBoZXJlLCBzZXBhcmF0ZSB3b3JkcyB3aXRoIHVuZGVyc2NvcmVzIG9yIGRhc2hlcy5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3BlcmZvcm1hbmNlLW1hcmsnIH0pIHB1YmxpYyBwZXJmb3JtYW5jZU1hcms/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdpdGggdGhlIHBpY3R1cmVTaXplc0NvbmZpZyBvYmplY3QsIHlvdSBjYW4gcGFzcyBpbiBpbmZvcm1hdGlvblxuICAgKiBpbnRvIGltYWdlIGFib3V0IHdoYXQga2luZCBvZiBzb3VyY2UgZWxlbWVudHMgc2hvdWxkIGdldFxuICAgKiByZW5kZXJlZC4gbWVkaWFRdWVyaWVzIGFjY2VwdHMgbXVsdGlwbGUgTWVkaWEgUXVlcnkgZW50cmllc1xuICAgKiB3aGljaCBjYW4gZ2V0IGNvbWJpbmVkIGJ5IGRlZmluaW5nIGEgY29uZGl0aW9uT3BlcmF0b3IuXG4gICAqIFR5cGUgaXM6IHN0cmluZ2lmaWVkIEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnLU9iamVjdFxuICAgKiBBbiBleGFtcGxlIGNvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICAgKiB7XG4gICAqICAgIFwiYnJlYWtwb2ludHNcIjogW1xuICAgKiAgICAgIHtcbiAgICogICAgICAgIFwiaW1hZ2VcIjoge1xuICAgKiAgICAgICAgICBcImhlaWdodFwiOiBcIjY3NVwiLFxuICAgKiAgICAgICAgICBcIndpZHRoXCI6IFwiMTIwMFwiXG4gICAqICAgICAgICB9LFxuICAgKiAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1sYXJnZS1taW5cIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfSxcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCI1NDlcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjk3NlwiXG4gICAqICAgICAgICB9LFxuICAgKiAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1zbWFsbC1taW5cIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfSxcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCIxODBcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjMyMFwiXG4gICAqICAgICAgICB9LFxuICAgKiAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWF4LXdpZHRoXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1taWNyby1tYXhcIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBcImFuZFwiXG4gICAqICAgICAgICAgIH0sXG4gICAqICAgICAgICAgIHtcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJvcmllbnRhdGlvblwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IGZhbHNlLFxuICAgKiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImxhbmRzY2FwZVwiXG4gICAqICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAqICAgICAgICAgIH1cbiAgICogICAgICAgIF1cbiAgICogICAgICB9XG4gICAqICAgIF1cbiAgICogIH1cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3BpY3R1cmUtc2l6ZXMtY29uZmlnJyB9KSBwdWJsaWMgcGljdHVyZVNpemVzQ29uZmlnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb3JkZXIgcmFkaXVzIG9mIHRoZSBpbWFnZS4gQ2hvb3NlIGJldHdlZW4gYSBkZWZhdWx0IHJhZGl1cywgbm8gcmFkaXVzIGFuZCBhIGNvbXBsZXRlbHkgcm91bmQgaW1hZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdib3JkZXItcmFkaXVzJywgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYm9yZGVyUmFkaXVzOlxuICAgIHwgJ2RlZmF1bHQnXG4gICAgfCAnbm9uZSdcbiAgICB8ICdyb3VuZCcgPSAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIFNldCBhbiBhc3BlY3QgcmF0aW9cbiAgICogZGVmYXVsdCBpcyAnMTYtOScgKDE2LzkpXG4gICAqIG90aGVyIHZhbHVlczogJ2ZyZWUnLCAnMS0xJywgJzEtMicsICcyLTEnLCAnMi0zJywgJzMtMicsICczLTQnLCAnNC0zJywgJzQtNScsICc1LTQnLCAnOS0xNidcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FzcGVjdC1yYXRpbycsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFzcGVjdFJhdGlvOlxuICAgIHwgJ2ZyZWUnXG4gICAgfCAnMS0xJ1xuICAgIHwgJzEtMidcbiAgICB8ICcyLTEnXG4gICAgfCAnMi0zJ1xuICAgIHwgJzMtMidcbiAgICB8ICczLTQnXG4gICAgfCAnNC0zJ1xuICAgIHwgJzQtNSdcbiAgICB8ICc1LTQnXG4gICAgfCAnOS0xNidcbiAgICB8ICcxNi05JyA9ICcxNi05JztcblxuICAvKiogV2hldGhlciB0aGUgaW1hZ2UgaXMgZmluaXNoZWQgbG9hZGluZyBvciBmYWlsZWQgdG8gbG9hZC4gKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy48SFRNTEltYWdlRWxlbWVudD4oJy5zYmItaW1hZ2VfX2ltZycpPy5jb21wbGV0ZSA/PyBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgbmVzdGVkIGluIGFuIGA8c2JiLXRlYXNlci1oZXJvPmAgZWxlbWVudCBvbiBpbiBhbiBgPHNiYi10ZWFzZXItcGFpZD5gIGVsZW1lbnQuXG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoXG4gICAgICAnZGF0YS10ZWFzZXInLFxuICAgICAgISFob3N0Q29udGV4dCgnc2JiLXRlYXNlci1oZXJvJywgdGhpcykgfHwgISF0aGlzLmNsb3Nlc3QoJ3NiYi10ZWFzZXItcGFpZCcpLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5fY2FwdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9saW5rc0luQ2FwdGlvbiA9IHRoaXMuX2NhcHRpb25FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExpbmtFbGVtZW50PignYScpO1xuXG4gICAgaWYgKCF0aGlzLl9saW5rc0luQ2FwdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FkZEZvY3VzQWJpbGl0eVRvTGlua3NJbkNhcHRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGltYWdlIGhhcyBhbHJlYWR5IGJlZW4gY29tcGxldGVseSBsb2FkZWQuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTtcbiAgICBpZiAodGhpcy5jb21wbGV0ZSkge1xuICAgICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbG9nUGVyZm9ybWFuY2VNYXJrcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wZXJmb3JtYW5jZU1hcmspIHtcbiAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3ModGhpcy5wZXJmb3JtYW5jZU1hcmspO1xuICAgICAgcGVyZm9ybWFuY2UubWFyayh0aGlzLnBlcmZvcm1hbmNlTWFyayk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbWF0Y2hNZWRpYVF1ZXJ5RGVzaWduVG9rZW4oYnJlYWtwb2ludFNpemVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gYnJlYWtwb2ludE1hcFticmVha3BvaW50U2l6ZU5hbWVdO1xuICAgIHJldHVybiB2YWx1ZSA/IGAke3ZhbHVlfXJlbWAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEZvY3VzQWJpbGl0eVRvTGlua3NJbkNhcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fbGlua3NJbkNhcHRpb24/LmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZUltYWdlVXJsKGJhc2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCwgbHF1aXAgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKCFiYXNlVXJsIHx8IGJhc2VVcmwgPT09ICcnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRpbmcgYW4gVVJMIHdpdGhvdXQgYSBzY2hlbWEgd2lsbCBmYWlsLCBidXQgaXMgYSB2YWxpZCBpbnB1dCBmb3IgYmFzZVVybC5cbiAgICAvLyBlLmcuIGltYWdlLXNyYyBjYW4gYmUgaHR0cHM6Ly9leGFtcGxlLmNvbS9teS1pbWFnZS5wbmcgb3IgL215LWltYWdlLnBuZ1xuICAgIGNvbnN0IGlzRnVsbHlRdWFsaWZpZWRVcmwgPSAhIWJhc2VVcmwubWF0Y2goL15cXHcrOlxcL1xcLy8pO1xuICAgIGNvbnN0IGltYWdlVXJsT2JqID0gaXNGdWxseVF1YWxpZmllZFVybCA/IG5ldyBVUkwoYmFzZVVybCkgOiBuZXcgVVJMKGBodHRwOi8vbm9vcC8ke2Jhc2VVcmx9YCk7XG5cbiAgICBpZiAobHF1aXApIHtcbiAgICAgIC8vIGJsdXIgYW5kIHNpemU6ID9ibHVyPTEwMCZ3PTEwMCZoPTU2XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdibHVyJywgJzEwMCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgndycsICcxMDAnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2gnLCAnNTYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ0ROIEluZm9ybWF0aW9uOiBodHRwczovL2RvY3MuaW1naXguY29tL2FwaXMvcmVuZGVyaW5nXG4gICAgICAvLyBwYXJhbS5hdXRvOiA/YXV0bz1mb3JtYXQsY29tcHJlc3MsY3M9dGlueXNyZ2JcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2F1dG8nLCAnZm9ybWF0LGNvbXByZXNzLGNzPXRpbnlzcmdiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VzdG9tRm9jYWxQb2ludCkge1xuICAgICAgLy8gY3JvcDogYCZmaXQ9Y3JvcCZjcm9wPWZvY2FscG9pbnQmZnAteD0ke3RoaXMuZm9jYWxQb2ludFh9JmZwLXk9JHt0aGlzLmZvY2FsUG9pbnRZfSZmcC16PTFgLFxuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZml0JywgJ2Nyb3AnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2Nyb3AnLCAnZm9jYWxwb2ludCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAteCcsIHRoaXMuZm9jYWxQb2ludFgudG9TdHJpbmcoMTApKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLXknLCB0aGlzLmZvY2FsUG9pbnRZLnRvU3RyaW5nKDEwKSk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC16JywgJzEnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb2NhbFBvaW50RGVidWcpIHtcbiAgICAgIC8vIGZvY2FsUG9pbnREZWJ1ZzogJyZmcC1kZWJ1Zz10cnVlJ1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAtZGVidWcnLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgXCJub29wXCIgaG9zdCwgd2UgZG9uJ3QgcmV0dXJuIHRoZSBob3N0IGFuZCBtdXN0IHJlbW92ZSB0aGVcbiAgICAvLyBzdGFydGluZyBgL2Agb2YgdGhlIHBhdGhuYW1lLlxuICAgIHJldHVybiBpc0Z1bGx5UXVhbGlmaWVkVXJsXG4gICAgICA/IGltYWdlVXJsT2JqLmhyZWZcbiAgICAgIDogaW1hZ2VVcmxPYmoucGF0aG5hbWUuc3Vic3RyaW5nKDEpICsgaW1hZ2VVcmxPYmouc2VhcmNoO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZVBpY3R1cmVTaXplQ29uZmlncygpOiBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ0JyZWFrcG9pbnRbXSB7XG4gICAgbGV0IHBpY3R1cmVTaXplc0NvbmZpZztcblxuICAgIGlmICh0aGlzLnBpY3R1cmVTaXplc0NvbmZpZykge1xuICAgICAgcGljdHVyZVNpemVzQ29uZmlnID0gdGhpcy5waWN0dXJlU2l6ZXNDb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgY29uZmlnXG4gICAgICBwaWN0dXJlU2l6ZXNDb25maWcgPSBge1xuICAgICAgICBcImJyZWFrcG9pbnRzXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogNjc1LFxuICAgICAgICAgICAgICBcIndpZHRoXCI6IDEyMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtaW4td2lkdGhcIixcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LWxhcmdlLW1pblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgICBcImhlaWdodFwiOiA1NDksXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogOTc2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgICAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1taWNyby1taW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogMTgwLFxuICAgICAgICAgICAgICBcIndpZHRoXCI6IDMyMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1heC13aWR0aFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtemVyby1tYXhcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1hZ2VIZWxwZXJHZXRCcmVha3BvaW50cyhwaWN0dXJlU2l6ZXNDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTWVkaWFRdWVyeVN0cmluZyhcbiAgICBtZWRpYVF1ZXJpZXM6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeVtdLFxuICApOiBzdHJpbmcge1xuICAgIGxldCBtZWRpYVF1ZXJ5ID0gJyc7XG5cbiAgICBtZWRpYVF1ZXJpZXMuZm9yRWFjaCgobXEpID0+IHtcbiAgICAgIGNvbnN0IG1xQ29uZGl0aW9uID0gbXEuY29uZGl0aW9uRmVhdHVyZTtcbiAgICAgIGxldCBtcVZhbHVlO1xuXG4gICAgICBpZiAobXEuY29uZGl0aW9uRmVhdHVyZVZhbHVlLmx5bmVEZXNpZ25Ub2tlbikge1xuICAgICAgICBtcVZhbHVlID0gdGhpcy5fbWF0Y2hNZWRpYVF1ZXJ5RGVzaWduVG9rZW4obXEuY29uZGl0aW9uRmVhdHVyZVZhbHVlLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1xVmFsdWUgPSBtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1xQ29tYmluZXIgPSBtcS5jb25kaXRpb25PcGVyYXRvciA/IGAgJHttcS5jb25kaXRpb25PcGVyYXRvcn0gYCA6ICcnO1xuXG4gICAgICBtZWRpYVF1ZXJ5ICs9IGAoJHttcUNvbmRpdGlvbn06ICR7bXFWYWx1ZX0pJHttcUNvbWJpbmVyfWA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVkaWFRdWVyeTtcbiAgfVxuXG4gIEBldmVudE9wdGlvbnMoZXZlbnRMaXN0ZW5lck9wdGlvbnMpXG4gIHByaXZhdGUgX2ltYWdlTG9hZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ1BlcmZvcm1hbmNlTWFya3MoKTtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1sb2FkZWQnLCB0cnVlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdsb2FkJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgbGV0IHsgY2FwdGlvbiB9ID0gdGhpcztcbiAgICBsZXQgc2NoZW1hRGF0YSA9ICcnO1xuXG4gICAgY29uc3QgaW1hZ2VVcmxMUUlQID0gdGhpcy5fcHJlcGFyZUltYWdlVXJsKHRoaXMuaW1hZ2VTcmMsIHRydWUpO1xuICAgIGNvbnN0IGltYWdlVXJsV2l0aFBhcmFtcyA9IHRoaXMuX3ByZXBhcmVJbWFnZVVybCh0aGlzLmltYWdlU3JjLCBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nID09PSAnbGF6eScpIHtcbiAgICAgIHRoaXMuZGVjb2RpbmcgPSAnYXN5bmMnO1xuICAgICAgdGhpcy5pbXBvcnRhbmNlID0gJ2xvdyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29weXJpZ2h0KSB7XG4gICAgICBjYXB0aW9uID0gYCR7dGhpcy5jYXB0aW9ufSDCqSR7dGhpcy5jb3B5cmlnaHR9YDtcbiAgICAgIHNjaGVtYURhdGEgPSBge1xuICAgICAgICBcIkBjb250ZXh0XCI6IFwiaHR0cHM6Ly9zY2hlbWEub3JnXCIsXG4gICAgICAgIFwiQHR5cGVcIjogXCJQaG90b2dyYXBoXCIsXG4gICAgICAgIFwiaW1hZ2VcIjogXCIke3RoaXMuaW1hZ2VTcmN9XCIsXG4gICAgICAgIFwiY29weXJpZ2h0SG9sZGVyXCI6IHtcbiAgICAgICAgICBcIkB0eXBlXCI6IFwiJHt0aGlzLmNvcHlyaWdodEhvbGRlcn1cIixcbiAgICAgICAgICBcIm5hbWVcIjogXCIke3RoaXMuY29weXJpZ2h0fVwiXG4gICAgICAgIH1cbiAgICAgIH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHBpY3R1cmVTaXplQ29uZmlncyA9IHRoaXMuX3ByZXBhcmVQaWN0dXJlU2l6ZUNvbmZpZ3MoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHQgYXR0cmlidXRlIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCBmb3IgdGhlIGltZyBlbGVtZW50LlxuICAgICAqIElmIGl0IGhhcyBhbiBlbXB0eSBzdHJpbmcgYXMgaXRzIHZhbHVlLCBpdCBpcyBzaW1wbHkgaWdub3JlZFxuICAgICAqIGJ5IGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMuIElmIHdlIGxlYXZlIGl0IG91dCBjb21wbGV0ZWx5LFxuICAgICAqIHRoZXkgbWlnaHQgdHJ5IHRvIGludGVycHJldCB0aGUgaW1nIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZmlndXJlIGNsYXNzPVwic2JiLWltYWdlX19maWd1cmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1pbWFnZV9fd3JhcHBlclwiPlxuICAgICAgICAgICR7IXRoaXMuc2tpcExxaXBcbiAgICAgICAgICAgID8gaHRtbGA8aW1nXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1pbWFnZV9fYmx1cnJlZFwiXG4gICAgICAgICAgICAgICAgc3JjPSR7aW1hZ2VVcmxMUUlQfVxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTYyXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPSR7dGhpcy5sb2FkaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgZGVjb2Rpbmc9JHt0aGlzLmRlY29kaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgIC8+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuXG4gICAgICAgICAgPHBpY3R1cmU+XG4gICAgICAgICAgICA8IS0tIHJlbmRlciBwaWN0dXJlIGVsZW1lbnQgc291cmNlcyAtLT5cbiAgICAgICAgICAgICR7cGljdHVyZVNpemVDb25maWdzLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gY29uZmlnLmltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGNvbmZpZy5pbWFnZS53aWR0aDtcbiAgICAgICAgICAgICAgY29uc3QgbWVkaWFRdWVyeSA9IHRoaXMuX2NyZWF0ZU1lZGlhUXVlcnlTdHJpbmcoY29uZmlnLm1lZGlhUXVlcmllcyk7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgaHRtbGAgPHNvdXJjZVxuICAgICAgICAgICAgICAgICAgbWVkaWE9JHtgJHttZWRpYVF1ZXJ5fWB9XG4gICAgICAgICAgICAgICAgICBzaXplcz0ke2Ake2ltYWdlV2lkdGh9cHhgfVxuICAgICAgICAgICAgICAgICAgc3Jjc2V0PSR7XG4gICAgICAgICAgICAgICAgICAgIGAke2ltYWdlVXJsV2l0aFBhcmFtc30mdz0ke2ltYWdlV2lkdGh9Jmg9JHtpbWFnZUhlaWdodH0mcT0ke3RoaXMuX2NvbmZpZy5ub25SZXRpbmFRdWFsaXR5fSAke2ltYWdlV2lkdGh9dywgYCArXG4gICAgICAgICAgICAgICAgICAgIGAke2ltYWdlVXJsV2l0aFBhcmFtc30mdz0ke2ltYWdlV2lkdGggKiAyfSZoPSR7aW1hZ2VIZWlnaHQgKiAyfSZxPSR7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLnJldGluYVF1YWxpdHlcbiAgICAgICAgICAgICAgICAgICAgfSAke2ltYWdlV2lkdGggKiAyfXdgXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPjwvc291cmNlPmAsXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgYWx0PSR7dGhpcy5hbHQgfHwgJyd9XG4gICAgICAgICAgICAgIEBsb2FkPSR7dGhpcy5faW1hZ2VMb2FkZWR9XG4gICAgICAgICAgICAgIEBlcnJvcj0keygpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1pbWFnZV9faW1nXCJcbiAgICAgICAgICAgICAgc3JjPSR7dGhpcy5pbWFnZVNyYyF9XG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwMFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjU2MlwiXG4gICAgICAgICAgICAgIGxvYWRpbmc9JHt0aGlzLmxvYWRpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgZGVjb2Rpbmc9JHt0aGlzLmRlY29kaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgIC5mZXRjaFByaW9yaXR5PSR7dGhpcy5pbXBvcnRhbmNlID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvcGljdHVyZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7Y2FwdGlvblxuICAgICAgICAgID8gaHRtbGA8ZmlnY2FwdGlvblxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1pbWFnZV9fY2FwdGlvblwiXG4gICAgICAgICAgICAgIC5pbm5lckhUTUw9JHtjYXB0aW9ufVxuICAgICAgICAgICAgICAke3JlZigoZWwpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXB0aW9uRWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgID48L2ZpZ2NhcHRpb24+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHtzY2hlbWFEYXRhXG4gICAgICAgICAgPyBodG1sYDxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2xkK2pzb25cIiAuaW5uZXJIVE1MPSR7c2NoZW1hRGF0YX0+PC9zY3JpcHQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgIDwvZmlndXJlPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1pbWFnZSc6IFNiYkltYWdlRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIl0sIm1hcHBpbmdzIjoiOzs7O0FBc0JPLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlC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QUFBLG1CQUFBLENBQUE7QUFPOEQsZ0JBQUE7QUFBQSxFQUFwRSxTQUFTLEVBQUUsV0FBVyxzQkFBc0IsTUFBTSxTQUFTO0FBQUEsR0ExRGpELGdCQTBEMEQsV0FBQSxvQkFBQSxDQUFBO0FBU2xELGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBbkVDLGdCQW1FUSxXQUFBLFlBQUEsQ0FBQTtBQU1pRCxnQkFBQTtBQUFBLEVBQW5FLFNBQVMsRUFBRSxXQUFXLHFCQUFxQixNQUFNLFNBQVM7QUFBQSxHQXpFaEQsZ0JBeUV5RCxXQUFBLG1CQUFBLENBQUE7QUFLTCxnQkFBQTtBQUFBLEVBQTlELFNBQVMsRUFBRSxXQUFXLGlCQUFpQixNQUFNLFFBQVE7QUFBQSxHQTlFM0MsZ0JBOEVvRCxXQUFBLGVBQUEsQ0FBQTtBQUtBLGdCQUFBO0FBQUEsRUFBOUQsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLE1BQU0sUUFBUTtBQUFBLEdBbkYzQyxnQkFtRm9ELFdBQUEsZUFBQSxDQUFBO0FBWWxCLGdCQUFBO0FBQUEsRUFBNUMsU0FBUyxFQUFFLFdBQVcsYUFBYTtBQUFBLEdBL0Z6QixnQkErRmtDLFdBQUEsWUFBQSxDQUFBO0FBVzFCLGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBMUdDLGdCQTBHUSxXQUFBLGNBQUEsQ0FBQTtBQVlBLGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBdEhDLGdCQXNIUSxXQUFBLFdBQUEsQ0FBQTtBQWVpQyxnQkFBQTtBQUFBLEVBQW5ELFNBQVMsRUFBRSxXQUFXLG9CQUFvQjtBQUFBLEdBckloQyxnQkFxSXlDLFdBQUEsbUJBQUEsQ0FBQTtBQXNFSSxnQkFBQTtBQUFBLEVBQXZELFNBQVMsRUFBRSxXQUFXLHdCQUF3QjtBQUFBLEdBM01wQyxnQkEyTTZDLFdBQUEsc0JBQUEsQ0FBQTtBQUtRLGdCQUFBO0FBQUEsRUFBL0QsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLFNBQVMsTUFBTTtBQUFBLEdBaE41QyxnQkFnTnFELFdBQUEsZ0JBQUEsQ0FBQTtBQVd6RCxnQkFBQTtBQUFBLEVBRE4sU0FBUyxFQUFFLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtBQUFBLEdBMU4zQyxnQkEyTkosV0FBQSxlQUFBLENBQUE7QUEwTUMsZ0JBQUE7QUFBQSxFQURQLGFBQWEsb0JBQW9CO0FBQUEsR0FwYXZCLGdCQXFhSCxXQUFBLGdCQUFBLENBQUE7QUFyYUcsa0JBQU4sZ0JBQUE7QUFBQSxFQUROLGNBQWMsV0FBVztBQUFBLEdBQ2IsZUFBQTsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19