@sapui5/sap.fe.core 1.112.0 → 1.114.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 (434) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +70 -6
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +118 -3
  7. package/src/sap/fe/core/AppComponent-dbg.js +16 -6
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +21 -7
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +11 -10
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +14 -11
  15. package/src/sap/fe/core/CommonUtils-dbg.js +102 -175
  16. package/src/sap/fe/core/CommonUtils.js +1 -1
  17. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  18. package/src/sap/fe/core/CommonUtils.ts +114 -211
  19. package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
  20. package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
  21. package/src/sap/fe/core/ExtensionAPI.ts +2 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +32 -24
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  33. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +41 -29
  34. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
  35. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
  36. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
  38. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
  39. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
  40. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
  41. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
  42. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +124 -57
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  45. package/src/sap/fe/core/controllerextensions/EditFlow.ts +146 -73
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +35 -74
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -78
  50. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +217 -127
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  53. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +227 -129
  54. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
  55. package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
  57. package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -4
  58. package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
  59. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  60. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  61. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  62. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
  63. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  64. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  65. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -14
  66. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +41 -24
  67. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  68. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.ts +64 -31
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  72. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +7 -9
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
  75. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  76. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  77. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
  78. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
  79. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
  80. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
  81. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -2
  82. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +3 -3
  83. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating-dbg.js +52 -0
  84. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js +6 -0
  85. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js.map +1 -0
  86. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.ts +46 -0
  87. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
  88. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
  89. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
  90. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
  91. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +106 -205
  92. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  93. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  94. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +121 -216
  95. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +31 -4
  96. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  97. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  98. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +38 -3
  99. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
  100. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
  101. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  102. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
  103. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
  104. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
  105. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
  106. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
  107. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +10 -6
  108. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  109. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  110. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +20 -11
  111. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
  112. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  113. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  114. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -9
  115. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +19 -15
  116. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  117. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  118. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +19 -22
  119. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
  120. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  121. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
  122. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +68 -0
  123. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
  124. package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
  125. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  126. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  127. package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
  128. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
  129. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
  130. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
  131. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
  132. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  133. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
  134. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  135. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
  136. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
  137. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
  138. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  139. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  140. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
  141. package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
  142. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  143. package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
  144. package/src/sap/fe/core/converters/ConverterContext.ts +2 -5
  145. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  146. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -6
  147. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -3
  148. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  149. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
  150. package/src/sap/fe/core/converters/ManifestWrapper.ts +7 -1
  151. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +49 -28
  152. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  153. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  154. package/src/sap/fe/core/converters/MetaModelConverter.ts +62 -30
  155. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
  156. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  157. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  158. package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
  159. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +22 -7
  160. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  161. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  162. package/src/sap/fe/core/converters/annotations/DataField.ts +20 -7
  163. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +701 -681
  164. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  165. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  166. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +6 -12
  167. package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  168. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
  169. package/src/sap/fe/core/converters/controls/Common/Action.ts +9 -14
  170. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
  171. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  172. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  173. package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
  174. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
  175. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  176. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  177. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
  178. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
  179. package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  180. package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
  181. package/src/sap/fe/core/converters/controls/Common/Form.ts +5 -11
  182. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
  183. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  184. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
  185. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -4
  186. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +135 -85
  187. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  188. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  189. package/src/sap/fe/core/converters/controls/Common/Table.ts +189 -119
  190. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +56 -22
  191. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  192. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  193. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +67 -31
  194. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +137 -49
  195. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  196. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  197. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +166 -43
  198. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +33 -14
  199. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  200. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  201. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +31 -12
  202. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
  203. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
  204. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
  205. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +36 -23
  206. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +37 -15
  207. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  208. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  209. package/src/sap/fe/core/converters/helpers/Aggregation.ts +36 -20
  210. package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
  211. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  212. package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
  213. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
  214. package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
  215. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
  216. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
  217. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
  218. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
  219. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  220. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
  221. package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -1
  222. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
  223. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  224. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
  225. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +11 -11
  226. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +20 -17
  227. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  228. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  229. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +25 -56
  230. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +13 -13
  231. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  232. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  233. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -13
  234. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
  235. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  236. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
  237. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
  238. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
  239. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  240. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
  241. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -5
  242. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +13 -5
  243. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  244. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  245. package/src/sap/fe/core/formatters/ValueFormatter.ts +19 -9
  246. package/src/sap/fe/core/fpm/manifest.json +1 -1
  247. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
  248. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  249. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  250. package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
  251. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +58 -35
  252. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  253. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  254. package/src/sap/fe/core/helpers/DeleteHelper.ts +76 -54
  255. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +8 -4
  256. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  257. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  258. package/src/sap/fe/core/helpers/MassEditHelper.ts +7 -5
  259. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -5
  260. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  261. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
  262. package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
  263. package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +167 -4
  264. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  265. package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
  266. package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
  267. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
  268. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  269. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
  270. package/src/sap/fe/core/helpers/ModelHelper.ts +41 -68
  271. package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
  272. package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
  273. package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
  274. package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
  275. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +19 -3
  276. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  277. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  278. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +21 -0
  279. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
  280. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  281. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
  282. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +39 -5
  283. package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
  284. package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
  285. package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
  286. package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
  287. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +52 -26
  288. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  289. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  290. package/src/sap/fe/core/helpers/StableIdHelper.ts +49 -25
  291. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -1
  292. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  293. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
  294. package/src/sap/fe/core/helpers/TypeGuards.ts +151 -1
  295. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +25 -2
  296. package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
  297. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
  298. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +24 -0
  299. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
  300. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
  301. package/src/sap/fe/core/library-dbg.js +1 -1
  302. package/src/sap/fe/core/library-preload.js +123 -95
  303. package/src/sap/fe/core/library-preload.js.map +1 -1
  304. package/src/sap/fe/core/library.js +1 -1
  305. package/src/sap/fe/core/manifest.json +1 -1
  306. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
  307. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  308. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  309. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
  310. package/src/sap/fe/core/messagebundle.properties +6 -6
  311. package/src/sap/fe/core/messagebundle_ar.properties +5 -6
  312. package/src/sap/fe/core/messagebundle_bg.properties +11 -12
  313. package/src/sap/fe/core/messagebundle_ca.properties +3 -4
  314. package/src/sap/fe/core/messagebundle_cs.properties +3 -4
  315. package/src/sap/fe/core/messagebundle_cy.properties +3 -4
  316. package/src/sap/fe/core/messagebundle_da.properties +3 -4
  317. package/src/sap/fe/core/messagebundle_de.properties +11 -12
  318. package/src/sap/fe/core/messagebundle_el.properties +5 -6
  319. package/src/sap/fe/core/messagebundle_en.properties +3 -4
  320. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -5
  321. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +3 -4
  322. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -4
  323. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +3 -2
  324. package/src/sap/fe/core/messagebundle_es.properties +3 -4
  325. package/src/sap/fe/core/messagebundle_es_MX.properties +3 -4
  326. package/src/sap/fe/core/messagebundle_et.properties +3 -4
  327. package/src/sap/fe/core/messagebundle_fi.properties +3 -4
  328. package/src/sap/fe/core/messagebundle_fr.properties +3 -4
  329. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -12
  330. package/src/sap/fe/core/messagebundle_hi.properties +11 -12
  331. package/src/sap/fe/core/messagebundle_hr.properties +3 -4
  332. package/src/sap/fe/core/messagebundle_hu.properties +3 -4
  333. package/src/sap/fe/core/messagebundle_id.properties +11 -12
  334. package/src/sap/fe/core/messagebundle_it.properties +3 -4
  335. package/src/sap/fe/core/messagebundle_iw.properties +3 -4
  336. package/src/sap/fe/core/messagebundle_ja.properties +4 -5
  337. package/src/sap/fe/core/messagebundle_kk.properties +3 -4
  338. package/src/sap/fe/core/messagebundle_ko.properties +11 -12
  339. package/src/sap/fe/core/messagebundle_lt.properties +3 -4
  340. package/src/sap/fe/core/messagebundle_lv.properties +11 -12
  341. package/src/sap/fe/core/messagebundle_ms.properties +3 -4
  342. package/src/sap/fe/core/messagebundle_nl.properties +3 -4
  343. package/src/sap/fe/core/messagebundle_no.properties +3 -4
  344. package/src/sap/fe/core/messagebundle_pl.properties +11 -12
  345. package/src/sap/fe/core/messagebundle_pt.properties +3 -4
  346. package/src/sap/fe/core/messagebundle_pt_PT.properties +3 -4
  347. package/src/sap/fe/core/messagebundle_ro.properties +14 -15
  348. package/src/sap/fe/core/messagebundle_ru.properties +11 -12
  349. package/src/sap/fe/core/messagebundle_sh.properties +3 -4
  350. package/src/sap/fe/core/messagebundle_sk.properties +3 -4
  351. package/src/sap/fe/core/messagebundle_sl.properties +3 -4
  352. package/src/sap/fe/core/messagebundle_sv.properties +11 -12
  353. package/src/sap/fe/core/messagebundle_th.properties +3 -4
  354. package/src/sap/fe/core/messagebundle_tr.properties +3 -4
  355. package/src/sap/fe/core/messagebundle_uk.properties +3 -4
  356. package/src/sap/fe/core/messagebundle_vi.properties +3 -4
  357. package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -12
  358. package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -12
  359. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +22 -8
  360. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  361. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  362. package/src/sap/fe/core/rootView/RootViewBaseController.ts +17 -7
  363. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +36 -3
  364. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  365. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  366. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +37 -1
  367. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +13 -1
  368. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  369. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  370. package/src/sap/fe/core/services/NavigationServiceFactory.ts +13 -0
  371. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
  372. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  373. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  374. package/src/sap/fe/core/services/RoutingServiceFactory.ts +20 -2
  375. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
  376. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  377. package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
  378. package/src/sap/fe/core/services/ShellServicesFactory.ts +10 -0
  379. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +10 -7
  380. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  381. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  382. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +12 -13
  383. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +9 -3
  384. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  385. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  386. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +11 -15
  387. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
  388. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  389. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  390. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  391. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
  392. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  393. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
  394. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  395. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
  396. package/src/sap/fe/core/templating/DataModelPathHelper.ts +24 -18
  397. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
  398. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  399. package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
  400. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
  401. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -28
  402. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  403. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
  404. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -24
  405. package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
  406. package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
  407. package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
  408. package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
  409. package/src/sap/fe/core/templating/FilterHelper-dbg.js +12 -1
  410. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  411. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  412. package/src/sap/fe/core/templating/FilterHelper.ts +12 -0
  413. package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
  414. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  415. package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
  416. package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
  417. package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
  418. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  419. package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
  420. package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
  421. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
  422. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  423. package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
  424. package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
  425. package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  426. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  427. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  428. package/src/sap/fe/core/templating/UIFormatters.ts +45 -34
  429. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
  430. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
  431. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
  432. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
  433. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
  434. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
@@ -410,7 +410,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
410
410
  }
411
411
  }
412
412
  } else {
413
- resolve();
413
+ resolve(Constants.CancelActionDialog);
414
414
  }
415
415
  }
416
416
  });
@@ -659,8 +659,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
659
659
  actionParameterInfo.validationPromise = oEvent.getParameter("promise");
