@sapui5/sap.fe.macros 1.138.0 → 1.140.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 (240) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -2,10 +2,10 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/helpers/BindingHelper", "sap/m/Menu", "sap/m/MenuItem", "sap/ui/core/CustomData", "sap/ui/performance/trace/FESRHelper", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/FPMHelper", "sap/fe/macros/share/ShareOptions", "sap/m/OverflowToolbarMenuButton", "sap/ui/base/BindingInfo", "./share/MsTeamsOptions", "./share/ShareAPI", "sap/fe/base/jsx-runtime/jsx"], function (Log, BindingToolkit, ClassSupport, CommonUtils, CommandExecution, BindingHelper, Menu, MenuItem, CustomData, FESRHelper, BuildingBlock, Action, FPMHelper, ShareOptions, OverflowToolbarMenuButton, BindingInfo, MsTeamsOptions, ShareAPI, _jsx) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/helpers/BindingHelper", "sap/m/Menu", "sap/m/MenuItem", "sap/ui/core/CustomData", "sap/ui/performance/trace/FESRHelper", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/macros/share/ShareOptions", "sap/m/OverflowToolbarLayoutData", "sap/m/OverflowToolbarMenuButton", "sap/m/library", "sap/ui/base/BindingInfo", "./share/MsTeamsOptions", "./share/ShareAPI", "sap/fe/base/jsx-runtime/jsx"], function (Log, BindingToolkit, ClassSupport, CommonUtils, CommandExecution, BindingHelper, Menu, MenuItem, CustomData, FESRHelper, BuildingBlock, Action, FPMHelper, ResourceModelHelper, ShareOptions, OverflowToolbarLayoutData, OverflowToolbarMenuButton, library, BindingInfo, MsTeamsOptions, ShareAPI, _jsx) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;
9
9
  function __ui5_require_async(path) {
10
10
  return new Promise((resolve, reject) => {
11
11
  sap.ui.require([path], module => {
@@ -24,12 +24,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
24
24
  });
25
25
  }
26
26
  var _exports = {};
27
+ var OverflowToolbarPriority = library.OverflowToolbarPriority;
28
+ var getResourceModel = ResourceModelHelper.getResourceModel;
27
29
  var PRINT_ICON = Action.PRINT_ICON;
28
30
  var EXPORT_TO_SPREADSHEET_ICON = Action.EXPORT_TO_SPREADSHEET_ICON;
29
31
  var EXPORT_TO_PDF_ICON = Action.EXPORT_TO_PDF_ICON;
30
32
  var EXPORT_TO_CSV_ICON = Action.EXPORT_TO_CSV_ICON;
31
33
  var UI = BindingHelper.UI;
32
34
  var property = ClassSupport.property;
35
+ var implementInterface = ClassSupport.implementInterface;
33
36
  var defineUI5Class = ClassSupport.defineUI5Class;
34
37
  var defineReference = ClassSupport.defineReference;
35
38
  var aggregation = ClassSupport.aggregation;
@@ -84,14 +87,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
84
87
  */
85
88
  let Share = (_dec = defineUI5Class("sap.fe.macros.Share"), _dec2 = property({
86
89
  type: "string"
87
- }), _dec3 = aggregation({
90
+ }), _dec3 = implementInterface("sap.m.IOverflowToolbarContent"), _dec4 = aggregation({
88
91
  type: "sap.fe.macros.share.ShareOptions",
89
92
  defaultClass: ShareOptions,
90
93
  isDefault: true
91
- }), _dec4 = aggregation({
94
+ }), _dec5 = property({
95
+ type: "string",
96
+ defaultValue: OverflowToolbarPriority.High
97
+ }), _dec6 = aggregation({
92
98
  type: "sap.fe.macros.share.MsTeamsOptions",
93
99
  defaultClass: MsTeamsOptions
94
- }), _dec5 = defineReference(), _dec6 = defineReference(), _dec7 = defineReference(), _dec8 = defineReference(), _dec9 = defineReference(), _dec10 = defineReference(), _dec11 = defineReference(), _dec12 = defineReference(), _dec13 = defineReference(), _dec14 = defineReference(), _dec15 = defineReference(), _dec16 = defineReference(), _dec17 = defineReference(), _dec18 = defineReference(), _dec19 = defineReference(), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
100
+ }), _dec7 = defineReference(), _dec8 = defineReference(), _dec9 = defineReference(), _dec10 = defineReference(), _dec11 = defineReference(), _dec12 = defineReference(), _dec13 = defineReference(), _dec14 = defineReference(), _dec15 = defineReference(), _dec16 = defineReference(), _dec17 = defineReference(), _dec18 = defineReference(), _dec19 = defineReference(), _dec20 = defineReference(), _dec21 = defineReference(), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
95
101
  function Share(idOrProps, props) {
96
102
  var _this;
97
103
  let shareAPIId;
@@ -106,30 +112,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
106
112
  props.id = undefined;
107
113
  _this = _BuildingBlock.call(this, undefined, props) || this;
108
114
  _initializerDefineProperty(_this, "shareAPIId", _descriptor, _this);
115
+ _initializerDefineProperty(_this, "__implements__sap_m_IOverflowToolbarContent", _descriptor2, _this);
109
116
  /**
110
117
  * Supported Share options {@link sap.fe.macros.share.ShareOptions}.
111
118
  * @public
112
119
  */
113
- _initializerDefineProperty(_this, "shareOptions", _descriptor2, _this);
120
+ _initializerDefineProperty(_this, "shareOptions", _descriptor3, _this);
121
+ _initializerDefineProperty(_this, "priority", _descriptor4, _this);
114
122
  /**
115
123
  * Supported Microsoft Teams options.
116
124
  */
117
- _initializerDefineProperty(_this, "msTeamsOptions", _descriptor3, _this);
118
- _initializerDefineProperty(_this, "menuButton", _descriptor4, _this);
119
- _initializerDefineProperty(_this, "cmdExecution", _descriptor5, _this);
120
- _initializerDefineProperty(_this, "menu", _descriptor6, _this);
121
- _initializerDefineProperty(_this, "saveAsTileMenuItem", _descriptor7, _this);
122
- _initializerDefineProperty(_this, "shareAsCollaborationManager", _descriptor8, _this);
123
- _initializerDefineProperty(_this, "shareViaJAMMenuItem", _descriptor9, _this);
124
- _initializerDefineProperty(_this, "sendEmailMenuItem", _descriptor10, _this);
125
- _initializerDefineProperty(_this, "shareAsCardMenuItem", _descriptor11, _this);
126
- _initializerDefineProperty(_this, "shareViaChatMenuItem", _descriptor12, _this);
127
- _initializerDefineProperty(_this, "shareAsTabMenuItem", _descriptor13, _this);
128
- _initializerDefineProperty(_this, "msTeamsGroupMenuItem", _descriptor14, _this);
129
- _initializerDefineProperty(_this, "printMenuItem", _descriptor15, _this);
130
- _initializerDefineProperty(_this, "exportToSpreadsheetMenuItem", _descriptor16, _this);
131
- _initializerDefineProperty(_this, "exportToPDFMenuItem", _descriptor17, _this);
132
- _initializerDefineProperty(_this, "exportToCSVMenuItem", _descriptor18, _this);
125
+ _initializerDefineProperty(_this, "msTeamsOptions", _descriptor5, _this);
126
+ _initializerDefineProperty(_this, "menuButton", _descriptor6, _this);
127
+ _initializerDefineProperty(_this, "cmdExecution", _descriptor7, _this);
128
+ _initializerDefineProperty(_this, "menu", _descriptor8, _this);
129
+ _initializerDefineProperty(_this, "saveAsTileMenuItem", _descriptor9, _this);
130
+ _initializerDefineProperty(_this, "shareAsCollaborationManager", _descriptor10, _this);
131
+ _initializerDefineProperty(_this, "shareViaJAMMenuItem", _descriptor11, _this);
132
+ _initializerDefineProperty(_this, "sendEmailMenuItem", _descriptor12, _this);
133
+ _initializerDefineProperty(_this, "shareAsCardMenuItem", _descriptor13, _this);
134
+ _initializerDefineProperty(_this, "shareViaChatMenuItem", _descriptor14, _this);
135
+ _initializerDefineProperty(_this, "shareAsTabMenuItem", _descriptor15, _this);
136
+ _initializerDefineProperty(_this, "msTeamsGroupMenuItem", _descriptor16, _this);
137
+ _initializerDefineProperty(_this, "printMenuItem", _descriptor17, _this);
138
+ _initializerDefineProperty(_this, "exportToSpreadsheetMenuItem", _descriptor18, _this);
139
+ _initializerDefineProperty(_this, "exportToPDFMenuItem", _descriptor19, _this);
140
+ _initializerDefineProperty(_this, "exportToCSVMenuItem", _descriptor20, _this);
133
141
  return _this;
134
142
  }
135
143
  _exports = Share;
@@ -824,7 +832,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
824
832
  this.isInitialized = this._initializeMenuItems(this.getPageController().getView(), appComponent).catch(error => {
825
833
  Log.error(error);
826
834
  });
835
+ this.setLayoutData(new OverflowToolbarLayoutData({
836
+ priority: this.priority
837
+ }));
827
838
  return menuButton;
839
+ }
840
+
841
+ /**
842
+ * Returns properties for the interface IOverflowToolbarContent.
843
+ * @returns Returns the configuration of IOverflowToolbarContent
844
+ */;
845
+ _proto.getOverflowToolbarConfig = function getOverflowToolbarConfig() {
846
+ return {
847
+ canOverflow: true,
848
+ onBeforeEnterOverflow: function (oControl) {
849
+ (oControl?.getContent()?.getContent()).getText = function () {
850
+ const resourceModel = getResourceModel(oControl);
851
+ return resourceModel.getText("M_COMMON_SAPFE_ACTION_SHARE");
852
+ };
853
+ },
854
+ onAfterExitOverflow: function (oControl) {
855
+ (oControl?.getContent()?.getContent()).getText = function () {
856
+ return "";
857
+ };
858
+ },
859
+ priority: this.priority
860
+ };
828
861
  };
829
862
  return Share;
830
863
  }(BuildingBlock), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "shareAPIId", [_dec2], {
@@ -832,87 +865,99 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
832
865
  enumerable: true,
833
866
  writable: true,
834
867
  initializer: null
835
- }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "shareOptions", [_dec3], {
868
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_m_IOverflowToolbarContent", [_dec3], {
869
+ configurable: true,
870
+ enumerable: true,
871
+ writable: true,
872
+ initializer: function () {
873
+ return true;
874
+ }
875
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "shareOptions", [_dec4], {
876
+ configurable: true,
877
+ enumerable: true,
878
+ writable: true,
879
+ initializer: null
880
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "priority", [_dec5], {
836
881
  configurable: true,
837
882
  enumerable: true,
838
883
  writable: true,
839
884
  initializer: null
840
- }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "msTeamsOptions", [_dec4], {
885
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "msTeamsOptions", [_dec6], {
841
886
  configurable: true,
842
887
  enumerable: true,
843
888
  writable: true,
844
889
  initializer: null
845
- }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "menuButton", [_dec5], {
890
+ }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "menuButton", [_dec7], {
846
891
  configurable: true,
847
892
  enumerable: true,
848
893
  writable: true,
849
894
  initializer: null
850
- }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "cmdExecution", [_dec6], {
895
+ }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "cmdExecution", [_dec8], {
851
896
  configurable: true,
852
897
  enumerable: true,
853
898
  writable: true,
854
899
  initializer: null
855
- }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "menu", [_dec7], {
900
+ }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "menu", [_dec9], {
856
901
  configurable: true,
857
902
  enumerable: true,
858
903
  writable: true,
859
904
  initializer: null
860
- }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "saveAsTileMenuItem", [_dec8], {
905
+ }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "saveAsTileMenuItem", [_dec10], {
861
906
  configurable: true,
862
907
  enumerable: true,
863
908
  writable: true,
864
909
  initializer: null
865
- }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "shareAsCollaborationManager", [_dec9], {
910
+ }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "shareAsCollaborationManager", [_dec11], {
866
911
  configurable: true,
867
912
  enumerable: true,
868
913
  writable: true,
869
914
  initializer: null
870
- }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "shareViaJAMMenuItem", [_dec10], {
915
+ }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "shareViaJAMMenuItem", [_dec12], {
871
916
  configurable: true,
872
917
  enumerable: true,
873
918
  writable: true,
874
919
  initializer: null
875
- }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "sendEmailMenuItem", [_dec11], {
920
+ }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "sendEmailMenuItem", [_dec13], {
876
921
  configurable: true,
877
922
  enumerable: true,
878
923
  writable: true,
879
924
  initializer: null
880
- }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "shareAsCardMenuItem", [_dec12], {
925
+ }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "shareAsCardMenuItem", [_dec14], {
881
926
  configurable: true,
882
927
  enumerable: true,
883
928
  writable: true,
884
929
  initializer: null
885
- }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "shareViaChatMenuItem", [_dec13], {
930
+ }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "shareViaChatMenuItem", [_dec15], {
886
931
  configurable: true,
887
932
  enumerable: true,
888
933
  writable: true,
889
934
  initializer: null
890
- }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "shareAsTabMenuItem", [_dec14], {
935
+ }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "shareAsTabMenuItem", [_dec16], {
891
936
  configurable: true,
892
937
  enumerable: true,
893
938
  writable: true,
894
939
  initializer: null
895
- }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "msTeamsGroupMenuItem", [_dec15], {
940
+ }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "msTeamsGroupMenuItem", [_dec17], {
896
941
  configurable: true,
897
942
  enumerable: true,
898
943
  writable: true,
899
944
  initializer: null
900
- }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "printMenuItem", [_dec16], {
945
+ }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "printMenuItem", [_dec18], {
901
946
  configurable: true,
902
947
  enumerable: true,
903
948
  writable: true,
904
949
  initializer: null
905
- }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "exportToSpreadsheetMenuItem", [_dec17], {
950
+ }), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "exportToSpreadsheetMenuItem", [_dec19], {
906
951
  configurable: true,
907
952
  enumerable: true,
908
953
  writable: true,
909
954
  initializer: null
910
- }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "exportToPDFMenuItem", [_dec18], {
955
+ }), _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "exportToPDFMenuItem", [_dec20], {
911
956
  configurable: true,
912
957
  enumerable: true,
913
958
  writable: true,
914
959
  initializer: null
915
- }), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "exportToCSVMenuItem", [_dec19], {
960
+ }), _descriptor20 = _applyDecoratedDescriptor(_class2.prototype, "exportToCSVMenuItem", [_dec21], {
916
961
  configurable: true,
917
962
  enumerable: true,
918
963
  writable: true,
@@ -921,4 +966,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
921
966
  _exports = Share;
922
967
  return _exports;
923
968
  }, false);