660
660
  try {
661
661
  actionParameterInfo.value = await actionParameterInfo.validationPromise;
662
+ actionParameterInfo.hasError = false;
662
663
  } catch (error) {
663
664
  delete actionParameterInfo.value;
665
+ actionParameterInfo.hasError = true;
664
666
  _addMessageForActionParameter(messageManager, [{
665
667
  actionParameterInfo: actionParameterInfo,
666
668
  message: error.message
@@ -1201,9 +1203,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
1201
1203
  }
1202
1204
  }
1203
1205
  if (!bEnableStrictHandling) {
1204
- oActionPromise = bGetBoundContext ? oAction.execute(sGroupId).then(function () {
1206
+ oActionPromise = oAction.execute(sGroupId).then(function () {
1207
+ internalOperationsPromiseResolve(oAction.getBoundContext());
1205
1208
  return oAction.getBoundContext();
1206
- }) : oAction.execute(sGroupId);
1209
+ });
1207
1210
  } else {
1208
1211
  oActionPromise = bGetBoundContext ? oAction.execute(sGroupId, undefined, operationsHelper.fnOnStrictHandlingFailed.bind(operations, sGroupId, mParameters, resourceModel, current_context_index, oAction.getContext(), iContextLength, messageHandler, strictHandlingUtilities)).then(function () {
1209
1212
  internalOperationsPromiseResolve(oAction.getBoundContext());
@@ -1238,7 +1241,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
1238
1241
  }
1239
1242
  function checkforOtherMessages(isChangeSet) {
1240
1243
  if (isChangeSet) {
1241
- const aMessages = Core.getMessageManager().getMessageModel().getData();
1244
+ const aMessages = messageHandling.getMessages();
1242
1245
  return aMessages.findIndex(function (message) {
1243
1246
  return message.getType() === "Error" || message.getType() === "Warning";
1244
1247
  });
@@ -1498,8 +1501,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
1498
1501
  valuesProvidedForAllParameters: _valuesProvidedForAllParameters,
1499
1502
  getActionParameterActionName: _getActionParameterActionName,
1500
1503
  actionParameterShowMessageCallback: actionParameterShowMessageCallback,
1501
- afterActionResolution: afterActionResolution
1504
+ afterActionResolution: afterActionResolution,
1505
+ checkforOtherMessages: checkforOtherMessages
1502
1506
  };
1503
1507
  return operations;
1504
1508
  }, false);
1505
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiYUNvbnRleHRzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJyZXN1bHQiLCJzdGF0dXMiLCJ2YWx1ZSIsInJlYXNvbiIsImNhbGxBY3Rpb24iLCJ0aGVuIiwiY2FsbEFjdGlvbkltcG9ydCIsImJpbmRDb250ZXh0Iiwib0FjdGlvbkltcG9ydCIsImdldE9iamVjdCIsImNhbGxCb3VuZEZ1bmN0aW9uIiwic0Z1bmN0aW9uTmFtZSIsImNvbnRleHQiLCJzRnVuY3Rpb25QYXRoIiwib0JvdW5kRnVuY3Rpb24iLCJfZXhlY3V0ZUZ1bmN0aW9uIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwicmVzb2x2ZSIsIm9GdW5jdGlvbkltcG9ydCIsIm9GdW5jdGlvbiIsInNHcm91cElkIiwiRXJyb3IiLCJvRnVuY3Rpb25Qcm9taXNlIiwiZXhlY3V0ZSIsInN1Ym1pdEJhdGNoIiwiZ2V0Qm91bmRDb250ZXh0Iiwib0FjdGlvbiIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJmbk9uU3VibWl0dGVkIiwib25TdWJtaXR0ZWQiLCJmbk9uUmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImZpbmRJbmRleCIsImV4cCIsIiRpc0NvbGxlY3Rpb24iLCJnZXRNb2RlbCIsIiRUeXBlIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsInNvbWUiLCJhUGFyYW1ldGVyIiwiJEVudGl0eVNldFBhdGgiLCIkSXNCb3VuZCIsImVudGl0eVNldE5hbWUiLCJtZXNzYWdlSGFuZGxlciIsIm9PcGVyYXRpb25SZXN1bHQiLCJhZnRlckFjdGlvblJlc29sdXRpb24iLCJjYXRjaCIsImkiLCJmaW5kIiwiZWxlbWVudCIsIm5hbWUiLCJfZXhlY3V0ZUFjdGlvbiIsIm1lc3NhZ2VzIiwiQ29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbmNhdCIsInN0cmljdEhhbmRsaW5nRmFpbHMiLCJhRmFpbGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiZmFpbCIsImdldENvbnRleHQiLCJvRmFpbGVkT3BlcmF0aW9uUmVzdWx0IiwiYWRkTWVzc2FnZXMiLCJzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCIsImNoZWNrZm9yT3RoZXJNZXNzYWdlcyIsInNob3dNZXNzYWdlRGlhbG9nIiwib25CZWZvcmVTaG93TWVzc2FnZSIsImFNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVyc0luIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsInVuZGVmaW5lZCIsImFTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbkNvbnRleHQiLCJvUGFyZW50Q29udHJvbCIsImJvdW5kQWN0aW9uTmFtZSIsInN1ZmZpeFJlc291cmNlS2V5IiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzQ29uZmlybWF0aW9uVGV4dCIsImdldFRleHQiLCJjb25maXJtIiwib25DbG9zZSIsInNBY3Rpb24iLCJPSyIsIm9PcGVyYXRpb24iLCJvRXJyb3IiLCJlIiwiZXhlY3V0ZUFQTUFjdGlvbiIsIm9EaWFsb2ciLCJhZnRlcjQxMiIsImFSZXN1bHQiLCJvU2luZ2xlUmVzdWx0IiwiYXR0YWNoRXZlbnRPbmNlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuIiwiaXNPcGVuIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvQ29udHJvbCIsImlzQSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzaG93TWVzc2FnZUJveCIsIm9SZXNvdXJjZUJ1bmRsZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInVuYm91bmRNZXNzYWdlcyIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXQiLCJBUERtZXNzYWdlcyIsImFjdGlvblBhcmFtIiwiQVBETWVzc2FnZSIsImlzQVBEVGFyZ2V0IiwiZXJyb3JUYXJnZXRzSW5BUEQiLCJoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UiLCJzTWVzc2FnZSIsInNEZXNjcmlwdGlvblRleHQiLCJtZXNzYWdlTW9kZWwiLCJtZXNzYWdlc0luTW9kZWwiLCJhQm91bmRNZXNzYWdlcyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldE1lc3NhZ2VzIiwiZ2VuZXJpY01lc3NhZ2UiLCJpc0VkaXRhYmxlIiwiZ2V0UHJvcGVydHkiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyIsImdldFR5cGUiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsIiwic2V0TWVzc2FnZSIsImdldE1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiY29kZSIsInVuc2hpZnQiLCJjbG9zZSIsImRlc3Ryb3kiLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiYklzQVBET3BlbiIsImZuR2V0TWVzc2FnZVN1YnRpdGxlIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYmluZCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsInNQYXRoIiwiX2dldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRDb250ZXh0Iiwic0FjdGlvbk5hbWVQYXRoIiwiYWN0aW9uTmFtZUNvbnRleHQiLCJzRnJhZ21lbnROYW1lIiwiYWN0aW9uUGFyYW1ldGVySW5mb3MiLCJtZXNzYWdlTWFuYWdlciIsIl9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyIiwicGFyYW1ldGVyIiwiYWxsTWVzc2FnZXMiLCJnZW5lcmF0ZSIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwiaWQiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwib0NvbnRyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJvRXZlbnQiLCJmaWVsZCIsImdldFNvdXJjZSIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsImdldFBhcmFtZXRlciIsImVycm9yIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJvRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm9QYXJhbWV0ZXJNb2RlbCIsIkpTT05Nb2RlbCIsIiRkaXNwbGF5TW9kZSIsImNyZWF0ZWRGcmFnbWVudCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJiaW5kaW5nQ29udGV4dHMiLCJhY3Rpb24iLCJlbnRpdHlTZXQiLCJtb2RlbHMiLCJhRnVuY3Rpb25QYXJhbXMiLCJvT3BlcmF0aW9uQmluZGluZyIsIkNvbW1vblV0aWxzIiwic2V0VXNlckRlZmF1bHRzIiwib0RpYWxvZ0NvbnRlbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIm1hcCIsImFjdGlvblBhcmFtZXRlciIsImlzTXVsdGlWYWx1ZSIsImFjdGlvblJlc3VsdCIsImRpYWxvZ0NhbmNlbGxlZCIsIkRpYWxvZyIsInRpdGxlIiwiY29udGVudCIsImVzY2FwZUhhbmRsZXIiLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInRleHQiLCJfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZSIsInByZXNzIiwiX3ZhbGlkYXRlUHJvcGVydGllcyIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidlBhcmFtZXRlclZhbHVlIiwib1BhcmFtZXRlckNvbnRleHQiLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiYU1WRkNvbnRlbnQiLCJhS2V5VmFsdWVzIiwiaiIsIktleSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImlzTG9ja2VkIiwidW5sb2NrIiwic2hvd01lc3NhZ2VzIiwibWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2siLCJzaG93TWVzc2FnZVBhcmFtZXRlcnMiLCJlbmRCdXR0b24iLCJiZWZvcmVPcGVuIiwib0Nsb25lRXZlbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwiZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2ciLCJzQmluZGluZ1BhcmFtZXRlciIsInNCb3VuZEZ1bmN0aW9uTmFtZSIsInByZWZpbGxQYXJhbWV0ZXIiLCJzUGFyYW1OYW1lIiwidlBhcmFtRGVmYXVsdFZhbHVlIiwiJFBhdGgiLCJ2UGFyYW1WYWx1ZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsInNQYXRoRm9yQ29udGV4dCIsInJlcGxhY2UiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwiTG9nIiwiYkxhdGVQcm9wZXJ0eUVycm9yIiwib0RhdGEiLCJnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgiLCJnZXRQYXJhbWV0ZXJQYXRoIiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYVByZWZpbGxQYXJhbVByb21pc2VzIiwiYWxsIiwiYUV4ZWNGdW5jdGlvblByb21pc2VzIiwib0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UiLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiYVByb21pc2VzIiwiY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwiZnVuY3Rpb25QYXJhbXMiLCJvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QiLCJzRGlhbG9nUGFyYW1OYW1lIiwidlBhcmFtZXRlclByb3ZpZGVkVmFsdWUiLCJzZXRQYXJhbWV0ZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImJFcnJvckZvdW5kIiwib1ZhbHVlIiwic1RleHQiLCJ3YXJuaW5nIiwiY29udGVudFdpZHRoIiwiZm5Bc3luY0JlZm9yZU9wZW4iLCJhUGFyYW1ldGVycyIsIm9Db250ZXh0T2JqZWN0IiwicmVxdWVzdE9iamVjdCIsImdldEl0ZW1zIiwiZ2V0VmFsdWUiLCJhZnRlckNsb3NlIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsInBhdGgiLCJvTVZGTW9kZWwiLCJnZXRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiYWRkRGVwZW5kZW50Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3RCaW5kaW5nIiwib3BlbiIsInNsaWNlIiwidkFjdGlvbkNyaXRpY2FsIiwic0NyaXRpY2FsUGF0aCIsImFCaW5kaW5nUGFyYW1zIiwiYVBhdGhzIiwiYkNvbmRpdGlvbiIsIm9QYXJhbXMiLCJpbmRleCIsImpvaW4iLCJzRW50aXR5U2V0TmFtZSIsImFBY3Rpb25OYW1lIiwic0tleSIsImJSZXNvdXJjZUtleUV4aXN0cyIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMiLCJpQ29udGV4dExlbmd0aCIsImN1cnJlbnRfY29udGV4dF9pbmRleCIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCIsImJFbmFibGVTdHJpY3RIYW5kbGluZyIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwib3BlcmF0aW9uc0hlbHBlciIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsIm9wZXJhdGlvbnMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uIiwib0xvY2FsQWN0aW9uUHJvbWlzZSIsImlzQ2hhbmdlU2V0Iiwic2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYUFjdGlvblByb21pc2VzIiwib2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QiLCJmbkV4ZWN1dGVBY3Rpb24iLCJhY3Rpb25Db250ZXh0Iiwib1NpZGVFZmZlY3QiLCJpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSIsImdldFVwZGF0ZUdyb3VwSWQiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJmblJlcXVlc3RTaWRlRWZmZWN0cyIsImFsbFNldHRsZWQiLCJmbkV4ZWN1dGVTaW5nbGVBY3Rpb24iLCJmbkV4ZWN1dGVDaGFuZ2VzZXQiLCJhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyIsIm5vb3AiLCJvdGhlckVycm9yTWVzc2FnZUluZGV4IiwicmVuZGVyTWVzc2FnZVZpZXciLCJzaFByb21pc2UiLCJzZXREYXRhIiwiZm5IYW5kbGVSZXN1bHRzIiwiZm5FeGVjdXRlU2VxdWVudGlhbGx5IiwiY29udGV4dHNUb0V4ZWN1dGUiLCJwcm9jZXNzT25lQWN0aW9uIiwiYWN0aW9uSW5kZXgiLCJyZWR1Y2UiLCJwcm9taXNlIiwiZmluYWxseSIsImN1cnJlbnRQcm9taXNlVmFsdWUiLCJhY3Rpb25QYXJhbWV0ZXJzIiwiYUxvY2FsUHJvbWlzZSIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJvTG9jYWxQcm9taXNlIiwic1RyaWdnZXJBY3Rpb24iLCJleGVjdXRlQWN0aW9uIiwidmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiZmFjYWRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIsIHsgdHlwZSBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyB9IGZyb20gXCIuLi8uLi8uLi9vcGVyYXRpb25zSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwiLi4vLi4vTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB7IEFjdGlvblBhcmFtZXRlciwgQWN0aW9uUGFyYW1ldGVySW5mbywgX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIsIF92YWxpZGF0ZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9faW50ZXJuYWxcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IChNZXNzYWdlQm94IGFzIGFueSkuQWN0aW9uO1xuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgYWN0aW9uIGZvciBvbmUgb3IgbXVsdGlwbGUgY29udGV4dHMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEJvdW5kQWN0aW9uXG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBjb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyB0byBiZSBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgT0RhdGEgTW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVyc10gQSBtYXAgb2YgYmluZGluZyBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgcGFydCBvZiAkc2VsZWN0IGFuZCAkZXhwYW5kIGNvbWluZyBmcm9tIHNpZGUgZWZmZWN0cyBmb3IgYm91bmQgYWN0aW9uc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdF0gQXJyYXkgb2YgcHJvcGVydHkgcGF0aHMgdG8gYmUgcmVxdWVzdGVkIGluIGFkZGl0aW9uIHRvIGFjdHVhbCB0YXJnZXQgcHJvcGVydGllcyBvZiB0aGUgc2lkZSBlZmZlY3RcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogQ2hhbmdlc2V0IHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgSXNvbGF0ZWQgdG8gcHV0IHRoZW0gaW50byBzZXBhcmF0ZSBjaGFuZ2VzZXRzLCBkZWZhdWx0cyB0byBJc29sYXRlZFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJlbnRDb250cm9sXSBJZiBzcGVjaWZpZWQsIHRoZSBkaWFsb2dzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbnQgb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBjYWxsQm91bmRBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdGNvbnRleHRzOiBhbnksXG5cdG9Nb2RlbDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRpZiAoIXN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHR9O1xuXHR9XG5cdGlmICghY29udGV4dHMgfHwgY29udGV4dHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly9JbiBGcmVlc3R5bGUgYXBwcyBib3VuZCBhY3Rpb25zIGNhbiBoYXZlIG5vIGNvbnRleHRcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBhY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY29udGV4dFwiKTtcblx0fVxuXHQvLyB0aGlzIG1ldGhvZCBlaXRoZXIgYWNjZXB0cyBzaW5nbGUgY29udGV4dCBvciBhbiBhcnJheSBvZiBjb250ZXh0c1xuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBhbiB1bmFtYmlndW9zIEFQSVxuXHRjb25zdCBpc0NhbGxlZFdpdGhBcnJheSA9IEFycmF5LmlzQXJyYXkoY29udGV4dHMpO1xuXG5cdC8vIGluIGNhc2Ugb2Ygc2luZ2xlIGNvbnRleHQgd3JhcCBpbnRvIGFuIGFycmF5IGZvciBjYWxsZWQgbWV0aG9kcyAoZXNwLiBjYWxsQWN0aW9uKVxuXHRtUGFyYW1ldGVycy5hQ29udGV4dHMgPSBpc0NhbGxlZFdpdGhBcnJheSA/IGNvbnRleHRzIDogW2NvbnRleHRzXTtcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdC8vIEFuYWx5emluZyBtZXRhTW9kZWxQYXRoIGZvciBhY3Rpb24gb25seSBmcm9tIGZpcnN0IGNvbnRleHQgc2VlbXMgd2VpcmQsIGJ1dCBwcm9iYWJseSB3b3JrcyBpbiBhbGwgZXhpc3Rpbmcgc3plbmFyaW9zIC0gaWYgc2V2ZXJhbCBjb250ZXh0cyBhcmUgcGFzc2VkLCB0aGV5IHByb2JhYmx5XG5cdFx0Ly8gYmVsb25nIHRvIHRoZSBzYW1lIG1ldGFtb2RlbHBhdGguIFRPRE86IENoZWNrLCB3aGV0aGVyIHRoaXMgY2FuIGJlIGltcHJvdmVkIC8gc3plbmFyaW9zIHdpdGggZGlmZmVyZW50IG1ldGFNb2RlbFBhdGhzIG1pZ2h0IGV4aXN0XG5cdFx0c0FjdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke3NBY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kQWN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGApO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBzQWN0aW9uUGF0aCwgbVBhcmFtZXRlcnMuYUNvbnRleHRzLCBvQm91bmRBY3Rpb24pO1xuXG5cdC8vIFByb21pc2UgcmV0dXJuZWQgYnkgY2FsbEFjdGlvbiBjdXJyZW50bHkgaXMgcmVqZWN0ZWQgaW4gY2FzZSBvZiBleGVjdXRpb24gZm9yIG11bHRpcGxlIGNvbnRleHRzIHBhcnRseSBmYWlsaW5nLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIChzb21lIGZhaWxpbmcgY29udGV4dHMgZG8gbm90IG1lYW5cblx0Ly8gdGhhdCBmdW5jdGlvbiBkaWQgbm90IGZ1bGZpbGwgaXRzIHRhc2spLCBidXQgYXMgdGhpcyBpcyBhIGJpZ2dlciByZWZhY3RvcmluZywgZm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXQgYXQgdGhlIGNhbGxpbmcgcGxhY2UgKGkuZS4gaGVyZSlcblx0Ly8gPT4gcHJvdmlkZSB0aGUgc2FtZSBoYW5kbGVyIChtYXBwaW5nIGJhY2sgZnJvbSBhcnJheSB0byBzaW5nbGUgcmVzdWx0L2Vycm9yIGlmIG5lZWRlZCkgZm9yIHJlc29sdmVkL3JlamVjdGVkIGNhc2Vcblx0Y29uc3QgZXh0cmFjdFNpbmdsZVJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQ6IGFueSkge1xuXHRcdC8vIHNpbmdsZSBhY3Rpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWRcblx0XHRpZiAocmVzdWx0WzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFswXS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkaWFsb2cgY2FuY2VsbGF0aW9uLCBubyBhcnJheSBpcyByZXR1cm5lZCA9PiB0aHJvdyB0aGUgcmVzdWx0LlxuXHRcdFx0Ly8gSWRlYWxseSwgZGlmZmVyZW50aWF0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUgPT4gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gd2hlbiBzZXBhcmF0aW5nIGRpYWxvZyBoYW5kbGluZyAoc2luZ2xlIG9iamVjdCB3aXRoIHNpbmdsZSByZXN1bHQpIGZyb20gYmFja2VuZFxuXHRcdFx0Ly8gZXhlY3V0aW9uIChwb3RlbnRpYWxseSBtdWx0aXBsZSBvYmplY3RzKVxuXHRcdFx0dGhyb3cgcmVzdWx0WzBdLnJlYXNvbiB8fCByZXN1bHQ7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEFjdGlvbiwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKS50aGVuKFxuXHRcdChyZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGlzQ2FsbGVkV2l0aEFycmF5KSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0KHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdFx0dGhyb3cgcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59XG4vKipcbiAqIENhbGxzIGFuIGFjdGlvbiBpbXBvcnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW1wb3J0IHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFtzdHJpY3RIYW5kbGluZ1V0aWxpdGllc10gT3B0aW9uYWwsIHV0aWxpdHkgZmxhZ3MgYW5kIG1lc3NhZ2VzIGZvciBzdHJpY3RIYW5kbGluZ1xuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxBY3Rpb25JbXBvcnQoXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG9Nb2RlbDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkFjdGlvbiBleHBlY3RzIGEgbW9kZWwvY29udGV4dCBmb3IgZXhlY3V0aW9uXCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0FjdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvQWN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEFjdGlvblwiKX0vMGApO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0FjdGlvbkltcG9ydCwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKTtcbn1cbmZ1bmN0aW9uIGNhbGxCb3VuZEZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IHN0cmluZywgY29udGV4dDogYW55LCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIWNvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBmdW5jdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGEgY29udGV4dFwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKX0vJHtzRnVuY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEZ1bmN0aW9uLCBjb250ZXh0KTtcbn1cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbXBvcnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEZ1bmN0aW9uSW1wb3J0XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0Z1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIHY0IG1vZGVsXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIXNGdW5jdGlvbk5hbWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpLmdldE9iamVjdChcIiRGdW5jdGlvblwiKX0vMGApO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9GdW5jdGlvbkltcG9ydCk7XG59XG5mdW5jdGlvbiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9GdW5jdGlvbjogYW55LCBjb250ZXh0PzogYW55KSB7XG5cdGxldCBzR3JvdXBJZDtcblx0aWYgKCFvRnVuY3Rpb24gfHwgIW9GdW5jdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEZ1bmN0aW9uICR7c0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHR9XG5cdGlmIChjb250ZXh0KSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAke2NvbnRleHQuZ2V0UGF0aCgpfS8ke3NGdW5jdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzR3JvdXBJZCA9IFwiZnVuY3Rpb25Hcm91cFwiO1xuXHR9IGVsc2Uge1xuXHRcdG9GdW5jdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkltcG9ydFwiO1xuXHR9XG5cdGNvbnN0IG9GdW5jdGlvblByb21pc2UgPSBvRnVuY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCk7XG5cdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdHJldHVybiBvRnVuY3Rpb25Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBvRnVuY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gY2FsbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b01vZGVsOiBhbnksXG5cdG9BY3Rpb246IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRtUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0bGV0IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBhbnkgPSB7fTtcblx0XHRsZXQgZm5EaWFsb2c7XG5cdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdC8vbGV0IGZhaWxlZEFjdGlvblByb21pc2U6IGFueTtcblx0XHRjb25zdCBzQWN0aW9uTGFiZWwgPSBtUGFyYW1ldGVycy5sYWJlbDtcblx0XHRjb25zdCBiU2tpcFBhcmFtZXRlckRpYWxvZyA9IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2c7XG5cdFx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzO1xuXHRcdGNvbnN0IGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbjtcblx0XHRjb25zdCBiSXNDcml0aWNhbEFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb247XG5cdFx0bGV0IG9NZXRhTW9kZWw7XG5cdFx0bGV0IHNNZXRhUGF0aDtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDogYW55O1xuXHRcdGxldCBpTWVzc2FnZVNpZGVFZmZlY3Q7XG5cdFx0bGV0IGJJc1NhbWVFbnRpdHk7XG5cdFx0bGV0IG9SZXR1cm5UeXBlO1xuXHRcdGxldCBiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzO1xuXHRcdGNvbnN0IGFjdGlvbkRlZmluaXRpb24gPSBvQWN0aW9uLmdldE9iamVjdCgpO1xuXHRcdGlmICghb0FjdGlvbiB8fCAhb0FjdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEFjdGlvbiAke3NBY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBhY3Rpb25cblx0XHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGhhcyBwYXJhbWV0ZXJzIGFuZCB3b3VsZCBuZWVkIGEgcGFyYW1ldGVyIGRpYWxvZ1xuXHRcdC8vIFRoZSBwYXJhbWV0ZXIgUmVzdWx0SXNBY3RpdmVFbnRpdHkgaXMgYWx3YXlzIGhpZGRlbiBpbiB0aGUgZGlhbG9nISBIZW5jZSBpZlxuXHRcdC8vIHRoaXMgaXMgdGhlIG9ubHkgcGFyYW1ldGVyLCB0aGlzIGlzIHRyZWF0ZWQgYXMgbm8gcGFyYW1ldGVyIGhlcmUgYmVjYXVzZSB0aGVcblx0XHQvLyBkaWFsb2cgd291bGQgYmUgZW1wdHkhXG5cdFx0Ly8gRklYTUU6IFNob3VsZCBvbmx5IGlnbm9yZSB0aGlzIGlmIHRoaXMgaXMgYSAnY3JlYXRlJyBhY3Rpb24sIG90aGVyd2lzZSBpdCBpcyBqdXN0IHNvbWUgbm9ybWFsIHBhcmFtZXRlciB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGlzIG5hbWVcblx0XHRjb25zdCBiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgPVxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhKGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSAmJiBhQWN0aW9uUGFyYW1ldGVyc1swXS4kTmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKTtcblxuXHRcdC8vIFByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGZyb20gaW52b2tlQWN0aW9uIGNhbGxcblx0XHRjb25zdCBhUGFyYW1ldGVyVmFsdWVzID0gbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHN0YXJ0dXAgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblxuXHRcdC8vIEluIGNhc2UgYW4gYWN0aW9uIHBhcmFtZXRlciBpcyBuZWVkZWQsIGFuZCB3ZSBzaGFsbCBza2lwIHRoZSBkaWFsb2csIGNoZWNrIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyAmJiBiU2tpcFBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0YlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyA9IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMoXG5cdFx0XHRcdGJJc0NyZWF0ZUFjdGlvbixcblx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkYXRhLCBlaXRoZXIgc2V0IGEgZGlhbG9nIG9yIGxlYXZlIGl0IGVtcHR5IHdoaWNoXG5cdFx0Ly8gd2lsbCBsZWFkIHRvIGRpcmVjdCBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiB3aXRob3V0IGEgZGlhbG9nXG5cdFx0Zm5EaWFsb2cgPSBudWxsO1xuXHRcdGlmIChiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cpIHtcblx0XHRcdGlmICghKGJTa2lwUGFyYW1ldGVyRGlhbG9nICYmIGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMpKSB7XG5cdFx0XHRcdGZuRGlhbG9nID0gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGJJc0NyaXRpY2FsQWN0aW9uKSB7XG5cdFx0XHRmbkRpYWxvZyA9IGNvbmZpcm1Dcml0aWNhbEFjdGlvbjtcblx0XHR9XG5cblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdGZuT25TdWJtaXR0ZWQ6IG1QYXJhbWV0ZXJzLm9uU3VibWl0dGVkLFxuXHRcdFx0Zm5PblJlc3BvbnNlOiBtUGFyYW1ldGVycy5vblJlc3BvbnNlLFxuXHRcdFx0YWN0aW9uTmFtZTogc0FjdGlvbk5hbWUsXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0c2VsZWN0ZWRJdGVtczogbVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtc1xuXHRcdH07XG5cdFx0aWYgKG9BY3Rpb24uZ2V0T2JqZWN0KFwiJElzQm91bmRcIikpIHtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChhQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlcy8kUGF0aGApO1xuXG5cdFx0XHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRcdFx0aU1lc3NhZ2VTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmZpbmRJbmRleChmdW5jdGlvbiAoZXhwOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIGV4cCA9PT0gc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIEFkZCBTQVBfTWVzc2FnZXMgYnkgZGVmYXVsdCBpZiBub3QgYW5ub3RhdGVkIGJ5IHNpZGUgZWZmZWN0cywgYWN0aW9uIGRvZXMgbm90IHJldHVybiBhIGNvbGxlY3Rpb24gYW5kXG5cdFx0XHRcdFx0Ly8gdGhlIHJldHVybiB0eXBlIGlzIHRoZSBzYW1lIGFzIHRoZSBib3VuZCB0eXBlXG5cdFx0XHRcdFx0b1JldHVyblR5cGUgPSBvQWN0aW9uLmdldE9iamVjdChcIiRSZXR1cm5UeXBlXCIpO1xuXHRcdFx0XHRcdGJJc1NhbWVFbnRpdHkgPVxuXHRcdFx0XHRcdFx0b1JldHVyblR5cGUgJiYgIW9SZXR1cm5UeXBlLiRpc0NvbGxlY3Rpb24gJiYgb0FjdGlvbi5nZXRNb2RlbCgpLmdldE9iamVjdChzTWV0YVBhdGgpLiRUeXBlID09PSBvUmV0dXJuVHlwZS4kVHlwZTtcblxuXHRcdFx0XHRcdGlmIChpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSB8fCBiSXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdFx0XHQvLyB0aGUgbWVzc2FnZSBwYXRoIGlzIGFubm90YXRlZCBhcyBzaWRlIGVmZmVjdC4gQXMgdGhlcmUncyBubyBiaW5kaW5nIGZvciBpdCBhbmQgdGhlIG1vZGVsIGRvZXMgY3VycmVudGx5IG5vdCBhbGxvd1xuXHRcdFx0XHRcdFx0Ly8gdG8gYWRkIGl0IGF0IGEgbGF0ZXIgcG9pbnQgb2YgdGltZSB3ZSBoYXZlIHRvIHRha2UgY2FyZSBpdCdzIHBhcnQgb2YgdGhlICRzZWxlY3Qgb2YgdGhlIFBPU1QsIHRoZXJlZm9yZSBtb3ZpbmcgaXQuXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgfHwge307XG5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRPYmplY3QoYCRSZXR1cm5UeXBlLyRUeXBlLyR7c01lc3NhZ2VzUGF0aH1gKSAmJlxuXHRcdFx0XHRcdFx0XHQoIW1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IHx8XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Quc3BsaXQoXCIsXCIpLmluZGV4T2Yoc01lc3NhZ2VzUGF0aCkgPT09IC0xKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHQ/IGAke21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NNZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0XHRcdDogc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHNpZGUgZWZmZWN0cyBhdCBlbnRpdHkgbGV2ZWwgYmVjYXVzZSAkc2VsZWN0IHN0b3BzIHRoZXNlIGJlaW5nIHJldHVybmVkIGJ5IHRoZSBhY3Rpb25cblx0XHRcdFx0XHRcdFx0Ly8gT25seSBpZiBubyBvdGhlciBzaWRlIGVmZmVjdHMgd2VyZSBhZGRlZCBmb3IgTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMucHVzaChcIipcIik7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoID09PSAwICYmIGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gdHJpZ2dlciBhY3Rpb24gdGhlcmVmb3JlIG5vIG5lZWQgdG8gcmVxdWVzdCBtZXNzYWdlcyBhZ2FpblxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5zcGxpY2UoaU1lc3NhZ2VTaWRlRWZmZWN0LCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhQ29udGV4dHM7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gbVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24gPSBiSXNDcmVhdGVBY3Rpb247XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iT2JqZWN0UGFnZSA9IG1QYXJhbWV0ZXJzLmJPYmplY3RQYWdlO1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbC5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYklzQ3JlYXRlQWN0aW9uKSB7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb24gPSBiSXNDcmVhdGVBY3Rpb247XG5cdFx0fVxuXHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0Y29uc3QgaXNTdGF0aWMgPSAoYWN0aW9uRGVmaW5pdGlvbi4kUGFyYW1ldGVyIHx8IFtdKS5zb21lKChhUGFyYW1ldGVyOiBhbnkpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCgoYWN0aW9uRGVmaW5pdGlvbi4kRW50aXR5U2V0UGF0aCAmJiBhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoID09PSBhUGFyYW1ldGVyLiROYW1lKSB8fCBhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kKSAmJlxuXHRcdFx0XHRhUGFyYW1ldGVyLiRpc0NvbGxlY3Rpb25cblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWMgPSBpc1N0YXRpYztcblx0XHRpZiAoZm5EaWFsb2cpIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZm5EaWFsb2coXG5cdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvT3BlcmF0aW9uUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRha2Ugb3ZlciBhbGwgcHJvdmlkZWQgcGFyYW1ldGVyIHZhbHVlcyBhbmQgY2FsbCB0aGUgYWN0aW9uLlxuXHRcdFx0Ly8gVGhpcyBzaGFsbCBvbmx5IGhhcHBlbiBpZiB2YWx1ZXMgYXJlIHByb3ZpZGVkIGZvciBhbGwgdGhlIHBhcmFtZXRlcnMsIG90aGVyd2lzZSB0aGUgcGFyYW1ldGVyIGRpYWxvZyBzaGFsbCBiZSBzaG93biB3aGljaCBpcyBlbnN1cmVkIGVhcmxpZXJcblx0XHRcdGlmIChhUGFyYW1ldGVyVmFsdWVzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaSBpbiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubmFtZSA9PT0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPVxuXHRcdFx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzW21BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXT8uWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgb09wZXJhdGlvblJlc3VsdDogYW55O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b09wZXJhdGlvblJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUZhaWxlZENvbnRleHRzID0gW10gYXMgYW55O1xuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0YUZhaWxlZENvbnRleHRzLnB1c2goZmFpbC5vQWN0aW9uLmdldENvbnRleHQoKSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFGYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdGNvbnN0IG9GYWlsZWRPcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzID0gW107XG5cdFx0XHRcdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMpO1xuXHRcdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKSAhPT0gLTFcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzPy5tZXNzYWdlSGFuZGxlcj8uc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdGNvbnRyb2w6IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzPy5jb250cm9sLFxuXHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0XHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c0FjdGlvbkxhYmVsOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBhbnksXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IG51bGw7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID1cblx0XHRcdGJvdW5kQWN0aW9uTmFtZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKVtib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdFx0Y29uc3Qgc0NvbmZpcm1hdGlvblRleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX0NPTkZJUk1fTUVTU0FHRVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblxuXHRcdE1lc3NhZ2VCb3guY29uZmlybShzQ29uZmlybWF0aW9uVGV4dCwge1xuXHRcdFx0b25DbG9zZTogYXN5bmMgZnVuY3Rpb24gKHNBY3Rpb246IGFueSkge1xuXHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gQWN0aW9uLk9LKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9PcGVyYXRpb24gPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgb1BhcmVudENvbnRyb2wsIG1lc3NhZ2VIYW5kbGVyKTtcblx0XHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvbik7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQVBNQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YUNvbnRleHRzOiBhbnksXG5cdG9EaWFsb2c6IGFueSxcblx0YWZ0ZXI0MTI6IGJvb2xlYW4sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIG9QYXJlbnRDb250cm9sLCBtZXNzYWdlSGFuZGxlciwgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpO1xuXHQvLyBJZiBzb21lIGVudHJpZXMgd2VyZSBzdWNjZXNzZnVsLCBhbmQgb3RoZXJzIGhhdmUgZmFpbGVkLCB0aGUgb3ZlcmFsbCBwcm9jZXNzIGlzIHN0aWxsIHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoaXMgd2FzIHRyZWF0ZWQgYXMgcmVqZWN0aW9uXG5cdC8vIGJlZm9yZSwgYW5kIHRoaXMgY3VycmVudGx5IGlzIHN0aWxsIGtlcHQsIGFzIGxvbmcgYXMgZGlhbG9nIGhhbmRsaW5nIGlzIG1peGVkIHdpdGggYmFja2VuZCBwcm9jZXNzIGhhbmRsaW5nLlxuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBvbmx5IHJlamVjdCBpbiBjYXNlIG9mIG92ZXJhbGwgcHJvY2VzcyBlcnJvci5cblx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nOiBtYXAgdG8gb2xkIGxvZ2ljIHRvIHJlamVjdCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGZhaWxlZFxuXHQvLyBUaGlzIGNoZWNrIGlzIG9ubHkgZG9uZSBmb3IgYm91bmQgYWN0aW9ucyA9PiBhQ29udGV4dHMgbm90IGVtcHR5XG5cdGlmIChtUGFyYW1ldGVycy5hQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdGlmIChhUmVzdWx0Py5zb21lKChvU2luZ2xlUmVzdWx0OiBhbnkpID0+IG9TaW5nbGVSZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpKSB7XG5cdFx0XHR0aHJvdyBhUmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1lc3NhZ2VzID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoKSB7XG5cdFx0aWYgKCFhZnRlcjQxMikge1xuXHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMpO1xuXHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKSAhPT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb250cm9sOiBtUGFyYW1ldGVycy5jb250cm9sLFxuXHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKSAhPT0gLTFcblx0XHQpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHR9XG5cdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuOiBtUGFyYW1ldGVycz8ub0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udHJvbDogbVBhcmFtZXRlcnMuY29udHJvbCxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0c0FjdGlvbk5hbWU6IG1QYXJhbWV0ZXJzLmxhYmVsXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnM6IGFueSwgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IGFueSwgYWN0aW9uRGVmaW5pdGlvbjogYW55KSB7XG5cdGlmIChcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggJiZcblx0XHRhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kXG5cdCkge1xuXHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0Y29uc3QgaXNTdGF0aWMgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYztcblx0XHRpZiAoIWlzU3RhdGljKSB7XG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbDtcblx0XHRcdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb0NvbnRyb2wuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0SlNPTi5wYXJzZShtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRhQ29udGV4dHM6IGFueSxcblx0b0RpYWxvZzogYW55LFxuXHRtZXNzYWdlczogYW55LFxuXHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogeyBzaG93TWVzc2FnZUJveDogYm9vbGVhbjsgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfSxcblx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQ6IGJvb2xlYW5cbik6IHtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRzaG93TWVzc2FnZUJveDogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW47XG5cdGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c6IGJvb2xlYW47XG59IHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpID09PSBcIlwiO1xuXHR9KTtcblx0Y29uc3QgQVBEbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldCAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXQoKS5pbmRleE9mKG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnM/LmFBY3Rpb25QYXJhbWV0ZXJzPy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2YoYWN0aW9uUGFyYW0uJE5hbWUpICE9PSAtMTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSk7XG5cdEFQRG1lc3NhZ2VzPy5mb3JFYWNoKGZ1bmN0aW9uIChBUERNZXNzYWdlOiBhbnkpIHtcblx0XHRBUERNZXNzYWdlLmlzQVBEVGFyZ2V0ID0gdHJ1ZTtcblx0fSk7XG5cblx0Y29uc3QgZXJyb3JUYXJnZXRzSW5BUEQgPSBBUERtZXNzYWdlcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG5cdGxldCBoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UgPSBmYWxzZTtcblx0aWYgKHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ICYmICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdGhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSA9IHRydWU7XG5cdFx0bGV0IHNNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX0VSUk9SX01FU1NBR0VTX1RFWFRcIik7XG5cdFx0bGV0IHNEZXNjcmlwdGlvblRleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfRVJST1JfTUVTU0FHRVNfREVUQUlMX1RFWFRcIik7XG5cdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0Y29uc3QgYUJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSk7XG5cdFx0bGV0IGdlbmVyaWNNZXNzYWdlO1xuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRjb25zdCBub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyA9IG1lc3NhZ2VzLmZpbmRJbmRleChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG5vbkVycm9yTWVzc2FnZUV4aXN0c0luTW9kZWwgPSBtZXNzYWdlc0luTW9kZWwuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cblx0XHRpZiAobm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2cgIT09IDEgJiYgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCAhPT0gLTEpIHtcblx0XHRcdGlmIChtZXNzYWdlc0luTW9kZWwubGVuZ3RoID09PSAxICYmIGFCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRpZiAoaXNFZGl0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRtZXNzYWdlc0luTW9kZWxbMF0uc2V0TWVzc2FnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUXCIpICtcblx0XHRcdFx0XHRcdFx0XCJcXG5cXG5cIiArXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VzSW5Nb2RlbFswXS5nZXRNZXNzYWdlKClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNNZXNzYWdlID0gaXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX0VSUk9SX01FU1NBR0VfVEVYVF9FRElUXCIpXG5cdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUXCIpO1xuXHRcdFx0XHRcdHNEZXNjcmlwdGlvblRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogc01lc3NhZ2UsXG5cdFx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Rlc2NyaXB0aW9uVGV4dCxcblx0XHRcdFx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG1lc3NhZ2VzLnVuc2hpZnQoZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZW5lcmljTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBzTWVzc2FnZSxcblx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Rlc2NyaXB0aW9uVGV4dCxcblx0XHRcdFx0XHRjb2RlOiBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1lc3NhZ2VzLnVuc2hpZnQoZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpICYmIGFDb250ZXh0cy5sZW5ndGggIT09IDAgJiYgIW1QYXJhbWV0ZXJzLmlzU3RhdGljKSB7XG5cdFx0aWYgKCFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0Ly9pc29sYXRlZFxuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxIHx8ICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHQvLyBkb2VzIG5vdCBtYXR0ZXIgaWYgZXJyb3IgaXMgaW4gQVBEIG9yIG5vdCwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRleHRzIHNlbGVjdGVkIG9yIGlmIHRoZSBlcnJvciBpcyBub3QgdGhlIEFQRCwgd2UgY2xvc2UgaXQuXG5cdFx0XHRcdC8vIFRPRE86IERpbGFvZyBoYW5kbGluZyBzaG91bGQgbm90IGJlIHBhcnQgb2YgbWVzc2FnZSBoYW5kbGluZy4gUmVmYWN0b3IgYWNjb3JkaW5nbHkgLSBkaWFsb2cgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW5zaWRlIHRoaXMgbWV0aG9kIC0gbmVpdGhlclxuXHRcdFx0XHQvLyB0byBhc2sgd2hldGhlciBpdCdzIG9wZW4sIG5vciB0byBjbG9zZS9kZXN0cm95IGl0IVxuXHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHQvL2NoYW5nZXNldFxuXHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cdGxldCBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAoIWhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgbWVzc2FnZXNbMF0uZ2V0VGFyZ2V0ICYmIG1lc3NhZ2VzWzBdLmdldFRhcmdldCgpICE9PSB1bmRlZmluZWQgJiYgbWVzc2FnZXNbMF0uZ2V0VGFyZ2V0KCkgIT09IFwiXCIpIHtcblx0XHRcdGlmICgob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkgfHwgIW9Db250cm9sKSB7XG5cdFx0XHRcdC8vIE9QIGVkaXQgb3IgTFJcblx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhZXJyb3JUYXJnZXRzSW5BUEQ7XG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGlmIChiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKCFiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdGZpbHRlcmVkTWVzc2FnZXMgPSB1bmJvdW5kTWVzc2FnZXMuY29uY2F0KEFQRG1lc3NhZ2VzKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYklzQVBET3BlbiAmJiB1bmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgdGFyZ2V0cyBpbiBBUEQgPT4gdGhlcmUgaXMgYXRsZWFzdCBvbmUgYm91bmQgbWVzc2FnZS4gSWYgdGhlcmUgYXJlIHVuYm91bmQgbWVzc2FnZXMsIGRpYWxvZyBtdXN0IGJlIHNob3duLlxuXHRcdFx0XHRcdC8vIGZvciBkcmFmdCBlbnRpdHksIHdlIGFscmVhZHkgY2xvc2VkIHRoZSBBUERcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzaG93TWVzc2FnZUJveDogc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdGZpbHRlcmVkTWVzc2FnZXM6IGZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID8gZmlsdGVyZWRNZXNzYWdlcyA6IG1lc3NhZ2VzLFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOlxuXHRcdFx0b0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9Db250cm9sLCBhQ29udGV4dHMpLFxuXHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZzogbVBhcmFtZXRlcnMuYkdyb3VwZWRcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRhUGFyYW1ldGVyVmFsdWVzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGNvbnN0IHNQYXRoID0gX2dldFBhdGgob0FjdGlvbkNvbnRleHQsIHNBY3Rpb25OYW1lKSxcblx0XHRtZXRhTW9kZWwgPSBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRzQWN0aW9uTmFtZVBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKVxuXHRcdFx0PyBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQCR1aTUub3ZlcmxvYWQvMFwiKVswXVxuXHRcdFx0OiBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvMFwiKVswXSxcblx0XHRhY3Rpb25OYW1lQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uTmFtZVBhdGgpLFxuXHRcdGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uLFxuXHRcdHNGcmFnbWVudE5hbWUgPSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FjdGlvblBhcmFtZXRlckRpYWxvZ1wiO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGxldCBhY3Rpb25QYXJhbWV0ZXJJbmZvczogQWN0aW9uUGFyYW1ldGVySW5mb1tdOyAvLyB0byBiZSBmaWxsZWQgYWZ0ZXIgZnJhZ21lbnQgKGZvciBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZykgaXMgbG9hZGVkLiBBY3R1YWxseSBvbmx5IG5lZWRlZCBkdXJpbmcgZGlhbG9nIHByb2Nlc3NpbmcsIGkuZS4gY291bGQgYmUgbW92ZWQgaW50byB0aGUgY29udHJvbGxlciBhbmQgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIGJ1dCBvbmx5IGFmdGVyIG1vdmluZyBhbGwgaGFuZGxlcnMgKGVzcC4gcHJlc3MgaGFuZGxlciBmb3IgYWN0aW9uIGJ1dHRvbikgdG8gY29udHJvbGxlci5cblxuXHRcdGNvbnN0IG1lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Y29uc3QgX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIgPSAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdGNvbnN0IGFsbE1lc3NhZ2VzID0gbWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIuJE5hbWVdKTtcblx0XHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHRcdCk7XG5cdFx0XHRtZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB7XG5cdFx0XHRoYW5kbGVDaGFuZ2U6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGRcblx0XHRcdFx0KSBhcyBBY3Rpb25QYXJhbWV0ZXJJbmZvO1xuXHRcdFx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHQvLyBhZGFwdCBpbmZvLiBQcm9taXNlIGlzIHJlc29sdmVkIHRvIHZhbHVlIG9yIHJlamVjdGVkIHdpdGggZXhjZXB0aW9uIGNvbnRhaW5pbmcgbWVzc2FnZVxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGRlbGV0ZSBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0XHRcdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKG1lc3NhZ2VNYW5hZ2VyLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRjb25zdCBhQ29udGV4dHM6IGFueVtdID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRcdFx0Y29uc3QgYUZ1bmN0aW9uUGFyYW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXHRcdFx0bGV0IG9PcGVyYXRpb25CaW5kaW5nOiBhbnk7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMob0FwcENvbXBvbmVudCwgYUFjdGlvblBhcmFtZXRlcnMsIG9QYXJhbWV0ZXJNb2RlbCwgdHJ1ZSk7XG5cdFx0XHRjb25zdCBvRGlhbG9nQ29udGVudCA9IChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogY3JlYXRlZEZyYWdtZW50LFxuXHRcdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlclxuXHRcdFx0fSkpIGFzIENvbnRyb2w7XG5cblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zID0gYUFjdGlvblBhcmFtZXRlcnMubWFwKChhY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSBDb3JlLmJ5SWQoZ2VuZXJhdGUoW1wiQVBEX1wiLCBhY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZpZWxkLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHBhcmFtZXRlcjogYWN0aW9uUGFyYW1ldGVyLFxuXHRcdFx0XHRcdGZpZWxkOiBmaWVsZCxcblx0XHRcdFx0XHRpc011bHRpVmFsdWU6IGlzTXVsdGlWYWx1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9QYXJlbnRDb250cm9sKTtcblx0XHRcdGxldCBhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogdHJ1ZSwgLy8gdG8gYmUgc2V0IHRvIGZhbHNlIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhY3Rpb24gZXhlY3Rpb25cblx0XHRcdFx0cmVzdWx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyhnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgc0FjdGlvbk5hbWVdKSwge1xuXHRcdFx0XHR0aXRsZTogc0FjdGlvbkxhYmVsIHx8IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiKSxcblx0XHRcdFx0Y29udGVudDogW29EaWFsb2dDb250ZW50XSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIGVzY2FwZSBoYW5kbGVyIGlzIG1lYW50IHRvIHBvc3NpYmx5IHN1cHByZXNzIG9yIHBvc3Rwb25lIGNsb3NpbmcgdGhlIGRpYWxvZyBvbiBlc2NhcGUgKGJ5IGNhbGxpbmcgXCJyZWplY3RcIiBvbiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciBcInJlc29sdmVcIiBvbmx5IHdoZW5cblx0XHRcdFx0XHQvLyBkb25lIHdpdGggYWxsIHRhc2tzIHRvIGhhcHBlbiBiZWZvcmUgZGlhbG9nIGNhbiBiZSBjbG9zZWQpLiBJdCdzIG5vdCBpbnRlbmRlZCB0byBleHBsaWNldGx5IGNsb3NlIHRoZSBkaWFsb2cgaGVyZSAodGhhdCBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBub1xuXHRcdFx0XHRcdC8vIGVzY2FwZUhhbmRsZXIgaXMgcHJvdmlkZWQgb3IgdGhlIHJlc29sdmUtY2FsbGJhY2sgaXMgY2FsbGVkKSBvciBmb3Igb3duIHdyYXAgdXAgdGFza3MgKGxpa2UgcmVtb3ZpbmcgdmFsaWRpdGlvbiBtZXNzYWdlcyAtIHRoaXMgc2hvdWxkIGhhcHBlbiBpbiB0aGVcblx0XHRcdFx0XHQvLyBhZnRlckNsb3NlKS5cblx0XHRcdFx0XHQvLyBUT0RPOiBNb3ZlIHdyYXAgdXAgdGFza3MgdG8gYWZ0ZXJDbG9zZSwgYW5kIHJlbW92ZSB0aGlzIG1ldGhvZCBjb21wbGV0ZWx5LiBUYWtlIGNhcmUgdG8gYWxzbyBhZGFwdCBlbmQgYnV0dG9uIHByZXNzIGhhbmRsZXIgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0Ly8gQ3VycmVudGx5IG9ubHkgc3RpbGwgbmVlZGVkIHRvIGRpZmZlcmVudGlhdGUgY2xvc2luZyBkaWFsb2cgYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdXRpb24gKHVzZXMgcmVzb2x2ZSkgZnJvbSB1c2VyIGNhbmNlbGxhdGlvbiAodXNpbmcgcmVqZWN0KVxuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHQvL1x0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiBiSXNDcmVhdGVBY3Rpb25cblx0XHRcdFx0XHRcdD8gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURV9CVVRUT05cIilcblx0XHRcdFx0XHRcdDogX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUocmVzb3VyY2VNb2RlbCwgc0FjdGlvbkxhYmVsLCBzQWN0aW9uTmFtZSwgZW50aXR5U2V0TmFtZSksXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGlmICghKGF3YWl0IF92YWxpZGF0ZVByb3BlcnRpZXMobWVzc2FnZU1hbmFnZXIsIGFjdGlvblBhcmFtZXRlckluZm9zLCByZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sob0RpYWxvZyk7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBkdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbW92ZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gRGlhbG9nIChTaW1wbGVGb3JtKSB0byBtUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzIHNvIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZSBvcGVyYXRpb24gYmluZGluZ3MgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1ldGVyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnNbaV0uJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IG9EaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpLmdldFByb3BlcnR5KGAvJHthQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZX1gKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaiBpbiBhTVZGQ29udGVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMucHVzaChhTVZGQ29udGVudFtqXS5LZXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IGFLZXlWYWx1ZXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBvUGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eShhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IHZQYXJhbWV0ZXJWYWx1ZTsgLy8gd3JpdGluZyB0aGUgY3VycmVudCB2YWx1ZSAodWVzZXIgaW5wdXQhKSBpbnRvIHRoZSBtZXRhbW9kZWwgPT4gc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gdXNlIEFjdGlvblBhcmFtZXRlckluZm9zIGluc3RlYWQuIFVzZWQgaW4gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmxhYmVsID0gc0FjdGlvbkxhYmVsO1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc29sdmUoYVJlc3VsdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGYWlsZWRDb250ZXh0cyA9IFtdIGFzIGFueTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ0ZhaWxzLmZvckVhY2goZnVuY3Rpb24gKGZhaWw6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUZhaWxlZENvbnRleHRzLnB1c2goZmFpbC5vQWN0aW9uLmdldENvbnRleHQoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUZhaWxlZENvbnRleHRzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBleGVjdXRlQVBNQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBhUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyByZXNvbHZlKGFSZXN1bHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZm9yT3RoZXJNZXNzYWdlcyhtUGFyYW1ldGVycy5iR3JvdXBlZCkgIT09IC0xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvRGlhbG9nKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGVja2Zvck90aGVyTWVzc2FnZXMobVBhcmFtZXRlcnMuYkdyb3VwZWQpICE9PSAtMVxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dDogbVBhcmFtZXRlcnMuYUNvbnRleHRzWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuOiBvRGlhbG9nLmlzT3BlbigpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBXaHkgaXMgdGhpcyBpbXBsZW1lbnRlZCBhcyBjYWxsYmFjaz8gQXBwYXJlbnRseSwgYWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYmVmb3JlaGFuZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiByZWZhY3RvciBhY2NvcmRpbmdseVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZURpYWxvZztcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgYmFja2VuZCB2YWxpZGF0aW9uIGVycm9yKHM/KSwgbWVzc2FnZSBzaGFsbCBub3QgYmUgc2hvd24gaW4gbWVzc2FnZSBkaWFsb2cgYnV0IG5leHQgdG8gdGhlIGZpZWxkIG9uIHBhcmFtZXRlciBkaWFsb2csIHdoaWNoIHNob3VsZFxuXHRcdFx0XHRcdFx0XHRcdC8vIHN0YXkgb3BlbiBpbiB0aGlzIGNhc2UgPT4gaW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG5vdCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZy5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBhbGwgb3RoZXIgY2FzZXMgKGUuZy4gb3RoZXIgYmFja2VuZCBlcnJvcnMgb3IgdXNlciBjYW5jZWxsYXRpb24pLCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZyBuZWVkcyB0byBiZSByZWplY3RlZCB0byBhbGxvd1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNhbGxlcnMgdG8gcmVhY3QuIChFeGFtcGxlOiBJZiBjcmVhdGlvbiBpbiBiYWNrZW5kIGFmdGVyIG5hdmlnYXRpb24gdG8gdHJhbnNpZW50IGNvbnRleHQgZmFpbHMsIGJhY2sgbmF2aWdhdGlvbiBuZWVkcyB0byBiZSB0cmlnZ2VyZWQpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gc2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCByZXF1ZXN0IGlzdGVhZCBvZiB0YWtpbmcgZGVjaXNpb24gYmFzZWQgb24gbWVzc2FnZSBoYW5kbGluZ1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9EaWFsb2cuaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gZG8gbm90aGluZywgZG8gbm90IHJlamVjdCBwcm9taXNlIGhlcmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gV2UgZG8gbm90IGNsb3NlIHRoZSBBUE0gZGlhbG9nIGlmIHVzZXIgZW50ZXJzIGEgd3JvbmcgdmFsdWUgaW4gb2YgdGhlIGZpZWxkcyB0aGF0IHJlc3VsdHMgaW4gYW4gZXJyb3IgZnJvbSB0aGUgYmFja2VuZC5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIHVzZXIgY2FuIGNsb3NlIHRoZSBtZXNzYWdlIGRpYWxvZyBhbmQgdGhlIEFQTSBkaWFsb2cgd291bGQgc3RpbGwgYmUgb3BlbiBvbiB3aGljaCBoZSBjb3VsZCBlbnRlciBhIG5ldyB2YWx1ZSBhbmQgdHJpZ2dlciB0aGUgYWN0aW9uIGFnYWluLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBFYXJsaWVyIHdlIHdlcmUgcmVqZWN0aW5nIHRoZSBwcm9taXNlIG9uIGVycm9yIGhlcmUsIGFuZCB0aGUgY2FsbCBzdGFjayB3YXMgZGVzdHJveWVkIGFzIHRoZSBwcm9taXNlIHdhcyByZWplY3RlZCBhbmQgcmV0dXJuZWQgdG8gRWRpdEZsb3cgaW52b2tlIGFjdGlvbi5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQnV0IHNpbmNlIHRoZSBBUE0gZGlhbG9nIHdhcyBzdGlsbCBvcGVuLCBhIG5ldyBwcm9taXNlIHdhcyByZXNvbHZlZCBpbiBjYXNlIHRoZSB1c2VyIHJldHJpZWQgdGhlIGFjdGlvbiBhbmQgdGhlIG9iamVjdCB3YXMgY3JlYXRlZCwgYnV0IHRoZSBuYXZpZ2F0aW9uIHRvIG9iamVjdCBwYWdlIHdhcyBub3QgdGFraW5nIHBsYWNlLlxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlzNDEyRXhlY3V0ZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdQcm9taXNlczogW10sXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogW10sXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxheVN1Y2Nlc3NNZXNzYWdlczogW10sXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzOiBbXVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0RpYWxvZykpIHtcblx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbihnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgc0FjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiQ2FuY2VsXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiKSxcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Ly8gVE9ETzogY2FuY2VsIGJ1dHRvbiBzaG91bGQganVzdCBjbG9zZSB0aGUgZGlhbG9nIChzaW1pbGFyIHRvIHVzaW5nIGVzY2FwZSkuIEFsbCB3cmFwIHVwIHRhc2tzIHNob3VsZCBiZSBtb3ZlZCB0byBhZnRlckNsb3NlLlxuXHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0KENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdC8vIFRPRE86IGJlZm9yZU9wZW4gaXMganVzdCBhbiBldmVudCwgaS5lLiBub3Qgd2FpdGluZyBmb3IgdGhlIFByb21pc2UgdG8gYmUgcmVzb2x2ZWQuIENoZWNrIGlmIHRhc2tzIG9mIHRoaXMgZnVuY3Rpb24gbmVlZCB0byBiZSBkb25lIGJlZm9yZSBvcGVuaW5nIHRoZSBkaWFsb2dcblx0XHRcdFx0Ly8gLSBpZiB5ZXMsIHRoZXkgbmVlZCB0byBiZSBtb3ZlZCBvdXRzaWRlLlxuXHRcdFx0XHQvLyBBc3N1bXB0aW9uOiBTb21ldGltZXMgZGlhbG9nIGNhbiBiZSBzZWVuIHdpdGhvdXQgYW55IGZpZWxkcyBmb3IgYSBzaG9ydCB0aW1lIC0gbWF5YmUgdGhpcyBpcyBjYXVzZWQgYnkgdGhpcyBhc3luY2hyb25pdHlcblx0XHRcdFx0YmVmb3JlT3BlbjogYXN5bmMgZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgZXZlbnQgZm9yIGFjdGlvbldyYXBwZXIgYXMgb0V2ZW50Lm9Tb3VyY2UgZ2V0cyBsb3N0IGR1cmluZyBwcm9jZXNzaW5nIG9mIGJlZm9yZU9wZW4gZXZlbnQgaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IG9DbG9uZUV2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgb0V2ZW50KTtcblxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdGNvbnN0IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvRGlhbG9nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXRoID0gb0FjdGlvbkNvbnRleHQuc1BhdGggJiYgb0FjdGlvbkNvbnRleHQuc1BhdGguc3BsaXQoXCIvQFwiKVswXSxcblx0XHRcdFx0XHRcdFx0c0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0XHRcdGAke3NBY3Rpb25QYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uYFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNEZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyA9IGFzeW5jIGZ1bmN0aW9uIChzQmluZGluZ1BhcmFtZXRlcj86IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0JvdW5kRnVuY3Rpb25OYW1lID0gZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVmaWxsUGFyYW1ldGVyID0gYXN5bmMgZnVuY3Rpb24gKHNQYXJhbU5hbWU6IGFueSwgdlBhcmFtRGVmYXVsdFZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxOiBUaGVyZSBpcyBhIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1EZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCAmJiB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1WYWx1ZSA9IGF3YWl0IENvbW1vblV0aWxzLnJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1WYWx1ZSA9IGF3YWl0IG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0UGFyYW1ldGVyQ29udGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXRoRm9yQ29udGV4dCA9IHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc1BhdGhGb3JDb250ZXh0LmluZGV4T2YoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2ApID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzUGF0aEZvckNvbnRleHQgPSBzUGF0aEZvckNvbnRleHQucmVwbGFjZShgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCwgXCJcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzW2ldLmdldFByb3BlcnR5KHNQYXRoRm9yQ29udGV4dCkgIT09IHZQYXJhbVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yk5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1WYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsIHNQYXJhbU5hbWUsIG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJMYXRlUHJvcGVydHlFcnJvcjogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtRGVmYXVsdFZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9QYXJhbWV0ZXJNb2RlbCAmJiAob1BhcmFtZXRlck1vZGVsIGFzIGFueSkub0RhdGFbc1BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDI6IFRoZXJlIGlzIG5vIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uICg9PiBsb29rIGludG8gdGhlIEZMUCBVc2VyIERlZmF1bHRzKVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAob1BhcmFtZXRlck1vZGVsIGFzIGFueSkub0RhdGFbc1BhcmFtTmFtZV1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoc1BhcmFtTmFtZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvRGlhbG9nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVyUGF0aChvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCksIHNQYXJhbU5hbWUpICsgXCJAXCIsXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyRGVmYXVsdFZhbHVlID1cblx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyAmJiBvUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFyYW1ldGVyRGVmYXVsdFZhbHVlXCJdOyAvLyBlaXRoZXIgeyAkUGF0aDogJ3NvbWVQYXRoJyB9IG9yICdzb21lU3RyaW5nJ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGxldCBzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWUgPSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZTtcblx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShzUGFyYW1OYW1lKTtcblx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZS5wdXNoKHByZWZpbGxQYXJhbWV0ZXIoc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNCb3VuZEZ1bmN0aW9uTmFtZSAmJiBzQm91bmRGdW5jdGlvbk5hbWUubGVuZ3RoID4gMCAmJiB0eXBlb2Ygc0JvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUZ1bmN0aW9uUGFyYW1zLnB1c2goY2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFQcmVmaWxsUGFyYW1Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRcdFx0bGV0IGFFeGVjRnVuY3Rpb25Qcm9taXNlczogUHJvbWlzZTxhbnlbXT4gPSBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdFx0XHRcdFx0bGV0IG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlO1xuXHRcdFx0XHRcdFx0aWYgKGFGdW5jdGlvblBhcmFtcyAmJiBhRnVuY3Rpb25QYXJhbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMgPSBQcm9taXNlLmFsbChhRnVuY3Rpb25QYXJhbXMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTW9kdWxlID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHQuc3Vic3RyaW5nKDAsIG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRcdFx0XHRcdFx0c0Z1bmN0aW9uTmFtZSA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZSA9IEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKG9DbG9uZUV2ZW50LCBzTW9kdWxlLCBzRnVuY3Rpb25OYW1lLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGFDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVByb21pc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdFx0XHRcdGFQcmVmaWxsUGFyYW1Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2Vcblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZTogYW55ID0gYVByb21pc2VzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmdW5jdGlvblBhcmFtcyA9IGFQcm9taXNlc1sxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ID0gYVByb21pc2VzWzJdO1xuXHRcdFx0XHRcdFx0XHRsZXQgc0RpYWxvZ1BhcmFtTmFtZTogc3RyaW5nO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEZpbGwgdGhlIGRpYWxvZyB3aXRoIHRoZSBlYXJsaWVyIGRldGVybWluZWQgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIHRoZSBkaWZmZXJlbnQgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRzRGlhbG9nUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubmFtZSA9PT0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ICYmIG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdC5oYXNPd25Qcm9wZXJ0eShzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0W3NEaWFsb2dQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldICYmIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBkZXRlcm1pbmVkIGR1ZSB0byBkaWZmZXJlbnQgY29udGV4dHMsIHdlIGRvIG5vdGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmICFjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNhbWUgcGFyYW0gdmFsdWUgZm9yIGFsbCB0aGUgY29udGV4dHM6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGogPCBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqICsgMV0gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSA9PT1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aisrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZ1bmN0aW9uUGFyYW1zWzBdICYmIGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL09ubHkgb25lIGNvbnRleHQsIHRoZW4gdGhlIGRlZmF1bHQgcGFyYW0gdmFsdWVzIGFyZSB0byBiZSB2ZXJpZmllZCBmcm9tIHRoZSBmdW5jdGlvbjpcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJFcnJvckZvdW5kID0gY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdFx0XHRcdFx0XHRpZiAoYkVycm9yRm91bmQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVGV4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX0xBVEVfUFJPUEVSVFlcIik7XG5cdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNUZXh0LCB7IGNvbnRlbnRXaWR0aDogXCIyNWVtXCIgfSBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBwYXJhbWV0ZXJcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQXN5bmNCZWZvcmVPcGVuID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXJhbWV0ZXIgPSBhUGFyYW1ldGVyc1swXSAmJiBhUGFyYW1ldGVyc1swXS4kTmFtZTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gYXdhaXQgYUNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihzQmluZGluZ1BhcmFtZXRlciwgb0NvbnRleHRPYmplY3QpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyhzQmluZGluZ1BhcmFtZXRlcik7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGF3YWl0IGZuQXN5bmNCZWZvcmVPcGVuKCk7XG5cblx0XHRcdFx0XHQvLyBhZGRpbmcgZGVmYXVsdGVkIHZhbHVlcyBvbmx5IGhlcmUgYWZ0ZXIgdGhleSBhcmUgbm90IHNldCB0byB0aGUgZmllbGRzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gKGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgYXMgTXVsdGlWYWx1ZUZpZWxkKS5nZXRJdGVtcygpXG5cdFx0XHRcdFx0XHRcdDogKGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMuZm9yRWFjaChfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcik7XG5cdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3VsdC5kaWFsb2dDYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShhY3Rpb25SZXN1bHQucmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0bVBhcmFtZXRlcnMub0RpYWxvZyA9IG9EaWFsb2c7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCkub01vZGVsKTtcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob1BhcmFtZXRlck1vZGVsLCBcInBhcmFtc01vZGVsXCIpO1xuXHRcdFx0b0RpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0XHRtb2RlbDogXCJwYXJhbXNNb2RlbFwiXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gZW1wdHkgbW9kZWwgdG8gYWRkIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBudW1iZXIgb2YgTVZGIGZpZWxkcyBkZWZpbmVkIG9uIHRoZSBkaWFsb2dcblx0XHRcdGNvbnN0IG9NVkZNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvTVZGTW9kZWwsIFwibXZmdmlld1wiKTtcblxuXHRcdFx0LyogRXZlbnQgbmVlZGVkIGZvciByZW1vdmluZyBtZXNzYWdlcyBvZiB2YWxpZCBjaGFuZ2VkIGZpZWxkICovXG5cdFx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlckluZm8gb2YgYWN0aW9uUGFyYW1ldGVySW5mb3MpIHtcblx0XHRcdFx0aWYgKGFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbz8uZmllbGQ/LmdldEJpbmRpbmcoXCJpdGVtc1wiKT8uYXR0YWNoQ2hhbmdlKCgpID0+IHtcblx0XHRcdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvPy5maWVsZD8uZ2V0QmluZGluZyhcInZhbHVlXCIpPy5hdHRhY2hDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBzQWN0aW9uUGF0aCA9IGAke3NBY3Rpb25OYW1lfSguLi4pYDtcblx0XHRcdGlmICghYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRzQWN0aW9uUGF0aCA9IGAvJHtzQWN0aW9uUGF0aH1gO1xuXHRcdFx0fVxuXHRcdFx0b0RpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRcdHBhdGg6IHNBY3Rpb25QYXRoXG5cdFx0XHR9KTtcblx0XHRcdGlmIChvUGFyZW50Q29udHJvbCkge1xuXHRcdFx0XHQvLyBpZiB0aGVyZSBpcyBhIHBhcmVudCBjb250cm9sIHNwZWNpZmllZCBhZGQgdGhlIGRpYWxvZyBhcyBkZXBlbmRlbnRcblx0XHRcdFx0b1BhcmVudENvbnRyb2wuYWRkRGVwZW5kZW50KG9EaWFsb2cpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9EaWFsb2cuc2V0QmluZGluZ0NvbnRleHQoYUNvbnRleHRzWzBdKTsgLy8gdXNlIGNvbnRleHQgb2YgZmlyc3Qgc2VsZWN0ZWQgbGluZSBpdGVtXG5cdFx0XHR9XG5cdFx0XHRvT3BlcmF0aW9uQmluZGluZyA9IG9EaWFsb2cuZ2V0T2JqZWN0QmluZGluZygpO1xuXHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25QYXJhbWV0ZXJzKG9BY3Rpb246IGFueSkge1xuXHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKSB8fCBbXTtcblx0aWYgKGFQYXJhbWV0ZXJzICYmIGFQYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHQvL2luIGNhc2Ugb2YgYm91bmQgYWN0aW9ucywgaWdub3JlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYW5kIGNvbnNpZGVyIHRoZSByZXN0XG5cdFx0XHRyZXR1cm4gYVBhcmFtZXRlcnMuc2xpY2UoMSwgYVBhcmFtZXRlcnMubGVuZ3RoKSB8fCBbXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnksIGNvbnRleHRzPzogYW55LCBvQm91bmRBY3Rpb24/OiBhbnkpIHtcblx0Y29uc3QgdkFjdGlvbkNyaXRpY2FsID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0FjdGlvbkNyaXRpY2FsYCk7XG5cdGxldCBzQ3JpdGljYWxQYXRoID0gdkFjdGlvbkNyaXRpY2FsICYmIHZBY3Rpb25Dcml0aWNhbC4kUGF0aDtcblx0aWYgKCFzQ3JpdGljYWxQYXRoKSB7XG5cdFx0Ly8gdGhlIHN0YXRpYyB2YWx1ZSBzY2VuYXJpbyBmb3IgaXNBY3Rpb25Dcml0aWNhbFxuXHRcdHJldHVybiAhIXZBY3Rpb25Dcml0aWNhbDtcblx0fVxuXHRjb25zdCBhQmluZGluZ1BhcmFtcyA9IG9Cb3VuZEFjdGlvbiAmJiBvQm91bmRBY3Rpb24uZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKSxcblx0XHRhUGF0aHMgPSBzQ3JpdGljYWxQYXRoICYmIHNDcml0aWNhbFBhdGguc3BsaXQoXCIvXCIpLFxuXHRcdGJDb25kaXRpb24gPVxuXHRcdFx0YUJpbmRpbmdQYXJhbXMgJiYgYUJpbmRpbmdQYXJhbXMubGVuZ3RoICYmIHR5cGVvZiBhQmluZGluZ1BhcmFtcyA9PT0gXCJvYmplY3RcIiAmJiBzQ3JpdGljYWxQYXRoICYmIGNvbnRleHRzICYmIGNvbnRleHRzLmxlbmd0aDtcblx0aWYgKGJDb25kaXRpb24pIHtcblx0XHQvL2luIGNhc2UgYmluZGluZyBwYXRhbWV0ZXJzIGFyZSB0aGVyZSBpbiBwYXRoIG5lZWQgdG8gcmVtb3ZlIGVnOiAtIF9pdC9pc1ZlcmlmaWVkID0+IG5lZWQgdG8gcmVtb3ZlIF9pdCBhbmQgdGhlIHBhdGggc2hvdWxkIGJlIGlzVmVyaWZpZWRcblx0XHRhQmluZGluZ1BhcmFtcy5maWx0ZXIoZnVuY3Rpb24gKG9QYXJhbXM6IGFueSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBhUGF0aHMgJiYgYVBhdGhzLmluZGV4T2Yob1BhcmFtcy4kTmFtZSk7XG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHRhUGF0aHMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRzQ3JpdGljYWxQYXRoID0gYVBhdGhzLmpvaW4oXCIvXCIpO1xuXHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3Qoc0NyaXRpY2FsUGF0aCk7XG5cdH0gZWxzZSBpZiAoc0NyaXRpY2FsUGF0aCkge1xuXHRcdC8vaWYgc2NlbmFyaW8gaXMgcGF0aCBiYXNlZCByZXR1cm4gdGhlIHBhdGggdmFsdWVcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lKHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIHNBY3Rpb25MYWJlbDogc3RyaW5nLCBzQWN0aW9uTmFtZTogc3RyaW5nLCBzRW50aXR5U2V0TmFtZTogc3RyaW5nKSB7XG5cdGxldCBib3VuZEFjdGlvbk5hbWU6IGFueSA9IHNBY3Rpb25OYW1lID8gc0FjdGlvbk5hbWUgOiBudWxsO1xuXHRjb25zdCBhQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIik7XG5cdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gYUFjdGlvbk5hbWVbYUFjdGlvbk5hbWUubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHNFbnRpdHlTZXROYW1lID8gYCR7c0VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRjb25zdCBzS2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRjb25zdCBiUmVzb3VyY2VLZXlFeGlzdHMgPSByZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtzS2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApO1xuXHRpZiAoc0FjdGlvbkxhYmVsKSB7XG5cdFx0aWYgKGJSZXNvdXJjZUtleUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChzS2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9fCR7c0VudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSwgdW5kZWZpbmVkLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQWN0aW9uTGFiZWw7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0b0FjdGlvbjogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRiR2V0Qm91bmRDb250ZXh0OiBib29sZWFuLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIgfCB1bmRlZmluZWQsXG5cdGlDb250ZXh0TGVuZ3RoOiBudW1iZXIgfCBudWxsLFxuXHRjdXJyZW50X2NvbnRleHRfaW5kZXg6IG51bWJlciB8IG51bGwsXG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbixcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdDogRnVuY3Rpb24sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRsZXQgb0FjdGlvblByb21pc2UsXG5cdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gdHJ1ZTtcblx0aWYgKG1QYXJhbWV0ZXJzKSB7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTtcblx0fVxuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiRW5hYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdCAgfSlcblx0XHRcdDogb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHQob3BlcmF0aW9uc0hlbHBlciBhcyBhbnkpLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0OiBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdChvcGVyYXRpb25zSGVscGVyIGFzIGFueSkuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbigpIHtcblx0bGV0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBhbnkgPSBudWxsLFxuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3Q6IGFueSA9IG51bGw7XG5cdGNvbnN0IG9Mb2NhbEFjdGlvblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdH0pO1xuXG5cdHJldHVybiB7IG9Mb2NhbEFjdGlvblByb21pc2UsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrZm9yT3RoZXJNZXNzYWdlcyhpc0NoYW5nZVNldDogYm9vbGVhbikge1xuXHRpZiAoaXNDaGFuZ2VTZXQpIHtcblx0XHRjb25zdCBhTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0cmV0dXJuIGFNZXNzYWdlcy5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIF9leGVjdXRlQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9QYXJlbnRDb250cm9sPzogYW55LFxuXHRtZXNzYWdlSGFuZGxlcj86IE1lc3NhZ2VIYW5kbGVyLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdGxldCBvQWN0aW9uOiBhbnk7XG5cblx0ZnVuY3Rpb24gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCkge1xuXHRcdGlmIChhQWN0aW9uUGFyYW1ldGVycyAmJiBhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0aWYgKCFhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoYUFjdGlvblBhcmFtZXRlcnNbal0uJFR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJ5dGVcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uSW50MTZcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uSW50NjRcIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIHRiY1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG9BY3Rpb24uc2V0UGFyYW1ldGVyKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiROYW1lLCBhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gVE9ETzogcmVmYWN0b3IgdG8gZGlyZWN0IHVzZSBvZiBQcm9taXNlLmFsbFNldHRsZWRcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRjb25zdCBiR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmJHcm91cGVkO1xuXHRcdFx0Y29uc3QgYkdldEJvdW5kQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQ7XG5cdFx0XHRjb25zdCBhQWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3Qgb2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QgPSBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk7XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uQ29udGV4dDogYW55LCBjdXJyZW50X2NvbnRleHRfaW5kZXg6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgaUNvbnRleHRMZW5ndGg6IGFueSkge1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Y29uc3QgaW5kaXZpZHVhbEFjdGlvblByb21pc2U6IGFueSA9IFtdO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSAhYkdyb3VwZWQgPyBgJGF1dG8uJHtjdXJyZW50X2NvbnRleHRfaW5kZXh9YCA6IGFjdGlvbkNvbnRleHQuZ2V0VXBkYXRlR3JvdXBJZCgpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBmblJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbnMsIG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSxcblx0XHRcdFx0XHRvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0LFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uQ29udGV4dDogYW55LCBjdXJyZW50X2NvbnRleHRfaW5kZXg6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgaUNvbnRleHRMZW5ndGg6IGFueSkge1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogYW55ID0gW107XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlLnB1c2gob2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3Qub0xvY2FsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVDaGFuZ2VzZXQoKSB7XG5cdFx0XHRcdGNvbnN0IGFDaGFuZ2VTZXRMb2NhbFByb21pc2VzID0gW10gYXMgYW55O1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoIDw9IDEgPyBudWxsIDogaSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvdGhlckVycm9yTWVzc2FnZUluZGV4ID0gY2hlY2tmb3JPdGhlck1lc3NhZ2VzKHRydWUpO1xuXHRcdFx0XHRcdFx0aWYgKG90aGVyRXJyb3JNZXNzYWdlSW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9wZXJhdGlvbnNIZWxwZXIucmVuZGVyTWVzc2FnZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaFByb21pc2UpIHtcblx0XHRcdFx0XHRcdFx0XHRzaFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlTW9kZWwgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VNb2RlbC5zZXREYXRhKG1lc3NhZ2VzSW5Nb2RlbC5jb25jYXQoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIlJldHJpZ2dlcmluZyBvZiBzdHJpY3QgaGFuZGxpbmcgYWN0aW9ucyBmYWlsZWRcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoY29udGV4dHNUb0V4ZWN1dGU6IENvbnRleHRbXSkge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dDogYW55LCBhY3Rpb25JbmRleDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IENvbnRleHQsIGlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQgKyAxLCBhQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGF3YWl0IG9wZXJhdGlvbnNIZWxwZXIucmVuZGVyTWVzc2FnZVZpZXcoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYkdyb3VwZWQpIHtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiLCBlbnN1cmUgdGhhdCBlYWNoIGFjdGlvbiBhbmQgbWF0Y2hpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBuZXh0IHNldCBpcyBzdWJtaXR0ZWQuIFdvcmthcm91bmQgdW50aWwgSlNPTiBiYXRjaCBpcyBhdmFpbGFibGUuXG5cdFx0XHRcdC8vIEFsbG93IGFsc28gZm9yIExpc3QgUmVwb3J0LlxuXHRcdFx0XHRmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoYUNvbnRleHRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZuRXhlY3V0ZUNoYW5nZXNldCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmbkhhbmRsZVJlc3VsdHMoKSB7XG5cdFx0XHRcdC8vIFByb21pc2UuYWxsU2V0dGxlZCB3aWxsIG5ldmVyIGJlIHJlamVjdGVkLiBIb3dldmVyLCBlc2xpbnQgcmVxdWlyZXMgZWl0aGVyIGNhdGNoIG9yIHJldHVybiAtIHRodXMgd2UgcmV0dXJuIHRoZSByZXN1bHRpbmcgUHJvbWlzZSBhbHRob3VnaCBubyBvbmUgd2lsbCB1c2UgaXQuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUFjdGlvblByb21pc2VzKS50aGVuKHJlc29sdmUpO1xuXHRcdFx0fVxuXHRcdH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0KFxuXHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdH1cblx0XHRcdCkoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzQWN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBvQWN0aW9uUHJvbWlzZSA9IG9BY3Rpb24uZXhlY3V0ZShcblx0XHRcdHNHcm91cElkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KG9wZXJhdGlvbnNIZWxwZXIgYXMgYW55KS5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdHsgbGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLCBtb2RlbDogb01vZGVsIH0sXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0KVxuXHRcdCk7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChjdXJyZW50UHJvbWlzZVZhbHVlOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIEhlcmUgd2UgZW5zdXJlIHRoYXQgd2UgcmV0dXJuIHRoZSByZXNwb25zZSB3ZSBnb3QgZnJvbSBhbiB1bmJvdW5kIGFjdGlvbiB0byB0aGVcblx0XHRcdFx0Ly8gY2FsbGVyIEJDUCA6IDIyNzAxMzkyNzlcblx0XHRcdFx0aWYgKGN1cnJlbnRQcm9taXNlVmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQ/LigpPy5nZXRPYmplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGFjdGlvbiBcIiArIHNBY3Rpb25OYW1lLCBvRXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogYW55LCBzQWN0aW9uTmFtZTogYW55KSB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogYW55XG4pOiBib29sZWFuIHtcblx0aWYgKHBhcmFtZXRlclZhbHVlcykge1xuXHRcdC8vIElmIHNob3dEaWFsb2cgaXMgZmFsc2UgYnV0IHRoZXJlIGFyZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGludm9rZUFjdGlvbiBjYWxsLCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdmFsdWVzIGhhdmUgYmVlblxuXHRcdC8vIHByb3ZpZGVkIGZvciBhbGwgb2YgdGhlbVxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIgJiZcblx0XHRcdFx0IXBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFjdGlvblBhcmFtZXRlci4kTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNDcmVhdGVBY3Rpb24gJiYgc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHQvLyBJZiBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBkdXJpbmcgYXBwbGljYXRpb24gbGF1bmNoLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzZXQgaXMgY29tcGxldGVcblx0XHQvLyBJZiBub3QsIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHN0aWxsIG5lZWRzIHRvIGJlIHNob3duLlxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQ6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgc0dyb3VwSWQ6IGFueSwgYUxvY2FsUHJvbWlzZT86IGFueSkge1xuXHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0bGV0IG9Mb2NhbFByb21pc2U7XG5cdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc1RyaWdnZXJBY3Rpb246IGFueSkge1xuXHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0Ly8gYXMgd2UgbW92ZSB0aGUgbWVzc2FnZXMgcmVxdWVzdCB0byBQT1NUICRzZWxlY3Qgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgYXJyYXlcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRpZiAoYUxvY2FsUHJvbWlzZSkge1xuXHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdH1cblx0XHRvTG9jYWxQcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMsXG5cdGdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWU6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvblxufTtc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
1509
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiYUNvbnRleHRzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJyZXN1bHQiLCJzdGF0dXMiLCJ2YWx1ZSIsInJlYXNvbiIsImNhbGxBY3Rpb24iLCJ0aGVuIiwiY2FsbEFjdGlvbkltcG9ydCIsImJpbmRDb250ZXh0Iiwib0FjdGlvbkltcG9ydCIsImdldE9iamVjdCIsImNhbGxCb3VuZEZ1bmN0aW9uIiwic0Z1bmN0aW9uTmFtZSIsImNvbnRleHQiLCJzRnVuY3Rpb25QYXRoIiwib0JvdW5kRnVuY3Rpb24iLCJfZXhlY3V0ZUZ1bmN0aW9uIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwicmVzb2x2ZSIsIm9GdW5jdGlvbkltcG9ydCIsIm9GdW5jdGlvbiIsInNHcm91cElkIiwiRXJyb3IiLCJvRnVuY3Rpb25Qcm9taXNlIiwiZXhlY3V0ZSIsInN1Ym1pdEJhdGNoIiwiZ2V0Qm91bmRDb250ZXh0Iiwib0FjdGlvbiIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJmbk9uU3VibWl0dGVkIiwib25TdWJtaXR0ZWQiLCJmbk9uUmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImZpbmRJbmRleCIsImV4cCIsIiRpc0NvbGxlY3Rpb24iLCJnZXRNb2RlbCIsIiRUeXBlIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsInNvbWUiLCJhUGFyYW1ldGVyIiwiJEVudGl0eVNldFBhdGgiLCIkSXNCb3VuZCIsImVudGl0eVNldE5hbWUiLCJtZXNzYWdlSGFuZGxlciIsIm9PcGVyYXRpb25SZXN1bHQiLCJhZnRlckFjdGlvblJlc29sdXRpb24iLCJjYXRjaCIsImkiLCJmaW5kIiwiZWxlbWVudCIsIm5hbWUiLCJfZXhlY3V0ZUFjdGlvbiIsIm1lc3NhZ2VzIiwiQ29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbmNhdCIsInN0cmljdEhhbmRsaW5nRmFpbHMiLCJhRmFpbGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiZmFpbCIsImdldENvbnRleHQiLCJvRmFpbGVkT3BlcmF0aW9uUmVzdWx0IiwiYWRkTWVzc2FnZXMiLCJzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCIsImNoZWNrZm9yT3RoZXJNZXNzYWdlcyIsInNob3dNZXNzYWdlRGlhbG9nIiwib25CZWZvcmVTaG93TWVzc2FnZSIsImFNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVyc0luIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsInVuZGVmaW5lZCIsImFTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbkNvbnRleHQiLCJvUGFyZW50Q29udHJvbCIsImJvdW5kQWN0aW9uTmFtZSIsInN1ZmZpeFJlc291cmNlS2V5IiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzQ29uZmlybWF0aW9uVGV4dCIsImdldFRleHQiLCJjb25maXJtIiwib25DbG9zZSIsInNBY3Rpb24iLCJPSyIsIm9PcGVyYXRpb24iLCJvRXJyb3IiLCJlIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiZXhlY3V0ZUFQTUFjdGlvbiIsIm9EaWFsb2ciLCJhZnRlcjQxMiIsImFSZXN1bHQiLCJvU2luZ2xlUmVzdWx0IiwiYXR0YWNoRXZlbnRPbmNlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuIiwiaXNPcGVuIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvQ29udHJvbCIsImlzQSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzaG93TWVzc2FnZUJveCIsIm9SZXNvdXJjZUJ1bmRsZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInVuYm91bmRNZXNzYWdlcyIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXQiLCJBUERtZXNzYWdlcyIsImFjdGlvblBhcmFtIiwiQVBETWVzc2FnZSIsImlzQVBEVGFyZ2V0IiwiZXJyb3JUYXJnZXRzSW5BUEQiLCJoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UiLCJzTWVzc2FnZSIsInNEZXNjcmlwdGlvblRleHQiLCJtZXNzYWdlTW9kZWwiLCJtZXNzYWdlc0luTW9kZWwiLCJhQm91bmRNZXNzYWdlcyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldE1lc3NhZ2VzIiwiZ2VuZXJpY01lc3NhZ2UiLCJpc0VkaXRhYmxlIiwiZ2V0UHJvcGVydHkiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyIsImdldFR5cGUiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsIiwic2V0TWVzc2FnZSIsImdldE1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiY29kZSIsInVuc2hpZnQiLCJjbG9zZSIsImRlc3Ryb3kiLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiYklzQVBET3BlbiIsImZuR2V0TWVzc2FnZVN1YnRpdGxlIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYmluZCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsInNQYXRoIiwiX2dldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRDb250ZXh0Iiwic0FjdGlvbk5hbWVQYXRoIiwiYWN0aW9uTmFtZUNvbnRleHQiLCJzRnJhZ21lbnROYW1lIiwiYWN0aW9uUGFyYW1ldGVySW5mb3MiLCJtZXNzYWdlTWFuYWdlciIsIl9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyIiwicGFyYW1ldGVyIiwiYWxsTWVzc2FnZXMiLCJnZW5lcmF0ZSIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwiaWQiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwib0NvbnRyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJvRXZlbnQiLCJmaWVsZCIsImdldFNvdXJjZSIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsImdldFBhcmFtZXRlciIsImhhc0Vycm9yIiwiZXJyb3IiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiY3JlYXRlZEZyYWdtZW50IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImFjdGlvbiIsImVudGl0eVNldCIsIm1vZGVscyIsImFGdW5jdGlvblBhcmFtcyIsIm9PcGVyYXRpb25CaW5kaW5nIiwiQ29tbW9uVXRpbHMiLCJzZXRVc2VyRGVmYXVsdHMiLCJvRGlhbG9nQ29udGVudCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwibWFwIiwiYWN0aW9uUGFyYW1ldGVyIiwiaXNNdWx0aVZhbHVlIiwiYWN0aW9uUmVzdWx0IiwiZGlhbG9nQ2FuY2VsbGVkIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidGV4dCIsIl9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIiwicHJlc3MiLCJfdmFsaWRhdGVQcm9wZXJ0aWVzIiwiQnVzeUxvY2tlciIsImxvY2siLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJ2UGFyYW1ldGVyVmFsdWUiLCJvUGFyYW1ldGVyQ29udGV4dCIsImdldFBhcmFtZXRlckNvbnRleHQiLCJhTVZGQ29udGVudCIsImFLZXlWYWx1ZXMiLCJqIiwiS2V5Iiwic2FwIiwidWkiLCJnZXRDb3JlIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImVuZEJ1dHRvbiIsImJlZm9yZU9wZW4iLCJvQ2xvbmVFdmVudCIsIk9iamVjdCIsImFzc2lnbiIsImdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInNEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0JvdW5kRnVuY3Rpb25OYW1lIiwicHJlZmlsbFBhcmFtZXRlciIsInNQYXJhbU5hbWUiLCJ2UGFyYW1EZWZhdWx0VmFsdWUiLCIkUGF0aCIsInZQYXJhbVZhbHVlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwicmVxdWVzdFByb3BlcnR5Iiwic1BhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInBhcmFtTmFtZSIsImJOb1Bvc3NpYmxlVmFsdWUiLCJMb2ciLCJiTGF0ZVByb3BlcnR5RXJyb3IiLCJvRGF0YSIsImdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsInNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCIsImdldFBhcmFtZXRlclBhdGgiLCJvUGFyYW1ldGVyQW5ub3RhdGlvbnMiLCJvUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsInZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhUHJlZmlsbFBhcmFtUHJvbWlzZXMiLCJhbGwiLCJhRXhlY0Z1bmN0aW9uUHJvbWlzZXMiLCJvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZSIsInNNb2R1bGUiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJhUHJvbWlzZXMiLCJjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJmdW5jdGlvblBhcmFtcyIsIm9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCIsInNEaWFsb2dQYXJhbU5hbWUiLCJ2UGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSIsInNldFBhcmFtZXRlciIsImhhc093blByb3BlcnR5IiwiYkVycm9yRm91bmQiLCJvVmFsdWUiLCJzVGV4dCIsIndhcm5pbmciLCJjb250ZW50V2lkdGgiLCJmbkFzeW5jQmVmb3JlT3BlbiIsImFQYXJhbWV0ZXJzIiwib0NvbnRleHRPYmplY3QiLCJyZXF1ZXN0T2JqZWN0IiwiZ2V0SXRlbXMiLCJnZXRWYWx1ZSIsImFmdGVyQ2xvc2UiLCJzZXRNb2RlbCIsImJpbmRFbGVtZW50IiwicGF0aCIsIm9NVkZNb2RlbCIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJhZGREZXBlbmRlbnQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdEJpbmRpbmciLCJvcGVuIiwic2xpY2UiLCJ2QWN0aW9uQ3JpdGljYWwiLCJzQ3JpdGljYWxQYXRoIiwiYUJpbmRpbmdQYXJhbXMiLCJhUGF0aHMiLCJiQ29uZGl0aW9uIiwib1BhcmFtcyIsImluZGV4Iiwiam9pbiIsInNFbnRpdHlTZXROYW1lIiwiYUFjdGlvbk5hbWUiLCJzS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyIsImlDb250ZXh0TGVuZ3RoIiwiY3VycmVudF9jb250ZXh0X2luZGV4IiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IiwiYkVuYWJsZVN0cmljdEhhbmRsaW5nIiwib1Byb3BlcnR5IiwiJGtpbmQiLCJvcGVyYXRpb25zSGVscGVyIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwib3BlcmF0aW9ucyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsImNyZWF0ZWludGVybmFsT3BlcmF0aW9uc1Byb21pc2VGb3JBY3Rpb25FeGVjdXRpb24iLCJvTG9jYWxBY3Rpb25Qcm9taXNlIiwiaXNDaGFuZ2VTZXQiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQWN0aW9uUHJvbWlzZXMiLCJvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdCIsImZuRXhlY3V0ZUFjdGlvbiIsImFjdGlvbkNvbnRleHQiLCJvU2lkZUVmZmVjdCIsImluZGl2aWR1YWxBY3Rpb25Qcm9taXNlIiwiZ2V0VXBkYXRlR3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYWxsU2V0dGxlZCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsImZuRXhlY3V0ZUNoYW5nZXNldCIsImFDaGFuZ2VTZXRMb2NhbFByb21pc2VzIiwibm9vcCIsIm90aGVyRXJyb3JNZXNzYWdlSW5kZXgiLCJyZW5kZXJNZXNzYWdlVmlldyIsInNoUHJvbWlzZSIsInNldERhdGEiLCJmbkhhbmRsZVJlc3VsdHMiLCJmbkV4ZWN1dGVTZXF1ZW50aWFsbHkiLCJjb250ZXh0c1RvRXhlY3V0ZSIsInByb2Nlc3NPbmVBY3Rpb24iLCJhY3Rpb25JbmRleCIsInJlZHVjZSIsInByb21pc2UiLCJmaW5hbGx5IiwiY3VycmVudFByb21pc2VWYWx1ZSIsImFjdGlvblBhcmFtZXRlcnMiLCJhTG9jYWxQcm9taXNlIiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIm9Mb2NhbFByb21pc2UiLCJzVHJpZ2dlckFjdGlvbiIsImV4ZWN1dGVBY3Rpb24iLCJ2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMiLCJnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJmYWNhZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vLi4vLi4vQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgb3BlcmF0aW9uc0hlbHBlciwgeyB0eXBlIFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4uLy4uLy4uL29wZXJhdGlvbnNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCIuLi8uLi9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgQWN0aW9uUGFyYW1ldGVyLCBBY3Rpb25QYXJhbWV0ZXJJbmZvLCBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciwgX3ZhbGlkYXRlUHJvcGVydGllcyB9IGZyb20gXCIuL19pbnRlcm5hbFwiO1xuXG5jb25zdCBDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzLFxuXHRJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuY29uc3QgQWN0aW9uID0gKE1lc3NhZ2VCb3ggYXMgYW55KS5BY3Rpb247XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQm91bmRBY3Rpb25cbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIGNvbnRleHRzIEVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIHRvIGJlIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBPRGF0YSBNb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzXSBBIG1hcCBvZiBiaW5kaW5nIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBiZSBwYXJ0IG9mICRzZWxlY3QgYW5kICRleHBhbmQgY29taW5nIGZyb20gc2lkZSBlZmZlY3RzIGZvciBib3VuZCBhY3Rpb25zXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0XSBBcnJheSBvZiBwcm9wZXJ0eSBwYXRocyB0byBiZSByZXF1ZXN0ZWQgaW4gYWRkaXRpb24gdG8gYWN0dWFsIHRhcmdldCBwcm9wZXJ0aWVzIG9mIHRoZSBzaWRlIGVmZmVjdFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZ10gTW9kZSBob3cgYWN0aW9ucyBhcmUgdG8gYmUgY2FsbGVkOiBDaGFuZ2VzZXQgdG8gcHV0IGFsbCBhY3Rpb24gY2FsbHMgaW50byBvbmUgY2hhbmdlc2V0LCBJc29sYXRlZCB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHMsIGRlZmF1bHRzIHRvIElzb2xhdGVkXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2xdIElmIHNwZWNpZmllZCwgdGhlIGRpYWxvZ3MgYXJlIGFkZGVkIGFzIGRlcGVuZGVudCBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dF0gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIHByb21pc2UgcmV0dXJucyB0aGUgYm91bmQgY29udGV4dFxuICogQHBhcmFtIFtzdHJpY3RIYW5kbGluZ1V0aWxpdGllc10gT3B0aW9uYWwsIHV0aWxpdHkgZmxhZ3MgYW5kIG1lc3NhZ2VzIGZvciBzdHJpY3RIYW5kbGluZ1xuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxCb3VuZEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0Y29udGV4dHM6IGFueSxcblx0b01vZGVsOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGlmICghc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpIHtcblx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyA9IHtcblx0XHRcdGlzNDEyRXhlY3V0ZWQ6IGZhbHNlLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM6IFtdLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdQcm9taXNlczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogW10sXG5cdFx0XHRkZWxheVN1Y2Nlc3NNZXNzYWdlczogW10sXG5cdFx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzOiBbXVxuXHRcdH07XG5cdH1cblx0aWYgKCFjb250ZXh0cyB8fCBjb250ZXh0cy5sZW5ndGggPT09IDApIHtcblx0XHQvL0luIEZyZWVzdHlsZSBhcHBzIGJvdW5kIGFjdGlvbnMgY2FuIGhhdmUgbm8gY29udGV4dFxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGFjdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb250ZXh0XCIpO1xuXHR9XG5cdC8vIHRoaXMgbWV0aG9kIGVpdGhlciBhY2NlcHRzIHNpbmdsZSBjb250ZXh0IG9yIGFuIGFycmF5IG9mIGNvbnRleHRzXG5cdC8vIFRPRE86IFJlZmFjdG9yIHRvIGFuIHVuYW1iaWd1b3MgQVBJXG5cdGNvbnN0IGlzQ2FsbGVkV2l0aEFycmF5ID0gQXJyYXkuaXNBcnJheShjb250ZXh0cyk7XG5cblx0Ly8gaW4gY2FzZSBvZiBzaW5nbGUgY29udGV4dCB3cmFwIGludG8gYW4gYXJyYXkgZm9yIGNhbGxlZCBtZXRob2RzIChlc3AuIGNhbGxBY3Rpb24pXG5cdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGlzQ2FsbGVkV2l0aEFycmF5ID8gY29udGV4dHMgOiBbY29udGV4dHNdO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0Ly8gQW5hbHl6aW5nIG1ldGFNb2RlbFBhdGggZm9yIGFjdGlvbiBvbmx5IGZyb20gZmlyc3QgY29udGV4dCBzZWVtcyB3ZWlyZCwgYnV0IHByb2JhYmx5IHdvcmtzIGluIGFsbCBleGlzdGluZyBzemVuYXJpb3MgLSBpZiBzZXZlcmFsIGNvbnRleHRzIGFyZSBwYXNzZWQsIHRoZXkgcHJvYmFibHlcblx0XHQvLyBiZWxvbmcgdG8gdGhlIHNhbWUgbWV0YW1vZGVscGF0aC4gVE9ETzogQ2hlY2ssIHdoZXRoZXIgdGhpcyBjYW4gYmUgaW1wcm92ZWQgLyBzemVuYXJpb3Mgd2l0aCBkaWZmZXJlbnQgbWV0YU1vZGVsUGF0aHMgbWlnaHQgZXhpc3Rcblx0XHRzQWN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgobVBhcmFtZXRlcnMuYUNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7c0FjdGlvbk5hbWV9YCxcblx0XHRvQm91bmRBY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZC8wYCk7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIHNBY3Rpb25QYXRoLCBtUGFyYW1ldGVycy5hQ29udGV4dHMsIG9Cb3VuZEFjdGlvbik7XG5cblx0Ly8gUHJvbWlzZSByZXR1cm5lZCBieSBjYWxsQWN0aW9uIGN1cnJlbnRseSBpcyByZWplY3RlZCBpbiBjYXNlIG9mIGV4ZWN1dGlvbiBmb3IgbXVsdGlwbGUgY29udGV4dHMgcGFydGx5IGZhaWxpbmcuIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgKHNvbWUgZmFpbGluZyBjb250ZXh0cyBkbyBub3QgbWVhblxuXHQvLyB0aGF0IGZ1bmN0aW9uIGRpZCBub3QgZnVsZmlsbCBpdHMgdGFzayksIGJ1dCBhcyB0aGlzIGlzIGEgYmlnZ2VyIHJlZmFjdG9yaW5nLCBmb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVlZCB0byBkZWFsIHdpdGggdGhhdCBhdCB0aGUgY2FsbGluZyBwbGFjZSAoaS5lLiBoZXJlKVxuXHQvLyA9PiBwcm92aWRlIHRoZSBzYW1lIGhhbmRsZXIgKG1hcHBpbmcgYmFjayBmcm9tIGFycmF5IHRvIHNpbmdsZSByZXN1bHQvZXJyb3IgaWYgbmVlZGVkKSBmb3IgcmVzb2x2ZWQvcmVqZWN0ZWQgY2FzZVxuXHRjb25zdCBleHRyYWN0U2luZ2xlUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdDogYW55KSB7XG5cdFx0Ly8gc2luZ2xlIGFjdGlvbiBjb3VsZCBiZSByZXNvbHZlZCBvciByZWplY3RlZFxuXHRcdGlmIChyZXN1bHRbMF0uc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WzBdLnZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRpYWxvZyBjYW5jZWxsYXRpb24sIG5vIGFycmF5IGlzIHJldHVybmVkID0+IHRocm93IHRoZSByZXN1bHQuXG5cdFx0XHQvLyBJZGVhbGx5LCBkaWZmZXJlbnRpYXRpbmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaGVyZSA9PiBUT0RPOiBGaW5kIGJldHRlciBzb2x1dGlvbiB3aGVuIHNlcGFyYXRpbmcgZGlhbG9nIGhhbmRsaW5nIChzaW5nbGUgb2JqZWN0IHdpdGggc2luZ2xlIHJlc3VsdCkgZnJvbSBiYWNrZW5kXG5cdFx0XHQvLyBleGVjdXRpb24gKHBvdGVudGlhbGx5IG11bHRpcGxlIG9iamVjdHMpXG5cdFx0XHR0aHJvdyByZXN1bHRbMF0ucmVhc29uIHx8IHJlc3VsdDtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kQWN0aW9uLCBvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpLnRoZW4oXG5cdFx0KHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBleHRyYWN0U2luZ2xlUmVzdWx0KHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQocmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHR0aHJvdyByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cbi8qKlxuICogQ2FsbHMgYW4gYWN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQWN0aW9uSW1wb3J0XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbXBvcnQgdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXNdIEEgbWFwIG9mIGFjdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHByb3ZpZGVkIHZhbHVlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW3N0cmljdEhhbmRsaW5nVXRpbGl0aWVzXSBPcHRpb25hbCwgdXRpbGl0eSBmbGFncyBhbmQgbWVzc2FnZXMgZm9yIHN0cmljdEhhbmRsaW5nXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gY2FsbEFjdGlvbkltcG9ydChcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0b01vZGVsOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGlmICghb01vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQWN0aW9uIGV4cGVjdHMgYSBtb2RlbC9jb250ZXh0IGZvciBleGVjdXRpb25cIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzQWN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9BY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkQWN0aW9uXCIpfS8wYCk7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZGApO1xuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQWN0aW9uSW1wb3J0LCBvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpO1xufVxuZnVuY3Rpb24gY2FsbEJvdW5kRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBjb250ZXh0OiBhbnksIG9Nb2RlbDogYW55KSB7XG5cdGlmICghY29udGV4dCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGZ1bmN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYSBjb250ZXh0XCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpfS8ke3NGdW5jdGlvbk5hbWV9YCxcblx0XHRvQm91bmRGdW5jdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kRnVuY3Rpb24sIGNvbnRleHQpO1xufVxuLyoqXG4gKiBDYWxscyBhIGZ1bmN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsRnVuY3Rpb25JbXBvcnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSBzRnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgdjQgbW9kZWxcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGxGdW5jdGlvbkltcG9ydChzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogYW55KSB7XG5cdGlmICghc0Z1bmN0aW9uTmFtZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NGdW5jdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9GdW5jdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke29NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEZ1bmN0aW9uXCIpfS8wYCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0Z1bmN0aW9uSW1wb3J0KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogYW55LCBvTW9kZWw6IGFueSwgb0Z1bmN0aW9uOiBhbnksIGNvbnRleHQ/OiBhbnkpIHtcblx0bGV0IHNHcm91cElkO1xuXHRpZiAoIW9GdW5jdGlvbiB8fCAhb0Z1bmN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgRnVuY3Rpb24gJHtzRnVuY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdH1cblx0aWYgKGNvbnRleHQpIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7c0Z1bmN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkdyb3VwXCI7XG5cdH0gZWxzZSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uSW1wb3J0XCI7XG5cdH1cblx0Y29uc3Qgb0Z1bmN0aW9uUHJvbWlzZSA9IG9GdW5jdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0cmV0dXJuIG9GdW5jdGlvblByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG9GdW5jdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBjYWxsQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogYW55LFxuXHRvTW9kZWw6IGFueSxcblx0b0FjdGlvbjogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRpZiAoIXN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHR9O1xuXHR9XG5cdG1QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRsZXQgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdGxldCBmbkRpYWxvZztcblx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0Ly9sZXQgZmFpbGVkQWN0aW9uUHJvbWlzZTogYW55O1xuXHRcdGNvbnN0IHNBY3Rpb25MYWJlbCA9IG1QYXJhbWV0ZXJzLmxhYmVsO1xuXHRcdGNvbnN0IGJTa2lwUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBhbnk7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRsZXQgYklzU2FtZUVudGl0eTtcblx0XHRsZXQgb1JldHVyblR5cGU7XG5cdFx0bGV0IGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYWN0aW9uRGVmaW5pdGlvbiA9IG9BY3Rpb24uZ2V0T2JqZWN0KCk7XG5cdFx0aWYgKCFvQWN0aW9uIHx8ICFvQWN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQWN0aW9uICR7c0FjdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGFjdGlvblxuXHRcdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uKTtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaGFzIHBhcmFtZXRlcnMgYW5kIHdvdWxkIG5lZWQgYSBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0Ly8gVGhlIHBhcmFtZXRlciBSZXN1bHRJc0FjdGl2ZUVudGl0eSBpcyBhbHdheXMgaGlkZGVuIGluIHRoZSBkaWFsb2chIEhlbmNlIGlmXG5cdFx0Ly8gdGhpcyBpcyB0aGUgb25seSBwYXJhbWV0ZXIsIHRoaXMgaXMgdHJlYXRlZCBhcyBubyBwYXJhbWV0ZXIgaGVyZSBiZWNhdXNlIHRoZVxuXHRcdC8vIGRpYWxvZyB3b3VsZCBiZSBlbXB0eSFcblx0XHQvLyBGSVhNRTogU2hvdWxkIG9ubHkgaWdub3JlIHRoaXMgaWYgdGhpcyBpcyBhICdjcmVhdGUnIGFjdGlvbiwgb3RoZXJ3aXNlIGl0IGlzIGp1c3Qgc29tZSBub3JtYWwgcGFyYW1ldGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoaXMgbmFtZVxuXHRcdGNvbnN0IGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyA9XG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGggPiAwICYmICEoYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID09PSAxICYmIGFBY3Rpb25QYXJhbWV0ZXJzWzBdLiROYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIpO1xuXG5cdFx0Ly8gUHJvdmlkZWQgdmFsdWVzIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlcnMgZnJvbSBpbnZva2VBY3Rpb24gY2FsbFxuXHRcdGNvbnN0IGFQYXJhbWV0ZXJWYWx1ZXMgPSBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXM7XG5cblx0XHQvLyBEZXRlcm1pbmUgc3RhcnR1cCBwYXJhbWV0ZXJzIGlmIHByb3ZpZGVkXG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSBvQXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9O1xuXG5cdFx0Ly8gSW4gY2FzZSBhbiBhY3Rpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCwgYW5kIHdlIHNoYWxsIHNraXAgdGhlIGRpYWxvZywgY2hlY2sgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHBhcmFtZXRlcnNcblx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nICYmIGJTa2lwUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzID0gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyhcblx0XHRcdFx0YklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIERlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVkIGRhdGEsIGVpdGhlciBzZXQgYSBkaWFsb2cgb3IgbGVhdmUgaXQgZW1wdHkgd2hpY2hcblx0XHQvLyB3aWxsIGxlYWQgdG8gZGlyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYSBkaWFsb2dcblx0XHRmbkRpYWxvZyA9IG51bGw7XG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0aWYgKCEoYlNraXBQYXJhbWV0ZXJEaWFsb2cgJiYgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycykpIHtcblx0XHRcdFx0Zm5EaWFsb2cgPSBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdGZuRGlhbG9nID0gY29uZmlybUNyaXRpY2FsQWN0aW9uO1xuXHRcdH1cblxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0Zm5PblN1Ym1pdHRlZDogbVBhcmFtZXRlcnMub25TdWJtaXR0ZWQsXG5cdFx0XHRmbk9uUmVzcG9uc2U6IG1QYXJhbWV0ZXJzLm9uUmVzcG9uc2UsXG5cdFx0XHRhY3Rpb25OYW1lOiBzQWN0aW9uTmFtZSxcblx0XHRcdG1vZGVsOiBvTW9kZWwsXG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVyczogYUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRiR2V0Qm91bmRDb250ZXh0OiBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRzZWxlY3RlZEl0ZW1zOiBtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zXG5cdFx0fTtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGFDb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHRzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRpTWVzc2FnZVNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChleHA6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBleHAgPT09IFwic3RyaW5nXCIgJiYgZXhwID09PSBzTWVzc2FnZXNQYXRoO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIFNBUF9NZXNzYWdlcyBieSBkZWZhdWx0IGlmIG5vdCBhbm5vdGF0ZWQgYnkgc2lkZSBlZmZlY3RzLCBhY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgY29sbGVjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyB0aGUgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIHR5cGVcblx0XHRcdFx0XHRvUmV0dXJuVHlwZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFJldHVyblR5cGVcIik7XG5cdFx0XHRcdFx0YklzU2FtZUVudGl0eSA9XG5cdFx0XHRcdFx0XHRvUmV0dXJuVHlwZSAmJiAhb1JldHVyblR5cGUuJGlzQ29sbGVjdGlvbiAmJiBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCkuJFR5cGUgPT09IG9SZXR1cm5UeXBlLiRUeXBlO1xuXG5cdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xIHx8IGJJc1NhbWVFbnRpdHkpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSBtZXNzYWdlIHBhdGggaXMgYW5ub3RhdGVkIGFzIHNpZGUgZWZmZWN0LiBBcyB0aGVyZSdzIG5vIGJpbmRpbmcgZm9yIGl0IGFuZCB0aGUgbW9kZWwgZG9lcyBjdXJyZW50bHkgbm90IGFsbG93XG5cdFx0XHRcdFx0XHQvLyB0byBhZGQgaXQgYXQgYSBsYXRlciBwb2ludCBvZiB0aW1lIHdlIGhhdmUgdG8gdGFrZSBjYXJlIGl0J3MgcGFydCBvZiB0aGUgJHNlbGVjdCBvZiB0aGUgUE9TVCwgdGhlcmVmb3JlIG1vdmluZyBpdC5cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyB8fCB7fTtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldE9iamVjdChgJFJldHVyblR5cGUvJFR5cGUvJHtzTWVzc2FnZXNQYXRofWApICYmXG5cdFx0XHRcdFx0XHRcdCghbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdC5zcGxpdChcIixcIikuaW5kZXhPZihzTWVzc2FnZXNQYXRoKSA9PT0gLTEpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdD8gYCR7bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3R9LCR7c01lc3NhZ2VzUGF0aH1gXG5cdFx0XHRcdFx0XHRcdFx0OiBzTWVzc2FnZXNQYXRoO1xuXHRcdFx0XHRcdFx0XHQvLyBBZGQgc2lkZSBlZmZlY3RzIGF0IGVudGl0eSBsZXZlbCBiZWNhdXNlICRzZWxlY3Qgc3RvcHMgdGhlc2UgYmVpbmcgcmV0dXJuZWQgYnkgdGhlIGFjdGlvblxuXHRcdFx0XHRcdFx0XHQvLyBPbmx5IGlmIG5vIG90aGVyIHNpZGUgZWZmZWN0cyB3ZXJlIGFkZGVkIGZvciBNZXNzYWdlc1xuXHRcdFx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5wdXNoKFwiKlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGggPT09IDAgJiYgaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBubyB0cmlnZ2VyIGFjdGlvbiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXF1ZXN0IG1lc3NhZ2VzIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnNwbGljZShpTWVzc2FnZVNpZGVFZmZlY3QsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFDb250ZXh0cztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgPSBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJPYmplY3RQYWdlID0gbVBhcmFtZXRlcnMuYk9iamVjdFBhZ2U7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuY29udHJvbElkKSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChiSXNDcmVhdGVBY3Rpb24pIHtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHR9XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IChhY3Rpb25EZWZpbml0aW9uLiRQYXJhbWV0ZXIgfHwgW10pLnNvbWUoKGFQYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0KChhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoICYmIGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggPT09IGFQYXJhbWV0ZXIuJE5hbWUpIHx8IGFjdGlvbkRlZmluaXRpb24uJElzQm91bmQpICYmXG5cdFx0XHRcdGFQYXJhbWV0ZXIuJGlzQ29sbGVjdGlvblxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYyA9IGlzU3RhdGljO1xuXHRcdGlmIChmbkRpYWxvZykge1xuXHRcdFx0b0FjdGlvblByb21pc2UgPSBmbkRpYWxvZyhcblx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXHRcdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0KGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9XG5cdFx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNbbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVdPy5bMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxldCBvT3BlcmF0aW9uUmVzdWx0OiBhbnk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0ZhaWxzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM7XG5cdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ0ZhaWxzLmZvckVhY2goZnVuY3Rpb24gKGZhaWw6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRhRmFpbGVkQ29udGV4dHMucHVzaChmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUZhaWxlZENvbnRleHRzO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0ZhaWxlZE9wZXJhdGlvblJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMgPSBbXTtcblx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdHJlc29sdmUob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0XHRjaGVja2Zvck90aGVyTWVzc2FnZXMobVBhcmFtZXRlcnMuYkdyb3VwZWQpICE9PSAtMVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0bVBhcmFtZXRlcnM/Lm1lc3NhZ2VIYW5kbGVyPy5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0Y29udHJvbDogbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM/LmNvbnRyb2wsXG5cdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1Dcml0aWNhbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IGFueSxcblx0YVBhcmFtZXRlclZhbHVlczogYW55LFxuXHRvQWN0aW9uQ29udGV4dDogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRlbnRpdHlTZXROYW1lOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBhbnlcbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0XHRib3VuZEFjdGlvbk5hbWUgPVxuXHRcdFx0Ym91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgZW50aXR5U2V0TmFtZSA/IGAke2VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9QYXJlbnRDb250cm9sKTtcblx0XHRjb25zdCBzQ29uZmlybWF0aW9uVGV4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fQ09ORklSTV9NRVNTQUdFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXG5cdFx0TWVzc2FnZUJveC5jb25maXJtKHNDb25maXJtYXRpb25UZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyBmdW5jdGlvbiAoc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBBY3Rpb24uT0spIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBvUGFyZW50Q29udHJvbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQVBNQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YUNvbnRleHRzOiBhbnksXG5cdG9EaWFsb2c6IGFueSxcblx0YWZ0ZXI0MTI6IGJvb2xlYW4sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIG9QYXJlbnRDb250cm9sLCBtZXNzYWdlSGFuZGxlciwgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpO1xuXHQvLyBJZiBzb21lIGVudHJpZXMgd2VyZSBzdWNjZXNzZnVsLCBhbmQgb3RoZXJzIGhhdmUgZmFpbGVkLCB0aGUgb3ZlcmFsbCBwcm9jZXNzIGlzIHN0aWxsIHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoaXMgd2FzIHRyZWF0ZWQgYXMgcmVqZWN0aW9uXG5cdC8vIGJlZm9yZSwgYW5kIHRoaXMgY3VycmVudGx5IGlzIHN0aWxsIGtlcHQsIGFzIGxvbmcgYXMgZGlhbG9nIGhhbmRsaW5nIGlzIG1peGVkIHdpdGggYmFja2VuZCBwcm9jZXNzIGhhbmRsaW5nLlxuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBvbmx5IHJlamVjdCBpbiBjYXNlIG9mIG92ZXJhbGwgcHJvY2VzcyBlcnJvci5cblx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nOiBtYXAgdG8gb2xkIGxvZ2ljIHRvIHJlamVjdCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGZhaWxlZFxuXHQvLyBUaGlzIGNoZWNrIGlzIG9ubHkgZG9uZSBmb3IgYm91bmQgYWN0aW9ucyA9PiBhQ29udGV4dHMgbm90IGVtcHR5XG5cdGlmIChtUGFyYW1ldGVycy5hQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdGlmIChhUmVzdWx0Py5zb21lKChvU2luZ2xlUmVzdWx0OiBhbnkpID0+IG9TaW5nbGVSZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpKSB7XG5cdFx0XHR0aHJvdyBhUmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1lc3NhZ2VzID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoKSB7XG5cdFx0aWYgKCFhZnRlcjQxMikge1xuXHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMpO1xuXHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKSAhPT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb250cm9sOiBtUGFyYW1ldGVycy5jb250cm9sLFxuXHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKSAhPT0gLTFcblx0XHQpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHR9XG5cdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuOiBtUGFyYW1ldGVycz8ub0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udHJvbDogbVBhcmFtZXRlcnMuY29udHJvbCxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0c0FjdGlvbk5hbWU6IG1QYXJhbWV0ZXJzLmxhYmVsXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnM6IGFueSwgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IGFueSwgYWN0aW9uRGVmaW5pdGlvbjogYW55KSB7XG5cdGlmIChcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggJiZcblx0XHRhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kXG5cdCkge1xuXHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0Y29uc3QgaXNTdGF0aWMgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYztcblx0XHRpZiAoIWlzU3RhdGljKSB7XG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbDtcblx0XHRcdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb0NvbnRyb2wuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0SlNPTi5wYXJzZShtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRhQ29udGV4dHM6IGFueSxcblx0b0RpYWxvZzogYW55LFxuXHRtZXNzYWdlczogYW55LFxuXHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogeyBzaG93TWVzc2FnZUJveDogYm9vbGVhbjsgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfSxcblx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQ6IGJvb2xlYW5cbik6IHtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRzaG93TWVzc2FnZUJveDogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW47XG5cdGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c6IGJvb2xlYW47XG59IHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpID09PSBcIlwiO1xuXHR9KTtcblx0Y29uc3QgQVBEbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldCAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXQoKS5pbmRleE9mKG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnM/LmFBY3Rpb25QYXJhbWV0ZXJzPy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2YoYWN0aW9uUGFyYW0uJE5hbWUpICE9PSAtMTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSk7XG5cdEFQRG1lc3NhZ2VzPy5mb3JFYWNoKGZ1bmN0aW9uIChBUERNZXNzYWdlOiBhbnkpIHtcblx0XHRBUERNZXNzYWdlLmlzQVBEVGFyZ2V0ID0gdHJ1ZTtcblx0fSk7XG5cblx0Y29uc3QgZXJyb3JUYXJnZXRzSW5BUEQgPSBBUERtZXNzYWdlcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG5cdGxldCBoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UgPSBmYWxzZTtcblx0aWYgKHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ICYmICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdGhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSA9IHRydWU7XG5cdFx0bGV0IHNNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX0VSUk9SX01FU1NBR0VTX1RFWFRcIik7XG5cdFx0bGV0IHNEZXNjcmlwdGlvblRleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfRVJST1JfTUVTU0FHRVNfREVUQUlMX1RFWFRcIik7XG5cdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0Y29uc3QgYUJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSk7XG5cdFx0bGV0IGdlbmVyaWNNZXNzYWdlO1xuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRjb25zdCBub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyA9IG1lc3NhZ2VzLmZpbmRJbmRleChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG5vbkVycm9yTWVzc2FnZUV4aXN0c0luTW9kZWwgPSBtZXNzYWdlc0luTW9kZWwuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cblx0XHRpZiAobm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2cgIT09IDEgJiYgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCAhPT0gLTEpIHtcblx0XHRcdGlmIChtZXNzYWdlc0luTW9kZWwubGVuZ3RoID09PSAxICYmIGFCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRpZiAoaXNFZGl0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRtZXNzYWdlc0luTW9kZWxbMF0uc2V0TWVzc2FnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUXCIpICtcblx0XHRcdFx0XHRcdFx0XCJcXG5cXG5cIiArXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VzSW5Nb2RlbFswXS5nZXRNZXNzYWdlKClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNNZXNzYWdlID0gaXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX0VSUk9SX01FU1NBR0VfVEVYVF9FRElUXCIpXG5cdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUXCIpO1xuXHRcdFx0XHRcdHNEZXNjcmlwdGlvblRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogc01lc3NhZ2UsXG5cdFx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Rlc2NyaXB0aW9uVGV4dCxcblx0XHRcdFx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG1lc3NhZ2VzLnVuc2hpZnQoZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZW5lcmljTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBzTWVzc2FnZSxcblx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Rlc2NyaXB0aW9uVGV4dCxcblx0XHRcdFx0XHRjb2RlOiBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1lc3NhZ2VzLnVuc2hpZnQoZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpICYmIGFDb250ZXh0cy5sZW5ndGggIT09IDAgJiYgIW1QYXJhbWV0ZXJzLmlzU3RhdGljKSB7XG5cdFx0aWYgKCFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0Ly9pc29sYXRlZFxuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxIHx8ICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHQvLyBkb2VzIG5vdCBtYXR0ZXIgaWYgZXJyb3IgaXMgaW4gQVBEIG9yIG5vdCwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRleHRzIHNlbGVjdGVkIG9yIGlmIHRoZSBlcnJvciBpcyBub3QgdGhlIEFQRCwgd2UgY2xvc2UgaXQuXG5cdFx0XHRcdC8vIFRPRE86IERpbGFvZyBoYW5kbGluZyBzaG91bGQgbm90IGJlIHBhcnQgb2YgbWVzc2FnZSBoYW5kbGluZy4gUmVmYWN0b3IgYWNjb3JkaW5nbHkgLSBkaWFsb2cgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW5zaWRlIHRoaXMgbWV0aG9kIC0gbmVpdGhlclxuXHRcdFx0XHQvLyB0byBhc2sgd2hldGhlciBpdCdzIG9wZW4sIG5vciB0byBjbG9zZS9kZXN0cm95IGl0IVxuXHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHQvL2NoYW5nZXNldFxuXHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cdGxldCBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAoIWhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgbWVzc2FnZXNbMF0uZ2V0VGFyZ2V0ICYmIG1lc3NhZ2VzWzBdLmdldFRhcmdldCgpICE9PSB1bmRlZmluZWQgJiYgbWVzc2FnZXNbMF0uZ2V0VGFyZ2V0KCkgIT09IFwiXCIpIHtcblx0XHRcdGlmICgob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkgfHwgIW9Db250cm9sKSB7XG5cdFx0XHRcdC8vIE9QIGVkaXQgb3IgTFJcblx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhZXJyb3JUYXJnZXRzSW5BUEQ7XG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGlmIChiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKCFiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdGZpbHRlcmVkTWVzc2FnZXMgPSB1bmJvdW5kTWVzc2FnZXMuY29uY2F0KEFQRG1lc3NhZ2VzKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYklzQVBET3BlbiAmJiB1bmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgdGFyZ2V0cyBpbiBBUEQgPT4gdGhlcmUgaXMgYXRsZWFzdCBvbmUgYm91bmQgbWVzc2FnZS4gSWYgdGhlcmUgYXJlIHVuYm91bmQgbWVzc2FnZXMsIGRpYWxvZyBtdXN0IGJlIHNob3duLlxuXHRcdFx0XHRcdC8vIGZvciBkcmFmdCBlbnRpdHksIHdlIGFscmVhZHkgY2xvc2VkIHRoZSBBUERcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzaG93TWVzc2FnZUJveDogc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdGZpbHRlcmVkTWVzc2FnZXM6IGZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID8gZmlsdGVyZWRNZXNzYWdlcyA6IG1lc3NhZ2VzLFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOlxuXHRcdFx0b0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9Db250cm9sLCBhQ29udGV4dHMpLFxuXHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZzogbVBhcmFtZXRlcnMuYkdyb3VwZWRcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IHN0cmluZyxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRhUGFyYW1ldGVyVmFsdWVzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGNvbnN0IHNQYXRoID0gX2dldFBhdGgob0FjdGlvbkNvbnRleHQsIHNBY3Rpb25OYW1lKSxcblx0XHRtZXRhTW9kZWwgPSBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRzQWN0aW9uTmFtZVBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKVxuXHRcdFx0PyBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQCR1aTUub3ZlcmxvYWQvMFwiKVswXVxuXHRcdFx0OiBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvMFwiKVswXSxcblx0XHRhY3Rpb25OYW1lQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uTmFtZVBhdGgpLFxuXHRcdGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uLFxuXHRcdHNGcmFnbWVudE5hbWUgPSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FjdGlvblBhcmFtZXRlckRpYWxvZ1wiO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGxldCBhY3Rpb25QYXJhbWV0ZXJJbmZvczogQWN0aW9uUGFyYW1ldGVySW5mb1tdOyAvLyB0byBiZSBmaWxsZWQgYWZ0ZXIgZnJhZ21lbnQgKGZvciBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZykgaXMgbG9hZGVkLiBBY3R1YWxseSBvbmx5IG5lZWRlZCBkdXJpbmcgZGlhbG9nIHByb2Nlc3NpbmcsIGkuZS4gY291bGQgYmUgbW92ZWQgaW50byB0aGUgY29udHJvbGxlciBhbmQgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIGJ1dCBvbmx5IGFmdGVyIG1vdmluZyBhbGwgaGFuZGxlcnMgKGVzcC4gcHJlc3MgaGFuZGxlciBmb3IgYWN0aW9uIGJ1dHRvbikgdG8gY29udHJvbGxlci5cblxuXHRcdGNvbnN0IG1lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Y29uc3QgX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIgPSAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdGNvbnN0IGFsbE1lc3NhZ2VzID0gbWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIuJE5hbWVdKTtcblx0XHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHRcdCk7XG5cdFx0XHRtZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB7XG5cdFx0XHRoYW5kbGVDaGFuZ2U6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGRcblx0XHRcdFx0KSBhcyBBY3Rpb25QYXJhbWV0ZXJJbmZvO1xuXHRcdFx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHQvLyBhZGFwdCBpbmZvLiBQcm9taXNlIGlzIHJlc29sdmVkIHRvIHZhbHVlIG9yIHJlamVjdGVkIHdpdGggZXhjZXB0aW9uIGNvbnRhaW5pbmcgbWVzc2FnZVxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRkZWxldGUgYWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihtZXNzYWdlTWFuYWdlciwgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBhY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9GcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdGNvbnN0IG9QYXJhbWV0ZXJNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0JGRpc3BsYXlNb2RlOiB7fVxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNyZWF0ZWRGcmFnbWVudCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0XHRvRnJhZ21lbnQsXG5cdFx0XHRcdHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0YWN0aW9uTmFtZTogYWN0aW9uTmFtZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGVudGl0eVNldENvbnRleHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0YWN0aW9uTmFtZTogYWN0aW9uTmFtZUNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHQvLyBUT0RPOiBtb3ZlIHRoZSBkaWFsb2cgaW50byB0aGUgZnJhZ21lbnQgYW5kIG1vdmUgdGhlIGhhbmRsZXJzIHRvIHRoZSBvQ29udHJvbGxlclxuXHRcdFx0Y29uc3QgYUNvbnRleHRzOiBhbnlbXSA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0XHRcdGNvbnN0IGFGdW5jdGlvblBhcmFtczogYW55W10gPSBbXTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3Rcblx0XHRcdGxldCBvT3BlcmF0aW9uQmluZGluZzogYW55O1xuXHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKG9BcHBDb21wb25lbnQsIGFBY3Rpb25QYXJhbWV0ZXJzLCBvUGFyYW1ldGVyTW9kZWwsIHRydWUpO1xuXHRcdFx0Y29uc3Qgb0RpYWxvZ0NvbnRlbnQgPSAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IGNyZWF0ZWRGcmFnbWVudCxcblx0XHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXJcblx0XHRcdH0pKSBhcyBDb250cm9sO1xuXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcyA9IGFBY3Rpb25QYXJhbWV0ZXJzLm1hcCgoYWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gQ29yZS5ieUlkKGdlbmVyYXRlKFtcIkFQRF9cIiwgYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkpIGFzIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdFx0XHRjb25zdCBpc011bHRpVmFsdWUgPSBmaWVsZC5pc0EoXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRwYXJhbWV0ZXI6IGFjdGlvblBhcmFtZXRlcixcblx0XHRcdFx0XHRmaWVsZDogZmllbGQsXG5cdFx0XHRcdFx0aXNNdWx0aVZhbHVlOiBpc011bHRpVmFsdWVcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdFx0XHRsZXQgYWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IHRydWUsIC8vIHRvIGJlIHNldCB0byBmYWxzZSBpbiBjYXNlIG9mIHN1Y2Nlc3NmdWwgYWN0aW9uIGV4ZWN0aW9uXG5cdFx0XHRcdHJlc3VsdDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lXSksIHtcblx0XHRcdFx0dGl0bGU6IHNBY3Rpb25MYWJlbCB8fCByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIiksXG5cdFx0XHRcdGNvbnRlbnQ6IFtvRGlhbG9nQ29udGVudF0sXG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBlc2NhcGUgaGFuZGxlciBpcyBtZWFudCB0byBwb3NzaWJseSBzdXBwcmVzcyBvciBwb3N0cG9uZSBjbG9zaW5nIHRoZSBkaWFsb2cgb24gZXNjYXBlIChieSBjYWxsaW5nIFwicmVqZWN0XCIgb24gdGhlIHByb3ZpZGVkIG9iamVjdCwgb3IgXCJyZXNvbHZlXCIgb25seSB3aGVuXG5cdFx0XHRcdFx0Ly8gZG9uZSB3aXRoIGFsbCB0YXNrcyB0byBoYXBwZW4gYmVmb3JlIGRpYWxvZyBjYW4gYmUgY2xvc2VkKS4gSXQncyBub3QgaW50ZW5kZWQgdG8gZXhwbGljZXRseSBjbG9zZSB0aGUgZGlhbG9nIGhlcmUgKHRoYXQgaGFwcGVucyBhdXRvbWF0aWNhbGx5IHdoZW4gbm9cblx0XHRcdFx0XHQvLyBlc2NhcGVIYW5kbGVyIGlzIHByb3ZpZGVkIG9yIHRoZSByZXNvbHZlLWNhbGxiYWNrIGlzIGNhbGxlZCkgb3IgZm9yIG93biB3cmFwIHVwIHRhc2tzIChsaWtlIHJlbW92aW5nIHZhbGlkaXRpb24gbWVzc2FnZXMgLSB0aGlzIHNob3VsZCBoYXBwZW4gaW4gdGhlXG5cdFx0XHRcdFx0Ly8gYWZ0ZXJDbG9zZSkuXG5cdFx0XHRcdFx0Ly8gVE9ETzogTW92ZSB3cmFwIHVwIHRhc2tzIHRvIGFmdGVyQ2xvc2UsIGFuZCByZW1vdmUgdGhpcyBtZXRob2QgY29tcGxldGVseS4gVGFrZSBjYXJlIHRvIGFsc28gYWRhcHQgZW5kIGJ1dHRvbiBwcmVzcyBoYW5kbGVyIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRcdC8vIEN1cnJlbnRseSBvbmx5IHN0aWxsIG5lZWRlZCB0byBkaWZmZXJlbnRpYXRlIGNsb3NpbmcgZGlhbG9nIGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uICh1c2VzIHJlc29sdmUpIGZyb20gdXNlciBjYW5jZWxsYXRpb24gKHVzaW5nIHJlamVjdClcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0Ly9cdFx0cmVqZWN0KENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbihnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgc0FjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiT2tcIl0pLCB7XG5cdFx0XHRcdFx0dGV4dDogYklzQ3JlYXRlQWN0aW9uXG5cdFx0XHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OXCIpXG5cdFx0XHRcdFx0XHQ6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lKHJlc291cmNlTW9kZWwsIHNBY3Rpb25MYWJlbCwgc0FjdGlvbk5hbWUsIGVudGl0eVNldE5hbWUpLFxuXHRcdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdHByZXNzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIShhd2FpdCBfdmFsaWRhdGVQcm9wZXJ0aWVzKG1lc3NhZ2VNYW5hZ2VyLCBhY3Rpb25QYXJhbWV0ZXJJbmZvcywgcmVzb3VyY2VNb2RlbCkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci5sb2NrKG9EaWFsb2cpO1xuXG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogZHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIG1vdmUgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIERpYWxvZyAoU2ltcGxlRm9ybSkgdG8gbVBhcmFtZXRlcnMuYWN0aW9uUGFyYW1ldGVycyBzbyB0aGF0IHRoZXkgYXJlIGF2YWlsYWJsZSBpbiB0aGUgb3BlcmF0aW9uIGJpbmRpbmdzIGZvciBhbGwgY29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHRsZXQgdlBhcmFtZXRlclZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9QYXJhbWV0ZXJDb250ZXh0ID0gb09wZXJhdGlvbkJpbmRpbmcgJiYgb09wZXJhdGlvbkJpbmRpbmcuZ2V0UGFyYW1ldGVyQ29udGV4dCgpO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYU1WRkNvbnRlbnQgPSBvRGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKS5nZXRQcm9wZXJ0eShgLyR7YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWV9YCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGogaW4gYU1WRkNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzLnB1c2goYU1WRkNvbnRlbnRbal0uS2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBhS2V5VmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gb1BhcmFtZXRlckNvbnRleHQuZ2V0UHJvcGVydHkoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSB2UGFyYW1ldGVyVmFsdWU7IC8vIHdyaXRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgKHVlc2VyIGlucHV0ISkgaW50byB0aGUgbWV0YW1vZGVsID0+IHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIHVzZSBBY3Rpb25QYXJhbWV0ZXJJbmZvcyBpbnN0ZWFkLiBVc2VkIGluIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5sYWJlbCA9IHNBY3Rpb25MYWJlbDtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVBUE1BY3Rpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyByZXNvbHZlKGFSZXN1bHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmFpbHMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFGYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2FuY2VsbGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gcmVzb2x2ZShhUmVzdWx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2Zvck90aGVyTWVzc2FnZXMobVBhcmFtZXRlcnMuYkdyb3VwZWQpICE9PSAtMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0RpYWxvZykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKSAhPT0gLTFcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gV2h5IGlzIHRoaXMgaW1wbGVtZW50ZWQgYXMgY2FsbGJhY2s/IEFwcGFyZW50bHksIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJlZm9yZWhhbmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogcmVmYWN0b3IgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sOiBtUGFyYW1ldGVycy5jb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIGJhY2tlbmQgdmFsaWRhdGlvbiBlcnJvcihzPyksIG1lc3NhZ2Ugc2hhbGwgbm90IGJlIHNob3duIGluIG1lc3NhZ2UgZGlhbG9nIGJ1dCBuZXh0IHRvIHRoZSBmaWVsZCBvbiBwYXJhbWV0ZXIgZGlhbG9nLCB3aGljaCBzaG91bGRcblx0XHRcdFx0XHRcdFx0XHQvLyBzdGF5IG9wZW4gaW4gdGhpcyBjYXNlID0+IGluIHRoaXMgY2FzZSwgd2UgbXVzdCBub3QgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgY29udHJvbGxpbmcgdGhlIHBhcmFtZXRlciBkaWFsb2cuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW4gYWxsIG90aGVyIGNhc2VzIChlLmcuIG90aGVyIGJhY2tlbmQgZXJyb3JzIG9yIHVzZXIgY2FuY2VsbGF0aW9uKSwgdGhlIHByb21pc2UgY29udHJvbGxpbmcgdGhlIHBhcmFtZXRlciBkaWFsb2cgbmVlZHMgdG8gYmUgcmVqZWN0ZWQgdG8gYWxsb3dcblx0XHRcdFx0XHRcdFx0XHQvLyBjYWxsZXJzIHRvIHJlYWN0LiAoRXhhbXBsZTogSWYgY3JlYXRpb24gaW4gYmFja2VuZCBhZnRlciBuYXZpZ2F0aW9uIHRvIHRyYW5zaWVudCBjb250ZXh0IGZhaWxzLCBiYWNrIG5hdmlnYXRpb24gbmVlZHMgdG8gYmUgdHJpZ2dlcmVkKVxuXHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IFJlZmFjdG9yIHRvIHNlcGFyYXRlIGRpYWxvZyBoYW5kbGluZyBmcm9tIGJhY2tlbmQgcmVxdWVzdCBpc3RlYWQgb2YgdGFraW5nIGRlY2lzaW9uIGJhc2VkIG9uIG1lc3NhZ2UgaGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGRvIG5vdGhpbmcsIGRvIG5vdCByZWplY3QgcHJvbWlzZSBoZXJlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdlIGRvIG5vdCBjbG9zZSB0aGUgQVBNIGRpYWxvZyBpZiB1c2VyIGVudGVycyBhIHdyb25nIHZhbHVlIGluIG9mIHRoZSBmaWVsZHMgdGhhdCByZXN1bHRzIGluIGFuIGVycm9yIGZyb20gdGhlIGJhY2tlbmQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSB1c2VyIGNhbiBjbG9zZSB0aGUgbWVzc2FnZSBkaWFsb2cgYW5kIHRoZSBBUE0gZGlhbG9nIHdvdWxkIHN0aWxsIGJlIG9wZW4gb24gd2hpY2ggaGUgY291bGQgZW50ZXIgYSBuZXcgdmFsdWUgYW5kIHRyaWdnZXIgdGhlIGFjdGlvbiBhZ2Fpbi5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRWFybGllciB3ZSB3ZXJlIHJlamVjdGluZyB0aGUgcHJvbWlzZSBvbiBlcnJvciBoZXJlLCBhbmQgdGhlIGNhbGwgc3RhY2sgd2FzIGRlc3Ryb3llZCBhcyB0aGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgYW5kIHJldHVybmVkIHRvIEVkaXRGbG93IGludm9rZSBhY3Rpb24uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEJ1dCBzaW5jZSB0aGUgQVBNIGRpYWxvZyB3YXMgc3RpbGwgb3BlbiwgYSBuZXcgcHJvbWlzZSB3YXMgcmVzb2x2ZWQgaW4gY2FzZSB0aGUgdXNlciByZXRyaWVkIHRoZSBhY3Rpb24gYW5kIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQsIGJ1dCB0aGUgbmF2aWdhdGlvbiB0byBvYmplY3QgcGFnZSB3YXMgbm90IHRha2luZyBwbGFjZS5cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIiksXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGNhbmNlbCBidXR0b24gc2hvdWxkIGp1c3QgY2xvc2UgdGhlIGRpYWxvZyAoc2ltaWxhciB0byB1c2luZyBlc2NhcGUpLiBBbGwgd3JhcCB1cCB0YXNrcyBzaG91bGQgYmUgbW92ZWQgdG8gYWZ0ZXJDbG9zZS5cblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdC8vIHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQvLyBUT0RPOiBiZWZvcmVPcGVuIGlzIGp1c3QgYW4gZXZlbnQsIGkuZS4gbm90IHdhaXRpbmcgZm9yIHRoZSBQcm9taXNlIHRvIGJlIHJlc29sdmVkLiBDaGVjayBpZiB0YXNrcyBvZiB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nXG5cdFx0XHRcdC8vIC0gaWYgeWVzLCB0aGV5IG5lZWQgdG8gYmUgbW92ZWQgb3V0c2lkZS5cblx0XHRcdFx0Ly8gQXNzdW1wdGlvbjogU29tZXRpbWVzIGRpYWxvZyBjYW4gYmUgc2VlbiB3aXRob3V0IGFueSBmaWVsZHMgZm9yIGEgc2hvcnQgdGltZSAtIG1heWJlIHRoaXMgaXMgY2F1c2VkIGJ5IHRoaXMgYXN5bmNocm9uaXR5XG5cdFx0XHRcdGJlZm9yZU9wZW46IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIGV2ZW50IGZvciBhY3Rpb25XcmFwcGVyIGFzIG9FdmVudC5vU291cmNlIGdldHMgbG9zdCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBiZWZvcmVPcGVuIGV2ZW50IGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBvQ2xvbmVFdmVudCA9IE9iamVjdC5hc3NpZ24oe30sIG9FdmVudCk7XG5cblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRjb25zdCBnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0RpYWxvZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IG9BY3Rpb25Db250ZXh0LnNQYXRoICYmIG9BY3Rpb25Db250ZXh0LnNQYXRoLnNwbGl0KFwiL0BcIilbMF0sXG5cdFx0XHRcdFx0XHRcdHNEZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRcdFx0XHRgJHtzQWN0aW9uUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlZmF1bHRWYWx1ZXNGdW5jdGlvbmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2cgPSBhc3luYyBmdW5jdGlvbiAoc0JpbmRpbmdQYXJhbWV0ZXI/OiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNCb3VuZEZ1bmN0aW9uTmFtZSA9IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbigpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJlZmlsbFBhcmFtZXRlciA9IGFzeW5jIGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBhbnksIHZQYXJhbURlZmF1bHRWYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtRGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDAgJiYgdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgdlBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtVmFsdWUgPSBhd2FpdCBvT3BlcmF0aW9uQmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldFBhcmFtZXRlckNvbnRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcXVlc3RQcm9wZXJ0eSh2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGFDb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzUGF0aEZvckNvbnRleHQgPSB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHNQYXRoRm9yQ29udGV4dC5pbmRleE9mKGAke3NCaW5kaW5nUGFyYW1ldGVyfS9gKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c1BhdGhGb3JDb250ZXh0ID0gc1BhdGhGb3JDb250ZXh0LnJlcGxhY2UoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGFDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0c1tpXS5nZXRQcm9wZXJ0eShzUGF0aEZvckNvbnRleHQpICE9PSB2UGFyYW1WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJOb1Bvc3NpYmxlVmFsdWU6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtVmFsdWUgfTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBzUGFyYW1OYW1lLCBtUGFyYW1ldGVycy5hY3Rpb25OYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbURlZmF1bHRWYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVyTW9kZWwgJiYgKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAyOiBUaGVyZSBpcyBubyBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvbiAoPT4gbG9vayBpbnRvIHRoZSBGTFAgVXNlciBEZWZhdWx0cylcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHNQYXJhbU5hbWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0RpYWxvZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLCBzUGFyYW1OYW1lKSArIFwiQFwiLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiYgb1BhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXTsgLy8gZWl0aGVyIHsgJFBhdGg6ICdzb21lUGF0aCcgfSBvciAnc29tZVN0cmluZydcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gW107XG5cdFx0XHRcdFx0XHRsZXQgc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRzUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoc1BhcmFtTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUucHVzaChwcmVmaWxsUGFyYW1ldGVyKHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgc0JvdW5kRnVuY3Rpb25OYW1lLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHNCb3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtcy5wdXNoKGNhbGxCb3VuZEZ1bmN0aW9uKHNCb3VuZEZ1bmN0aW9uTmFtZSwgYUNvbnRleHRzW2ldLCBtUGFyYW1ldGVycy5tb2RlbCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBhUHJlZmlsbFBhcmFtUHJvbWlzZXMgPSBQcm9taXNlLmFsbChhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0XHRcdGxldCBhRXhlY0Z1bmN0aW9uUHJvbWlzZXM6IFByb21pc2U8YW55W10+ID0gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0XHRcdGxldCBvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZTtcblx0XHRcdFx0XHRcdGlmIChhRnVuY3Rpb25QYXJhbXMgJiYgYUZ1bmN0aW9uUGFyYW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0YUV4ZWNGdW5jdGlvblByb21pc2VzID0gUHJvbWlzZS5hbGwoYUZ1bmN0aW9uUGFyYW1zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc01vZHVsZSA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0LnN1YnN0cmluZygwLCBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRcdHNGdW5jdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UgPSBGUE1IZWxwZXIuYWN0aW9uV3JhcHBlcihvQ2xvbmVFdmVudCwgc01vZHVsZSwgc0Z1bmN0aW9uTmFtZSwge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzOiBhQ29udGV4dHNcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0XHRcdFx0XHRhUHJlZmlsbFBhcmFtUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0YUV4ZWNGdW5jdGlvblByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWU6IGFueSA9IGFQcm9taXNlc1swXTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25QYXJhbXMgPSBhUHJvbWlzZXNbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCA9IGFQcm9taXNlc1syXTtcblx0XHRcdFx0XHRcdFx0bGV0IHNEaWFsb2dQYXJhbU5hbWU6IHN0cmluZztcblxuXHRcdFx0XHRcdFx0XHQvLyBGaWxsIHRoZSBkaWFsb2cgd2l0aCB0aGUgZWFybGllciBkZXRlcm1pbmVkIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZGlmZmVyZW50IHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c0RpYWxvZ1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdC8vIFBhcmFtZXRlciB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIGNhbGwgb2YgaW52b2tlQWN0aW9uIG92ZXJydWxlIG90aGVyIHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB2UGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSA9IGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KT8udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCAmJiBvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QuaGFzT3duUHJvcGVydHkoc0RpYWxvZ1BhcmFtTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdFtzRGlhbG9nUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXSAmJiBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLCBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0udmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGRlZmF1bHQgdmFsdWUgaGFkIG5vdCBiZWVuIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkdWUgdG8gZGlmZmVyZW50IGNvbnRleHRzLCB3ZSBkbyBub3RoaW5nIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNCb3VuZEZ1bmN0aW9uTmFtZSAmJiAhY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLmJOb1Bvc3NpYmxlVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlIChqIDwgYUNvbnRleHRzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2ogKyAxXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vcGFyYW0gdmFsdWVzIGFyZSBhbGwgdGhlIHNhbWU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmdW5jdGlvblBhcmFtc1swXSAmJiBmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9Pbmx5IG9uZSBjb250ZXh0LCB0aGVuIHRoZSBkZWZhdWx0IHBhcmFtIHZhbHVlcyBhcmUgdG8gYmUgdmVyaWZpZWQgZnJvbSB0aGUgZnVuY3Rpb246XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBiRXJyb3JGb3VuZCA9IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1ZhbHVlLmJMYXRlUHJvcGVydHlFcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvLyBJZiBhdCBsZWFzdCBvbmUgRGVmYXVsdCBQcm9wZXJ0eSBpcyBhIExhdGUgUHJvcGVydHkgYW5kIGFuIGVUYWcgZXJyb3Igd2FzIHJhaXNlZC5cblx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzVGV4dCwgeyBjb250ZW50V2lkdGg6IFwiMjVlbVwiIH0gYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmbkFzeW5jQmVmb3JlT3BlbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGFyYW1ldGVyID0gYVBhcmFtZXRlcnNbMF0gJiYgYVBhcmFtZXRlcnNbMF0uJE5hbWU7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdCA9IGF3YWl0IGFDb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoc0JpbmRpbmdQYXJhbWV0ZXIsIG9Db250ZXh0T2JqZWN0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coc0JpbmRpbmdQYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRhd2FpdCBmbkFzeW5jQmVmb3JlT3BlbigpO1xuXG5cdFx0XHRcdFx0Ly8gYWRkaW5nIGRlZmF1bHRlZCB2YWx1ZXMgb25seSBoZXJlIGFmdGVyIHRoZXkgYXJlIG5vdCBzZXQgdG8gdGhlIGZpZWxkc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ/IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIE11bHRpVmFsdWVGaWVsZCkuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0XHQ6IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiB0aGUgZGlhbG9nIGlzIGNhbmNlbGxlZCwgbWVzc2FnZXMgbmVlZCB0byBiZSByZW1vdmVkIGluIGNhc2UgdGhlIHNhbWUgYWN0aW9uIHNob3VsZCBiZSBleGVjdXRlZCBhZ2FpblxuXHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmZvckVhY2goX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIpO1xuXHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25SZXN1bHQuZGlhbG9nQ2FuY2VsbGVkKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoYWN0aW9uUmVzdWx0LnJlc3VsdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1QYXJhbWV0ZXJzLm9EaWFsb2cgPSBvRGlhbG9nO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0XHRjb25zdCBvTVZGTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob01WRk1vZGVsLCBcIm12ZnZpZXdcIik7XG5cblx0XHRcdC8qIEV2ZW50IG5lZWRlZCBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgb2YgdmFsaWQgY2hhbmdlZCBmaWVsZCAqL1xuXHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdGlmIChhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwiaXRlbXNcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbz8uZmllbGQ/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKCgpID0+IHtcblx0XHRcdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc0FjdGlvblBhdGggPSBgJHtzQWN0aW9uTmFtZX0oLi4uKWA7XG5cdFx0XHRpZiAoIWFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0c0FjdGlvblBhdGggPSBgLyR7c0FjdGlvblBhdGh9YDtcblx0XHRcdH1cblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBzQWN0aW9uUGF0aFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1BhcmVudENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBwYXJlbnQgY29udHJvbCBzcGVjaWZpZWQgYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50XG5cdFx0XHRcdG9QYXJlbnRDb250cm9sLmFkZERlcGVuZGVudChvRGlhbG9nKTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRGlhbG9nLnNldEJpbmRpbmdDb250ZXh0KGFDb250ZXh0c1swXSk7IC8vIHVzZSBjb250ZXh0IG9mIGZpcnN0IHNlbGVjdGVkIGxpbmUgaXRlbVxuXHRcdFx0fVxuXHRcdFx0b09wZXJhdGlvbkJpbmRpbmcgPSBvRGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55LCBjb250ZXh0cz86IGFueSwgb0JvdW5kQWN0aW9uPzogYW55KSB7XG5cdGNvbnN0IHZBY3Rpb25Dcml0aWNhbCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbGApO1xuXHRsZXQgc0NyaXRpY2FsUGF0aCA9IHZBY3Rpb25Dcml0aWNhbCAmJiB2QWN0aW9uQ3JpdGljYWwuJFBhdGg7XG5cdGlmICghc0NyaXRpY2FsUGF0aCkge1xuXHRcdC8vIHRoZSBzdGF0aWMgdmFsdWUgc2NlbmFyaW8gZm9yIGlzQWN0aW9uQ3JpdGljYWxcblx0XHRyZXR1cm4gISF2QWN0aW9uQ3JpdGljYWw7XG5cdH1cblx0Y29uc3QgYUJpbmRpbmdQYXJhbXMgPSBvQm91bmRBY3Rpb24gJiYgb0JvdW5kQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIiksXG5cdFx0YVBhdGhzID0gc0NyaXRpY2FsUGF0aCAmJiBzQ3JpdGljYWxQYXRoLnNwbGl0KFwiL1wiKSxcblx0XHRiQ29uZGl0aW9uID1cblx0XHRcdGFCaW5kaW5nUGFyYW1zICYmIGFCaW5kaW5nUGFyYW1zLmxlbmd0aCAmJiB0eXBlb2YgYUJpbmRpbmdQYXJhbXMgPT09IFwib2JqZWN0XCIgJiYgc0NyaXRpY2FsUGF0aCAmJiBjb250ZXh0cyAmJiBjb250ZXh0cy5sZW5ndGg7XG5cdGlmIChiQ29uZGl0aW9uKSB7XG5cdFx0Ly9pbiBjYXNlIGJpbmRpbmcgcGF0YW1ldGVycyBhcmUgdGhlcmUgaW4gcGF0aCBuZWVkIHRvIHJlbW92ZSBlZzogLSBfaXQvaXNWZXJpZmllZCA9PiBuZWVkIHRvIHJlbW92ZSBfaXQgYW5kIHRoZSBwYXRoIHNob3VsZCBiZSBpc1ZlcmlmaWVkXG5cdFx0YUJpbmRpbmdQYXJhbXMuZmlsdGVyKGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYVBhdGhzICYmIGFQYXRocy5pbmRleE9mKG9QYXJhbXMuJE5hbWUpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0YVBhdGhzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c0NyaXRpY2FsUGF0aCA9IGFQYXRocy5qb2luKFwiL1wiKTtcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9IGVsc2UgaWYgKHNDcml0aWNhbFBhdGgpIHtcblx0XHQvL2lmIHNjZW5hcmlvIGlzIHBhdGggYmFzZWQgcmV0dXJuIHRoZSBwYXRoIHZhbHVlXG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLCBzQWN0aW9uTGFiZWw6IHN0cmluZywgc0FjdGlvbk5hbWU6IHN0cmluZywgc0VudGl0eVNldE5hbWU6IHN0cmluZykge1xuXHRsZXQgYm91bmRBY3Rpb25OYW1lOiBhbnkgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0Y29uc3QgYUFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpO1xuXHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5kZXhPZihcIi5cIikgPj0gMCA/IGFBY3Rpb25OYW1lW2FBY3Rpb25OYW1lLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBzRW50aXR5U2V0TmFtZSA/IGAke3NFbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0Y29uc3Qgc0tleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0Y29uc3QgYlJlc291cmNlS2V5RXhpc3RzID0gcmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7c0tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKTtcblx0aWYgKHNBY3Rpb25MYWJlbCkge1xuXHRcdGlmIChiUmVzb3VyY2VLZXlFeGlzdHMpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0fSBlbHNlIGlmIChyZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtzS2V5fXwke3NFbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHNLZXksIHVuZGVmaW5lZCwgYCR7c0VudGl0eVNldE5hbWV9YCk7XG5cdFx0fSBlbHNlIGlmIChyZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtzS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHNLZXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc0FjdGlvbkxhYmVsO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMoXG5cdG9BY3Rpb246IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YkdldEJvdW5kQ29udGV4dDogYm9vbGVhbixcblx0c0dyb3VwSWQ6IHN0cmluZyxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyIHwgdW5kZWZpbmVkLFxuXHRpQ29udGV4dExlbmd0aDogbnVtYmVyIHwgbnVsbCxcblx0Y3VycmVudF9jb250ZXh0X2luZGV4OiBudW1iZXIgfCBudWxsLFxuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTogRnVuY3Rpb24sXG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3Q6IEZ1bmN0aW9uLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0bGV0IG9BY3Rpb25Qcm9taXNlLFxuXHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IHRydWU7XG5cdGlmIChtUGFyYW1ldGVycykge1xuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlID0gaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU7XG5cdH1cblx0aWYgKGJHZXRCb3VuZENvbnRleHQpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5ID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChzTWV0YVBhdGgpO1xuXHRcdGlmIChvUHJvcGVydHkgJiYgb1Byb3BlcnR5WzBdPy4ka2luZCAhPT0gXCJBY3Rpb25cIikge1xuXHRcdFx0Ly9kbyBub3QgZW5hYmxlIHRoZSBzdHJpY3QgaGFuZGxpbmcgaWYgaXRzIG5vdCBhbiBhY3Rpb25cblx0XHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmICghYkVuYWJsZVN0cmljdEhhbmRsaW5nKSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHQob3BlcmF0aW9uc0hlbHBlciBhcyBhbnkpLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0OiBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdChvcGVyYXRpb25zSGVscGVyIGFzIGFueSkuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbigpIHtcblx0bGV0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBhbnkgPSBudWxsLFxuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3Q6IGFueSA9IG51bGw7XG5cdGNvbnN0IG9Mb2NhbEFjdGlvblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdH0pO1xuXG5cdHJldHVybiB7IG9Mb2NhbEFjdGlvblByb21pc2UsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrZm9yT3RoZXJNZXNzYWdlcyhpc0NoYW5nZVNldDogYm9vbGVhbikge1xuXHRpZiAoaXNDaGFuZ2VTZXQpIHtcblx0XHRjb25zdCBhTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpO1xuXHRcdHJldHVybiBhTWVzc2FnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBfZXhlY3V0ZUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRvUGFyZW50Q29udHJvbD86IGFueSxcblx0bWVzc2FnZUhhbmRsZXI/OiBNZXNzYWdlSGFuZGxlcixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0Y29uc3Qgb01vZGVsID0gbVBhcmFtZXRlcnMubW9kZWw7XG5cdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMgfHwgW107XG5cdGNvbnN0IHNBY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuYWN0aW9uTmFtZTtcblx0Y29uc3QgZm5PblN1Ym1pdHRlZCA9IG1QYXJhbWV0ZXJzLmZuT25TdWJtaXR0ZWQ7XG5cdGNvbnN0IGZuT25SZXNwb25zZSA9IG1QYXJhbWV0ZXJzLmZuT25SZXNwb25zZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRsZXQgb0FjdGlvbjogYW55O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIFRPRE86IHJlZmFjdG9yIHRvIGRpcmVjdCB1c2Ugb2YgUHJvbWlzZS5hbGxTZXR0bGVkXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgbUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5iR3JvdXBlZDtcblx0XHRcdGNvbnN0IGJHZXRCb3VuZENvbnRleHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0O1xuXHRcdFx0Y29uc3QgYUFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRsZXQgc0dyb3VwSWQ6IHN0cmluZztcblx0XHRcdGNvbnN0IG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0ID0gY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbigpO1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdGNvbnN0IGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlOiBhbnkgPSBbXTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gIWJHcm91cGVkID8gYCRhdXRvLiR7Y3VycmVudF9jb250ZXh0X2luZGV4fWAgOiBhY3Rpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMucmVxdWVzdFNpZGVFZmZlY3RzID0gZm5SZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChcblx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0b1NpZGVFZmZlY3QsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSxcblx0XHRcdFx0XHRvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0LFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uQ29udGV4dDogYW55LCBjdXJyZW50X2NvbnRleHRfaW5kZXg6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgaUNvbnRleHRMZW5ndGg6IGFueSkge1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogYW55ID0gW107XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlLnB1c2gob2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3Qub0xvY2FsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVDaGFuZ2VzZXQoKSB7XG5cdFx0XHRcdGNvbnN0IGFDaGFuZ2VTZXRMb2NhbFByb21pc2VzID0gW10gYXMgYW55O1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoIDw9IDEgPyBudWxsIDogaSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvdGhlckVycm9yTWVzc2FnZUluZGV4ID0gY2hlY2tmb3JPdGhlck1lc3NhZ2VzKHRydWUpO1xuXHRcdFx0XHRcdFx0aWYgKG90aGVyRXJyb3JNZXNzYWdlSW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9wZXJhdGlvbnNIZWxwZXIucmVuZGVyTWVzc2FnZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaFByb21pc2UpIHtcblx0XHRcdFx0XHRcdFx0XHRzaFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlTW9kZWwgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VNb2RlbC5zZXREYXRhKG1lc3NhZ2VzSW5Nb2RlbC5jb25jYXQoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIlJldHJpZ2dlcmluZyBvZiBzdHJpY3QgaGFuZGxpbmcgYWN0aW9ucyBmYWlsZWRcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoY29udGV4dHNUb0V4ZWN1dGU6IENvbnRleHRbXSkge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dDogYW55LCBhY3Rpb25JbmRleDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IENvbnRleHQsIGlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQgKyAxLCBhQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGF3YWl0IG9wZXJhdGlvbnNIZWxwZXIucmVuZGVyTWVzc2FnZVZpZXcoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYkdyb3VwZWQpIHtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiLCBlbnN1cmUgdGhhdCBlYWNoIGFjdGlvbiBhbmQgbWF0Y2hpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBuZXh0IHNldCBpcyBzdWJtaXR0ZWQuIFdvcmthcm91bmQgdW50aWwgSlNPTiBiYXRjaCBpcyBhdmFpbGFibGUuXG5cdFx0XHRcdC8vIEFsbG93IGFsc28gZm9yIExpc3QgUmVwb3J0LlxuXHRcdFx0XHRmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoYUNvbnRleHRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZuRXhlY3V0ZUNoYW5nZXNldCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmbkhhbmRsZVJlc3VsdHMoKSB7XG5cdFx0XHRcdC8vIFByb21pc2UuYWxsU2V0dGxlZCB3aWxsIG5ldmVyIGJlIHJlamVjdGVkLiBIb3dldmVyLCBlc2xpbnQgcmVxdWlyZXMgZWl0aGVyIGNhdGNoIG9yIHJldHVybiAtIHRodXMgd2UgcmV0dXJuIHRoZSByZXN1bHRpbmcgUHJvbWlzZSBhbHRob3VnaCBubyBvbmUgd2lsbCB1c2UgaXQuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUFjdGlvblByb21pc2VzKS50aGVuKHJlc29sdmUpO1xuXHRcdFx0fVxuXHRcdH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0KFxuXHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdH1cblx0XHRcdCkoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzQWN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBvQWN0aW9uUHJvbWlzZSA9IG9BY3Rpb24uZXhlY3V0ZShcblx0XHRcdHNHcm91cElkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KG9wZXJhdGlvbnNIZWxwZXIgYXMgYW55KS5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdHsgbGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLCBtb2RlbDogb01vZGVsIH0sXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0KVxuXHRcdCk7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChjdXJyZW50UHJvbWlzZVZhbHVlOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIEhlcmUgd2UgZW5zdXJlIHRoYXQgd2UgcmV0dXJuIHRoZSByZXNwb25zZSB3ZSBnb3QgZnJvbSBhbiB1bmJvdW5kIGFjdGlvbiB0byB0aGVcblx0XHRcdFx0Ly8gY2FsbGVyIEJDUCA6IDIyNzAxMzkyNzlcblx0XHRcdFx0aWYgKGN1cnJlbnRQcm9taXNlVmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQ/LigpPy5nZXRPYmplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGFjdGlvbiBcIiArIHNBY3Rpb25OYW1lLCBvRXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogYW55LCBzQWN0aW9uTmFtZTogYW55KSB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogYW55XG4pOiBib29sZWFuIHtcblx0aWYgKHBhcmFtZXRlclZhbHVlcykge1xuXHRcdC8vIElmIHNob3dEaWFsb2cgaXMgZmFsc2UgYnV0IHRoZXJlIGFyZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGludm9rZUFjdGlvbiBjYWxsLCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdmFsdWVzIGhhdmUgYmVlblxuXHRcdC8vIHByb3ZpZGVkIGZvciBhbGwgb2YgdGhlbVxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIgJiZcblx0XHRcdFx0IXBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFjdGlvblBhcmFtZXRlci4kTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNDcmVhdGVBY3Rpb24gJiYgc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHQvLyBJZiBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBkdXJpbmcgYXBwbGljYXRpb24gbGF1bmNoLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzZXQgaXMgY29tcGxldGVcblx0XHQvLyBJZiBub3QsIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHN0aWxsIG5lZWRzIHRvIGJlIHNob3duLlxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQ6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgc0dyb3VwSWQ6IGFueSwgYUxvY2FsUHJvbWlzZT86IGFueSkge1xuXHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0bGV0IG9Mb2NhbFByb21pc2U7XG5cdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc1RyaWdnZXJBY3Rpb246IGFueSkge1xuXHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0Ly8gYXMgd2UgbW92ZSB0aGUgbWVzc2FnZXMgcmVxdWVzdCB0byBQT1NUICRzZWxlY3Qgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgYXJyYXlcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRpZiAoYUxvY2FsUHJvbWlzZSkge1xuXHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdH1cblx0XHRvTG9jYWxQcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMsXG5cdGdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWU6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvbixcblx0Y2hlY2tmb3JPdGhlck1lc3NhZ2VzOiBjaGVja2Zvck90aGVyTWVzc2FnZXNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wZXJhdGlvbnM7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztFQStCQSxNQUFNQSxTQUFTLEdBQUdDLFNBQVMsQ0FBQ0QsU0FBUztJQUNwQ0Usa0JBQWtCLEdBQUdELFNBQVMsQ0FBQ0Msa0JBQWtCO0VBQ2xELE1BQU1DLE1BQU0sR0FBSUMsVUFBVSxDQUFTRCxNQUFNOztFQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRSxlQUFlLENBQ3ZCQyxXQUFtQixFQUNuQkMsUUFBYSxFQUNiQyxNQUFXLEVBQ1hDLGFBQTJCLEVBQzNCQyxXQUFnQixFQUNoQkMsdUJBQWlELEVBQ2hEO0lBQ0QsSUFBSSxDQUFDQSx1QkFBdUIsRUFBRTtNQUM3QkEsdUJBQXVCLEdBQUc7UUFDekJDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCQyw2QkFBNkIsRUFBRSxFQUFFO1FBQ2pDQyxzQkFBc0IsRUFBRSxFQUFFO1FBQzFCQyw2QkFBNkIsRUFBRSxFQUFFO1FBQ2pDQyxvQkFBb0IsRUFBRSxFQUFFO1FBQ3hCQyxtQkFBbUIsRUFBRTtNQUN0QixDQUFDO0lBQ0Y7SUFDQSxJQUFJLENBQUNWLFFBQVEsSUFBSUEsUUFBUSxDQUFD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