924
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtTVNUZWFtc09wdGlvbiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEIiwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUIiwiZW51bVNoYXJlT3B0aW9uIiwiU0VORF9FTUFJTCIsIlNIQVJFX0pBTSIsIlNBVkVfQVNfVElMRSIsIk1TX1RFQU1TX0dST1VQIiwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSIiwiU2hhcmUiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiYWdncmVnYXRpb24iLCJkZWZhdWx0Q2xhc3MiLCJTaGFyZU9wdGlvbnMiLCJpc0RlZmF1bHQiLCJfZGVjNCIsIk1zVGVhbXNPcHRpb25zIiwiX2RlYzUiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsImlkT3JQcm9wcyIsInByb3BzIiwiX3RoaXMiLCJzaGFyZUFQSUlkIiwiaWQiLCJ1bmRlZmluZWQiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX293bmVyQ29tcG9uZW50IiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJnZXRBcHBDb21wb25lbnQiLCJfaW5pdGlhbGl6ZU1lbnVJdGVtcyIsInZpZXciLCJhcHBDb21wb25lbnQiLCJpc1RlYW1zTW9kZUFjdGl2ZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiQ29sbGFib3JhdGlvbiIsImRlZmF1bHQiLCJDb2xsYWJvcmF0aW9uSGVscGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsIm1lbnVCdXR0b24iLCJjdXJyZW50IiwidW5iaW5kUHJvcGVydHkiLCJzZXRWaXNpYmxlIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJzaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzUGx1Z2luSW5mb1N0YWJsZSIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImludGVybmFsQnV0dG9uIiwiZ2V0QWdncmVnYXRpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJfYmxvY2tJbnRlcm5hbENvbmZpZyIsIl9nZXRTaGFyZUJsb2NrQ29uZmlnIiwiX2FkZE1lbnVJdGVtcyIsInNldFNoYXJlT3B0aW9uc1Zpc2liaWxpdHkiLCJfYWRkU2VuZEVtYWlsT3B0aW9uIiwiX2FkZFNoZWxsQmFzZWRNZW51SXRlbXMiLCJfYWRkUHJpbnRPcHRpb25zIiwiX2FkZEV4cG9ydEV4Y2VsT3B0aW9ucyIsIl9hZGRFeHBvcnRDU1ZPcHRpb25zIiwiX2FkZEV4cG9ydFBERk9wdGlvbnMiLCJfY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyIsInNoYXJlT3B0aW9uUHJvcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJzaGFyZUFjdGlvblByb3BzIiwic2hhcmUiLCJtb2R1bGUiLCJwcmVzcyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicmVwbGFjZSIsIm1ldGhvZCIsImxlbmd0aCIsIkZQTUhlbHBlciIsImxvYWRNb2R1bGVBbmRDYWxsTWV0aG9kIiwiTG9nIiwiZXJyb3IiLCJoYXNPd25Qcm9wZXJ0eSIsInByaW50IiwibWVudSIsImFkZEl0ZW0iLCJfanN4IiwiTWVudUl0ZW0iLCJyZWYiLCJwcmludE1lbnVJdGVtIiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiaWNvbiIsIlBSSU5UX0lDT04iLCJleHBvcnRUb1NwcmVhZHNoZWV0TWVudUl0ZW0iLCJFWFBPUlRfVE9fU1BSRUFEU0hFRVRfSUNPTiIsImV4cG9ydFRvQ1NWTWVudUl0ZW0iLCJFWFBPUlRfVE9fQ1NWX0lDT04iLCJleHBvcnRUb1BERk1lbnVJdGVtIiwiRVhQT1JUX1RPX1BERl9JQ09OIiwic2hhcmVPcHRpb25zIiwic2hvd1NlbmRFbWFpbCIsInNlbmRFbWFpbE1lbnVJdGVtIiwiX3RyaWdnZXJFbWFpbCIsImhhc1VzaGVsbCIsImhhc1VTaGVsbCIsIl9hZGRTaGFyZVZpYUpBTU9wdGlvbiIsIl9hZGRNU1RlYW1zT3B0aW9ucyIsIl9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbiIsIl9hZGRTYXZlQXNUaWxlT3B0aW9uIiwiY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJjb2xsYWJvcmF0aW9uT3B0aW9uIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJPcHRpb24iLCJzaG93Q29sbGFib3JhdGlvbk1hbmFnZXIiLCJtZW51SXRlbSIsInNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlciIsImV2ZW50IiwiX2NvbGxhYm9yYXRpb25NYW5hZ2VyQnV0dG9uUHJlc3MiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsImZlc3JTdGVwTmFtZSIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImNvbGxhYm9yYXRpb25DYWxsQmFjayIsImNsaWNrZWRNZW51SXRlbSIsImdldFNvdXJjZSIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIl9hZGFwdFNoYXJlTWV0YWRhdGEiLCJzaGFyZUluZm9Nb2RlbCIsImdldE1vZGVsIiwic2hhcmVJbmZvIiwiZ2V0RGF0YSIsImNvbGxhYm9yYXRpb25JbmZvIiwiYXBwVGl0bGUiLCJ1cmwiLCJoYXNKYW0iLCJpc0phbUFjdGl2ZSIsInNoYXJlVmlhSkFNTWVudUl0ZW0iLCJfdHJpZ2dlclNoYXJlVG9KYW0iLCJzaG93TXNUZWFtc09wdGlvbnMiLCJzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zIiwiZ2V0VGVhbXNDb2xsYWJPcHRpb25zVmlhU2hhcmUiLCJpc1NoYXJlQXNDYXJkRW5hYmxlZCIsIl9nZXRJc1NoYXJlQXNDYXJkRW5hYmxlZCIsIm1lbnVJdGVtU2V0dGluZ3MiLCJfZ2V0TXNUZWFtc01lbnVJdGVtU2V0dGluZ3MiLCJzdWJPcHRpb25zIiwiaXRlbXMiLCJtZW51SXRlbUtleSIsIkFycmF5IiwiaXNBcnJheSIsImtleSIsIl9hZGRNc1RlYW1zTWVudUl0ZW0iLCJBZGRCb29rbWFya0J1dHRvbiIsImFkZEJvb2ttYXJrQnV0dG9uIiwiZ2V0RW5hYmxlZCIsInNhdmVBc1RpbGVNZW51SXRlbSIsImdldFRleHQiLCJnZXRJY29uIiwiX3NhdmVBc1RpbGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJkZXN0cm95Iiwic2hvd1NoYXJlQXNDYXJkIiwibXNUZWFtc09wdGlvbnMiLCJlbmFibGVDYXJkIiwiQm9vbGVhbiIsIkJpbmRpbmdJbmZvIiwicGFyc2UiLCJfZ2V0TXNUZWFtc1N1Yk9wdGlvbnMiLCJjb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyIsIkN1c3RvbURhdGEiLCJ2YWx1ZSIsIl9nZXRNZW51SXRlbVJlZmVyZW5jZSIsImN1c3RvbURhdGEiLCJhdHRhY2hQcmVzcyIsInJlZHVjZSIsIm1lbnVJdGVtcyIsInN1Yk9wdGlvbiIsInN1Yk1lbnVJdGVtIiwiY29sbGFib3JhdGlvbkRhdGEiLCJkYXRhIiwidGVhbXNIZWxwZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGlvblNlcnZpY2VzIiwib1RlYW1zSGVscGVyU2VydmljZSIsImlzRmVhdHVyZUZsYWdFbmFibGVkIiwiY2FyZERlZmluaXRpb24iLCJnZXRDYXJkRGVmaW5pdGlvbiIsImNhcmRJZCIsInNoZWxsU2VydmljZUhlbHBlciIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsInJlYXNvbiIsImluZm8iLCJvcHRpb25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsInZpc2libGVCaW5kaW5nRXhwcyIsImJpbmRpbmdUb29sa2l0RXhwcyIsIm9wdGlvbiIsImV4cCIsIl9nZXRTaGFyZU9wdGlvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiX3NldFNoYXJlT3B0aW9uVmlzaWJpbGl0eSIsInNoYXJlQmxvY2tWaXNpYmxlRXhwIiwib3IiLCJjbWRFeGVjdXRpb24iLCJfYmluZFVJVmlzaWJpbGl0eSIsInNoYXJlQXNDYXJkTWVudUl0ZW0iLCJzaGFyZVZpYUNoYXRNZW51SXRlbSIsInNoYXJlQXNUYWJNZW51SXRlbSIsIm1zVGVhbXNHcm91cE1lbnVJdGVtIiwib3B0aW9uTWVudUl0ZW1SZWYiLCJjb25zdGFudCIsIl9nZXRNU1RlYW1zU2hhcmVPcHRpb25WaXNpYmlsaXR5IiwiX2dldENvbGxhYm9yYXRpb25PcHRpb25FeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJpbnRlcm5hbE9wdGlvbiIsImlzQ29uc3RhbnQiLCJhbmQiLCJtc1RlYW1zQ29uZmlnRXhwIiwiX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24iLCJtc1RlYW1zT3B0aW9uc1ZhbHVlIiwiYWxsTVNUZWFtc09wdGlvbnNFeHBzIiwiYmluZGluZ1Rvb2xraXRFeHAiLCJtc1RlYW1zT3B0aW9uIiwibXNUZWFtT3B0aW9uRXhwIiwib3B0aW9uRXhwIiwiaW50ZXJuYWxPcHRpb25FeHAiLCJfZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5Iiwic2hhcmVBc0NhcmRPcHRpb25SZWYiLCJleHBTaG93TVNUZWFtc09wdGlvbnMiLCJleHBTaG93U2hhcmVBc0NhcmQiLCJub3QiLCJVSSIsIklzRWRpdGFibGUiLCJtc1RlYW1zT3B0aW9uUmVmIiwiZXhwcmVzc2lvbiIsIm1lbnVJdGVtUmVmIiwiaXRlbSIsImNvbXBpbGVkRXhwIiwiY29tcGlsZUV4cHJlc3Npb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJwYXJzZWRFeHAiLCJiaW5kUHJvcGVydHkiLCJ2aWV3U2hhcmVDb25maWdzIiwiZmVBcHBTaGFyZUNvbmZpZ3MiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwIiwiX2dldE9wdGlvbkJsb2NrQ29uZmlnIiwidGVhbXMiLCJhc0NhcmQiLCJmZUFwcFNldHRpbmciLCJ2aWV3TGV2ZWxTZXR0aW5nIiwiZmVBcHBFeHAiLCJ2aWV3TGV2ZWxFeHAiLCJTaGFyZUFQSSIsIk92ZXJmbG93VG9vbGJhck1lbnVCdXR0b24iLCJ0b29sdGlwIiwiTWVudSIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0VmlldyIsImFkZERlcGVuZGVudCIsIkNvbW1hbmRFeGVjdXRpb24iLCJjb21tYW5kIiwiZXhlY3V0ZSIsImdldE1lbnUiLCJvcGVuQnkiLCJpc0luaXRpYWxpemVkIiwiY2F0Y2giLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaGFyZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBpc0NvbnN0YW50LCBub3QsIG9yLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgdHlwZSBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7ICRNZW51SXRlbVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25PcHRpb25LZXksIENvbGxhYm9yYXRpb25PcHRpb25zIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vVGVhbXNIZWxwZXJTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuXG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQge1xuXHRFWFBPUlRfVE9fQ1NWX0lDT04sXG5cdEVYUE9SVF9UT19QREZfSUNPTixcblx0RVhQT1JUX1RPX1NQUkVBRFNIRUVUX0lDT04sXG5cdFBSSU5UX0lDT05cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2hhcmVPcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NoYXJlL1NoYXJlT3B0aW9uc1wiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhck1lbnVCdXR0b24gZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhck1lbnVCdXR0b25cIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTXNUZWFtc09wdGlvbnMgZnJvbSBcIi4vc2hhcmUvTXNUZWFtc09wdGlvbnNcIjtcbmltcG9ydCBTaGFyZUFQSSBmcm9tIFwiLi9zaGFyZS9TaGFyZUFQSVwiO1xuXG4vLyBNUyBUZWFtcyBvcHRpb25zIGFyZSBub3QgcHVibGljIHZpYSBTaGFyZSBidWlsZGluZyBibG9jay5cbi8vIFNvLCAnc2hvd01zVGVhbXNPcHRpb25zJyBpcyBpbnRlcm5hbCBhbmQgc2hhbGwgYmUgb25seSBwaWNrZWQgZnJvbSB0ZW1wbGF0ZSBtYW5pZmVzdC5cbnR5cGUgSW50ZXJuYWxTaGFyZU9wdGlvbnMgPSBQcm9wZXJ0aWVzT2Y8U2hhcmVPcHRpb25zPjtcblxudHlwZSBTaGFyZU9wdGlvbktleSA9XG5cdHwgQ29sbGFib3JhdGlvbk9wdGlvbktleVxuXHR8IFwiU0VORF9FTUFJTFwiXG5cdHwgXCJTSEFSRV9KQU1cIlxuXHR8IFwiU0FWRV9BU19USUxFXCJcblx0fCBcIk1TX1RFQU1TX0dST1VQXCJcblx0fCBcIlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUlwiO1xuXG5jb25zdCBlbnVtTVNUZWFtc09wdGlvbjoge1xuXHRba2V5IGluIENvbGxhYm9yYXRpb25PcHRpb25LZXldOiBDb2xsYWJvcmF0aW9uT3B0aW9uS2V5O1xufSA9IHtcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6IFwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkRcIixcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjogXCJDT0xMQUJPUkFUSU9OX01TVEVBTVNfVEFCXCIsXG5cdENPTExBQk9SQVRJT05fTVNURUFNU19DSEFUOiBcIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUXCJcbn07XG5cbmNvbnN0IGVudW1TaGFyZU9wdGlvbjoge1xuXHRba2V5IGluIFNoYXJlT3B0aW9uS2V5XTogU2hhcmVPcHRpb25LZXk7XG59ID0ge1xuXHQuLi5lbnVtTVNUZWFtc09wdGlvbixcblx0Li4ue1xuXHRcdFNFTkRfRU1BSUw6IFwiU0VORF9FTUFJTFwiLFxuXHRcdFNIQVJFX0pBTTogXCJTSEFSRV9KQU1cIixcblx0XHRTQVZFX0FTX1RJTEU6IFwiU0FWRV9BU19USUxFXCIsXG5cdFx0TVNfVEVBTVNfR1JPVVA6IFwiTVNfVEVBTVNfR1JPVVBcIixcblx0XHRTSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVI6IFwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSXCJcblx0fVxufTtcblxudHlwZSBDb25maWdPcHRpb25zID0gSW50ZXJuYWxTaGFyZU9wdGlvbnMgJiBQcm9wZXJ0aWVzT2Y8TXNUZWFtc09wdGlvbnM+O1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHVzZWQgdG8gY3JlYXRlIHRoZSDigJhTaGFyZeKAmSBmdW5jdGlvbmFsaXR5LlxuICogPGJyPlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgJ1NoYXJlIGluIFNBUCBKYW0nIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBwbGF0Zm9ybXMgdGhhdCBhcmUgaW50ZWdyYXRlZCB3aXRoIFNBUCBKYW0uXG4gKiA8YnI+XG4gKiBJZiB5b3UgYXJlIGNvbnN1bWluZyB0aGlzIG1hY3JvIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBTQVAgRmlvcmkgbGF1bmNocGFkIGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gdGhlICdTYXZlIGFzIFRpbGUnIG9wdGlvbiBpcyBub3QgdmlzaWJsZS5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOlNoYXJlXG4gKiBpZD1cInNvbWVJRFwiXG4gKiB2aXNpYmxlPVwidHJ1ZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9idWlsZGluZ0Jsb2Nrcy9mZWF0dXJlcy9zaGFyZURlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFyZSBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8U2hhcmVBUEk+IHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgc2hhcmVBUElJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogU3VwcG9ydGVkIFNoYXJlIG9wdGlvbnMge0BsaW5rIHNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVPcHRpb25zfS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHtcblx0XHR0eXBlOiBcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVPcHRpb25zXCIsXG5cdFx0ZGVmYXVsdENsYXNzOiBTaGFyZU9wdGlvbnMsXG5cdFx0aXNEZWZhdWx0OiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBzaGFyZU9wdGlvbnM/OiBTaGFyZU9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFN1cHBvcnRlZCBNaWNyb3NvZnQgVGVhbXMgb3B0aW9ucy5cblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7XG5cdFx0dHlwZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlLk1zVGVhbXNPcHRpb25zXCIsXG5cdFx0ZGVmYXVsdENsYXNzOiBNc1RlYW1zT3B0aW9uc1xuXHR9KVxuXHRwdWJsaWMgbXNUZWFtc09wdGlvbnM/OiBNc1RlYW1zT3B0aW9ucztcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0bWVudUJ1dHRvbiE6IFJlZjxNZW51QnV0dG9uPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y21kRXhlY3V0aW9uITogUmVmPENvbW1hbmRFeGVjdXRpb24+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtZW51ITogUmVmPE1lbnU+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzYXZlQXNUaWxlTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzQ29sbGFib3JhdGlvbk1hbmFnZXIhOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZVZpYUpBTU1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0c2VuZEVtYWlsTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzQ2FyZE1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0c2hhcmVWaWFDaGF0TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzVGFiTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtc1RlYW1zR3JvdXBNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHByaW50TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb1NwcmVhZHNoZWV0TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb1BERk1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZXhwb3J0VG9DU1ZNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0cHVibGljIGlzSW5pdGlhbGl6ZWQ/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2Jsb2NrSW50ZXJuYWxDb25maWchOiBDb25maWdPcHRpb25zO1xuXG5cdGNvbnN0cnVjdG9yKGlkT3JQcm9wczogc3RyaW5nIHwgKFByb3BlcnRpZXNPZjxTaGFyZT4gJiAkQ29udHJvbFNldHRpbmdzKSwgcHJvcHM/OiBQcm9wZXJ0aWVzT2Y8U2hhcmU+ICYgJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdGxldCBzaGFyZUFQSUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBpZE9yUHJvcHMgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHByb3BzID0gaWRPclByb3BzO1xuXHRcdFx0c2hhcmVBUElJZCA9IHByb3BzLmlkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaGFyZUFQSUlkID0gaWRPclByb3BzO1xuXHRcdH1cblx0XHRwcm9wcyA/Pz0ge307XG5cdFx0cHJvcHMuc2hhcmVBUElJZCA9IHNoYXJlQVBJSWQ7XG5cdFx0cHJvcHMuaWQgPSB1bmRlZmluZWQ7XG5cdFx0c3VwZXIodW5kZWZpbmVkLCBwcm9wcyk7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiB2b2lkIHtcblx0XHRzdXBlci5vbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudCk7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KF9vd25lckNvbXBvbmVudC5nZXRBcHBDb21wb25lbnQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzaGFyZSBvcHRpb24gZnJvbSB0aGUgc2hlbGwgY29uZmlndXJhdGlvbiBhc3luY2hyb25vdXNseSBhbmQgcHJlcGFyZSB0aGUgY29udGVudCBvZiB0aGUgbWVudSBidXR0b24uXG5cdCAqIE9wdGlvbnMgb3JkZXIgYXJlOlxuXHQgKiAtIFNlbmQgYXMgRW1haWxcblx0ICogLSBTaGFyZSBhcyBKYW0gKGlmIGF2YWlsYWJsZSlcblx0ICogLSBUZWFtcyBvcHRpb25zIChpZiBhdmFpbGFibGUpXG5cdCAqIC0gU2F2ZSBhcyB0aWxlLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlXG5cdCAqL1xuXHRhc3luYyBfaW5pdGlhbGl6ZU1lbnVJdGVtcyh2aWV3OiBWaWV3LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBpc1RlYW1zTW9kZUFjdGl2ZSA9IGZhbHNlO1xuXHRcdGlmIChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5Db2xsYWJvcmF0aW9uKSB7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IENvbGxhYm9yYXRpb25IZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkhlbHBlclwiKTtcblx0XHRcdGlzVGVhbXNNb2RlQWN0aXZlID0gYXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5pc1RlYW1zTW9kZUFjdGl2ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChpc1RlYW1zTW9kZUFjdGl2ZSkge1xuXHRcdFx0Ly9uZWVkIHRvIGNsZWFyIHRoZSB2aXNpYmxlIHByb3BlcnR5IGJpbmRpbmdzIG90aGVyd2lzZSB3aGVuIHRoZSBiaW5kaW5nIHZhbHVlIGNoYW5nZXMgdGhlbiBpdCB3aWxsIHNldCBiYWNrIHRoZSB2aXNpYmxlIHRvIHRoZSByZXNvbHZlZCB2YWx1ZVxuXHRcdFx0dGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LnVuYmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCB0cnVlKTtcblx0XHRcdHRoaXMubWVudUJ1dHRvbi5jdXJyZW50Py5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IGlzUGx1Z2luSW5mb1N0YWJsZSA9IGF3YWl0IHNoZWxsU2VydmljZXMud2FpdEZvclBsdWdpbnNMb2FkKCk7XG5cdFx0aWYgKCFpc1BsdWdpbkluZm9TdGFibGUpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlIHBsdWdpbiBpbmZvIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIHdlIG5lZWQgdG8gZG8gdGhpcyBjb21wdXRhdGlvbiBhZ2FpbiBvbiB0aGUgbmV4dCBidXR0b24gY2xpY2tcblx0XHRcdGNvbnN0IGludGVybmFsQnV0dG9uID0gdGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRyb2xcIikgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRcdGludGVybmFsQnV0dG9uPy5hdHRhY2hFdmVudE9uY2UoXCJwcmVzc1wiLCB7fSwgKCkgPT4gdGhpcy5faW5pdGlhbGl6ZU1lbnVJdGVtcywgdGhpcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZyA9IHRoaXMuX2dldFNoYXJlQmxvY2tDb25maWcodmlldyk7XG5cblx0XHRhd2FpdCB0aGlzLl9hZGRNZW51SXRlbXMoY29udHJvbGxlciwgc2hlbGxTZXJ2aWNlcywgdmlldyk7XG5cdFx0dGhpcy5zZXRTaGFyZU9wdGlvbnNWaXNpYmlsaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNoYXJlIG9wdGlvbnMgYXMgbWVudSBpdGVtcyB0byB0aGUgc2hhcmUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRhc3luYyBfYWRkTWVudUl0ZW1zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBzaGVsbFNlcnZpY2VzOiBJU2hlbGxTZXJ2aWNlcywgdmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX2FkZFNlbmRFbWFpbE9wdGlvbihjb250cm9sbGVyKTtcblx0XHRhd2FpdCB0aGlzLl9hZGRTaGVsbEJhc2VkTWVudUl0ZW1zKGNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXMpO1xuXHRcdHRoaXMuX2FkZFByaW50T3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRFeGNlbE9wdGlvbnMoY29udHJvbGxlciwgdmlldyk7XG5cdFx0dGhpcy5fYWRkRXhwb3J0Q1NWT3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRQREZPcHRpb25zKGNvbnRyb2xsZXIsIHZpZXcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGwgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGN1c3RvbSBoYW5kbGVycy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKiBAcGFyYW0gc2hhcmVPcHRpb25Qcm9wIFRoZSBrZXkgb2YgdGhlIGFjdGlvbiB5b3Ugd2FudCB0byBjYWxsXG5cdCAqL1xuXHRfY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhcblx0XHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHR2aWV3OiBWaWV3LFxuXHRcdHNoYXJlT3B0aW9uUHJvcDogXCJwcmludFwiIHwgXCJleHBvcnRUb0NTVlwiIHwgXCJleHBvcnRUb1NwcmVhZHNoZWV0XCIgfCBcImV4cG9ydFRvUERGXCJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Y29uc3Qgc2hhcmVBY3Rpb25Qcm9wcyA9IHZpZXdEYXRhPy5zaGFyZT8uW3NoYXJlT3B0aW9uUHJvcF07XG5cdFx0Y29uc3QgbW9kdWxlID0gc2hhcmVBY3Rpb25Qcm9wcz8ucHJlc3M/LnN1YnN0cmluZygwLCBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpKS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKTtcblx0XHRjb25zdCBtZXRob2QgPSBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8uc3Vic3RyaW5nKHNoYXJlQWN0aW9uUHJvcHM/LnByZXNzPy5sYXN0SW5kZXhPZihcIi5cIikgKyAxLCBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8ubGVuZ3RoKTtcblxuXHRcdGlmIChtb2R1bGUgJiYgbWV0aG9kKSB7XG5cdFx0XHRGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QobW9kdWxlLCBtZXRob2QsIHZpZXcsIGNvbnRyb2xsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gY2FsbCBldmVudCBoYW5kbGVyLCBNb2R1bGUgYW5kL29yIE1ldGhvZCBpcyBub3Qgc2V0IHByb3Blcmx5XCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgcHJpbnQgb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkUHJpbnRPcHRpb25zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCB2aWV3OiBWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0aWYgKHZpZXdEYXRhPy5zaGFyZT8uaGFzT3duUHJvcGVydHkoXCJwcmludFwiKSA9PT0gdHJ1ZSAmJiB2aWV3RGF0YT8uc2hhcmU/LnByaW50Py5oYXNPd25Qcm9wZXJ0eShcInByZXNzXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMucHJpbnRNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX1BSSU5UXCIpfVxuXHRcdFx0XHRcdGljb249e1BSSU5UX0lDT059XG5cdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2NhbGxNYW5pZmVzdEFjdGlvbnNFdmVudHMoY29udHJvbGxlciwgdmlldywgXCJwcmludFwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBFeGNlbCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICovXG5cdF9hZGRFeHBvcnRFeGNlbE9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcImV4cG9ydFRvU3ByZWFkc2hlZXRcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvU3ByZWFkc2hlZXRNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX0VYUE9SVF9BU19FWENFTFwiKX1cblx0XHRcdFx0XHRpY29uPXtFWFBPUlRfVE9fU1BSRUFEU0hFRVRfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvU3ByZWFkc2hlZXRcIik7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBFeHBvcnQgYXMgQ1NWIG9wdGlvbiB0byBtZW51IGJ1dHRvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKi9cblx0X2FkZEV4cG9ydENTVk9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcImV4cG9ydFRvQ1NWXCIpID09PSB0cnVlICYmIHZpZXdEYXRhPy5zaGFyZT8ucHJpbnQ/Lmhhc093blByb3BlcnR5KFwicHJlc3NcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5leHBvcnRUb0NTVk1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1NIQVJFX0NPTlRST0xfRVhQT1JUX0FTX0NTVlwiKX1cblx0XHRcdFx0XHRpY29uPXtFWFBPUlRfVE9fQ1NWX0lDT059XG5cdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2NhbGxNYW5pZmVzdEFjdGlvbnNFdmVudHMoY29udHJvbGxlciwgdmlldywgXCJleHBvcnRUb0NTVlwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBQREYgb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkRXhwb3J0UERGT3B0aW9ucyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgdmlldzogVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhO1xuXHRcdGlmICh2aWV3RGF0YT8uc2hhcmU/Lmhhc093blByb3BlcnR5KFwiZXhwb3J0VG9QREZcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvUERGTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0hBUkVfQ09OVFJPTF9FWFBPUlRfQVNfUERGXCIpfVxuXHRcdFx0XHRcdGljb249e0VYUE9SVF9UT19QREZfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvUERGXCIpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgc2VuZCBlbWFpbCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0X2FkZFNlbmRFbWFpbE9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd1NlbmRFbWFpbCA/PyB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMuc2VuZEVtYWlsTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0VNQU5USUNfQ09OVFJPTF9TRU5EX0VNQUlMXCIpfVxuXHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9lbWFpbFwifVxuXHRcdFx0XHRcdHByZXNzPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiBjb250cm9sbGVyLnNoYXJlLl90cmlnZ2VyRW1haWwoKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBVU2hlbGwgYmFzZWQgc2hhcmUgb3B0aW9ucy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBzaGVsbFNlcnZpY2VzIFNoZWxsIFNlcnZpY2VzXG5cdCAqL1xuXHRhc3luYyBfYWRkU2hlbGxCYXNlZE1lbnVJdGVtcyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc2hlbGxTZXJ2aWNlczogSVNoZWxsU2VydmljZXMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBoYXNVc2hlbGwgPSBzaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpO1xuXHRcdGlmIChoYXNVc2hlbGwpIHtcblx0XHRcdC8vIHNoYXJlIHZpYSBKQU1cblx0XHRcdHRoaXMuX2FkZFNoYXJlVmlhSkFNT3B0aW9uKGNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXMpO1xuXG5cdFx0XHQvLyBQcmVwYXJlIHRlYW1zIG1lbnUgaXRlbXNcblx0XHRcdGF3YWl0IHRoaXMuX2FkZE1TVGVhbXNPcHRpb25zKGNvbnRyb2xsZXIpO1xuXG5cdFx0XHQvLyBQcmVwYXJlIENvbGxhYm9yYXRpb24gTWFuYWdlciBPcHRpb25zXG5cdFx0XHRhd2FpdCB0aGlzLl9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbihjb250cm9sbGVyKTtcblxuXHRcdFx0Ly8gU2F2ZSBhcyBUaWxlXG5cdFx0XHRhd2FpdCB0aGlzLl9hZGRTYXZlQXNUaWxlT3B0aW9uKGNvbnRyb2xsZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgQ00gb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlciBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBNZW51SXRlbXNcblx0ICovXG5cdGFzeW5jIF9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uID0gYXdhaXQgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbigpO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgKHRoaXMuc2hhcmVPcHRpb25zPy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gKFxuXHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0cmVmPXt0aGlzLnNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlcn1cblx0XHRcdFx0XHRcdHRleHQ9e2NvbGxhYm9yYXRpb25PcHRpb24udGV4dH1cblx0XHRcdFx0XHRcdGljb249e2NvbGxhYm9yYXRpb25PcHRpb24uaWNvbn1cblx0XHRcdFx0XHRcdHByZXNzPXthc3luYyAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4pOiBQcm9taXNlPHZvaWQ+ID0+XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NvbGxhYm9yYXRpb25NYW5hZ2VyQnV0dG9uUHJlc3MoY29sbGFib3JhdGlvbk9wdGlvbi5wcmVzcywgZXZlbnQpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PjwvTWVudUl0ZW0+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShtZW51SXRlbSwgXCJwcmVzc1wiLCBjb2xsYWJvcmF0aW9uT3B0aW9uLmZlc3JTdGVwTmFtZSk7XG5cdFx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBBZGRpbmcgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIE9wdGlvbiA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfY29sbGFib3JhdGlvbk1hbmFnZXJCdXR0b25QcmVzcyhjb2xsYWJvcmF0aW9uQ2FsbEJhY2s6IEZ1bmN0aW9uLCBldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNsaWNrZWRNZW51SXRlbSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXG5cdFx0Y29uc3QgdmlldzogVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY2xpY2tlZE1lbnVJdGVtKTtcblx0XHRjb25zdCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGF3YWl0IGNvbnRyb2xsZXIuc2hhcmUuX2FkYXB0U2hhcmVNZXRhZGF0YSgpO1xuXHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdmlldy5nZXRNb2RlbChcInNoYXJlSW5mb1wiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdGNvbnN0IHNoYXJlSW5mbyA9IHNoYXJlSW5mb01vZGVsLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IHsgY29sbGFib3JhdGlvbkluZm8gfSA9IHNoYXJlSW5mbztcblx0XHRcdGNvbGxhYm9yYXRpb25DYWxsQmFjayhjb2xsYWJvcmF0aW9uSW5mby5hcHBUaXRsZSwgY29sbGFib3JhdGlvbkluZm8udXJsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNoYXJlIHZpYSBKQU0gb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICovXG5cdF9hZGRTaGFyZVZpYUpBTU9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc2hlbGxTZXJ2aWNlczogSVNoZWxsU2VydmljZXMpOiB2b2lkIHtcblx0XHRjb25zdCBoYXNKYW0gPSAhIXNoZWxsU2VydmljZXMuaXNKYW1BY3RpdmU/LigpO1xuXHRcdGlmIChoYXNKYW0pIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5zaGFyZVZpYUpBTU1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX0NPTU1PTl9TQVBGRV9TSEFSRV9KQU1cIil9XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3NoYXJlLTJcIn1cblx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4gY29udHJvbGxlci5zaGFyZS5fdHJpZ2dlclNoYXJlVG9KYW0oKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBvcHRpb25zIHRvIHNoYXJlIHZpYSBNaWNyb3NvZnQgVGVhbXMuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyXG5cdCAqL1xuXHRhc3luYyBfYWRkTVNUZWFtc09wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWc/LnNob3dNc1RlYW1zT3B0aW9ucyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zID0gYXdhaXQgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZS5nZXRUZWFtc0NvbGxhYk9wdGlvbnNWaWFTaGFyZSh7XG5cdFx0XHRcdGlzU2hhcmVBc0NhcmRFbmFibGVkOiB0aGlzLl9nZXRJc1NoYXJlQXNDYXJkRW5hYmxlZCgpXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCFzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uIG9mIHNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MgPSB0aGlzLl9nZXRNc1RlYW1zTWVudUl0ZW1TZXR0aW5ncyhjb2xsYWJvcmF0aW9uT3B0aW9uKTtcblx0XHRcdFx0Y29uc3Qgc3ViT3B0aW9ucyA9IG1lbnVJdGVtU2V0dGluZ3MuaXRlbXM7XG5cdFx0XHRcdC8vIE11bHRpcGxlIHN1YiBvcHRpb25zIGFyZSBncm91cGVkIGludG8gc2luZ2xlIHRlYW1zIGdyb3VwIG1lbnUgaXRlbS5cblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1LZXkgPVxuXHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoc3ViT3B0aW9ucykgJiYgc3ViT3B0aW9ucy5sZW5ndGggPyBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVAgOiBjb2xsYWJvcmF0aW9uT3B0aW9uLmtleTtcblxuXHRcdFx0XHR0aGlzLl9hZGRNc1RlYW1zTWVudUl0ZW0obWVudUl0ZW1TZXR0aW5ncywgbWVudUl0ZW1LZXksIGNvbGxhYm9yYXRpb25PcHRpb24uZmVzclN0ZXBOYW1lKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IFNoYXJlIDogYWRkaW5nIE1TIHRlYW1zIG9wdGlvbnMgOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBzYXZlIGFzIHRpbGUgb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICovXG5cdGFzeW5jIF9hZGRTYXZlQXNUaWxlT3B0aW9uKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIHNldCBzYXZlIGFzIHRpbGVcblx0XHRcdC8vIGZvciBub3cgd2UgbmVlZCB0byBjcmVhdGUgYWRkQm9va21hcmtCdXR0b24gdG8gdXNlIHRoZSBzYXZlIGFzIHRpbGUgZmVhdHVyZS5cblx0XHRcdC8vIEluIHRoZSBmdXR1cmUgc2F2ZSBhcyB0aWxlIHNob3VsZCBiZSBhdmFpbGFibGUgYXMgYW4gQVBJIG9yIGEgTWVudUl0ZW0gc28gdGhhdCBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIE1lbnUgYnV0dG9uLlxuXHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgd2l0aCBBZGRCb29rbWFya0J1dHRvbiB0ZWFtLlxuXHRcdFx0Ly8gSW5jbHVkZWQgaW4gYSBoYXNVc2hlbGwgYnJhbmNoXG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IEFkZEJvb2ttYXJrQnV0dG9uIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvdXNoZWxsL3VpL2Zvb3RlcmJhci9BZGRCb29rbWFya0J1dHRvblwiKTtcblx0XHRcdGNvbnN0IGFkZEJvb2ttYXJrQnV0dG9uID0gbmV3IEFkZEJvb2ttYXJrQnV0dG9uKCk7XG5cdFx0XHRpZiAoYWRkQm9va21hcmtCdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRyZWY9e3RoaXMuc2F2ZUFzVGlsZU1lbnVJdGVtfVxuXHRcdFx0XHRcdFx0dGV4dD17YWRkQm9va21hcmtCdXR0b24uZ2V0VGV4dCgpfVxuXHRcdFx0XHRcdFx0aWNvbj17YWRkQm9va21hcmtCdXR0b24uZ2V0SWNvbigpfVxuXHRcdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IGNvbnRyb2xsZXIuc2hhcmUuX3NhdmVBc1RpbGUodGhpcy5zYXZlQXNUaWxlTWVudUl0ZW0uY3VycmVudCEpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7IGRlcGVuZGVudHM6IFthZGRCb29rbWFya0J1dHRvbl0gfX1cblx0XHRcdFx0XHQ8L01lbnVJdGVtPlxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQm9va21hcmtCdXR0b24uZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogU2hhcmUgOiBhZGRpbmcgU2F2ZSBhcyB0aWxlIG9wdGlvbiA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGlzU2hhcmVBc0NhcmRFbmFibGVkIHRvIGZldGNoIHN1cHBvcnRlZCBjb2xsYWJvcmF0aW9uIG9wdGlvbnMuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4uXG5cdCAqL1xuXHRfZ2V0SXNTaGFyZUFzQ2FyZEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2hvd1NoYXJlQXNDYXJkID0gdGhpcy5tc1RlYW1zT3B0aW9ucz8uZW5hYmxlQ2FyZCA/PyBmYWxzZTtcblxuXHRcdGlmICh0eXBlb2Ygc2hvd1NoYXJlQXNDYXJkID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0cmV0dXJuIHNob3dTaGFyZUFzQ2FyZDtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzaG93U2hhcmVBc0NhcmQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIFwidHJ1ZVwiIG9yIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gc2hvd1NoYXJlQXNDYXJkID09PSBcInRydWVcIiB8fCBCb29sZWFuKEJpbmRpbmdJbmZvLnBhcnNlKHNob3dTaGFyZUFzQ2FyZCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE1lbnUgSXRlbSBzZXR0aW5ncyBmb3IgbWFpbiBNUyB0ZWFtcyBvcHRpb24uXG5cdCAqIEBwYXJhbSBjb2xsYWJvcmF0aW9uT3B0aW9uIFJvb3QgQ29sbGFib3JhdGlvbiBPcHRpb25cblx0ICogQHJldHVybnMgTWVudUl0ZW1TZXR0aW5nc1xuXHQgKi9cblx0X2dldE1zVGVhbXNNZW51SXRlbVNldHRpbmdzKGNvbGxhYm9yYXRpb25PcHRpb246IENvbGxhYm9yYXRpb25PcHRpb25zKTogJE1lbnVJdGVtU2V0dGluZ3Mge1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0TXNUZWFtc1N1Yk9wdGlvbnMoY29sbGFib3JhdGlvbk9wdGlvbj8uc3ViT3B0aW9ucyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MgPSB7XG5cdFx0XHR0ZXh0OiBjb2xsYWJvcmF0aW9uT3B0aW9uLnRleHQsXG5cdFx0XHRpY29uOiBjb2xsYWJvcmF0aW9uT3B0aW9uLmljb24sXG5cdFx0XHRpdGVtc1xuXHRcdH07XG5cblx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gc3ViIG9wdGlvbiB0aGVuIHRoZSBtYWluIG9wdGlvbiBzaG91bGQgYmUgY2xpY2thYmxlXG5cdFx0XHQvLyBzbyBhZGQgYSBwcmVzcyBoYW5kbGVyLlxuXHRcdFx0bWVudUl0ZW1TZXR0aW5ncy5wcmVzcyA9IGFzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5jb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudCk7XG5cdFx0XHRtZW51SXRlbVNldHRpbmdzW1wiY3VzdG9tRGF0YVwiXSA9IG5ldyBDdXN0b21EYXRhKHtcblx0XHRcdFx0a2V5OiBcImNvbGxhYm9yYXRpb25EYXRhXCIsXG5cdFx0XHRcdHZhbHVlOiBjb2xsYWJvcmF0aW9uT3B0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbnVJdGVtU2V0dGluZ3M7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIG1haW4gTVMgVGVhbXMgTWVudSBJdGVtIHRvIHRoZSBTaGFyZSBidWlsZGluZyBibG9jayBtZW51LlxuXHQgKiBAcGFyYW0gbWVudUl0ZW1TZXR0aW5ncyBNZW51IEl0ZW0gc2V0dGluZ3Ncblx0ICogQHBhcmFtIG1lbnVJdGVtS2V5IE1TIHRlYW1zIG9wdGlvbiBrZXlcblx0ICogQHBhcmFtIGZlc3JTdGVwTmFtZSBTdGVwIG5hbWVcblx0ICovXG5cdF9hZGRNc1RlYW1zTWVudUl0ZW0obWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MsIG1lbnVJdGVtS2V5PzogU2hhcmVPcHRpb25LZXksIGZlc3JTdGVwTmFtZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG1lbnVJdGVtOiBNZW51SXRlbSA9IChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRyZWY9e3RoaXMuX2dldE1lbnVJdGVtUmVmZXJlbmNlKG1lbnVJdGVtS2V5KX1cblx0XHRcdFx0dGV4dD17bWVudUl0ZW1TZXR0aW5ncy50ZXh0fVxuXHRcdFx0XHRpY29uPXttZW51SXRlbVNldHRpbmdzLmljb259XG5cdFx0XHRcdGN1c3RvbURhdGE9e21lbnVJdGVtU2V0dGluZ3MuY3VzdG9tRGF0YX1cblx0XHRcdFx0aXRlbXM9e21lbnVJdGVtU2V0dGluZ3MuaXRlbXN9XG5cdFx0XHQ+PC9NZW51SXRlbT5cblx0XHQpO1xuXHRcdGlmIChtZW51SXRlbVNldHRpbmdzLnByZXNzKSB7XG5cdFx0XHQvL1xuXHRcdFx0bWVudUl0ZW0uYXR0YWNoUHJlc3MobWVudUl0ZW1TZXR0aW5ncy5wcmVzcyk7XG5cdFx0XHRpZiAoZmVzclN0ZXBOYW1lKSB7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShtZW51SXRlbSwgXCJwcmVzc1wiLCBmZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKG1lbnVJdGVtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtcyBjb3JyZXNwb25kaW5nIHRvIE1TIHRlYW1zIHN1YiBvcHRpb25zLlxuXHQgKiBAcGFyYW0gc3ViT3B0aW9ucyBBcnJheSBvZiBjb2xsYWJvcmF0aW9uIG9wdGlvbnNcblx0ICogQHJldHVybnMgTWVudUl0ZW1zXG5cdCAqL1xuXHRfZ2V0TXNUZWFtc1N1Yk9wdGlvbnMoc3ViT3B0aW9ucz86IENvbGxhYm9yYXRpb25PcHRpb25zW10pOiBNZW51SXRlbVtdIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3ViT3B0aW9ucykpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3ViT3B0aW9ucy5yZWR1Y2UoKG1lbnVJdGVtczogTWVudUl0ZW1bXSwgc3ViT3B0aW9uOiBDb2xsYWJvcmF0aW9uT3B0aW9ucykgPT4ge1xuXHRcdFx0Y29uc3Qgc3ViTWVudUl0ZW0gPSAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2Uoc3ViT3B0aW9uLmtleSl9XG5cdFx0XHRcdFx0dGV4dD17c3ViT3B0aW9uLnRleHR9XG5cdFx0XHRcdFx0aWNvbj17c3ViT3B0aW9uLmljb259XG5cdFx0XHRcdFx0cHJlc3M9e2FzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5jb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudCl9XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YT17XG5cdFx0XHRcdFx0XHRuZXcgQ3VzdG9tRGF0YSh7XG5cdFx0XHRcdFx0XHRcdGtleTogXCJjb2xsYWJvcmF0aW9uRGF0YVwiLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogc3ViT3B0aW9uXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PjwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdFx0aWYgKHN1Yk9wdGlvbi5mZXNyU3RlcE5hbWUpIHtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHN1Yk1lbnVJdGVtLCBcInByZXNzXCIsIHN1Yk9wdGlvbi5mZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFsuLi5tZW51SXRlbXMsIHN1Yk1lbnVJdGVtXTtcblx0XHR9LCBbXSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJlc3MgaGFuZGxlciBmb3IgY29sbGFib3JhdGlvbiBtZW51IGl0ZW1zLlxuXHQgKmBcblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY29sbGFib3JhdGlvbk1lbnVJdGVtUHJlc3MoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjbGlja2VkTWVudUl0ZW0gPSBldmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdGNvbnN0IHZpZXc6IFZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNsaWNrZWRNZW51SXRlbSk7XG5cdFx0Y29uc3QgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRhd2FpdCBjb250cm9sbGVyLnNoYXJlLl9hZGFwdFNoYXJlTWV0YWRhdGEoKTtcblx0XHRjb25zdCBzaGFyZUluZm9Nb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJzaGFyZUluZm9cIikgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNoYXJlSW5mb01vZGVsKSB7XG5cdFx0XHRjb25zdCBzaGFyZUluZm8gPSBzaGFyZUluZm9Nb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRjb25zdCB7IGNvbGxhYm9yYXRpb25JbmZvIH0gPSBzaGFyZUluZm87XG5cblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25EYXRhID0gY2xpY2tlZE1lbnVJdGVtLmRhdGEoXCJjb2xsYWJvcmF0aW9uRGF0YVwiKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IHRlYW1zSGVscGVyU2VydmljZSA9IChhd2FpdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlLmdldENvbGxhYm9yYXRpb25TZXJ2aWNlcygpKS5vVGVhbXNIZWxwZXJTZXJ2aWNlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25EYXRhW1wia2V5XCJdID09PSBlbnVtTVNUZWFtc09wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0FSRCkge1xuXHRcdFx0XHRjb25zdCBpc1NoYXJlQXNDYXJkRW5hYmxlZCA9IHRlYW1zSGVscGVyU2VydmljZS5pc0ZlYXR1cmVGbGFnRW5hYmxlZCgpO1xuXHRcdFx0XHRjb25zdCBjYXJkRGVmaW5pdGlvbiA9IGlzU2hhcmVBc0NhcmRFbmFibGVkID8gYXdhaXQgY29udHJvbGxlci5zaGFyZS5nZXRDYXJkRGVmaW5pdGlvbigpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgY2FyZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChjYXJkRGVmaW5pdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRcdGNvbnN0IHsgc2VtYW50aWNPYmplY3QsIGFjdGlvbiB9ID0gc2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdFx0XHRcdGNhcmRJZCA9IGAke3NlbWFudGljT2JqZWN0fV8ke2FjdGlvbn1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHJlYXNvbiA9ICFpc1NoYXJlQXNDYXJkRW5hYmxlZFxuXHRcdFx0XHRcdFx0PyBcIkZlYXR1cmUgZmxhZyBkaXNhYmxlZCBpbiBjb2xsYWJvcmF0aW9uIHRlYW1zIGhlbHBlclwiXG5cdFx0XHRcdFx0XHQ6IFwiQ2FyZCBkZWZpbml0aW9uIHdhcyBub3QgY3JlYXRlZFwiO1xuXHRcdFx0XHRcdExvZy5pbmZvKGBGRSBWNCA6IFNoYXJlIGJsb2NrIDogc2hhcmUgYXMgQ2FyZCA6ICR7cmVhc29ufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25JbmZvW1wiY2FyZE1hbmlmZXN0XCJdID0gY2FyZERlZmluaXRpb247XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25JbmZvW1wiY2FyZElkXCJdID0gY2FyZElkO1xuXHRcdFx0fVxuXHRcdFx0dGVhbXNIZWxwZXJTZXJ2aWNlLnNoYXJlKGNvbGxhYm9yYXRpb25EYXRhLCBjb2xsYWJvcmF0aW9uSW5mbyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiBpbmRpdmlkdWFsIFVJIGVsZW1lbnRzIG9mIHRoZSBTaGFyZSBidWlsZGluZyBibG9jay4gTGlrZSwgTWVudUl0ZW1zLCBNZW51QnV0dG9uIGFuZCBDb21tYW5kIGV4ZWN1dGlvbi5cblx0ICovXG5cdHNldFNoYXJlT3B0aW9uc1Zpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3B0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGVudW1TaGFyZU9wdGlvbikgYXMgU2hhcmVPcHRpb25LZXlbXTtcblx0XHRjb25zdCB2aXNpYmxlQmluZGluZ0V4cHMgPSBvcHRpb25LZXlzLnJlZHVjZSgoYmluZGluZ1Rvb2xraXRFeHBzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSwgb3B0aW9uOiBTaGFyZU9wdGlvbktleSkgPT4ge1xuXHRcdFx0Y29uc3QgZXhwID0gdGhpcy5fZ2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5RXhwcmVzc2lvbihvcHRpb24pO1xuXHRcdFx0dGhpcy5fc2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5KG9wdGlvbiwgZXhwKTtcblx0XHRcdHJldHVybiBbLi4uYmluZGluZ1Rvb2xraXRFeHBzLCBleHBdO1xuXHRcdH0sIFtdKTtcblx0XHRjb25zdCBzaGFyZUJsb2NrVmlzaWJsZUV4cCA9IG9yKC4uLnZpc2libGVCaW5kaW5nRXhwcyk7XG5cdFx0aWYgKHRoaXMubWVudUJ1dHRvbi5jdXJyZW50ICYmIHRoaXMuY21kRXhlY3V0aW9uLmN1cnJlbnQpIHtcblx0XHRcdHRoaXMuX2JpbmRVSVZpc2liaWxpdHkodGhpcy5tZW51QnV0dG9uLmN1cnJlbnQsIHNoYXJlQmxvY2tWaXNpYmxlRXhwKTtcblx0XHRcdHRoaXMuX2JpbmRVSVZpc2liaWxpdHkodGhpcy5jbWRFeGVjdXRpb24uY3VycmVudCwgc2hhcmVCbG9ja1Zpc2libGVFeHApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtIHJlZmVyZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZyBTaGFyZSBvcHRpb24uXG5cdCAqYFxuXHQgKiBAcGFyYW0gb3B0aW9uIFNoYXJlIG9wdGlvbiBrZXlcblx0ICogQHJldHVybnMgUmVmZXJlbmNlIHRvIHRoZSBNZW51IEl0ZW1cblx0ICovXG5cdF9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24/OiBTaGFyZU9wdGlvbktleSk6IFJlZjxNZW51SXRlbT4gfCB1bmRlZmluZWQge1xuXHRcdGxldCByZWY6IFJlZjxNZW51SXRlbT4gfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChvcHRpb24pIHtcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEOlxuXHRcdFx0XHRyZWYgPSB0aGlzLnNoYXJlQXNDYXJkTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NIQVQ6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVWaWFDaGF0TWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZUFzVGFiTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0VORF9FTUFJTDpcblx0XHRcdFx0cmVmID0gdGhpcy5zZW5kRW1haWxNZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9KQU06XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVWaWFKQU1NZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TQVZFX0FTX1RJTEU6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2F2ZUFzVGlsZU1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLk1TX1RFQU1TX0dST1VQOlxuXHRcdFx0XHRyZWYgPSB0aGlzLm1zVGVhbXNHcm91cE1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUjpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZUFzQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZpc2liaWxpdHkgZXhwcmVzc2lvbiBvZiBzaGFyZSBvcHRpb24gYmFzZWQgb24gdGhlIGJ1aWxkaW5nIGJsb2NrIGNvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSBvcHRpb24gU2hhcmUgb3B0aW9uIG5hbWUgb2YgdGhlIHZpc2libGUgZXhwcmVzc2lvbiB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuXG5cdCAqIEByZXR1cm5zIEJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uLlxuXHQgKi9cblx0X2dldFNoYXJlT3B0aW9uVmlzaWJpbGl0eUV4cHJlc3Npb24ob3B0aW9uPzogU2hhcmVPcHRpb25LZXkpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IG9wdGlvbk1lbnVJdGVtUmVmID0gdGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2Uob3B0aW9uKTtcblx0XHRpZiAoIW9wdGlvbk1lbnVJdGVtUmVmPy5jdXJyZW50KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCBleHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHRzd2l0Y2ggKG9wdGlvbikge1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0hBVDpcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19UQUI6XG5cdFx0XHRcdGV4cCA9IHRoaXMuX2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVI6XG5cdFx0XHRcdGV4cCA9IHRoaXMuX2dldENvbGxhYm9yYXRpb25PcHRpb25FeHByZXNzaW9uKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0VORF9FTUFJTDoge1xuXHRcdFx0XHRjb25zdCBzaG93U2VuZEVtYWlsID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4odGhpcy5zaGFyZU9wdGlvbnM/LnNob3dTZW5kRW1haWwgPz8gdHJ1ZSwgXCJib29sZWFuXCIpO1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbiA9IHJlc29sdmVCaW5kaW5nU3RyaW5nKFxuXHRcdFx0XHRcdHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWcuc2hvd1NlbmRFbWFpbCA/PyB0cnVlLFxuXHRcdFx0XHRcdFwiYm9vbGVhblwiXG5cdFx0XHRcdCkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XHRcdGlmIChpc0NvbnN0YW50KGludGVybmFsT3B0aW9uKSAmJiBpbnRlcm5hbE9wdGlvbi52YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRleHAgPSBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNDb25zdGFudChpbnRlcm5hbE9wdGlvbikgJiYgaW50ZXJuYWxPcHRpb24udmFsdWUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRleHAgPSAodGhpcy5zaGFyZU9wdGlvbnM/LnNob3dTZW5kRW1haWwgPz8gdHJ1ZSkgYXMgdW5rbm93biBhcyBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGV4cCA9IGFuZChzaG93U2VuZEVtYWlsLCBpbnRlcm5hbE9wdGlvbikgYXMgdW5rbm93biBhcyBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0hBUkVfSkFNOlxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0FWRV9BU19USUxFOiB7XG5cdFx0XHRcdC8vIE5vIG92ZXJyaWRlcyBmb3IgU2hhcmUgdmlhIEphbSBhbmQgU2F2ZSBhcyB0aWxlIHlldC5cblx0XHRcdFx0ZXhwID0gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVA6IHtcblx0XHRcdFx0Y29uc3QgbXNUZWFtc0NvbmZpZ0V4cCA9IHRoaXMuX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24oKTtcblx0XHRcdFx0Y29uc3QgbXNUZWFtc09wdGlvbnNWYWx1ZSA9IE9iamVjdC5rZXlzKGVudW1NU1RlYW1zT3B0aW9uKSBhcyBTaGFyZU9wdGlvbktleVtdO1xuXHRcdFx0XHRjb25zdCBhbGxNU1RlYW1zT3B0aW9uc0V4cHMgPSBtc1RlYW1zT3B0aW9uc1ZhbHVlLnJlZHVjZShcblx0XHRcdFx0XHQoYmluZGluZ1Rvb2xraXRFeHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdLCBtc1RlYW1zT3B0aW9uOiBTaGFyZU9wdGlvbktleSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbXNUZWFtT3B0aW9uRXhwID0gdGhpcy5fZ2V0TVNUZWFtc1NoYXJlT3B0aW9uVmlzaWJpbGl0eShtc1RlYW1zT3B0aW9uKTtcblx0XHRcdFx0XHRcdHJldHVybiBbLi4uYmluZGluZ1Rvb2xraXRFeHAsIG1zVGVhbU9wdGlvbkV4cF07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRbXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHAgPSBhbmQobXNUZWFtc0NvbmZpZ0V4cCwgb3IoLi4uYWxsTVNUZWFtc09wdGlvbnNFeHBzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBleHA7XG5cdH1cblxuXHRfZ2V0Q29sbGFib3JhdGlvbk9wdGlvbkV4cHJlc3Npb24oKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0XHRjb25zdCBzaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPSB0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyID8/IGZhbHNlO1xuXHRcdGNvbnN0IG9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciwgXCJib29sZWFuXCIpO1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gdGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gdHJ1ZTtcblx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KGludGVybmFsT3B0aW9uLCBcImJvb2xlYW5cIik7XG5cdFx0cmV0dXJuIGFuZChvcHRpb25FeHAsIGludGVybmFsT3B0aW9uRXhwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgZXhwcmVzc2lvbiBmb3Igc2hvd01zVGVhbXNPcHRpb25zIHNoYXJlIG9wdGlvbiBiYXNlZCBvbiB0aGUgYnVpbGRpbmcgYmxvY2sgY29uZmlndXJhdGlvbi5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gdGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93TXNUZWFtc09wdGlvbnMgPz8gdHJ1ZTtcblx0XHRyZXR1cm4gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gZm9yIHNoYXJlIGFzIGNhcmQgdmlzaWJpbGl0eS5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5KCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0bGV0IGV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGNvbnN0IHNoYXJlQXNDYXJkT3B0aW9uUmVmID0gdGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2UoZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKTtcblx0XHRpZiAoc2hhcmVBc0NhcmRPcHRpb25SZWY/LmN1cnJlbnQpIHtcblx0XHRcdGNvbnN0IGV4cFNob3dNU1RlYW1zT3B0aW9ucyA9IHRoaXMuX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24oKTtcblx0XHRcdGNvbnN0IHNob3dTaGFyZUFzQ2FyZCA9IHRoaXMubXNUZWFtc09wdGlvbnM/LmVuYWJsZUNhcmQgPz8gdHJ1ZTtcblx0XHRcdGNvbnN0IG9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHNob3dTaGFyZUFzQ2FyZCwgXCJib29sZWFuXCIpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxPcHRpb24gPSB0aGlzLl9ibG9ja0ludGVybmFsQ29uZmlnLmVuYWJsZUNhcmQgPz8gdHJ1ZTtcblx0XHRcdGNvbnN0IGludGVybmFsT3B0aW9uRXhwID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0XHRcdGNvbnN0IGV4cFNob3dTaGFyZUFzQ2FyZCA9IGFuZChvcHRpb25FeHAsIGludGVybmFsT3B0aW9uRXhwKTtcblx0XHRcdGV4cCA9IGFuZChub3QoVUkuSXNFZGl0YWJsZSksIGV4cFNob3dNU1RlYW1zT3B0aW9ucywgZXhwU2hvd1NoYXJlQXNDYXJkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3Igc2hhcmUgb3B0aW9uJ3MgdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24ga2V5XG5cdCAqIEByZXR1cm5zIEJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uLlxuXHQgKi9cblx0X2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uOiBTaGFyZU9wdGlvbktleSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0aWYgKG9wdGlvbiA9PT0gZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5KCk7XG5cdFx0fVxuXHRcdC8vIE5vIG92ZXJyaWRlcyBmb3IgU2hhcmUgYXMgVGFiIGFuZCBDaGF0IHlldC5cblxuXHRcdGNvbnN0IG1zVGVhbXNPcHRpb25SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdHJldHVybiBtc1RlYW1zT3B0aW9uUmVmPy5jdXJyZW50ID8gdGhpcy5fZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpIDogY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2aXNpYmxpdHkgb2YgaW5kaXZpZHVhbCBzaGFyZSBvcHRpb24ncyBNZW51SXRlbS5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24ga2V5XG5cdCAqIEBwYXJhbSBleHByZXNzaW9uIFZpc2liaWxpdHkgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cblx0ICovXG5cdF9zZXRTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uOiBTaGFyZU9wdGlvbktleSwgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdGlmIChtZW51SXRlbVJlZj8uY3VycmVudCkge1xuXHRcdFx0dGhpcy5fYmluZFVJVmlzaWJpbGl0eShtZW51SXRlbVJlZi5jdXJyZW50LCBleHByZXNzaW9uKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQmluZCB0aGUgVUkgZWxlbWVudCdzIHZpc2liaWxpdHkgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBpdGVtIFVJIGVsZW1lbnRcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBiaW5kLlxuXHQgKi9cblx0X2JpbmRVSVZpc2liaWxpdHkoaXRlbTogTWVudUJ1dHRvbiB8IE1lbnVJdGVtIHwgQ29tbWFuZEV4ZWN1dGlvbiwgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogdm9pZCB7XG5cdFx0Ly8gTk9URTogV2UgbmVlZCBjb252ZXJ0IHRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiB0byB0aGUgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IHRoZSBVSSBlbGVtZW50LlxuXHRcdC8vIEF0IHJ1bnRpbWUsIHdlIGNhbid0IHVzZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBvciBjb21waWxlZCBleHByZXNzaW9uIGRpcmVjdGx5IHRvIGJpbmQgdGhlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSB2aXNpYmxlIHByb3BlcnR5IG9yIHRoZSBVSSBlbGVtZW50LlxuXHRcdC8vIFdlIHdvdWxkIG5lZWQgdG8gY29udmVydCB0aGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gLT4gVUk1IEJpbmRpbmdJbmZvIHRvIGJpbmQgdGhlIFVJIGVsZW1lbnQuXG5cdFx0Y29uc3QgY29tcGlsZWRFeHAgPSBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcblxuXHRcdGlmIChjb21waWxlZEV4cCAmJiBjb21waWxlZEV4cC5zdGFydHNXaXRoKFwie1wiKSAmJiBjb21waWxlZEV4cD8uZW5kc1dpdGgoXCJ9XCIpKSB7XG5cdFx0XHQvLyBQcm9iYWJsZSBiaW5kaW5nXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBwYXJzZWRFeHAgPSBCaW5kaW5nSW5mby5wYXJzZShjb21waWxlZEV4cCk7XG5cdFx0XHRcdGl0ZW0uYmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCBwYXJzZWRFeHApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNvbXBpbGVkRXhwID09PSBcImZhbHNlXCIpIHtcblx0XHRcdC8vIFN0YXRpY2FsbHkgZmFsc2Vcblx0XHRcdGl0ZW0udW5iaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHRydWUpO1xuXHRcdFx0aXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0U2hhcmVCbG9ja0NvbmZpZyh2aWV3OiBWaWV3KTogQ29uZmlnT3B0aW9ucyB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Y29uc3Qgdmlld1NoYXJlQ29uZmlncyA9IHZpZXdEYXRhPy5zaGFyZTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmVBcHBTaGFyZUNvbmZpZ3MgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uc2hhcmU7XG5cblx0XHRjb25zdCBzaG93U2VuZEVtYWlsID0gdGhpcy5fZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTaGFyZUNvbmZpZ3M/LnNob3dTZW5kRW1haWwsIHZpZXdTaGFyZUNvbmZpZ3M/LnNob3dTZW5kRW1haWwpO1xuXHRcdGNvbnN0IHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKFxuXHRcdFx0ZmVBcHBTaGFyZUNvbmZpZ3M/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlcixcblx0XHRcdHZpZXdTaGFyZUNvbmZpZ3M/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlclxuXHRcdCk7XG5cblx0XHRjb25zdCBzaG93TXNUZWFtc09wdGlvbnMgPSB0aGlzLl9nZXRPcHRpb25CbG9ja0NvbmZpZyhcblx0XHRcdGZlQXBwU2hhcmVDb25maWdzPy50ZWFtcz8uc2hvd01zVGVhbXNPcHRpb25zLFxuXHRcdFx0dmlld1NoYXJlQ29uZmlncz8udGVhbXM/LnNob3dNc1RlYW1zT3B0aW9uc1xuXHRcdCk7XG5cdFx0Y29uc3QgZW5hYmxlQ2FyZCA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKGZlQXBwU2hhcmVDb25maWdzPy50ZWFtcz8uYXNDYXJkLCB2aWV3U2hhcmVDb25maWdzPy50ZWFtcz8uYXNDYXJkKTtcblxuXHRcdHJldHVybiB7IHNob3dTZW5kRW1haWwsIHNob3dNc1RlYW1zT3B0aW9ucywgZW5hYmxlQ2FyZCwgc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyIH07XG5cdH1cblxuXHRfZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTZXR0aW5nPzogYm9vbGVhbiB8IHN0cmluZywgdmlld0xldmVsU2V0dGluZz86IGJvb2xlYW4gfCBzdHJpbmcpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgZmVBcHBFeHAgPSB0eXBlb2YgZmVBcHBTZXR0aW5nID09PSBcInN0cmluZ1wiID8gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oZmVBcHBTZXR0aW5nKSA6IGNvbnN0YW50KGZlQXBwU2V0dGluZyA/PyB0cnVlKTtcblx0XHRjb25zdCB2aWV3TGV2ZWxFeHAgPVxuXHRcdFx0dHlwZW9mIHZpZXdMZXZlbFNldHRpbmcgPT09IFwic3RyaW5nXCIgPyByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPih2aWV3TGV2ZWxTZXR0aW5nKSA6IGNvbnN0YW50KHZpZXdMZXZlbFNldHRpbmcgPz8gdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChmZUFwcEV4cCwgdmlld0xldmVsRXhwKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogU2hhcmVBUEkge1xuXHRcdC8vIEN0cmwrU2hpZnQrUyBpcyBuZWVkZWQgZm9yIHRoZSB0aW1lIGJlaW5nIGJ1dCB0aGlzIG5lZWRzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgYmFja2xvZyBmcm9tIG1lbnUgYnV0dG9uXG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IChcblx0XHRcdDxTaGFyZUFQSSBpZD17dGhpcy5zaGFyZUFQSUlkfT5cblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhck1lbnVCdXR0b25cblx0XHRcdFx0XHR0ZXh0PXtcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9TQVBGRV9BQ1RJT05fU0hBUkV9XCJ9XG5cdFx0XHRcdFx0cmVmPXt0aGlzLm1lbnVCdXR0b259XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2FjdGlvblwifVxuXHRcdFx0XHRcdHRvb2x0aXA9e1wie3NhcC5mZS5pMThuPk1fQ09NTU9OX1NBUEZFX0FDVElPTl9TSEFSRX0gKEN0cmwrU2hpZnQrUylcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51IHJlZj17dGhpcy5tZW51fT48L01lbnU+XG5cdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbj5cblx0XHRcdDwvU2hhcmVBUEk+XG5cdFx0KSBhcyBTaGFyZUFQSTtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKClcblx0XHRcdC5nZXRWaWV3KClcblx0XHRcdC5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmNtZEV4ZWN1dGlvbn1cblx0XHRcdFx0XHRjb21tYW5kPVwiU2hhcmVcIlxuXHRcdFx0XHRcdGV4ZWN1dGU9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMubWVudUJ1dHRvbi5jdXJyZW50Py5nZXRNZW51KCkub3BlbkJ5KHRoaXMubWVudUJ1dHRvbi5jdXJyZW50LCB0cnVlKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHQvLyBUaGUgaW5pdGlhbGl6YXRpb24gaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBqdXN0IHRyaWdnZXIgaXQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0IDpEXG5cdFx0dGhpcy5pc0luaXRpYWxpemVkID0gdGhpcy5faW5pdGlhbGl6ZU1lbnVJdGVtcyh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLCBhcHBDb21wb25lbnQpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1lbnVCdXR0b247XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
969
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtTVNUZWFtc09wdGlvbiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEIiwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUIiwiZW51bVNoYXJlT3B0aW9uIiwiU0VORF9FTUFJTCIsIlNIQVJFX0pBTSIsIlNBVkVfQVNfVElMRSIsIk1TX1RFQU1TX0dST1VQIiwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSIiwiU2hhcmUiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzQiLCJhZ2dyZWdhdGlvbiIsImRlZmF1bHRDbGFzcyIsIlNoYXJlT3B0aW9ucyIsImlzRGVmYXVsdCIsIl9kZWM1IiwiZGVmYXVsdFZhbHVlIiwiT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkiLCJIaWdoIiwiX2RlYzYiLCJNc1RlYW1zT3B0aW9ucyIsIl9kZWM3IiwiZGVmaW5lUmVmZXJlbmNlIiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsImlkT3JQcm9wcyIsInByb3BzIiwiX3RoaXMiLCJzaGFyZUFQSUlkIiwiaWQiLCJ1bmRlZmluZWQiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfb3duZXJDb21wb25lbnQiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsImdldEFwcENvbXBvbmVudCIsIl9pbml0aWFsaXplTWVudUl0ZW1zIiwidmlldyIsImFwcENvbXBvbmVudCIsImlzVGVhbXNNb2RlQWN0aXZlIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJDb2xsYWJvcmF0aW9uIiwiZGVmYXVsdCIsIkNvbGxhYm9yYXRpb25IZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwibWVudUJ1dHRvbiIsImN1cnJlbnQiLCJ1bmJpbmRQcm9wZXJ0eSIsInNldFZpc2libGUiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaXNQbHVnaW5JbmZvU3RhYmxlIiwid2FpdEZvclBsdWdpbnNMb2FkIiwiaW50ZXJuYWxCdXR0b24iLCJnZXRBZ2dyZWdhdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsIl9ibG9ja0ludGVybmFsQ29uZmlnIiwiX2dldFNoYXJlQmxvY2tDb25maWciLCJfYWRkTWVudUl0ZW1zIiwic2V0U2hhcmVPcHRpb25zVmlzaWJpbGl0eSIsIl9hZGRTZW5kRW1haWxPcHRpb24iLCJfYWRkU2hlbGxCYXNlZE1lbnVJdGVtcyIsIl9hZGRQcmludE9wdGlvbnMiLCJfYWRkRXhwb3J0RXhjZWxPcHRpb25zIiwiX2FkZEV4cG9ydENTVk9wdGlvbnMiLCJfYWRkRXhwb3J0UERGT3B0aW9ucyIsIl9jYWxsTWFuaWZlc3RBY3Rpb25zRXZlbnRzIiwic2hhcmVPcHRpb25Qcm9wIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInNoYXJlQWN0aW9uUHJvcHMiLCJzaGFyZSIsIm1vZHVsZSIsInByZXNzIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwibWV0aG9kIiwibGVuZ3RoIiwiRlBNSGVscGVyIiwibG9hZE1vZHVsZUFuZENhbGxNZXRob2QiLCJMb2ciLCJlcnJvciIsImhhc093blByb3BlcnR5IiwicHJpbnQiLCJtZW51IiwiYWRkSXRlbSIsIl9qc3giLCJNZW51SXRlbSIsInJlZiIsInByaW50TWVudUl0ZW0iLCJ0ZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJpY29uIiwiUFJJTlRfSUNPTiIsImV4cG9ydFRvU3ByZWFkc2hlZXRNZW51SXRlbSIsIkVYUE9SVF9UT19TUFJFQURTSEVFVF9JQ09OIiwiZXhwb3J0VG9DU1ZNZW51SXRlbSIsIkVYUE9SVF9UT19DU1ZfSUNPTiIsImV4cG9ydFRvUERGTWVudUl0ZW0iLCJFWFBPUlRfVE9fUERGX0lDT04iLCJzaGFyZU9wdGlvbnMiLCJzaG93U2VuZEVtYWlsIiwic2VuZEVtYWlsTWVudUl0ZW0iLCJfdHJpZ2dlckVtYWlsIiwiaGFzVXNoZWxsIiwiaGFzVVNoZWxsIiwiX2FkZFNoYXJlVmlhSkFNT3B0aW9uIiwiX2FkZE1TVGVhbXNPcHRpb25zIiwiX2FkZENvbGxhYm9yYXRpb25NYW5hZ2VyT3B0aW9uIiwiX2FkZFNhdmVBc1RpbGVPcHRpb24iLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbiIsInNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciIsIm1lbnVJdGVtIiwic2hhcmVBc0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwiZXZlbnQiLCJfY29sbGFib3JhdGlvbk1hbmFnZXJCdXR0b25QcmVzcyIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiZmVzclN0ZXBOYW1lIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiY29sbGFib3JhdGlvbkNhbGxCYWNrIiwiY2xpY2tlZE1lbnVJdGVtIiwiZ2V0U291cmNlIiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiX2FkYXB0U2hhcmVNZXRhZGF0YSIsInNoYXJlSW5mb01vZGVsIiwiZ2V0TW9kZWwiLCJzaGFyZUluZm8iLCJnZXREYXRhIiwiY29sbGFib3JhdGlvbkluZm8iLCJhcHBUaXRsZSIsInVybCIsImhhc0phbSIsImlzSmFtQWN0aXZlIiwic2hhcmVWaWFKQU1NZW51SXRlbSIsIl90cmlnZ2VyU2hhcmVUb0phbSIsInNob3dNc1RlYW1zT3B0aW9ucyIsInNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMiLCJnZXRUZWFtc0NvbGxhYk9wdGlvbnNWaWFTaGFyZSIsImlzU2hhcmVBc0NhcmRFbmFibGVkIiwiX2dldElzU2hhcmVBc0NhcmRFbmFibGVkIiwibWVudUl0ZW1TZXR0aW5ncyIsIl9nZXRNc1RlYW1zTWVudUl0ZW1TZXR0aW5ncyIsInN1Yk9wdGlvbnMiLCJpdGVtcyIsIm1lbnVJdGVtS2V5IiwiQXJyYXkiLCJpc0FycmF5Iiwia2V5IiwiX2FkZE1zVGVhbXNNZW51SXRlbSIsIkFkZEJvb2ttYXJrQnV0dG9uIiwiYWRkQm9va21hcmtCdXR0b24iLCJnZXRFbmFibGVkIiwic2F2ZUFzVGlsZU1lbnVJdGVtIiwiZ2V0VGV4dCIsImdldEljb24iLCJfc2F2ZUFzVGlsZSIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsImRlc3Ryb3kiLCJzaG93U2hhcmVBc0NhcmQiLCJtc1RlYW1zT3B0aW9ucyIsImVuYWJsZUNhcmQiLCJCb29sZWFuIiwiQmluZGluZ0luZm8iLCJwYXJzZSIsIl9nZXRNc1RlYW1zU3ViT3B0aW9ucyIsImNvbGxhYm9yYXRpb25NZW51SXRlbVByZXNzIiwiQ3VzdG9tRGF0YSIsInZhbHVlIiwiX2dldE1lbnVJdGVtUmVmZXJlbmNlIiwiY3VzdG9tRGF0YSIsImF0dGFjaFByZXNzIiwicmVkdWNlIiwibWVudUl0ZW1zIiwic3ViT3B0aW9uIiwic3ViTWVudUl0ZW0iLCJjb2xsYWJvcmF0aW9uRGF0YSIsImRhdGEiLCJ0ZWFtc0hlbHBlclNlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uU2VydmljZXMiLCJvVGVhbXNIZWxwZXJTZXJ2aWNlIiwiaXNGZWF0dXJlRmxhZ0VuYWJsZWQiLCJjYXJkRGVmaW5pdGlvbiIsImdldENhcmREZWZpbml0aW9uIiwiY2FyZElkIiwic2hlbGxTZXJ2aWNlSGVscGVyIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwicmVhc29uIiwiaW5mbyIsIm9wdGlvbktleXMiLCJPYmplY3QiLCJrZXlzIiwidmlzaWJsZUJpbmRpbmdFeHBzIiwiYmluZGluZ1Rvb2xraXRFeHBzIiwib3B0aW9uIiwiZXhwIiwiX2dldFNoYXJlT3B0aW9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJfc2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5Iiwic2hhcmVCbG9ja1Zpc2libGVFeHAiLCJvciIsImNtZEV4ZWN1dGlvbiIsIl9iaW5kVUlWaXNpYmlsaXR5Iiwic2hhcmVBc0NhcmRNZW51SXRlbSIsInNoYXJlVmlhQ2hhdE1lbnVJdGVtIiwic2hhcmVBc1RhYk1lbnVJdGVtIiwibXNUZWFtc0dyb3VwTWVudUl0ZW0iLCJvcHRpb25NZW51SXRlbVJlZiIsImNvbnN0YW50IiwiX2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkiLCJfZ2V0Q29sbGFib3JhdGlvbk9wdGlvbkV4cHJlc3Npb24iLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImludGVybmFsT3B0aW9uIiwiaXNDb25zdGFudCIsImFuZCIsIm1zVGVhbXNDb25maWdFeHAiLCJfZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbiIsIm1zVGVhbXNPcHRpb25zVmFsdWUiLCJhbGxNU1RlYW1zT3B0aW9uc0V4cHMiLCJiaW5kaW5nVG9vbGtpdEV4cCIsIm1zVGVhbXNPcHRpb24iLCJtc1RlYW1PcHRpb25FeHAiLCJvcHRpb25FeHAiLCJpbnRlcm5hbE9wdGlvbkV4cCIsIl9nZXRTaGFyZUFzQ2FyZFZpc2liaWxpdHkiLCJzaGFyZUFzQ2FyZE9wdGlvblJlZiIsImV4cFNob3dNU1RlYW1zT3B0aW9ucyIsImV4cFNob3dTaGFyZUFzQ2FyZCIsIm5vdCIsIlVJIiwiSXNFZGl0YWJsZSIsIm1zVGVhbXNPcHRpb25SZWYiLCJleHByZXNzaW9uIiwibWVudUl0ZW1SZWYiLCJpdGVtIiwiY29tcGlsZWRFeHAiLCJjb21waWxlRXhwcmVzc2lvbiIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInBhcnNlZEV4cCIsImJpbmRQcm9wZXJ0eSIsInZpZXdTaGFyZUNvbmZpZ3MiLCJmZUFwcFNoYXJlQ29uZmlncyIsImdldE1hbmlmZXN0RW50cnkiLCJhcHAiLCJfZ2V0T3B0aW9uQmxvY2tDb25maWciLCJ0ZWFtcyIsImFzQ2FyZCIsImZlQXBwU2V0dGluZyIsInZpZXdMZXZlbFNldHRpbmciLCJmZUFwcEV4cCIsInZpZXdMZXZlbEV4cCIsIlNoYXJlQVBJIiwiT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbiIsInRvb2x0aXAiLCJNZW51IiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJnZXRWaWV3IiwiYWRkRGVwZW5kZW50IiwiQ29tbWFuZEV4ZWN1dGlvbiIsImNvbW1hbmQiLCJleGVjdXRlIiwiZ2V0TWVudSIsIm9wZW5CeSIsImlzSW5pdGlhbGl6ZWQiLCJjYXRjaCIsInNldExheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJnZXRPdmVyZmxvd1Rvb2xiYXJDb25maWciLCJjYW5PdmVyZmxvdyIsIm9uQmVmb3JlRW50ZXJPdmVyZmxvdyIsIm9Db250cm9sIiwiZ2V0Q29udGVudCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwib25BZnRlckV4aXRPdmVyZmxvdyIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoYXJlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGlzQ29uc3RhbnQsIG5vdCwgb3IsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVSZWZlcmVuY2UsIGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgeyAkTWVudUl0ZW1TZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aW9uT3B0aW9uS2V5LCBDb2xsYWJvcmF0aW9uT3B0aW9ucyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvY29tbW9ucy9jb2xsYWJvcmF0aW9uL1RlYW1zSGVscGVyU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRkVTUkhlbHBlciBmcm9tIFwic2FwL3VpL3BlcmZvcm1hbmNlL3RyYWNlL0ZFU1JIZWxwZXJcIjtcblxuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHtcblx0RVhQT1JUX1RPX0NTVl9JQ09OLFxuXHRFWFBPUlRfVE9fUERGX0lDT04sXG5cdEVYUE9SVF9UT19TUFJFQURTSEVFVF9JQ09OLFxuXHRQUklOVF9JQ09OXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTaGFyZU9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVPcHRpb25zXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhck1lbnVCdXR0b24gZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhck1lbnVCdXR0b25cIjtcbmltcG9ydCB7IE92ZXJmbG93VG9vbGJhclByaW9yaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTXNUZWFtc09wdGlvbnMgZnJvbSBcIi4vc2hhcmUvTXNUZWFtc09wdGlvbnNcIjtcbmltcG9ydCBTaGFyZUFQSSBmcm9tIFwiLi9zaGFyZS9TaGFyZUFQSVwiO1xuXG4vLyBNUyBUZWFtcyBvcHRpb25zIGFyZSBub3QgcHVibGljIHZpYSBTaGFyZSBidWlsZGluZyBibG9jay5cbi8vIFNvLCAnc2hvd01zVGVhbXNPcHRpb25zJyBpcyBpbnRlcm5hbCBhbmQgc2hhbGwgYmUgb25seSBwaWNrZWQgZnJvbSB0ZW1wbGF0ZSBtYW5pZmVzdC5cbnR5cGUgSW50ZXJuYWxTaGFyZU9wdGlvbnMgPSBQcm9wZXJ0aWVzT2Y8U2hhcmVPcHRpb25zPjtcblxudHlwZSBTaGFyZU9wdGlvbktleSA9XG5cdHwgQ29sbGFib3JhdGlvbk9wdGlvbktleVxuXHR8IFwiU0VORF9FTUFJTFwiXG5cdHwgXCJTSEFSRV9KQU1cIlxuXHR8IFwiU0FWRV9BU19USUxFXCJcblx0fCBcIk1TX1RFQU1TX0dST1VQXCJcblx0fCBcIlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUlwiO1xuXG5jb25zdCBlbnVtTVNUZWFtc09wdGlvbjoge1xuXHRba2V5IGluIENvbGxhYm9yYXRpb25PcHRpb25LZXldOiBDb2xsYWJvcmF0aW9uT3B0aW9uS2V5O1xufSA9IHtcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6IFwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkRcIixcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjogXCJDT0xMQUJPUkFUSU9OX01TVEVBTVNfVEFCXCIsXG5cdENPTExBQk9SQVRJT05fTVNURUFNU19DSEFUOiBcIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUXCJcbn07XG5cbmNvbnN0IGVudW1TaGFyZU9wdGlvbjoge1xuXHRba2V5IGluIFNoYXJlT3B0aW9uS2V5XTogU2hhcmVPcHRpb25LZXk7XG59ID0ge1xuXHQuLi5lbnVtTVNUZWFtc09wdGlvbixcblx0Li4ue1xuXHRcdFNFTkRfRU1BSUw6IFwiU0VORF9FTUFJTFwiLFxuXHRcdFNIQVJFX0pBTTogXCJTSEFSRV9KQU1cIixcblx0XHRTQVZFX0FTX1RJTEU6IFwiU0FWRV9BU19USUxFXCIsXG5cdFx0TVNfVEVBTVNfR1JPVVA6IFwiTVNfVEVBTVNfR1JPVVBcIixcblx0XHRTSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVI6IFwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSXCJcblx0fVxufTtcblxudHlwZSBDb25maWdPcHRpb25zID0gSW50ZXJuYWxTaGFyZU9wdGlvbnMgJiBQcm9wZXJ0aWVzT2Y8TXNUZWFtc09wdGlvbnM+O1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHVzZWQgdG8gY3JlYXRlIHRoZSDigJhTaGFyZeKAmSBmdW5jdGlvbmFsaXR5LlxuICogPGJyPlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgJ1NoYXJlIGluIFNBUCBKYW0nIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBwbGF0Zm9ybXMgdGhhdCBhcmUgaW50ZWdyYXRlZCB3aXRoIFNBUCBKYW0uXG4gKiA8YnI+XG4gKiBJZiB5b3UgYXJlIGNvbnN1bWluZyB0aGlzIG1hY3JvIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBTQVAgRmlvcmkgbGF1bmNocGFkIGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gdGhlICdTYXZlIGFzIFRpbGUnIG9wdGlvbiBpcyBub3QgdmlzaWJsZS5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOlNoYXJlXG4gKiBpZD1cInNvbWVJRFwiXG4gKiB2aXNpYmxlPVwidHJ1ZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9idWlsZGluZ0Jsb2Nrcy9mZWF0dXJlcy9zaGFyZURlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFyZSBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8U2hhcmVBUEk+IHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgc2hhcmVBUElJZD86IHN0cmluZztcblxuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLm0uSU92ZXJmbG93VG9vbGJhckNvbnRlbnRcIilcblx0X19pbXBsZW1lbnRzX19zYXBfbV9JT3ZlcmZsb3dUb29sYmFyQ29udGVudCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFN1cHBvcnRlZCBTaGFyZSBvcHRpb25zIHtAbGluayBzYXAuZmUubWFjcm9zLnNoYXJlLlNoYXJlT3B0aW9uc30uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7XG5cdFx0dHlwZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlLlNoYXJlT3B0aW9uc1wiLFxuXHRcdGRlZmF1bHRDbGFzczogU2hhcmVPcHRpb25zLFxuXHRcdGlzRGVmYXVsdDogdHJ1ZVxuXHR9KVxuXHRwdWJsaWMgc2hhcmVPcHRpb25zPzogU2hhcmVPcHRpb25zO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRkZWZhdWx0VmFsdWU6IE92ZXJmbG93VG9vbGJhclByaW9yaXR5LkhpZ2hcblx0fSlcblx0cHJpb3JpdHk/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFN1cHBvcnRlZCBNaWNyb3NvZnQgVGVhbXMgb3B0aW9ucy5cblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7XG5cdFx0dHlwZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlLk1zVGVhbXNPcHRpb25zXCIsXG5cdFx0ZGVmYXVsdENsYXNzOiBNc1RlYW1zT3B0aW9uc1xuXHR9KVxuXHRwdWJsaWMgbXNUZWFtc09wdGlvbnM/OiBNc1RlYW1zT3B0aW9ucztcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0bWVudUJ1dHRvbiE6IFJlZjxNZW51QnV0dG9uPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y21kRXhlY3V0aW9uITogUmVmPENvbW1hbmRFeGVjdXRpb24+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtZW51ITogUmVmPE1lbnU+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzYXZlQXNUaWxlTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzQ29sbGFib3JhdGlvbk1hbmFnZXIhOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZVZpYUpBTU1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0c2VuZEVtYWlsTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzQ2FyZE1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0c2hhcmVWaWFDaGF0TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzVGFiTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtc1RlYW1zR3JvdXBNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHByaW50TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb1NwcmVhZHNoZWV0TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb1BERk1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZXhwb3J0VG9DU1ZNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0cHVibGljIGlzSW5pdGlhbGl6ZWQ/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2Jsb2NrSW50ZXJuYWxDb25maWchOiBDb25maWdPcHRpb25zO1xuXG5cdGNvbnN0cnVjdG9yKGlkT3JQcm9wczogc3RyaW5nIHwgKFByb3BlcnRpZXNPZjxTaGFyZT4gJiAkQ29udHJvbFNldHRpbmdzKSwgcHJvcHM/OiBQcm9wZXJ0aWVzT2Y8U2hhcmU+ICYgJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdGxldCBzaGFyZUFQSUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBpZE9yUHJvcHMgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHByb3BzID0gaWRPclByb3BzO1xuXHRcdFx0c2hhcmVBUElJZCA9IHByb3BzLmlkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaGFyZUFQSUlkID0gaWRPclByb3BzO1xuXHRcdH1cblx0XHRwcm9wcyA/Pz0ge307XG5cdFx0cHJvcHMuc2hhcmVBUElJZCA9IHNoYXJlQVBJSWQ7XG5cdFx0cHJvcHMuaWQgPSB1bmRlZmluZWQ7XG5cdFx0c3VwZXIodW5kZWZpbmVkLCBwcm9wcyk7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiB2b2lkIHtcblx0XHRzdXBlci5vbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudCk7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KF9vd25lckNvbXBvbmVudC5nZXRBcHBDb21wb25lbnQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzaGFyZSBvcHRpb24gZnJvbSB0aGUgc2hlbGwgY29uZmlndXJhdGlvbiBhc3luY2hyb25vdXNseSBhbmQgcHJlcGFyZSB0aGUgY29udGVudCBvZiB0aGUgbWVudSBidXR0b24uXG5cdCAqIE9wdGlvbnMgb3JkZXIgYXJlOlxuXHQgKiAtIFNlbmQgYXMgRW1haWxcblx0ICogLSBTaGFyZSBhcyBKYW0gKGlmIGF2YWlsYWJsZSlcblx0ICogLSBUZWFtcyBvcHRpb25zIChpZiBhdmFpbGFibGUpXG5cdCAqIC0gU2F2ZSBhcyB0aWxlLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlXG5cdCAqL1xuXHRhc3luYyBfaW5pdGlhbGl6ZU1lbnVJdGVtcyh2aWV3OiBWaWV3LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBpc1RlYW1zTW9kZUFjdGl2ZSA9IGZhbHNlO1xuXHRcdGlmIChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5Db2xsYWJvcmF0aW9uKSB7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IENvbGxhYm9yYXRpb25IZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkhlbHBlclwiKTtcblx0XHRcdGlzVGVhbXNNb2RlQWN0aXZlID0gYXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5pc1RlYW1zTW9kZUFjdGl2ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChpc1RlYW1zTW9kZUFjdGl2ZSkge1xuXHRcdFx0Ly9uZWVkIHRvIGNsZWFyIHRoZSB2aXNpYmxlIHByb3BlcnR5IGJpbmRpbmdzIG90aGVyd2lzZSB3aGVuIHRoZSBiaW5kaW5nIHZhbHVlIGNoYW5nZXMgdGhlbiBpdCB3aWxsIHNldCBiYWNrIHRoZSB2aXNpYmxlIHRvIHRoZSByZXNvbHZlZCB2YWx1ZVxuXHRcdFx0dGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LnVuYmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCB0cnVlKTtcblx0XHRcdHRoaXMubWVudUJ1dHRvbi5jdXJyZW50Py5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IGlzUGx1Z2luSW5mb1N0YWJsZSA9IGF3YWl0IHNoZWxsU2VydmljZXMud2FpdEZvclBsdWdpbnNMb2FkKCk7XG5cdFx0aWYgKCFpc1BsdWdpbkluZm9TdGFibGUpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlIHBsdWdpbiBpbmZvIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIHdlIG5lZWQgdG8gZG8gdGhpcyBjb21wdXRhdGlvbiBhZ2FpbiBvbiB0aGUgbmV4dCBidXR0b24gY2xpY2tcblx0XHRcdGNvbnN0IGludGVybmFsQnV0dG9uID0gdGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRyb2xcIikgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRcdGludGVybmFsQnV0dG9uPy5hdHRhY2hFdmVudE9uY2UoXCJwcmVzc1wiLCB7fSwgKCkgPT4gdGhpcy5faW5pdGlhbGl6ZU1lbnVJdGVtcywgdGhpcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZyA9IHRoaXMuX2dldFNoYXJlQmxvY2tDb25maWcodmlldyk7XG5cblx0XHRhd2FpdCB0aGlzLl9hZGRNZW51SXRlbXMoY29udHJvbGxlciwgc2hlbGxTZXJ2aWNlcywgdmlldyk7XG5cdFx0dGhpcy5zZXRTaGFyZU9wdGlvbnNWaXNpYmlsaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNoYXJlIG9wdGlvbnMgYXMgbWVudSBpdGVtcyB0byB0aGUgc2hhcmUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRhc3luYyBfYWRkTWVudUl0ZW1zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBzaGVsbFNlcnZpY2VzOiBJU2hlbGxTZXJ2aWNlcywgdmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX2FkZFNlbmRFbWFpbE9wdGlvbihjb250cm9sbGVyKTtcblx0XHRhd2FpdCB0aGlzLl9hZGRTaGVsbEJhc2VkTWVudUl0ZW1zKGNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXMpO1xuXHRcdHRoaXMuX2FkZFByaW50T3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRFeGNlbE9wdGlvbnMoY29udHJvbGxlciwgdmlldyk7XG5cdFx0dGhpcy5fYWRkRXhwb3J0Q1NWT3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRQREZPcHRpb25zKGNvbnRyb2xsZXIsIHZpZXcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGwgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGN1c3RvbSBoYW5kbGVycy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKiBAcGFyYW0gc2hhcmVPcHRpb25Qcm9wIFRoZSBrZXkgb2YgdGhlIGFjdGlvbiB5b3Ugd2FudCB0byBjYWxsXG5cdCAqL1xuXHRfY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhcblx0XHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHR2aWV3OiBWaWV3LFxuXHRcdHNoYXJlT3B0aW9uUHJvcDogXCJwcmludFwiIHwgXCJleHBvcnRUb0NTVlwiIHwgXCJleHBvcnRUb1NwcmVhZHNoZWV0XCIgfCBcImV4cG9ydFRvUERGXCJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Y29uc3Qgc2hhcmVBY3Rpb25Qcm9wcyA9IHZpZXdEYXRhPy5zaGFyZT8uW3NoYXJlT3B0aW9uUHJvcF07XG5cdFx0Y29uc3QgbW9kdWxlID0gc2hhcmVBY3Rpb25Qcm9wcz8ucHJlc3M/LnN1YnN0cmluZygwLCBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpKS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKTtcblx0XHRjb25zdCBtZXRob2QgPSBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8uc3Vic3RyaW5nKHNoYXJlQWN0aW9uUHJvcHM/LnByZXNzPy5sYXN0SW5kZXhPZihcIi5cIikgKyAxLCBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8ubGVuZ3RoKTtcblxuXHRcdGlmIChtb2R1bGUgJiYgbWV0aG9kKSB7XG5cdFx0XHRGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QobW9kdWxlLCBtZXRob2QsIHZpZXcsIGNvbnRyb2xsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gY2FsbCBldmVudCBoYW5kbGVyLCBNb2R1bGUgYW5kL29yIE1ldGhvZCBpcyBub3Qgc2V0IHByb3Blcmx5XCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgcHJpbnQgb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkUHJpbnRPcHRpb25zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCB2aWV3OiBWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0aWYgKHZpZXdEYXRhPy5zaGFyZT8uaGFzT3duUHJvcGVydHkoXCJwcmludFwiKSA9PT0gdHJ1ZSAmJiB2aWV3RGF0YT8uc2hhcmU/LnByaW50Py5oYXNPd25Qcm9wZXJ0eShcInByZXNzXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMucHJpbnRNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX1BSSU5UXCIpfVxuXHRcdFx0XHRcdGljb249e1BSSU5UX0lDT059XG5cdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2NhbGxNYW5pZmVzdEFjdGlvbnNFdmVudHMoY29udHJvbGxlciwgdmlldywgXCJwcmludFwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBFeGNlbCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICovXG5cdF9hZGRFeHBvcnRFeGNlbE9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcImV4cG9ydFRvU3ByZWFkc2hlZXRcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvU3ByZWFkc2hlZXRNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX0VYUE9SVF9BU19FWENFTFwiKX1cblx0XHRcdFx0XHRpY29uPXtFWFBPUlRfVE9fU1BSRUFEU0hFRVRfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvU3ByZWFkc2hlZXRcIik7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBFeHBvcnQgYXMgQ1NWIG9wdGlvbiB0byBtZW51IGJ1dHRvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKi9cblx0X2FkZEV4cG9ydENTVk9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcImV4cG9ydFRvQ1NWXCIpID09PSB0cnVlICYmIHZpZXdEYXRhPy5zaGFyZT8ucHJpbnQ/Lmhhc093blByb3BlcnR5KFwicHJlc3NcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5leHBvcnRUb0NTVk1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1NIQVJFX0NPTlRST0xfRVhQT1JUX0FTX0NTVlwiKX1cblx0XHRcdFx0XHRpY29uPXtFWFBPUlRfVE9fQ1NWX0lDT059XG5cdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2NhbGxNYW5pZmVzdEFjdGlvbnNFdmVudHMoY29udHJvbGxlciwgdmlldywgXCJleHBvcnRUb0NTVlwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBQREYgb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkRXhwb3J0UERGT3B0aW9ucyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgdmlldzogVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhO1xuXHRcdGlmICh2aWV3RGF0YT8uc2hhcmU/Lmhhc093blByb3BlcnR5KFwiZXhwb3J0VG9QREZcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvUERGTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0hBUkVfQ09OVFJPTF9FWFBPUlRfQVNfUERGXCIpfVxuXHRcdFx0XHRcdGljb249e0VYUE9SVF9UT19QREZfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvUERGXCIpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgc2VuZCBlbWFpbCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0X2FkZFNlbmRFbWFpbE9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd1NlbmRFbWFpbCA/PyB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMuc2VuZEVtYWlsTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0VNQU5USUNfQ09OVFJPTF9TRU5EX0VNQUlMXCIpfVxuXHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9lbWFpbFwifVxuXHRcdFx0XHRcdHByZXNzPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiBjb250cm9sbGVyLnNoYXJlLl90cmlnZ2VyRW1haWwoKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBVU2hlbGwgYmFzZWQgc2hhcmUgb3B0aW9ucy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBzaGVsbFNlcnZpY2VzIFNoZWxsIFNlcnZpY2VzXG5cdCAqL1xuXHRhc3luYyBfYWRkU2hlbGxCYXNlZE1lbnVJdGVtcyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc2hlbGxTZXJ2aWNlczogSVNoZWxsU2VydmljZXMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBoYXNVc2hlbGwgPSBzaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpO1xuXHRcdGlmIChoYXNVc2hlbGwpIHtcblx0XHRcdC8vIHNoYXJlIHZpYSBKQU1cblx0XHRcdHRoaXMuX2FkZFNoYXJlVmlhSkFNT3B0aW9uKGNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXMpO1xuXG5cdFx0XHQvLyBQcmVwYXJlIHRlYW1zIG1lbnUgaXRlbXNcblx0XHRcdGF3YWl0IHRoaXMuX2FkZE1TVGVhbXNPcHRpb25zKGNvbnRyb2xsZXIpO1xuXG5cdFx0XHQvLyBQcmVwYXJlIENvbGxhYm9yYXRpb24gTWFuYWdlciBPcHRpb25zXG5cdFx0XHRhd2FpdCB0aGlzLl9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbihjb250cm9sbGVyKTtcblxuXHRcdFx0Ly8gU2F2ZSBhcyBUaWxlXG5cdFx0XHRhd2FpdCB0aGlzLl9hZGRTYXZlQXNUaWxlT3B0aW9uKGNvbnRyb2xsZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgQ00gb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlciBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBNZW51SXRlbXNcblx0ICovXG5cdGFzeW5jIF9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uID0gYXdhaXQgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbigpO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgKHRoaXMuc2hhcmVPcHRpb25zPy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gKFxuXHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0cmVmPXt0aGlzLnNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlcn1cblx0XHRcdFx0XHRcdHRleHQ9e2NvbGxhYm9yYXRpb25PcHRpb24udGV4dH1cblx0XHRcdFx0XHRcdGljb249e2NvbGxhYm9yYXRpb25PcHRpb24uaWNvbn1cblx0XHRcdFx0XHRcdHByZXNzPXthc3luYyAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4pOiBQcm9taXNlPHZvaWQ+ID0+XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NvbGxhYm9yYXRpb25NYW5hZ2VyQnV0dG9uUHJlc3MoY29sbGFib3JhdGlvbk9wdGlvbi5wcmVzcywgZXZlbnQpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PjwvTWVudUl0ZW0+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShtZW51SXRlbSwgXCJwcmVzc1wiLCBjb2xsYWJvcmF0aW9uT3B0aW9uLmZlc3JTdGVwTmFtZSk7XG5cdFx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBBZGRpbmcgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIE9wdGlvbiA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfY29sbGFib3JhdGlvbk1hbmFnZXJCdXR0b25QcmVzcyhjb2xsYWJvcmF0aW9uQ2FsbEJhY2s6IEZ1bmN0aW9uLCBldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNsaWNrZWRNZW51SXRlbSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXG5cdFx0Y29uc3QgdmlldzogVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY2xpY2tlZE1lbnVJdGVtKTtcblx0XHRjb25zdCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGF3YWl0IGNvbnRyb2xsZXIuc2hhcmUuX2FkYXB0U2hhcmVNZXRhZGF0YSgpO1xuXHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdmlldy5nZXRNb2RlbChcInNoYXJlSW5mb1wiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdGNvbnN0IHNoYXJlSW5mbyA9IHNoYXJlSW5mb01vZGVsLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IHsgY29sbGFib3JhdGlvbkluZm8gfSA9IHNoYXJlSW5mbztcblx0XHRcdGNvbGxhYm9yYXRpb25DYWxsQmFjayhjb2xsYWJvcmF0aW9uSW5mby5hcHBUaXRsZSwgY29sbGFib3JhdGlvbkluZm8udXJsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNoYXJlIHZpYSBKQU0gb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICovXG5cdF9hZGRTaGFyZVZpYUpBTU9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc2hlbGxTZXJ2aWNlczogSVNoZWxsU2VydmljZXMpOiB2b2lkIHtcblx0XHRjb25zdCBoYXNKYW0gPSAhIXNoZWxsU2VydmljZXMuaXNKYW1BY3RpdmU/LigpO1xuXHRcdGlmIChoYXNKYW0pIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5zaGFyZVZpYUpBTU1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX0NPTU1PTl9TQVBGRV9TSEFSRV9KQU1cIil9XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3NoYXJlLTJcIn1cblx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4gY29udHJvbGxlci5zaGFyZS5fdHJpZ2dlclNoYXJlVG9KYW0oKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBvcHRpb25zIHRvIHNoYXJlIHZpYSBNaWNyb3NvZnQgVGVhbXMuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyXG5cdCAqL1xuXHRhc3luYyBfYWRkTVNUZWFtc09wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWc/LnNob3dNc1RlYW1zT3B0aW9ucyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zID0gYXdhaXQgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZS5nZXRUZWFtc0NvbGxhYk9wdGlvbnNWaWFTaGFyZSh7XG5cdFx0XHRcdGlzU2hhcmVBc0NhcmRFbmFibGVkOiB0aGlzLl9nZXRJc1NoYXJlQXNDYXJkRW5hYmxlZCgpXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCFzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uIG9mIHNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MgPSB0aGlzLl9nZXRNc1RlYW1zTWVudUl0ZW1TZXR0aW5ncyhjb2xsYWJvcmF0aW9uT3B0aW9uKTtcblx0XHRcdFx0Y29uc3Qgc3ViT3B0aW9ucyA9IG1lbnVJdGVtU2V0dGluZ3MuaXRlbXM7XG5cdFx0XHRcdC8vIE11bHRpcGxlIHN1YiBvcHRpb25zIGFyZSBncm91cGVkIGludG8gc2luZ2xlIHRlYW1zIGdyb3VwIG1lbnUgaXRlbS5cblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1LZXkgPVxuXHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoc3ViT3B0aW9ucykgJiYgc3ViT3B0aW9ucy5sZW5ndGggPyBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVAgOiBjb2xsYWJvcmF0aW9uT3B0aW9uLmtleTtcblxuXHRcdFx0XHR0aGlzLl9hZGRNc1RlYW1zTWVudUl0ZW0obWVudUl0ZW1TZXR0aW5ncywgbWVudUl0ZW1LZXksIGNvbGxhYm9yYXRpb25PcHRpb24uZmVzclN0ZXBOYW1lKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IFNoYXJlIDogYWRkaW5nIE1TIHRlYW1zIG9wdGlvbnMgOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBzYXZlIGFzIHRpbGUgb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICovXG5cdGFzeW5jIF9hZGRTYXZlQXNUaWxlT3B0aW9uKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIHNldCBzYXZlIGFzIHRpbGVcblx0XHRcdC8vIGZvciBub3cgd2UgbmVlZCB0byBjcmVhdGUgYWRkQm9va21hcmtCdXR0b24gdG8gdXNlIHRoZSBzYXZlIGFzIHRpbGUgZmVhdHVyZS5cblx0XHRcdC8vIEluIHRoZSBmdXR1cmUgc2F2ZSBhcyB0aWxlIHNob3VsZCBiZSBhdmFpbGFibGUgYXMgYW4gQVBJIG9yIGEgTWVudUl0ZW0gc28gdGhhdCBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIE1lbnUgYnV0dG9uLlxuXHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgd2l0aCBBZGRCb29rbWFya0J1dHRvbiB0ZWFtLlxuXHRcdFx0Ly8gSW5jbHVkZWQgaW4gYSBoYXNVc2hlbGwgYnJhbmNoXG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IEFkZEJvb2ttYXJrQnV0dG9uIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvdXNoZWxsL3VpL2Zvb3RlcmJhci9BZGRCb29rbWFya0J1dHRvblwiKTtcblx0XHRcdGNvbnN0IGFkZEJvb2ttYXJrQnV0dG9uID0gbmV3IEFkZEJvb2ttYXJrQnV0dG9uKCk7XG5cdFx0XHRpZiAoYWRkQm9va21hcmtCdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRyZWY9e3RoaXMuc2F2ZUFzVGlsZU1lbnVJdGVtfVxuXHRcdFx0XHRcdFx0dGV4dD17YWRkQm9va21hcmtCdXR0b24uZ2V0VGV4dCgpfVxuXHRcdFx0XHRcdFx0aWNvbj17YWRkQm9va21hcmtCdXR0b24uZ2V0SWNvbigpfVxuXHRcdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IGNvbnRyb2xsZXIuc2hhcmUuX3NhdmVBc1RpbGUodGhpcy5zYXZlQXNUaWxlTWVudUl0ZW0uY3VycmVudCEpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7IGRlcGVuZGVudHM6IFthZGRCb29rbWFya0J1dHRvbl0gfX1cblx0XHRcdFx0XHQ8L01lbnVJdGVtPlxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQm9va21hcmtCdXR0b24uZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogU2hhcmUgOiBhZGRpbmcgU2F2ZSBhcyB0aWxlIG9wdGlvbiA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGlzU2hhcmVBc0NhcmRFbmFibGVkIHRvIGZldGNoIHN1cHBvcnRlZCBjb2xsYWJvcmF0aW9uIG9wdGlvbnMuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4uXG5cdCAqL1xuXHRfZ2V0SXNTaGFyZUFzQ2FyZEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2hvd1NoYXJlQXNDYXJkID0gdGhpcy5tc1RlYW1zT3B0aW9ucz8uZW5hYmxlQ2FyZCA/PyBmYWxzZTtcblxuXHRcdGlmICh0eXBlb2Ygc2hvd1NoYXJlQXNDYXJkID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0cmV0dXJuIHNob3dTaGFyZUFzQ2FyZDtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzaG93U2hhcmVBc0NhcmQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIFwidHJ1ZVwiIG9yIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gc2hvd1NoYXJlQXNDYXJkID09PSBcInRydWVcIiB8fCBCb29sZWFuKEJpbmRpbmdJbmZvLnBhcnNlKHNob3dTaGFyZUFzQ2FyZCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE1lbnUgSXRlbSBzZXR0aW5ncyBmb3IgbWFpbiBNUyB0ZWFtcyBvcHRpb24uXG5cdCAqIEBwYXJhbSBjb2xsYWJvcmF0aW9uT3B0aW9uIFJvb3QgQ29sbGFib3JhdGlvbiBPcHRpb25cblx0ICogQHJldHVybnMgTWVudUl0ZW1TZXR0aW5nc1xuXHQgKi9cblx0X2dldE1zVGVhbXNNZW51SXRlbVNldHRpbmdzKGNvbGxhYm9yYXRpb25PcHRpb246IENvbGxhYm9yYXRpb25PcHRpb25zKTogJE1lbnVJdGVtU2V0dGluZ3Mge1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0TXNUZWFtc1N1Yk9wdGlvbnMoY29sbGFib3JhdGlvbk9wdGlvbj8uc3ViT3B0aW9ucyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MgPSB7XG5cdFx0XHR0ZXh0OiBjb2xsYWJvcmF0aW9uT3B0aW9uLnRleHQsXG5cdFx0XHRpY29uOiBjb2xsYWJvcmF0aW9uT3B0aW9uLmljb24sXG5cdFx0XHRpdGVtc1xuXHRcdH07XG5cblx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gc3ViIG9wdGlvbiB0aGVuIHRoZSBtYWluIG9wdGlvbiBzaG91bGQgYmUgY2xpY2thYmxlXG5cdFx0XHQvLyBzbyBhZGQgYSBwcmVzcyBoYW5kbGVyLlxuXHRcdFx0bWVudUl0ZW1TZXR0aW5ncy5wcmVzcyA9IGFzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5jb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudCk7XG5cdFx0XHRtZW51SXRlbVNldHRpbmdzW1wiY3VzdG9tRGF0YVwiXSA9IG5ldyBDdXN0b21EYXRhKHtcblx0XHRcdFx0a2V5OiBcImNvbGxhYm9yYXRpb25EYXRhXCIsXG5cdFx0XHRcdHZhbHVlOiBjb2xsYWJvcmF0aW9uT3B0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbnVJdGVtU2V0dGluZ3M7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIG1haW4gTVMgVGVhbXMgTWVudSBJdGVtIHRvIHRoZSBTaGFyZSBidWlsZGluZyBibG9jayBtZW51LlxuXHQgKiBAcGFyYW0gbWVudUl0ZW1TZXR0aW5ncyBNZW51IEl0ZW0gc2V0dGluZ3Ncblx0ICogQHBhcmFtIG1lbnVJdGVtS2V5IE1TIHRlYW1zIG9wdGlvbiBrZXlcblx0ICogQHBhcmFtIGZlc3JTdGVwTmFtZSBTdGVwIG5hbWVcblx0ICovXG5cdF9hZGRNc1RlYW1zTWVudUl0ZW0obWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MsIG1lbnVJdGVtS2V5PzogU2hhcmVPcHRpb25LZXksIGZlc3JTdGVwTmFtZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG1lbnVJdGVtOiBNZW51SXRlbSA9IChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRyZWY9e3RoaXMuX2dldE1lbnVJdGVtUmVmZXJlbmNlKG1lbnVJdGVtS2V5KX1cblx0XHRcdFx0dGV4dD17bWVudUl0ZW1TZXR0aW5ncy50ZXh0fVxuXHRcdFx0XHRpY29uPXttZW51SXRlbVNldHRpbmdzLmljb259XG5cdFx0XHRcdGN1c3RvbURhdGE9e21lbnVJdGVtU2V0dGluZ3MuY3VzdG9tRGF0YX1cblx0XHRcdFx0aXRlbXM9e21lbnVJdGVtU2V0dGluZ3MuaXRlbXN9XG5cdFx0XHQ+PC9NZW51SXRlbT5cblx0XHQpO1xuXHRcdGlmIChtZW51SXRlbVNldHRpbmdzLnByZXNzKSB7XG5cdFx0XHQvL1xuXHRcdFx0bWVudUl0ZW0uYXR0YWNoUHJlc3MobWVudUl0ZW1TZXR0aW5ncy5wcmVzcyk7XG5cdFx0XHRpZiAoZmVzclN0ZXBOYW1lKSB7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShtZW51SXRlbSwgXCJwcmVzc1wiLCBmZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKG1lbnVJdGVtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtcyBjb3JyZXNwb25kaW5nIHRvIE1TIHRlYW1zIHN1YiBvcHRpb25zLlxuXHQgKiBAcGFyYW0gc3ViT3B0aW9ucyBBcnJheSBvZiBjb2xsYWJvcmF0aW9uIG9wdGlvbnNcblx0ICogQHJldHVybnMgTWVudUl0ZW1zXG5cdCAqL1xuXHRfZ2V0TXNUZWFtc1N1Yk9wdGlvbnMoc3ViT3B0aW9ucz86IENvbGxhYm9yYXRpb25PcHRpb25zW10pOiBNZW51SXRlbVtdIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3ViT3B0aW9ucykpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3ViT3B0aW9ucy5yZWR1Y2UoKG1lbnVJdGVtczogTWVudUl0ZW1bXSwgc3ViT3B0aW9uOiBDb2xsYWJvcmF0aW9uT3B0aW9ucykgPT4ge1xuXHRcdFx0Y29uc3Qgc3ViTWVudUl0ZW0gPSAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2Uoc3ViT3B0aW9uLmtleSl9XG5cdFx0XHRcdFx0dGV4dD17c3ViT3B0aW9uLnRleHR9XG5cdFx0XHRcdFx0aWNvbj17c3ViT3B0aW9uLmljb259XG5cdFx0XHRcdFx0cHJlc3M9e2FzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5jb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudCl9XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YT17XG5cdFx0XHRcdFx0XHRuZXcgQ3VzdG9tRGF0YSh7XG5cdFx0XHRcdFx0XHRcdGtleTogXCJjb2xsYWJvcmF0aW9uRGF0YVwiLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogc3ViT3B0aW9uXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PjwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdFx0aWYgKHN1Yk9wdGlvbi5mZXNyU3RlcE5hbWUpIHtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHN1Yk1lbnVJdGVtLCBcInByZXNzXCIsIHN1Yk9wdGlvbi5mZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFsuLi5tZW51SXRlbXMsIHN1Yk1lbnVJdGVtXTtcblx0XHR9LCBbXSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJlc3MgaGFuZGxlciBmb3IgY29sbGFib3JhdGlvbiBtZW51IGl0ZW1zLlxuXHQgKmBcblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY29sbGFib3JhdGlvbk1lbnVJdGVtUHJlc3MoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjbGlja2VkTWVudUl0ZW0gPSBldmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdGNvbnN0IHZpZXc6IFZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNsaWNrZWRNZW51SXRlbSk7XG5cdFx0Y29uc3QgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRhd2FpdCBjb250cm9sbGVyLnNoYXJlLl9hZGFwdFNoYXJlTWV0YWRhdGEoKTtcblx0XHRjb25zdCBzaGFyZUluZm9Nb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJzaGFyZUluZm9cIikgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNoYXJlSW5mb01vZGVsKSB7XG5cdFx0XHRjb25zdCBzaGFyZUluZm8gPSBzaGFyZUluZm9Nb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRjb25zdCB7IGNvbGxhYm9yYXRpb25JbmZvIH0gPSBzaGFyZUluZm87XG5cblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25EYXRhID0gY2xpY2tlZE1lbnVJdGVtLmRhdGEoXCJjb2xsYWJvcmF0aW9uRGF0YVwiKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IHRlYW1zSGVscGVyU2VydmljZSA9IChhd2FpdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlLmdldENvbGxhYm9yYXRpb25TZXJ2aWNlcygpKS5vVGVhbXNIZWxwZXJTZXJ2aWNlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25EYXRhW1wia2V5XCJdID09PSBlbnVtTVNUZWFtc09wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0FSRCkge1xuXHRcdFx0XHRjb25zdCBpc1NoYXJlQXNDYXJkRW5hYmxlZCA9IHRlYW1zSGVscGVyU2VydmljZS5pc0ZlYXR1cmVGbGFnRW5hYmxlZCgpO1xuXHRcdFx0XHRjb25zdCBjYXJkRGVmaW5pdGlvbiA9IGlzU2hhcmVBc0NhcmRFbmFibGVkID8gYXdhaXQgY29udHJvbGxlci5zaGFyZS5nZXRDYXJkRGVmaW5pdGlvbigpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgY2FyZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChjYXJkRGVmaW5pdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRcdGNvbnN0IHsgc2VtYW50aWNPYmplY3QsIGFjdGlvbiB9ID0gc2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdFx0XHRcdGNhcmRJZCA9IGAke3NlbWFudGljT2JqZWN0fV8ke2FjdGlvbn1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHJlYXNvbiA9ICFpc1NoYXJlQXNDYXJkRW5hYmxlZFxuXHRcdFx0XHRcdFx0PyBcIkZlYXR1cmUgZmxhZyBkaXNhYmxlZCBpbiBjb2xsYWJvcmF0aW9uIHRlYW1zIGhlbHBlclwiXG5cdFx0XHRcdFx0XHQ6IFwiQ2FyZCBkZWZpbml0aW9uIHdhcyBub3QgY3JlYXRlZFwiO1xuXHRcdFx0XHRcdExvZy5pbmZvKGBGRSBWNCA6IFNoYXJlIGJsb2NrIDogc2hhcmUgYXMgQ2FyZCA6ICR7cmVhc29ufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25JbmZvW1wiY2FyZE1hbmlmZXN0XCJdID0gY2FyZERlZmluaXRpb247XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25JbmZvW1wiY2FyZElkXCJdID0gY2FyZElkO1xuXHRcdFx0fVxuXHRcdFx0dGVhbXNIZWxwZXJTZXJ2aWNlLnNoYXJlKGNvbGxhYm9yYXRpb25EYXRhLCBjb2xsYWJvcmF0aW9uSW5mbyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiBpbmRpdmlkdWFsIFVJIGVsZW1lbnRzIG9mIHRoZSBTaGFyZSBidWlsZGluZyBibG9jay4gTGlrZSwgTWVudUl0ZW1zLCBNZW51QnV0dG9uIGFuZCBDb21tYW5kIGV4ZWN1dGlvbi5cblx0ICovXG5cdHNldFNoYXJlT3B0aW9uc1Zpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3B0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGVudW1TaGFyZU9wdGlvbikgYXMgU2hhcmVPcHRpb25LZXlbXTtcblx0XHRjb25zdCB2aXNpYmxlQmluZGluZ0V4cHMgPSBvcHRpb25LZXlzLnJlZHVjZSgoYmluZGluZ1Rvb2xraXRFeHBzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSwgb3B0aW9uOiBTaGFyZU9wdGlvbktleSkgPT4ge1xuXHRcdFx0Y29uc3QgZXhwID0gdGhpcy5fZ2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5RXhwcmVzc2lvbihvcHRpb24pO1xuXHRcdFx0dGhpcy5fc2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5KG9wdGlvbiwgZXhwKTtcblx0XHRcdHJldHVybiBbLi4uYmluZGluZ1Rvb2xraXRFeHBzLCBleHBdO1xuXHRcdH0sIFtdKTtcblx0XHRjb25zdCBzaGFyZUJsb2NrVmlzaWJsZUV4cCA9IG9yKC4uLnZpc2libGVCaW5kaW5nRXhwcyk7XG5cdFx0aWYgKHRoaXMubWVudUJ1dHRvbi5jdXJyZW50ICYmIHRoaXMuY21kRXhlY3V0aW9uLmN1cnJlbnQpIHtcblx0XHRcdHRoaXMuX2JpbmRVSVZpc2liaWxpdHkodGhpcy5tZW51QnV0dG9uLmN1cnJlbnQsIHNoYXJlQmxvY2tWaXNpYmxlRXhwKTtcblx0XHRcdHRoaXMuX2JpbmRVSVZpc2liaWxpdHkodGhpcy5jbWRFeGVjdXRpb24uY3VycmVudCwgc2hhcmVCbG9ja1Zpc2libGVFeHApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtIHJlZmVyZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZyBTaGFyZSBvcHRpb24uXG5cdCAqYFxuXHQgKiBAcGFyYW0gb3B0aW9uIFNoYXJlIG9wdGlvbiBrZXlcblx0ICogQHJldHVybnMgUmVmZXJlbmNlIHRvIHRoZSBNZW51IEl0ZW1cblx0ICovXG5cdF9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24/OiBTaGFyZU9wdGlvbktleSk6IFJlZjxNZW51SXRlbT4gfCB1bmRlZmluZWQge1xuXHRcdGxldCByZWY6IFJlZjxNZW51SXRlbT4gfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChvcHRpb24pIHtcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEOlxuXHRcdFx0XHRyZWYgPSB0aGlzLnNoYXJlQXNDYXJkTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NIQVQ6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVWaWFDaGF0TWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZUFzVGFiTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0VORF9FTUFJTDpcblx0XHRcdFx0cmVmID0gdGhpcy5zZW5kRW1haWxNZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9KQU06XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVWaWFKQU1NZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TQVZFX0FTX1RJTEU6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2F2ZUFzVGlsZU1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLk1TX1RFQU1TX0dST1VQOlxuXHRcdFx0XHRyZWYgPSB0aGlzLm1zVGVhbXNHcm91cE1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUjpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZUFzQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZpc2liaWxpdHkgZXhwcmVzc2lvbiBvZiBzaGFyZSBvcHRpb24gYmFzZWQgb24gdGhlIGJ1aWxkaW5nIGJsb2NrIGNvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSBvcHRpb24gU2hhcmUgb3B0aW9uIG5hbWUgb2YgdGhlIHZpc2libGUgZXhwcmVzc2lvbiB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuXG5cdCAqIEByZXR1cm5zIEJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uLlxuXHQgKi9cblx0X2dldFNoYXJlT3B0aW9uVmlzaWJpbGl0eUV4cHJlc3Npb24ob3B0aW9uPzogU2hhcmVPcHRpb25LZXkpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IG9wdGlvbk1lbnVJdGVtUmVmID0gdGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2Uob3B0aW9uKTtcblx0XHRpZiAoIW9wdGlvbk1lbnVJdGVtUmVmPy5jdXJyZW50KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCBleHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHRzd2l0Y2ggKG9wdGlvbikge1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0hBVDpcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19UQUI6XG5cdFx0XHRcdGV4cCA9IHRoaXMuX2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVI6XG5cdFx0XHRcdGV4cCA9IHRoaXMuX2dldENvbGxhYm9yYXRpb25PcHRpb25FeHByZXNzaW9uKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0VORF9FTUFJTDoge1xuXHRcdFx0XHRjb25zdCBzaG93U2VuZEVtYWlsID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4odGhpcy5zaGFyZU9wdGlvbnM/LnNob3dTZW5kRW1haWwgPz8gdHJ1ZSwgXCJib29sZWFuXCIpO1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbiA9IHJlc29sdmVCaW5kaW5nU3RyaW5nKFxuXHRcdFx0XHRcdHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWcuc2hvd1NlbmRFbWFpbCA/PyB0cnVlLFxuXHRcdFx0XHRcdFwiYm9vbGVhblwiXG5cdFx0XHRcdCkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XHRcdGlmIChpc0NvbnN0YW50KGludGVybmFsT3B0aW9uKSAmJiBpbnRlcm5hbE9wdGlvbi52YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRleHAgPSBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNDb25zdGFudChpbnRlcm5hbE9wdGlvbikgJiYgaW50ZXJuYWxPcHRpb24udmFsdWUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRleHAgPSAodGhpcy5zaGFyZU9wdGlvbnM/LnNob3dTZW5kRW1haWwgPz8gdHJ1ZSkgYXMgdW5rbm93biBhcyBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGV4cCA9IGFuZChzaG93U2VuZEVtYWlsLCBpbnRlcm5hbE9wdGlvbikgYXMgdW5rbm93biBhcyBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0hBUkVfSkFNOlxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0FWRV9BU19USUxFOiB7XG5cdFx0XHRcdC8vIE5vIG92ZXJyaWRlcyBmb3IgU2hhcmUgdmlhIEphbSBhbmQgU2F2ZSBhcyB0aWxlIHlldC5cblx0XHRcdFx0ZXhwID0gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVA6IHtcblx0XHRcdFx0Y29uc3QgbXNUZWFtc0NvbmZpZ0V4cCA9IHRoaXMuX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24oKTtcblx0XHRcdFx0Y29uc3QgbXNUZWFtc09wdGlvbnNWYWx1ZSA9IE9iamVjdC5rZXlzKGVudW1NU1RlYW1zT3B0aW9uKSBhcyBTaGFyZU9wdGlvbktleVtdO1xuXHRcdFx0XHRjb25zdCBhbGxNU1RlYW1zT3B0aW9uc0V4cHMgPSBtc1RlYW1zT3B0aW9uc1ZhbHVlLnJlZHVjZShcblx0XHRcdFx0XHQoYmluZGluZ1Rvb2xraXRFeHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdLCBtc1RlYW1zT3B0aW9uOiBTaGFyZU9wdGlvbktleSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbXNUZWFtT3B0aW9uRXhwID0gdGhpcy5fZ2V0TVNUZWFtc1NoYXJlT3B0aW9uVmlzaWJpbGl0eShtc1RlYW1zT3B0aW9uKTtcblx0XHRcdFx0XHRcdHJldHVybiBbLi4uYmluZGluZ1Rvb2xraXRFeHAsIG1zVGVhbU9wdGlvbkV4cF07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRbXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHAgPSBhbmQobXNUZWFtc0NvbmZpZ0V4cCwgb3IoLi4uYWxsTVNUZWFtc09wdGlvbnNFeHBzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBleHA7XG5cdH1cblxuXHRfZ2V0Q29sbGFib3JhdGlvbk9wdGlvbkV4cHJlc3Npb24oKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0XHRjb25zdCBzaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPSB0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyID8/IGZhbHNlO1xuXHRcdGNvbnN0IG9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciwgXCJib29sZWFuXCIpO1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gdGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gdHJ1ZTtcblx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KGludGVybmFsT3B0aW9uLCBcImJvb2xlYW5cIik7XG5cdFx0cmV0dXJuIGFuZChvcHRpb25FeHAsIGludGVybmFsT3B0aW9uRXhwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgZXhwcmVzc2lvbiBmb3Igc2hvd01zVGVhbXNPcHRpb25zIHNoYXJlIG9wdGlvbiBiYXNlZCBvbiB0aGUgYnVpbGRpbmcgYmxvY2sgY29uZmlndXJhdGlvbi5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gdGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93TXNUZWFtc09wdGlvbnMgPz8gdHJ1ZTtcblx0XHRyZXR1cm4gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gZm9yIHNoYXJlIGFzIGNhcmQgdmlzaWJpbGl0eS5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5KCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0bGV0IGV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGNvbnN0IHNoYXJlQXNDYXJkT3B0aW9uUmVmID0gdGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2UoZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKTtcblx0XHRpZiAoc2hhcmVBc0NhcmRPcHRpb25SZWY/LmN1cnJlbnQpIHtcblx0XHRcdGNvbnN0IGV4cFNob3dNU1RlYW1zT3B0aW9ucyA9IHRoaXMuX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24oKTtcblx0XHRcdGNvbnN0IHNob3dTaGFyZUFzQ2FyZCA9IHRoaXMubXNUZWFtc09wdGlvbnM/LmVuYWJsZUNhcmQgPz8gdHJ1ZTtcblx0XHRcdGNvbnN0IG9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHNob3dTaGFyZUFzQ2FyZCwgXCJib29sZWFuXCIpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxPcHRpb24gPSB0aGlzLl9ibG9ja0ludGVybmFsQ29uZmlnLmVuYWJsZUNhcmQgPz8gdHJ1ZTtcblx0XHRcdGNvbnN0IGludGVybmFsT3B0aW9uRXhwID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0XHRcdGNvbnN0IGV4cFNob3dTaGFyZUFzQ2FyZCA9IGFuZChvcHRpb25FeHAsIGludGVybmFsT3B0aW9uRXhwKTtcblx0XHRcdGV4cCA9IGFuZChub3QoVUkuSXNFZGl0YWJsZSksIGV4cFNob3dNU1RlYW1zT3B0aW9ucywgZXhwU2hvd1NoYXJlQXNDYXJkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3Igc2hhcmUgb3B0aW9uJ3MgdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24ga2V5XG5cdCAqIEByZXR1cm5zIEJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uLlxuXHQgKi9cblx0X2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uOiBTaGFyZU9wdGlvbktleSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0aWYgKG9wdGlvbiA9PT0gZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5KCk7XG5cdFx0fVxuXHRcdC8vIE5vIG92ZXJyaWRlcyBmb3IgU2hhcmUgYXMgVGFiIGFuZCBDaGF0IHlldC5cblxuXHRcdGNvbnN0IG1zVGVhbXNPcHRpb25SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdHJldHVybiBtc1RlYW1zT3B0aW9uUmVmPy5jdXJyZW50ID8gdGhpcy5fZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpIDogY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2aXNpYmxpdHkgb2YgaW5kaXZpZHVhbCBzaGFyZSBvcHRpb24ncyBNZW51SXRlbS5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24ga2V5XG5cdCAqIEBwYXJhbSBleHByZXNzaW9uIFZpc2liaWxpdHkgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cblx0ICovXG5cdF9zZXRTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uOiBTaGFyZU9wdGlvbktleSwgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdGlmIChtZW51SXRlbVJlZj8uY3VycmVudCkge1xuXHRcdFx0dGhpcy5fYmluZFVJVmlzaWJpbGl0eShtZW51SXRlbVJlZi5jdXJyZW50LCBleHByZXNzaW9uKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQmluZCB0aGUgVUkgZWxlbWVudCdzIHZpc2liaWxpdHkgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBpdGVtIFVJIGVsZW1lbnRcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBiaW5kLlxuXHQgKi9cblx0X2JpbmRVSVZpc2liaWxpdHkoaXRlbTogTWVudUJ1dHRvbiB8IE1lbnVJdGVtIHwgQ29tbWFuZEV4ZWN1dGlvbiwgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogdm9pZCB7XG5cdFx0Ly8gTk9URTogV2UgbmVlZCBjb252ZXJ0IHRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiB0byB0aGUgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IHRoZSBVSSBlbGVtZW50LlxuXHRcdC8vIEF0IHJ1bnRpbWUsIHdlIGNhbid0IHVzZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBvciBjb21waWxlZCBleHByZXNzaW9uIGRpcmVjdGx5IHRvIGJpbmQgdGhlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSB2aXNpYmxlIHByb3BlcnR5IG9yIHRoZSBVSSBlbGVtZW50LlxuXHRcdC8vIFdlIHdvdWxkIG5lZWQgdG8gY29udmVydCB0aGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gLT4gVUk1IEJpbmRpbmdJbmZvIHRvIGJpbmQgdGhlIFVJIGVsZW1lbnQuXG5cdFx0Y29uc3QgY29tcGlsZWRFeHAgPSBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcblxuXHRcdGlmIChjb21waWxlZEV4cCAmJiBjb21waWxlZEV4cC5zdGFydHNXaXRoKFwie1wiKSAmJiBjb21waWxlZEV4cD8uZW5kc1dpdGgoXCJ9XCIpKSB7XG5cdFx0XHQvLyBQcm9iYWJsZSBiaW5kaW5nXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBwYXJzZWRFeHAgPSBCaW5kaW5nSW5mby5wYXJzZShjb21waWxlZEV4cCk7XG5cdFx0XHRcdGl0ZW0uYmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCBwYXJzZWRFeHApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNvbXBpbGVkRXhwID09PSBcImZhbHNlXCIpIHtcblx0XHRcdC8vIFN0YXRpY2FsbHkgZmFsc2Vcblx0XHRcdGl0ZW0udW5iaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHRydWUpO1xuXHRcdFx0aXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0U2hhcmVCbG9ja0NvbmZpZyh2aWV3OiBWaWV3KTogQ29uZmlnT3B0aW9ucyB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Y29uc3Qgdmlld1NoYXJlQ29uZmlncyA9IHZpZXdEYXRhPy5zaGFyZTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmVBcHBTaGFyZUNvbmZpZ3MgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uc2hhcmU7XG5cblx0XHRjb25zdCBzaG93U2VuZEVtYWlsID0gdGhpcy5fZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTaGFyZUNvbmZpZ3M/LnNob3dTZW5kRW1haWwsIHZpZXdTaGFyZUNvbmZpZ3M/LnNob3dTZW5kRW1haWwpO1xuXHRcdGNvbnN0IHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKFxuXHRcdFx0ZmVBcHBTaGFyZUNvbmZpZ3M/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlcixcblx0XHRcdHZpZXdTaGFyZUNvbmZpZ3M/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlclxuXHRcdCk7XG5cblx0XHRjb25zdCBzaG93TXNUZWFtc09wdGlvbnMgPSB0aGlzLl9nZXRPcHRpb25CbG9ja0NvbmZpZyhcblx0XHRcdGZlQXBwU2hhcmVDb25maWdzPy50ZWFtcz8uc2hvd01zVGVhbXNPcHRpb25zLFxuXHRcdFx0dmlld1NoYXJlQ29uZmlncz8udGVhbXM/LnNob3dNc1RlYW1zT3B0aW9uc1xuXHRcdCk7XG5cdFx0Y29uc3QgZW5hYmxlQ2FyZCA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKGZlQXBwU2hhcmVDb25maWdzPy50ZWFtcz8uYXNDYXJkLCB2aWV3U2hhcmVDb25maWdzPy50ZWFtcz8uYXNDYXJkKTtcblxuXHRcdHJldHVybiB7IHNob3dTZW5kRW1haWwsIHNob3dNc1RlYW1zT3B0aW9ucywgZW5hYmxlQ2FyZCwgc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyIH07XG5cdH1cblxuXHRfZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTZXR0aW5nPzogYm9vbGVhbiB8IHN0cmluZywgdmlld0xldmVsU2V0dGluZz86IGJvb2xlYW4gfCBzdHJpbmcpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgZmVBcHBFeHAgPSB0eXBlb2YgZmVBcHBTZXR0aW5nID09PSBcInN0cmluZ1wiID8gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oZmVBcHBTZXR0aW5nKSA6IGNvbnN0YW50KGZlQXBwU2V0dGluZyA/PyB0cnVlKTtcblx0XHRjb25zdCB2aWV3TGV2ZWxFeHAgPVxuXHRcdFx0dHlwZW9mIHZpZXdMZXZlbFNldHRpbmcgPT09IFwic3RyaW5nXCIgPyByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPih2aWV3TGV2ZWxTZXR0aW5nKSA6IGNvbnN0YW50KHZpZXdMZXZlbFNldHRpbmcgPz8gdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChmZUFwcEV4cCwgdmlld0xldmVsRXhwKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogU2hhcmVBUEkge1xuXHRcdC8vIEN0cmwrU2hpZnQrUyBpcyBuZWVkZWQgZm9yIHRoZSB0aW1lIGJlaW5nIGJ1dCB0aGlzIG5lZWRzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgYmFja2xvZyBmcm9tIG1lbnUgYnV0dG9uXG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IChcblx0XHRcdDxTaGFyZUFQSSBpZD17dGhpcy5zaGFyZUFQSUlkfT5cblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhck1lbnVCdXR0b25cblx0XHRcdFx0XHR0ZXh0PXtcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9TQVBGRV9BQ1RJT05fU0hBUkV9XCJ9XG5cdFx0XHRcdFx0cmVmPXt0aGlzLm1lbnVCdXR0b259XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2FjdGlvblwifVxuXHRcdFx0XHRcdHRvb2x0aXA9e1wie3NhcC5mZS5pMThuPk1fQ09NTU9OX1NBUEZFX0FDVElPTl9TSEFSRX0gKEN0cmwrU2hpZnQrUylcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51IHJlZj17dGhpcy5tZW51fT48L01lbnU+XG5cdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbj5cblx0XHRcdDwvU2hhcmVBUEk+XG5cdFx0KSBhcyBTaGFyZUFQSTtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKClcblx0XHRcdC5nZXRWaWV3KClcblx0XHRcdC5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmNtZEV4ZWN1dGlvbn1cblx0XHRcdFx0XHRjb21tYW5kPVwiU2hhcmVcIlxuXHRcdFx0XHRcdGV4ZWN1dGU9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMubWVudUJ1dHRvbi5jdXJyZW50Py5nZXRNZW51KCkub3BlbkJ5KHRoaXMubWVudUJ1dHRvbi5jdXJyZW50LCB0cnVlKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHQvLyBUaGUgaW5pdGlhbGl6YXRpb24gaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBqdXN0IHRyaWdnZXIgaXQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0IDpEXG5cdFx0dGhpcy5pc0luaXRpYWxpemVkID0gdGhpcy5faW5pdGlhbGl6ZU1lbnVJdGVtcyh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLCBhcHBDb21wb25lbnQpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNldExheW91dERhdGEoXG5cdFx0XHRuZXcgT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSh7XG5cdFx0XHRcdHByaW9yaXR5OiB0aGlzLnByaW9yaXR5XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0cmV0dXJuIG1lbnVCdXR0b247XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBwcm9wZXJ0aWVzIGZvciB0aGUgaW50ZXJmYWNlIElPdmVyZmxvd1Rvb2xiYXJDb250ZW50LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIElPdmVyZmxvd1Rvb2xiYXJDb250ZW50XG5cdCAqL1xuXHRnZXRPdmVyZmxvd1Rvb2xiYXJDb25maWcoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2FuT3ZlcmZsb3c6IHRydWUsXG5cdFx0XHRvbkJlZm9yZUVudGVyT3ZlcmZsb3c6IGZ1bmN0aW9uIChvQ29udHJvbDogU2hhcmUpOiB2b2lkIHtcblx0XHRcdFx0KG9Db250cm9sPy5nZXRDb250ZW50KCk/LmdldENvbnRlbnQoKSBhcyBPdmVyZmxvd1Rvb2xiYXJNZW51QnV0dG9uKS5nZXRUZXh0ID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2wgYXMgQ29udHJvbCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fQ09NTU9OX1NBUEZFX0FDVElPTl9TSEFSRVwiKTtcblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHRvbkFmdGVyRXhpdE92ZXJmbG93OiBmdW5jdGlvbiAob0NvbnRyb2w6IFNoYXJlKTogdm9pZCB7XG5cdFx0XHRcdChvQ29udHJvbD8uZ2V0Q29udGVudCgpPy5nZXRDb250ZW50KCkgYXMgT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbikuZ2V0VGV4dCA9IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdHByaW9yaXR5OiB0aGlzLnByaW9yaXR5XG5cdFx0fTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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