@sapui5/sap.fe.core 1.100.0 → 1.101.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 (250) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +43 -24
  4. package/src/sap/fe/core/AnnotationHelper.ts +43 -37
  5. package/src/sap/fe/core/AppComponent.js +20 -27
  6. package/src/sap/fe/core/AppComponent.ts +19 -25
  7. package/src/sap/fe/core/AppStateHandler.js +5 -5
  8. package/src/sap/fe/core/AppStateHandler.ts +2 -2
  9. package/src/sap/fe/core/BaseController.js +9 -9
  10. package/src/sap/fe/core/BaseController.ts +3 -4
  11. package/src/sap/fe/core/CommonUtils.js +74 -17
  12. package/src/sap/fe/core/CommonUtils.ts +181 -110
  13. package/src/sap/fe/core/ExtensionAPI.js +11 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +22 -30
  15. package/src/sap/fe/core/PageController.js +12 -11
  16. package/src/sap/fe/core/PageController.ts +34 -34
  17. package/src/sap/fe/core/RouterProxy.js +36 -24
  18. package/src/sap/fe/core/RouterProxy.ts +36 -22
  19. package/src/sap/fe/core/TemplateComponent.js +193 -118
  20. package/src/sap/fe/core/TemplateComponent.ts +105 -117
  21. package/src/sap/fe/core/TemplateModel.js +6 -8
  22. package/src/sap/fe/core/TemplateModel.ts +2 -2
  23. package/src/sap/fe/core/TransactionHelper.js +33 -18
  24. package/src/sap/fe/core/TransactionHelper.ts +172 -153
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +31 -17
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +52 -45
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +16 -6
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +13 -3
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +9 -7
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +33 -31
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +53 -56
  32. package/src/sap/fe/core/actions/draft.js +308 -166
  33. package/src/sap/fe/core/actions/draft.ts +177 -74
  34. package/src/sap/fe/core/actions/messageHandling.js +25 -13
  35. package/src/sap/fe/core/actions/messageHandling.ts +49 -39
  36. package/src/sap/fe/core/actions/operations.js +4 -4
  37. package/src/sap/fe/core/actions/operations.ts +3 -2
  38. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  39. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  40. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  41. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  42. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  43. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  44. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  45. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  46. package/src/sap/fe/core/controllerextensions/EditFlow.js +506 -245
  47. package/src/sap/fe/core/controllerextensions/EditFlow.ts +395 -275
  48. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  49. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  50. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +15 -17
  51. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +98 -96
  52. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +15 -15
  53. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +60 -53
  54. package/src/sap/fe/core/controllerextensions/InternalRouting.js +94 -42
  55. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +114 -91
  56. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  57. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  58. package/src/sap/fe/core/controllerextensions/MassEdit.js +12 -12
  59. package/src/sap/fe/core/controllerextensions/MassEdit.ts +8 -9
  60. package/src/sap/fe/core/controllerextensions/MessageHandler.js +13 -25
  61. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +18 -28
  62. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  63. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  64. package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
  65. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -18
  66. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  67. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  68. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  69. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  70. package/src/sap/fe/core/controllerextensions/Share.js +16 -16
  71. package/src/sap/fe/core/controllerextensions/Share.ts +32 -32
  72. package/src/sap/fe/core/controllerextensions/SideEffects.js +14 -14
  73. package/src/sap/fe/core/controllerextensions/SideEffects.ts +62 -63
  74. package/src/sap/fe/core/controllerextensions/ViewState.js +17 -31
  75. package/src/sap/fe/core/controllerextensions/ViewState.ts +93 -102
  76. package/src/sap/fe/core/controls/Any.js +28 -0
  77. package/src/sap/fe/core/controls/Any.ts +30 -0
  78. package/src/sap/fe/core/controls/CommandExecution.js +38 -15
  79. package/src/sap/fe/core/controls/CommandExecution.ts +20 -20
  80. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  81. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.js +73 -36
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +22 -32
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +116 -66
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +121 -67
  89. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  91. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  92. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  94. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +92 -37
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +32 -35
  97. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  98. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +7 -6
  107. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +15 -14
  108. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  109. package/src/sap/fe/core/converters/ManifestSettings.ts +5 -1
  110. package/src/sap/fe/core/converters/annotations/DataField.js +1 -2
  111. package/src/sap/fe/core/converters/annotations/DataField.ts +3 -4
  112. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
  113. package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
  114. package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
  115. package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
  116. package/src/sap/fe/core/converters/controls/Common/Form.js +5 -5
  117. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  119. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  120. package/src/sap/fe/core/converters/controls/Common/Table.js +245 -112
  121. package/src/sap/fe/core/converters/controls/Common/Table.ts +305 -193
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -5
  123. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -7
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +72 -43
  125. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +134 -100
  126. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  127. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  128. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  129. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  130. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +3 -7
  138. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  139. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  140. package/src/sap/fe/core/formatters/TableFormatter.js +2 -2
  141. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
  142. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  143. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  144. package/src/sap/fe/core/fpm/Component.js +46 -17
  145. package/src/sap/fe/core/fpm/Component.ts +11 -16
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  148. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  149. package/src/sap/fe/core/helpers/ClassSupport.ts +314 -237
  150. package/src/sap/fe/core/helpers/MassEditHelper.js +173 -39
  151. package/src/sap/fe/core/helpers/MassEditHelper.ts +236 -132
  152. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  153. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  154. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  155. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  156. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  157. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  158. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  159. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  160. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
  161. package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
  162. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  163. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  164. package/src/sap/fe/core/library.js +4 -5
  165. package/src/sap/fe/core/library.ts +17 -17
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  168. package/src/sap/fe/core/messagebundle.properties +23 -8
  169. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  170. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  171. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  172. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  173. package/src/sap/fe/core/messagebundle_cy.properties +5 -3
  174. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  175. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  176. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  177. package/src/sap/fe/core/messagebundle_en.properties +2 -0
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  185. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_fr.properties +4 -2
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +5 -3
  188. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  189. package/src/sap/fe/core/messagebundle_hr.properties +5 -3
  190. package/src/sap/fe/core/messagebundle_hu.properties +2 -0
  191. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_iw.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  197. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_lv.properties +5 -3
  199. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  200. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_pl.properties +5 -3
  203. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ro.properties +5 -3
  206. package/src/sap/fe/core/messagebundle_ru.properties +5 -3
  207. package/src/sap/fe/core/messagebundle_sh.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_sv.properties +3 -1
  211. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_uk.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +5 -3
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +5 -3
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  218. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  220. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -7
  222. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -5
  223. package/src/sap/fe/core/services/NavigationServiceFactory.js +4 -4
  224. package/src/sap/fe/core/services/NavigationServiceFactory.ts +1 -1
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  226. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  227. package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -62
  228. package/src/sap/fe/core/services/RoutingServiceFactory.ts +51 -42
  229. package/src/sap/fe/core/services/ShellServicesFactory.js +69 -29
  230. package/src/sap/fe/core/services/ShellServicesFactory.ts +26 -29
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  232. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +8 -8
  234. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +6 -17
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  236. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  237. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  238. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  241. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  242. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  243. package/src/sap/fe/core/templating/PropertyHelper.js +15 -1
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +30 -23
  245. package/src/sap/fe/core/templating/UIFormatters.js +121 -21
  246. package/src/sap/fe/core/templating/UIFormatters.ts +134 -49
  247. package/src/sap/fe/core/type/Email.js +26 -8
  248. package/src/sap/fe/core/type/Email.ts +8 -7
  249. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  250. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
@@ -194,7 +194,6 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
194
194
 
195
195
  _appendTemplate("{".concat(valueIndex, "}"));
196
196
 
197
- relatedProperties.visualSettingsToBeExcluded = textAnnotationPropertyPath;
198
197
  break;
199
198
 
200
199
  case "Description":
@@ -396,4 +395,4 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
396
395
  _exports.getDataFieldDataType = getDataFieldDataType;
397
396
  return _exports;
398
397
  }, false);
399
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFGaWVsZC50cyJdLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIlZhbHVlIiwiJHRhcmdldCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwidW5kZWZpbmVkIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHkiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZSIsInRhcmdldCIsIm5hdmlnYXRpb25QYXRoUHJlZml4IiwidGFibGVUeXBlIiwicmVsYXRlZFByb3BlcnRpZXMiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiX3R5cGUiLCJoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwicHJvcGVydGllcyIsImFkZFVuaXRJblRlbXBsYXRlIiwiX3B1c2hVbmlxdWUiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJfYXBwZW5kVGVtcGxhdGUiLCJleHBvcnRTZXR0aW5nc1RlbXBsYXRlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwidmFsdWVJbmRleCIsInRhcmdldFZhbHVlIiwiY3VycmVuY3lPclVvTUluZGV4IiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwiZGVzY3JpcHRpb25JbmRleCIsInZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkIiwiY3VycmVuY3lPclVvTVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJuYW1lIiwiZXhwb3J0VW5pdE5hbWUiLCJUYXJnZXQiLCJWaXN1YWxpemF0aW9uIiwiZGF0YVBvaW50UHJvcGVydHkiLCJUYXJnZXRWYWx1ZSIsIk1heGltdW1WYWx1ZSIsInRvU3RyaW5nIiwiRGF0YUZpZWxkRGVmYXVsdCIsIiRUeXBlIiwiZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJmbiIsImV4cG9ydFVuaXRTdHJpbmciLCJsZW5ndGgiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsImlzRW1iZWRkZWQiLCJEYXRhIiwiZm9yRWFjaCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJvRGF0YUZpZWxkIiwic0RhdGFUeXBlIiwidHlwZSIsInNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCIkUGF0aCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFdBQVNBLDRCQUFULENBQXNDQyxTQUF0QyxFQUF1SDtBQUM3SCxXQUFRQSxTQUFELENBQStDQyxjQUEvQyxDQUE4RCxRQUE5RCxDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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SSxhQUFDSCxVQUFELENBQXVDbkIsTUFBdkMsc0RBQStDMUQsT0FBL0MsQ0FBdURpRSxLQUF2RCx5REFBSixFQUErRztBQUFBOztBQUM5R2EsWUFBQUEsU0FBUyxlQUFHLGFBQUdELFVBQUQsQ0FBdUNuQixNQUF6QyxpRUFBRSxTQUErQzFELE9BQWpELHFEQUFDLGlCQUFxRW9FLEVBQXRFLEVBQWlGcEUsT0FBcEYsNkNBQUcsU0FBMEYrRSxJQUF0RztBQUNBLFdBRkQsTUFFTyxJQUFJLGFBQUNGLFVBQUQsQ0FBdUNuQixNQUF2QyxzREFBK0MxRCxPQUEvQyxDQUF1RGlFLEtBQXZELGdEQUFKLEVBQXNHO0FBQUE7O0FBQzVHYSxZQUFBQSxTQUFTLEdBQ1IsYUFBRUQsVUFBRCxDQUF1Q25CLE1BQXhDLGlFQUFDLFNBQStDMUQsT0FBaEQsK0ZBQXVFRCxLQUF2RSwwR0FBOEVrRixLQUE5RSxrRkFBcUZoQixLQUFyRixrQkFDRVksVUFBRCxDQUF1Q25CLE1BRHhDLGlFQUNDLFNBQStDMUQsT0FEaEQsOEVBQ0EsaUJBQXVFRCxLQUR2RSwwREFDQSxzQkFBOEVDLE9BQTlFLENBQXNGK0UsSUFEdEYsQ0FERDtBQUdBLFdBSk0sTUFJQTtBQUNOO0FBQ0FELFlBQUFBLFNBQVMsR0FBR3ZFLFNBQVo7QUFDQTtBQUNELFNBWEQsTUFXTztBQUNOdUUsVUFBQUEsU0FBUyxHQUFHdkUsU0FBWjtBQUNBOztBQUNEO0FBL0JGOztBQWtDQSxXQUFPdUUsU0FBUDtBQUNBLEdBckNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLFxuXHRDb250YWN0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgRWRtIGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0VkbVwiO1xuaW1wb3J0IHsgZ2V0RGlzcGxheU1vZGUsIFByb3BlcnR5T3JQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBUYWJsZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFByb3BlcnR5SW5mbyA9IHtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRhZGRpdGlvbmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRleHBvcnRTZXR0aW5nc1RlbXBsYXRlPzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5nc1dyYXBwaW5nPzogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdHZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkPzogc3RyaW5nO1xuXHRleHBvcnRVbml0TmFtZT86IHN0cmluZztcblx0ZXhwb3J0VW5pdFN0cmluZz86IHN0cmluZztcbn07XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0XCIuXG4gKiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCBoYXMgYW4gaW5saW5lIGFjdGlvbiBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGF0ZXMgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGlmIHRoZSBnaXZlbiBkYXRhRmllbGRBYnN0cmFjdCB0aGF0IGlzIHBhc3NlZCBpcyBhIFwiRGF0YUZpZWxkXCIuXG4gKiBEYXRhRmllbGQgaGFzIGEgdmFsdWUgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsaWRhdGUgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRUeXBlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkVHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZ2l2ZW4gRGF0YUZpZWxkIGhhcyBhIHN0YXRpYyBoaWRkZW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBUaGUgZGF0YWZpZWxkIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGRhdGFmaWVsZCBvciByZWZlcmVuY2VkIHByb3BlcnR5IGhhcyBhIHN0YXRpYyBIaWRkZW4gYW5ub3RhdGlvbiwgZmFsc2UgZWxzZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8XG5cdFx0KGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuID09PSB0cnVlKVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9iamVjdDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoaXNEYXRhRmllbGRUeXBlcyhvYmplY3QpICYmIG9iamVjdC5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBvYmplY3QuVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUHJvcGVydHkob2JqZWN0KSkge1xuXHRcdFx0aWYgKG9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKG9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IGZvciBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9Qcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9cbiAqL1xuZnVuY3Rpb24gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gdGFyZ2V0IFByb3BlcnR5IG9yIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFByZWZpeCBOYXZpZ2F0aW9uIHBhdGggcHJlZml4LCBhcHBsaWNhYmxlIGluIGNhc2Ugb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRhYmxlVHlwZSBUYWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5mdW5jdGlvbiBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHR0YXJnZXQ6IEVkbS5QcmltaXRpdmVUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aFByZWZpeDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IHRhcmdldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvbj8ucGF0aCAmJiBoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQ/Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGhpZGRlbkFubm90YXRpb24ucGF0aDtcblx0XHRcdC8vIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkIHRvIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG1hcCBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2hpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGhdID0gaGlkZGVuQW5ub3RhdGlvbi4kdGFyZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaWdub3JlU2VsZiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIHNhbWUgcHJvcGVydHkgZnJvbSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gYWRkVW5pdEluVGVtcGxhdGUgVHJ1ZSBpZiB0aGUgdW5pdC9jdXJyZW5jeSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBhZGRlZCBpbiB0aGUgZXhwb3J0IHRlbXBsYXRlXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aWdub3JlU2VsZjogYm9vbGVhbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH0sXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHQvKipcblx0ICogSGVscGVyIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnRpZXMgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgcHJvcGVydHksIGRlc2NyaXB0aW9uIHByb3BlcnR5Li4uXG5cdCAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdGZ1bmN0aW9uIF9wdXNoVW5pcXVlKGtleTogc3RyaW5nLCB2YWx1ZTogUHJvcGVydHkpOiBudW1iZXIge1xuXHRcdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcblx0ICovXG5cdGZ1bmN0aW9uIF9hcHBlbmRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzVGVtcGxhdGVcblx0XHRcdD8gYCR7cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHRcdDogYCR7dmFsdWV9YDtcblx0fVxuXG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRsZXQgdmFsdWVJbmRleDogbnVtYmVyO1xuXHRcdGxldCB0YXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRcdGxldCBjdXJyZW5jeU9yVW9NSW5kZXg6IG51bWJlcjtcblxuXHRcdGlmIChyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5nc1RlbXBsYXRlKSB7XG5cdFx0XHQvLyBGaWVsZEdyb3VwIHVzZS1jYXNlLiBOZWVkIHRvIGFkZCBlYWNoIEZpZWxkIGluIG5ldyBsaW5lLlxuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKFwiXFxuXCIpO1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NXcmFwcGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHRBbm5vdGF0aW9uPy5wYXRoICYmIHRleHRBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgVGV4dCBBcnJhbmdlbWVudC5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGhQcmVmaXggKyB0ZXh0QW5ub3RhdGlvbi5wYXRoO1xuXHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSBhcyBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkID0gdGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0Ly8gS2VlcCB2YWx1ZSB3aGVuIGV4cG9ydGluZyAoc3BsaXQgbW9kZSkgb24gdGV4dCBBcnJhbmdlbWVudCBkZWZpbmVkIGFzICNUZXh0T25seSAoT25seSB2YWx1ZXMgYXJlIGV4cGVjdGVkIG9uIHBhc3RlIGZyb20gRXhjZWwgZnVuY3Rpb25hbGl0eSlcblx0XHRcdFx0XHRfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske2Rlc2NyaXB0aW9uSW5kZXh9fWApO1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkID0gcGF0aDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fSAoeyR7ZGVzY3JpcHRpb25JbmRleH19KWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRkZXNjcmlwdGlvbkluZGV4ID0gX3B1c2hVbmlxdWUodGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgsIHRleHRBbm5vdGF0aW9uLiR0YXJnZXQpO1xuXHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7ZGVzY3JpcHRpb25JbmRleH19ICh7JHt2YWx1ZUluZGV4fX0pYCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENoZWNrIGZvciBmaWVsZCBjb250YWluaW5nIEN1cnJlbmN5IE9yIFVuaXQgUHJvcGVydGllcy5cblx0XHRcdGNvbnN0IGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbiA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRpZiAoY3VycmVuY3lPclVvTVByb3BlcnR5ICYmIGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbj8uJHRhcmdldCkge1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRjdXJyZW5jeU9yVW9NSW5kZXggPSBfcHVzaFVuaXF1ZShjdXJyZW5jeU9yVW9NUHJvcGVydHkubmFtZSwgY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uLiR0YXJnZXQpO1xuXHRcdFx0XHRpZiAoYWRkVW5pdEluVGVtcGxhdGUpIHtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fSAgeyR7Y3VycmVuY3lPclVvTUluZGV4fX1gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRVbml0TmFtZSA9IGN1cnJlbmN5T3JVb01Qcm9wZXJ0eS5uYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldD8uVmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRjb25zdCBkYXRhUG9pbnRQcm9wZXJ0eTogRWRtLlByaW1pdGl2ZVR5cGUgPSBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgZGF0YVBvaW50UHJvcGVydHkpO1xuXHRcdFx0XHQvLyBOZXcgZmFrZSBwcm9wZXJ0eSBjcmVhdGVkIGZvciB0aGUgUmF0aW5nL1Byb2dyZXNzIFRhcmdldCBWYWx1ZS4gSXQnbGwgYmUgdXNlZCBmb3IgdGhlIGV4cG9ydCBvbiBzcGxpdCBtb2RlLlxuXHRcdFx0XHRfcHVzaFVuaXF1ZShwcm9wZXJ0eS5UYXJnZXQudmFsdWUsIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0KTtcblx0XHRcdFx0dGFyZ2V0VmFsdWUgPSAocHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUgfHwgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuTWF4aW11bVZhbHVlKS50b1N0cmluZygpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fS8ke3RhcmdldFZhbHVlfWApO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0Ly8gRGF0YVBvaW50IHVzZS1jYXNlIHVzaW5nIERhdGFGaWVsZERlZmF1bHQuXG5cdFx0XHRcdGNvbnN0IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eTogRWRtLlByaW1pdGl2ZVR5cGUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5VSS5EYXRhRmllbGREZWZhdWx0O1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHQvLyBOZXcgZmFrZSBwcm9wZXJ0eSBjcmVhdGVkIGZvciB0aGUgUmF0aW5nL1Byb2dyZXNzIFRhcmdldCBWYWx1ZS4gSXQnbGwgYmUgdXNlZCBmb3IgdGhlIGV4cG9ydCBvbiBzcGxpdCBtb2RlLlxuXHRcdFx0XHRfcHVzaFVuaXF1ZShkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkuVGFyZ2V0LnZhbHVlLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdHRhcmdldFZhbHVlID0gKFxuXHRcdFx0XHRcdGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5UYXJnZXRWYWx1ZSB8fCBkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUuTWF4aW11bVZhbHVlXG5cdFx0XHRcdCkudG9TdHJpbmcoKTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0vJHt0YXJnZXRWYWx1ZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCIpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkgPVxuXHRcdFx0XHRcdHByb3BlcnR5LlRhcmdldC52YWx1ZS5zdWJzdHJpbmcoMCwgcHJvcGVydHkuVGFyZ2V0LnZhbHVlLmluZGV4T2YoXCIvXCIpICsgMSkgKyBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5mbj8ucGF0aDtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LmZuLiR0YXJnZXQpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0fSBlbHNlIGlmICghaWdub3JlU2VsZikge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHVuZGVybHlpbmcgcHJvcGVydHlcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0aWYgKGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFVuaXRTdHJpbmcgPSBgJHtjdXJyZW5jeU9yVW5pdEFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCBjdXJyZW5jeS91bml0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZWxhdGVkUHJvcGVydGllcyA9IF9jb2xsZWN0QWRkaXRpb25hbFByb3BlcnRpZXNGb3JBbmFseXRpY2FsVGFibGUocHJvcGVydHksIG5hdmlnYXRpb25QYXRoUHJlZml4LCB0YWJsZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzKTtcblx0XHRpZiAoT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXMuYWRkaXRpb25hbFByb3BlcnRpZXMpLmxlbmd0aCA+IDAgJiYgT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBDb2xsZWN0IHVuZGVybHlpbmcgcHJvcGVydHkgaWYgbm90IGNvbGxlY3RlZCBhbHJlYWR5LlxuXHRcdFx0Ly8gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhZGRpdGlvbmFsUHJvcGVydGllcyBhcmUgbWFkZSBhdmFpbGFibGUgb25seSB0byBjb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIENvbGxlY3QgcHJvcGVydGllcyBjb25zdW1lZCBieSBhIERhdGFGaWVsZC5cbiAqIFRoaXMgaXMgZm9yIHBvcHVsYXRpbmcgdGhlIENvbXBsZXhQcm9wZXJ0eUluZm9zIG9mIHRoZSB0YWJsZSBkZWxlZ2F0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGZvciB3aGljaCB0aGUgcHJvcGVydGllcyBuZWVkIHRvIGJlIGlkZW50aWZpZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0ge1RhYmxlVHlwZX0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHtDb21wbGV4UHJvcGVydHlJbmZvfSByZWxhdGVkUHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBpZGVudGlmaWVkIHNvIGZhci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbWJlZGRlZCBUcnVlIGlmIHRoZSBkYXRhZmllbGQgaXMgZW1iZWRkZWQgaW4gYW5vdGhlciBhbm5vdGF0aW9uIChlLmcuIEZpZWxkR3JvdXApLlxuICogQHJldHVybnMge0NvbXBsZXhQcm9wZXJ0eUluZm99IFRoZSBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIERhdGFGaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRyZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5SW5mbyA9IHsgcHJvcGVydGllczoge30sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7fSB9LFxuXHRpc0VtYmVkZGVkOiBib29sZWFuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAoKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8IGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiYgZGF0YUZpZWxkLlZhbHVlKSB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhRmllbGQuVmFsdWU7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRwcm9wZXJ0eS5wYXRoLFxuXHRcdFx0cHJvcGVydHkuJHRhcmdldCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0aXNFbWJlZGRlZFxuXHRcdCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocHJvcGVydHkucGF0aCk7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKGRhdGFGaWVsZCwgbmF2aWdhdGlvblBhdGhQcmVmaXgsIHRhYmxlVHlwZSwgcmVsYXRlZFByb3BlcnRpZXMpO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGU6XG5cdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRpbm5lckRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLnBhdGgsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGlzRW1iZWRkZWRcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCI6XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQudmFsdWUsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGlzRW1iZWRkZWRcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RGF0YUZpZWxkRGF0YVR5cGUgPSBmdW5jdGlvbihvRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgc0RhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKS4kVHlwZTtcblx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRzRGF0YVR5cGUgPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8udHlwZTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zdCBzRGF0YVR5cGVGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uID0gKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlO1xuXHRcdFx0aWYgKHNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRcdFx0aWYgKChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldC4kVHlwZSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZSkge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9ICgoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIENvbnRhY3QpPy5mbiBhcyBhbnkpLiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID1cblx0XHRcdFx0XHRcdCgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiRQYXRoPy4kVHlwZSB8fFxuXHRcdFx0XHRcdFx0KChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldC50eXBlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGUuZy4gRmllbGRHcm91cCBvciBDaGFydFxuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufTtcbiJdfQ==
398
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFGaWVsZC50cyJdLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIlZhbHVlIiwiJHRhcmdldCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwidW5kZWZpbmVkIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHkiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZSIsInRhcmdldCIsIm5hdmlnYXRpb25QYXRoUHJlZml4IiwidGFibGVUeXBlIiwicmVsYXRlZFByb3BlcnRpZXMiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiX3R5cGUiLCJoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwicHJvcGVydGllcyIsImFkZFVuaXRJblRlbXBsYXRlIiwiX3B1c2hVbmlxdWUiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJfYXBwZW5kVGVtcGxhdGUiLCJleHBvcnRTZXR0aW5nc1RlbXBsYXRlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwidmFsdWVJbmRleCIsInRhcmdldFZhbHVlIiwiY3VycmVuY3lPclVvTUluZGV4IiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwiZGVzY3JpcHRpb25JbmRleCIsInZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkIiwiY3VycmVuY3lPclVvTVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJuYW1lIiwiZXhwb3J0VW5pdE5hbWUiLCJUYXJnZXQiLCJWaXN1YWxpemF0aW9uIiwiZGF0YVBvaW50UHJvcGVydHkiLCJUYXJnZXRWYWx1ZSIsIk1heGltdW1WYWx1ZSIsInRvU3RyaW5nIiwiRGF0YUZpZWxkRGVmYXVsdCIsIiRUeXBlIiwiZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJmbiIsImV4cG9ydFVuaXRTdHJpbmciLCJsZW5ndGgiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsImlzRW1iZWRkZWQiLCJEYXRhIiwiZm9yRWFjaCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJvRGF0YUZpZWxkIiwic0RhdGFUeXBlIiwidHlwZSIsInNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCIkUGF0aCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFdBQVNBLDRCQUFULENBQXNDQyxTQUF0QyxFQUF1SDtBQUM3SCxXQUFRQSxTQUFELENBQStDQyxjQUEvQyxDQUE4RCxRQUE5RCxDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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RSxLQUF2RCx5REFBSixFQUErRztBQUFBOztBQUM5R2EsWUFBQUEsU0FBUyxlQUFHLGFBQUdELFVBQUQsQ0FBdUNuQixNQUF6QyxpRUFBRSxTQUErQzFELE9BQWpELHFEQUFDLGlCQUFxRW9FLEVBQXRFLEVBQWlGcEUsT0FBcEYsNkNBQUcsU0FBMEYrRSxJQUF0RztBQUNBLFdBRkQsTUFFTyxJQUFJLGFBQUNGLFVBQUQsQ0FBdUNuQixNQUF2QyxzREFBK0MxRCxPQUEvQyxDQUF1RGlFLEtBQXZELGdEQUFKLEVBQXNHO0FBQUE7O0FBQzVHYSxZQUFBQSxTQUFTLEdBQ1IsYUFBRUQsVUFBRCxDQUF1Q25CLE1BQXhDLGlFQUFDLFNBQStDMUQsT0FBaEQsK0ZBQXVFRCxLQUF2RSwwR0FBOEVrRixLQUE5RSxrRkFBcUZoQixLQUFyRixrQkFDRVksVUFBRCxDQUF1Q25CLE1BRHhDLGlFQUNDLFNBQStDMUQsT0FEaEQsOEVBQ0EsaUJBQXVFRCxLQUR2RSwwREFDQSxzQkFBOEVDLE9BQTlFLENBQXNGK0UsSUFEdEYsQ0FERDtBQUdBLFdBSk0sTUFJQTtBQUNOO0FBQ0FELFlBQUFBLFNBQVMsR0FBR3ZFLFNBQVo7QUFDQTtBQUNELFNBWEQsTUFXTztBQUNOdUUsVUFBQUEsU0FBUyxHQUFHdkUsU0FBWjtBQUNBOztBQUNEO0FBL0JGOztBQWtDQSxXQUFPdUUsU0FBUDtBQUNBLEdBckNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLFxuXHRDb250YWN0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgRWRtIGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0VkbVwiO1xuaW1wb3J0IHsgVGFibGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksIGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFByb3BlcnR5SW5mbyA9IHtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRhZGRpdGlvbmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRleHBvcnRTZXR0aW5nc1RlbXBsYXRlPzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5nc1dyYXBwaW5nPzogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdHZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkPzogc3RyaW5nO1xuXHRleHBvcnRVbml0TmFtZT86IHN0cmluZztcblx0ZXhwb3J0VW5pdFN0cmluZz86IHN0cmluZztcbn07XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0XCIuXG4gKiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCBoYXMgYW4gaW5saW5lIGFjdGlvbiBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGF0ZXMgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGlmIHRoZSBnaXZlbiBkYXRhRmllbGRBYnN0cmFjdCB0aGF0IGlzIHBhc3NlZCBpcyBhIFwiRGF0YUZpZWxkXCIuXG4gKiBEYXRhRmllbGQgaGFzIGEgdmFsdWUgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsaWRhdGUgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRUeXBlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkVHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZ2l2ZW4gRGF0YUZpZWxkIGhhcyBhIHN0YXRpYyBoaWRkZW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBUaGUgZGF0YWZpZWxkIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGRhdGFmaWVsZCBvciByZWZlcmVuY2VkIHByb3BlcnR5IGhhcyBhIHN0YXRpYyBIaWRkZW4gYW5ub3RhdGlvbiwgZmFsc2UgZWxzZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8XG5cdFx0KGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuID09PSB0cnVlKVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9iamVjdDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoaXNEYXRhRmllbGRUeXBlcyhvYmplY3QpICYmIG9iamVjdC5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBvYmplY3QuVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUHJvcGVydHkob2JqZWN0KSkge1xuXHRcdFx0aWYgKG9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKG9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IGZvciBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9Qcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9cbiAqL1xuZnVuY3Rpb24gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gdGFyZ2V0IFByb3BlcnR5IG9yIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFByZWZpeCBOYXZpZ2F0aW9uIHBhdGggcHJlZml4LCBhcHBsaWNhYmxlIGluIGNhc2Ugb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRhYmxlVHlwZSBUYWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5mdW5jdGlvbiBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHR0YXJnZXQ6IEVkbS5QcmltaXRpdmVUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aFByZWZpeDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IHRhcmdldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvbj8ucGF0aCAmJiBoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQ/Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGhpZGRlbkFubm90YXRpb24ucGF0aDtcblx0XHRcdC8vIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkIHRvIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG1hcCBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2hpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGhdID0gaGlkZGVuQW5ub3RhdGlvbi4kdGFyZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaWdub3JlU2VsZiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIHNhbWUgcHJvcGVydHkgZnJvbSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gYWRkVW5pdEluVGVtcGxhdGUgVHJ1ZSBpZiB0aGUgdW5pdC9jdXJyZW5jeSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBhZGRlZCBpbiB0aGUgZXhwb3J0IHRlbXBsYXRlXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aWdub3JlU2VsZjogYm9vbGVhbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH0sXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHQvKipcblx0ICogSGVscGVyIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnRpZXMgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgcHJvcGVydHksIGRlc2NyaXB0aW9uIHByb3BlcnR5Li4uXG5cdCAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdGZ1bmN0aW9uIF9wdXNoVW5pcXVlKGtleTogc3RyaW5nLCB2YWx1ZTogUHJvcGVydHkpOiBudW1iZXIge1xuXHRcdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcblx0ICovXG5cdGZ1bmN0aW9uIF9hcHBlbmRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzVGVtcGxhdGVcblx0XHRcdD8gYCR7cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHRcdDogYCR7dmFsdWV9YDtcblx0fVxuXG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRsZXQgdmFsdWVJbmRleDogbnVtYmVyO1xuXHRcdGxldCB0YXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRcdGxldCBjdXJyZW5jeU9yVW9NSW5kZXg6IG51bWJlcjtcblxuXHRcdGlmIChyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5nc1RlbXBsYXRlKSB7XG5cdFx0XHQvLyBGaWVsZEdyb3VwIHVzZS1jYXNlLiBOZWVkIHRvIGFkZCBlYWNoIEZpZWxkIGluIG5ldyBsaW5lLlxuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKFwiXFxuXCIpO1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NXcmFwcGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHRBbm5vdGF0aW9uPy5wYXRoICYmIHRleHRBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgVGV4dCBBcnJhbmdlbWVudC5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGhQcmVmaXggKyB0ZXh0QW5ub3RhdGlvbi5wYXRoO1xuXHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSBhcyBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdC8vIEtlZXAgdmFsdWUgd2hlbiBleHBvcnRpbmcgKHNwbGl0IG1vZGUpIG9uIHRleHQgQXJyYW5nZW1lbnQgZGVmaW5lZCBhcyAjVGV4dE9ubHkgKE9ubHkgdmFsdWVzIGFyZSBleHBlY3RlZCBvbiBwYXN0ZSBmcm9tIEV4Y2VsIGZ1bmN0aW9uYWxpdHkpXG5cdFx0XHRcdFx0X3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHtkZXNjcmlwdGlvbkluZGV4fX1gKTtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy52aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCA9IHBhdGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gKHske2Rlc2NyaXB0aW9uSW5kZXh9fSlgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske2Rlc2NyaXB0aW9uSW5kZXh9fSAoeyR7dmFsdWVJbmRleH19KWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgZmllbGQgY29udGFpbmluZyBDdXJyZW5jeSBPciBVbml0IFByb3BlcnRpZXMuXG5cdFx0XHRjb25zdCBjdXJyZW5jeU9yVW9NUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24gPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0aWYgKGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSAmJiBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24/LiR0YXJnZXQpIHtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0Y3VycmVuY3lPclVvTUluZGV4ID0gX3B1c2hVbmlxdWUoY3VycmVuY3lPclVvTVByb3BlcnR5Lm5hbWUsIGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0aWYgKGFkZFVuaXRJblRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gIHske2N1cnJlbmN5T3JVb01JbmRleH19YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0VW5pdE5hbWUgPSBjdXJyZW5jeU9yVW9NUHJvcGVydHkubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQ/LlZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgZGF0YVBvaW50UHJvcGVydHk6IEVkbS5QcmltaXRpdmVUeXBlID0gcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIGRhdGFQb2ludFByb3BlcnR5KTtcblx0XHRcdFx0Ly8gTmV3IGZha2UgcHJvcGVydHkgY3JlYXRlZCBmb3IgdGhlIFJhdGluZy9Qcm9ncmVzcyBUYXJnZXQgVmFsdWUuIEl0J2xsIGJlIHVzZWQgZm9yIHRoZSBleHBvcnQgb24gc3BsaXQgbW9kZS5cblx0XHRcdFx0X3B1c2hVbmlxdWUocHJvcGVydHkuVGFyZ2V0LnZhbHVlLCBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldCk7XG5cdFx0XHRcdHRhcmdldFZhbHVlID0gKHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlRhcmdldFZhbHVlIHx8IHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0Lk1heGltdW1WYWx1ZSkudG9TdHJpbmcoKTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0vJHt0YXJnZXRWYWx1ZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdC8vIERhdGFQb2ludCB1c2UtY2FzZSB1c2luZyBEYXRhRmllbGREZWZhdWx0LlxuXHRcdFx0XHRjb25zdCBkYXRhUG9pbnREZWZhdWx0UHJvcGVydHk6IEVkbS5QcmltaXRpdmVUeXBlID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuVUkuRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gTmV3IGZha2UgcHJvcGVydHkgY3JlYXRlZCBmb3IgdGhlIFJhdGluZy9Qcm9ncmVzcyBUYXJnZXQgVmFsdWUuIEl0J2xsIGJlIHVzZWQgZm9yIHRoZSBleHBvcnQgb24gc3BsaXQgbW9kZS5cblx0XHRcdFx0X3B1c2hVbmlxdWUoZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5LlRhcmdldC52YWx1ZSwgcHJvcGVydHkpO1xuXHRcdFx0XHR0YXJnZXRWYWx1ZSA9IChcblx0XHRcdFx0XHRkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUgfHwgZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlRhcmdldFZhbHVlLk1heGltdW1WYWx1ZVxuXHRcdFx0XHQpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19LyR7dGFyZ2V0VmFsdWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiKSB7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzQ29udGFjdFByb3BlcnR5ID1cblx0XHRcdFx0XHRwcm9wZXJ0eS5UYXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5LlRhcmdldC52YWx1ZS5pbmRleE9mKFwiL1wiKSArIDEpICsgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuZm4/LnBhdGg7XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5mbi4kdGFyZ2V0KTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdH0gZWxzZSBpZiAoIWlnbm9yZVNlbGYpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0XHRcdGlmIChjdXJyZW5jeU9yVW5pdEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRVbml0U3RyaW5nID0gYCR7Y3VycmVuY3lPclVuaXRBbm5vdGF0aW9ufWA7IC8vIEhhcmQtY29kZWQgY3VycmVuY3kvdW5pdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKHByb3BlcnR5LCBuYXZpZ2F0aW9uUGF0aFByZWZpeCwgdGFibGVUeXBlLCByZWxhdGVkUHJvcGVydGllcyk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwICYmIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5IGlmIG5vdCBjb2xsZWN0ZWQgYWxyZWFkeS5cblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYWRkaXRpb25hbFByb3BlcnRpZXMgYXJlIG1hZGUgYXZhaWxhYmxlIG9ubHkgdG8gY29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBDb2xsZWN0IHByb3BlcnRpZXMgY29uc3VtZWQgYnkgYSBEYXRhRmllbGQuXG4gKiBUaGlzIGlzIGZvciBwb3B1bGF0aW5nIHRoZSBDb21wbGV4UHJvcGVydHlJbmZvcyBvZiB0aGUgdGFibGUgZGVsZWdhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgVGhlIERhdGFGaWVsZCBmb3Igd2hpY2ggdGhlIHByb3BlcnRpZXMgbmVlZCB0byBiZSBpZGVudGlmaWVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtUYWJsZVR5cGV9IHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEBwYXJhbSB7Q29tcGxleFByb3BlcnR5SW5mb30gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW1iZWRkZWQgVHJ1ZSBpZiB0aGUgZGF0YWZpZWxkIGlzIGVtYmVkZGVkIGluIGFub3RoZXIgYW5ub3RhdGlvbiAoZS5nLiBGaWVsZEdyb3VwKS5cbiAqIEByZXR1cm5zIHtDb21wbGV4UHJvcGVydHlJbmZvfSBUaGUgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBEYXRhRmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm8gPSB7IHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczoge30gfSxcblx0aXNFbWJlZGRlZDogYm9vbGVhbiA9IGZhbHNlXG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0aWYgKChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmIGRhdGFGaWVsZC5WYWx1ZSkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YUZpZWxkLlZhbHVlO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydHkucGF0aCxcblx0XHRcdHByb3BlcnR5LiR0YXJnZXQsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdGlzRW1iZWRkZWRcblx0XHQpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoUHJlZml4ID0gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHByb3BlcnR5LnBhdGgpO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZShkYXRhRmllbGQsIG5hdmlnYXRpb25QYXRoUHJlZml4LCB0YWJsZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzKTtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlOlxuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0aW5uZXJEYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS5wYXRoLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiOlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZERhdGFUeXBlID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzRGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpLiRUeXBlO1xuXHRzd2l0Y2ggKHNEYXRhVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHNEYXRhVHlwZSA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnN0IHNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24gPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGU7XG5cdFx0XHRpZiAoc0RhdGFUeXBlRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdFx0XHRpZiAoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlID09PSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLkNvbnRhY3RUeXBlKSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gKCgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQgYXMgQ29udGFjdCk/LmZuIGFzIGFueSkuJHRhcmdldD8udHlwZTtcblx0XHRcdFx0fSBlbHNlIGlmICgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPVxuXHRcdFx0XHRcdFx0KChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJFBhdGg/LiRUeXBlIHx8XG5cdFx0XHRcdFx0XHQoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBzRGF0YVR5cGU7XG59O1xuIl19
@@ -1,3 +1,4 @@
1
+ import { Property } from "@sap-ux/annotation-converter";
1
2
  import {
2
3
  CommunicationAnnotationTypes,
3
4
  Contact,
@@ -10,11 +11,10 @@ import {
10
11
  UIAnnotationTypes
11
12
  } from "@sap-ux/vocabularies-types";
12
13
  import * as Edm from "@sap-ux/vocabularies-types/dist/Edm";
14
+ import { TableType } from "sap/fe/core/converters/controls/Common/Table";
13
15
  import { getDisplayMode, PropertyOrPath } from "sap/fe/core/templating/DisplayModeFormatter";
14
- import { Property } from "@sap-ux/annotation-converter";
15
16
  import { getAssociatedCurrencyProperty, getAssociatedUnitProperty, isProperty } from "sap/fe/core/templating/PropertyHelper";
16
17
  import ConverterContext from "../ConverterContext";
17
- import { TableType } from "sap/fe/core/converters/controls/Common/Table";
18
18
 
19
19
  export type ComplexPropertyInfo = {
20
20
  properties: Record<string, Property>;
@@ -187,7 +187,6 @@ export function collectRelatedProperties(
187
187
  case "Value":
188
188
  valueIndex = _pushUnique(path, property);
189
189
  _appendTemplate(`{${valueIndex}}`);
190
- relatedProperties.visualSettingsToBeExcluded = textAnnotationPropertyPath;
191
190
  break;
192
191
 
193
192
  case "Description":
@@ -340,7 +339,7 @@ export function collectRelatedPropertiesRecursively(
340
339
  return relatedProperties;
341
340
  }
342
341
 
343
- export const getDataFieldDataType = function(oDataField: DataFieldAbstractTypes | Property): string | undefined {
342
+ export const getDataFieldDataType = function (oDataField: DataFieldAbstractTypes | Property): string | undefined {
344
343
  let sDataType: string | undefined = (oDataField as DataFieldAbstractTypes).$Type;
345
344
  switch (sDataType) {
346
345
  case UIAnnotationTypes.DataFieldForAction:
@@ -2,26 +2,26 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/ID", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/formatters/FPMFormatter", "sap/fe/core/converters/helpers/BindingHelper"], function (ManifestSettings, ConfigurableObject, ID, StableIdHelper, BindingExpression, fpmFormatter, BindingHelper) {
5
+ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/ID", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/formatters/FPMFormatter", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/helpers/StableIdHelper"], function (BindingHelper, ConfigurableObject, ID, ManifestSettings, fpmFormatter, BindingExpression, StableIdHelper) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
10
- var greaterOrEqual = BindingExpression.greaterOrEqual;
11
- var and = BindingExpression.and;
12
- var ifElse = BindingExpression.ifElse;
13
- var equal = BindingExpression.equal;
9
+ var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
14
10
  var resolveBindingString = BindingExpression.resolveBindingString;
11
+ var or = BindingExpression.or;
15
12
  var isConstant = BindingExpression.isConstant;
13
+ var ifElse = BindingExpression.ifElse;
14
+ var greaterOrEqual = BindingExpression.greaterOrEqual;
16
15
  var formatResult = BindingExpression.formatResult;
17
- var or = BindingExpression.or;
16
+ var equal = BindingExpression.equal;
18
17
  var compileBinding = BindingExpression.compileBinding;
19
18
  var bindingExpression = BindingExpression.bindingExpression;
20
19
  var annotationExpression = BindingExpression.annotationExpression;
21
- var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
20
+ var and = BindingExpression.and;
21
+ var ActionType = ManifestSettings.ActionType;
22
22
  var CustomActionID = ID.CustomActionID;
23
23
  var Placement = ConfigurableObject.Placement;
24
- var ActionType = ManifestSettings.ActionType;
24
+ var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
25
25
 
26
26
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
27
27
 
@@ -363,4 +363,4 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings", "sap/fe/core/converter
363
363
  _exports.enableAutoScroll = enableAutoScroll;
364
364
  return _exports;
365
365
  }, false);
366
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFjdGlvbi50cyJdLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwicHJlcGFyZU1lbnVBY3Rpb24iLCJhY3Rpb25zIiwiYUFubm90YXRpb25BY3Rpb25zIiwiYUhpZGRlbkhlYWRlckFjdGlvbnMiLCJhbGxBY3Rpb25zIiwibWVudUl0ZW1LZXlzIiwiYWN0aW9uS2V5IiwibWFuaWZlc3RBY3Rpb24iLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJtZW51SXRlbXMiLCJtZW51VmlzaWJsZSIsIl9tZW51SXRlbUtleXMiLCJtZW51IiwibWFwIiwibWVudUtleSIsImFjdGlvbiIsImZpbmQiLCJrZXkiLCJlbmFibGVkIiwidmlzaWJsZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImhpZGRlbkFjdGlvbiIsImNvbXBpbGVCaW5kaW5nIiwib3IiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInB1c2giLCJsZW5ndGgiLCJmb3JFYWNoIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsIm9NZW51SXRlbUtleXMiLCJyZWR1Y2UiLCJpdGVtIiwiZmlsdGVyIiwiX2dldE1hbmlmZXN0RW5hYmxlZCIsImlzQW5ub3RhdGlvbkFjdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJ1bmRlZmluZWQiLCJnZXRNYW5pZmVzdEFjdGlvbkVuYWJsZW1lbnQiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RBY3Rpb25zIiwibmF2aWdhdGlvblNldHRpbmdzIiwiY29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3MiLCJmYWNldE5hbWUiLCJsYXN0RG90SW5kZXgiLCJwcmVzcyIsImxhc3RJbmRleE9mIiwic29tZSIsImlkIiwiQ3VzdG9tQWN0aW9uSUQiLCJoYW5kbGVyTW9kdWxlIiwic3Vic3RyaW5nIiwicmVwbGFjZSIsImhhbmRsZXJNZXRob2QiLCJ0ZXh0Iiwibm9XcmFwIiwiX19ub1dyYXAiLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwiZW5hYmxlT25TZWxlY3QiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJkZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJwb3NpdGlvbiIsImFuY2hvciIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlQXV0b1Njcm9sbCIsImlubGluZSIsIkRlZmF1bHQiLCJyZXNvbHZlZEJpbmRpbmciLCJyZXN1bHQiLCJpc0NvbnN0YW50IiwidmFsdWUiLCJfdHlwZSIsIm1ldGhvZFBhdGgiLCJmb3JtYXRSZXN1bHQiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImZwbUZvcm1hdHRlciIsImN1c3RvbUlzRW5hYmxlZENoZWNrIiwiZ2V0RW50aXR5VHlwZSIsImlmRWxzZSIsImFuZCIsImdyZWF0ZXJPckVxdWFsIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJhY3Rpb25UYXJnZXQiLCJpc0JvdW5kIiwicGFyYW1ldGVycyIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhdGgiLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiZXF1YWwiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJhTWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9NYXBwaW5nIiwib1NPTWFwcGluZyIsIkxvY2FsUHJvcGVydHkiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiYklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQiLCJkZXRhaWxPckRpc3BsYXkiLCJkZXRhaWwiLCJkaXNwbGF5Iiwicm91dGUiLCJhZnRlckV4ZWN1dGlvbiIsIm5hdmln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QUFBQSx1QkFBdUIsR0FBR0MsZUFBZSxTQUFmLElBQUFBLGVBQWUsV0FBZixJQUFBQSxlQUFlLENBQUVHLEtBQWpCLEdBQXlCLElBQXpCLEdBQWdDLEtBQTFEO0FBQ0EsS0FMUyxDQU1WOzs7QUFDQSxRQUNFaEcsTUFBTSxJQUNOQSxNQUFNLENBQUNpRyxjQURQLEtBRUMsMEJBQUFqRyxNQUFNLENBQUNpRyxjQUFQLGdGQUF1QkMsa0JBQXZCLE1BQThDLEtBQTlDLElBQXVELDJCQUFBbEcsTUFBTSxDQUFDaUcsY0FBUCxrRkFBdUIzQyxnQkFBdkIsTUFBNEMsSUFGcEcsQ0FBRCxJQUdBLENBQUNzQyx1QkFKRixFQUtFO0FBQ0QsYUFBTyxLQUFQO0FBQ0E7O0FBQ0QsV0FBTyxJQUFQO0FBQ0E7Ozs7QUFFTSxXQUFTdEMsZ0JBQVQsQ0FBMEJ0RCxNQUExQixFQUEyRDtBQUFBOztBQUNqRSxXQUFPLENBQUFBLE1BQU0sU0FBTixJQUFBQSxNQUFNLFdBQU4sc0NBQUFBLE1BQU0sQ0FBRWlHLGNBQVIsa0ZBQXdCM0MsZ0JBQXhCLE1BQTZDLElBQXBEO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgTWFuaWZlc3RBY3Rpb24sIE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sIE1hbmlmZXN0VGFibGVDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBDdXN0b21BY3Rpb25JRCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdG9yLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGlzQ29uc3RhbnQsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nLFxuXHRlcXVhbCxcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRpZkVsc2UsXG5cdGFuZCxcblx0Z3JlYXRlck9yRXF1YWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBmcG1Gb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvRlBNRm9ybWF0dGVyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuXG5leHBvcnQgZW51bSBCdXR0b25UeXBlIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRcIixcblx0QXR0ZW50aW9uID0gXCJBdHRlbnRpb25cIixcblx0QmFjayA9IFwiQmFja1wiLFxuXHRDcml0aWNhbCA9IFwiQ3JpdGljYWxcIixcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRFbXBoYXNpemVkID0gXCJFbXBoYXNpemVkXCIsXG5cdEdob3N0ID0gXCJHaG9zdFwiLFxuXHROZWdhdGl2ZSA9IFwiTmVnYXRpdmVcIixcblx0TmV1dHJhbCA9IFwiTmV1dHJhbFwiLFxuXHRSZWplY3QgPSBcIlJlamVjdFwiLFxuXHRTdWNjZXNzID0gXCJTdWNjZXNzXCIsXG5cdFRyYW5zcGFyZW50ID0gXCJUcmFuc3BhcmVudFwiLFxuXHRVbnN0eWxlZCA9IFwiVW5zdHlsZWRcIixcblx0VXAgPSBcIlVwXCJcbn1cblxuZXhwb3J0IHR5cGUgQmFzZUFjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdHR5cGU/OiBBY3Rpb25UeXBlO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR2aXNpYmxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdHJlcXVpcmVzRGlhbG9nPzogc3RyaW5nO1xuXHRiaW5kaW5nPzogc3RyaW5nO1xuXHRidXR0b25UeXBlPzogQnV0dG9uVHlwZS5HaG9zdCB8IEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQgfCBzdHJpbmc7XG5cdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0bWVudT86IChzdHJpbmcgfCBDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uKVtdO1xuXHRmYWNldE5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uQWN0aW9uID0gQmFzZUFjdGlvbiAmIHtcblx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbjtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdGN1c3RvbURhdGE/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERlZmluaXRpb24gZm9yIGN1c3RvbSBhY3Rpb25zXG4gKlxuICogQHR5cGVkZWYgQ3VzdG9tQWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIEN1c3RvbUFjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8XG5cdEJhc2VBY3Rpb24gJiB7XG5cdFx0dHlwZT86IEFjdGlvblR5cGUuRGVmYXVsdCB8IEFjdGlvblR5cGUuTWVudTtcblx0XHRoYW5kbGVyTWV0aG9kPzogc3RyaW5nO1xuXHRcdGhhbmRsZXJNb2R1bGU/OiBzdHJpbmc7XG5cdFx0bWVudT86IChzdHJpbmcgfCBDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uKVtdO1xuXHRcdG5vV3JhcD86IGJvb2xlYW47IC8vIEluZGljYXRlcyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIHdyYXBwaW5nIGZyb20gdGhlIEZQTUhlbHBlclxuXHRcdHJlcXVpcmVzU2VsZWN0aW9uPzogYm9vbGVhbjtcblx0fVxuPjtcblxuLy8gUmV1c2Ugb2YgQ29uZmlndXJhYmxlT2JqZWN0IGFuZCBDdXN0b21FbGVtZW50IGlzIGRvbmUgZm9yIG9yZGVyaW5nXG5leHBvcnQgdHlwZSBDb252ZXJ0ZXJBY3Rpb24gPSBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIG1lbnUgYWN0aW9uIGZyb20gbWFuaWZlc3QgYWN0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPn0gYWN0aW9ucyBUaGUgbWFuaWZlc3QgZGVmaW5pdGlvblxuICogQHBhcmFtIHtCYXNlQWN0aW9uW119IGFBbm5vdGF0aW9uQWN0aW9ucyBUaGUgYW5ub3RhdGlvbiBhY3Rpb25zIGRlZmluaXRpb25cbiAqIEBwYXJhbSBhSGlkZGVuSGVhZGVyQWN0aW9uc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj59IFRoZSBhY3Rpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgbWVudSBvcHRpb24gdGhhdCB3ZXJlIGFkZGVkXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVNZW51QWN0aW9uKFxuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+LFxuXHRhQW5ub3RhdGlvbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0YUhpZGRlbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXVxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiB7XG5cdGNvbnN0IGFsbEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IG1lbnVJdGVtS2V5czogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBbXTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBhY3Rpb25zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb246IEN1c3RvbUFjdGlvbiA9IGFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAobWFuaWZlc3RBY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51KSB7XG5cdFx0XHRjb25zdCBtZW51SXRlbXM6IChDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uKVtdID0gW107XG5cdFx0XHRsZXQgbWVudVZpc2libGU6IGFueSA9IGZhbHNlO1xuXHRcdFx0bGV0IF9tZW51SXRlbUtleXMgPVxuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbi5tZW51Py5tYXAoKG1lbnVLZXk6IHN0cmluZyB8IEN1c3RvbUFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdGxldCBhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQgPSBhQW5ub3RhdGlvbkFjdGlvbnMuZmluZChcblx0XHRcdFx0XHRcdChhY3Rpb246IEJhc2VBY3Rpb24pID0+IGFjdGlvbi5rZXkgPT09IG1lbnVLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmICghYWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25zW21lbnVLZXkgYXMgc3RyaW5nXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly9jaGVjayBpZiBcImVuYWJsZWRcIiBpcyBvdmVyd3JpdHRlbiB2aWEgYSBtYW5pZmVzdCBlbnRyeVxuXHRcdFx0XHRcdFx0Y29uc3QgZW5hYmxlZDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQgPSBhY3Rpb25zW2FjdGlvbi5rZXldPy5lbmFibGVkO1xuXHRcdFx0XHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdChhY3Rpb24/LnZpc2libGUgfHxcblx0XHRcdFx0XHRcdFx0YWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRcdFx0XHRhY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSAmJlxuXHRcdFx0XHRcdFx0IWFIaWRkZW5IZWFkZXJBY3Rpb25zLmZpbmQoaGlkZGVuQWN0aW9uID0+IGhpZGRlbkFjdGlvbi5rZXkgPT09IG1lbnVLZXkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRtZW51VmlzaWJsZSA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0XHRvcihyZXNvbHZlQmluZGluZ1N0cmluZygoYWN0aW9uIGFzIGFueSkudmlzaWJsZSwgXCJib29sZWFuXCIpLCByZXNvbHZlQmluZGluZ1N0cmluZyhtZW51VmlzaWJsZSwgXCJib29sZWFuXCIpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdG1lbnVJdGVtcy5wdXNoKGFjdGlvbik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIG1lbnVLZXkgYXMgc3RyaW5nO1xuXHRcdFx0XHR9KSA/PyBbXTtcblxuXHRcdFx0Ly8gU2hvdyBtZW51IGJ1dHRvbiBpZiBpdCBoYXMgb25lIG9yIG1vcmUgdGhlbiAxIGl0ZW1zIHZpc2libGVcblx0XHRcdGlmIChtZW51SXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPSBtZW51VmlzaWJsZTtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb24ubWVudSA9IG1lbnVJdGVtcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9tZW51SXRlbUtleXMgPSBbYWN0aW9uS2V5XTtcblx0XHRcdH1cblxuXHRcdFx0bWVudUl0ZW1LZXlzID0gWy4uLm1lbnVJdGVtS2V5cywgLi4uX21lbnVJdGVtS2V5c107XG5cdFx0fVxuXHRcdGlmIChhSGlkZGVuSGVhZGVyQWN0aW9ucy5maW5kKGhpZGRlbkFjdGlvbiA9PiBoaWRkZW5BY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGFsbEFjdGlvbnNbYWN0aW9uS2V5XSA9IG1hbmlmZXN0QWN0aW9uO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRtZW51SXRlbUtleXM/LmZvckVhY2goKGFjdGlvbktleTogc3RyaW5nKSA9PiBkZWxldGUgYWxsQWN0aW9uc1thY3Rpb25LZXldKTtcblx0cmV0dXJuIGFsbEFjdGlvbnM7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zID0gKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSA9PiB7XG5cdGxldCBvTWVudUl0ZW1LZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cdGFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuXHRcdGlmIChhY3Rpb24/Lm1lbnU/Lmxlbmd0aCkge1xuXHRcdFx0b01lbnVJdGVtS2V5cyA9IGFjdGlvbi5tZW51LnJlZHVjZSgoaXRlbSwgeyBrZXkgfTogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChrZXkgJiYgIWl0ZW1ba2V5XSkge1xuXHRcdFx0XHRcdGl0ZW1ba2V5XSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9LCBvTWVudUl0ZW1LZXlzKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+ICFvTWVudUl0ZW1LZXlzW2FjdGlvbi5rZXldKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFjdGlvbiBkZWZhdWx0IHZhbHVlIGJhc2VkIG9uIGl0cyBraW5kLlxuICpcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSBhY3Rpb25zIGlmIG5vdCBvdmVyd3JpdHRlbiBpbiBtYW5pZmVzdC5cbiAqIEBwYXJhbSB7TWFuaWZlc3RBY3Rpb259IG1hbmlmZXN0QWN0aW9uIFRoZSBhY3Rpb24gY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBbm5vdGF0aW9uQWN0aW9uIFdoZXRoZXIgdGhlIGFjdGlvbiwgZGVmaW5lZCBpbiBtYW5pZmVzdCwgY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgYW5ub3RhdGlvbiBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmcgfCBib29sZWFufSBEZXRlcm1pbmVkIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgY29sdW1uXG4gKi9cbmNvbnN0IF9nZXRNYW5pZmVzdEVuYWJsZWQgPSBmdW5jdGlvbihcblx0bWFuaWZlc3RBY3Rpb246IE1hbmlmZXN0QWN0aW9uLFxuXHRpc0Fubm90YXRpb25BY3Rpb246IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmcgfCBib29sZWFuIHtcblx0aWYgKGlzQW5ub3RhdGlvbkFjdGlvbiAmJiBtYW5pZmVzdEFjdGlvbi5lbmFibGVkID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGFjdGlvbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgYWN0aW9uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vIFJldHVybiB3aGF0IGlzIGRlZmluZWQgaW4gbWFuaWZlc3QuXG5cdHJldHVybiBnZXRNYW5pZmVzdEFjdGlvbkVuYWJsZW1lbnQobWFuaWZlc3RBY3Rpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBhY3Rpb24gY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1hbmlmZXN0QWN0aW9uPiB8IHVuZGVmaW5lZH0gbWFuaWZlc3RBY3Rpb25zIFRoZSBtYW5pZmVzdCBhY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB7QmFzZUFjdGlvbltdfSBhQW5ub3RhdGlvbkFjdGlvbnMgVGhlIGFubm90YXRpb24gYWN0aW9ucyBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5nc1xuICogQHBhcmFtIHtib29sZWFufSBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0ge0Jhc2VBY3Rpb25bXX0gYUhpZGRlbkhlYWRlckFjdGlvbnMgVGhlIGhpZGRlbiBoZWFkZXIgYWN0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGZhY2V0TmFtZSBUaGUgZmFjZXQgd2hlcmUgYW4gYWN0aW9uIGlzIGRpc3BsYXllZCBpZiBpdCBpcyBpbmxpbmVcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+fSBUaGUgYWN0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFBbm5vdGF0aW9uQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3M/OiBib29sZWFuLFxuXHRhSGlkZGVuSGVhZGVyQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0ZmFjZXROYW1lPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+IHtcblx0Y29uc3QgYWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRjb25zdCBsYXN0RG90SW5kZXggPSBtYW5pZmVzdEFjdGlvbi5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXG5cdFx0Ly8gVG8gaWRlbnRpZnkgdGhlIGFubm90YXRpb24gYWN0aW9uIHByb3BlcnR5IG92ZXJ3cml0ZSB2aWEgbWFuaWZlc3QgdXNlLWNhc2UuXG5cdFx0Y29uc3QgaXNBbm5vdGF0aW9uQWN0aW9uID0gYUFubm90YXRpb25BY3Rpb25zPy5zb21lKGFjdGlvbiA9PiBhY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpIHx8IGZhbHNlO1xuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi5mYWNldE5hbWUpIHtcblx0XHRcdGZhY2V0TmFtZSA9IG1hbmlmZXN0QWN0aW9uLmZhY2V0TmFtZTtcblx0XHR9XG5cblx0XHRhY3Rpb25zW2FjdGlvbktleV0gPSB7XG5cdFx0XHRpZDogYUFubm90YXRpb25BY3Rpb25zPy5zb21lKGFjdGlvbiA9PiBhY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpID8gYWN0aW9uS2V5IDogQ3VzdG9tQWN0aW9uSUQoYWN0aW9uS2V5KSxcblx0XHRcdHZpc2libGU6IG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPT09IHVuZGVmaW5lZCA/IFwidHJ1ZVwiIDogbWFuaWZlc3RBY3Rpb24udmlzaWJsZSxcblx0XHRcdGVuYWJsZWQ6IF9nZXRNYW5pZmVzdEVuYWJsZWQobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYW5kbGVyTW9kdWxlOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdGhhbmRsZXJNZXRob2Q6IG1hbmlmZXN0QWN0aW9uLnByZXNzICYmIG1hbmlmZXN0QWN0aW9uLnByZXNzLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKSxcblx0XHRcdHByZXNzOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyxcblx0XHRcdHRleHQ6IG1hbmlmZXN0QWN0aW9uLnRleHQsXG5cdFx0XHRub1dyYXA6IG1hbmlmZXN0QWN0aW9uLl9fbm9XcmFwLFxuXHRcdFx0a2V5OiByZXBsYWNlU3BlY2lhbENoYXJzKGFjdGlvbktleSksXG5cdFx0XHRlbmFibGVPblNlbGVjdDogbWFuaWZlc3RBY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRWYWx1ZXNGdW5jdGlvbixcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0QWN0aW9uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzKSxcblx0XHRcdHJlcXVpcmVzU2VsZWN0aW9uOiBtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbixcblx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGVuYWJsZUF1dG9TY3JvbGwobWFuaWZlc3RBY3Rpb24pLFxuXHRcdFx0bWVudTogbWFuaWZlc3RBY3Rpb24ubWVudSA/PyBbXSxcblx0XHRcdGZhY2V0TmFtZTogbWFuaWZlc3RBY3Rpb24uaW5saW5lID8gZmFjZXROYW1lIDogdW5kZWZpbmVkXG5cdFx0fTtcblx0XHQvLyBEbyBub3Qgb3ZlcnJpZGUgdGhlICd0eXBlJyBnaXZlbiBpbiBhbiBhbm5vdGF0aW9uIGFjdGlvblxuXHRcdGlmICghaXNBbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0XHRhY3Rpb25zW2FjdGlvbktleV0udHlwZSA9IG1hbmlmZXN0QWN0aW9uLm1lbnUgPyBBY3Rpb25UeXBlLk1lbnUgOiBBY3Rpb25UeXBlLkRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVwYXJlTWVudUFjdGlvbihhY3Rpb25zLCBhQW5ub3RhdGlvbkFjdGlvbnMgPz8gW10sIGFIaWRkZW5IZWFkZXJBY3Rpb25zID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuaWZlc3RBY3Rpb25FbmFibGVtZW50KG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbiwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCByZXNvbHZlZEJpbmRpbmcgPSByZXNvbHZlQmluZGluZ1N0cmluZyhtYW5pZmVzdEFjdGlvbi5lbmFibGVkIGFzIHN0cmluZywgXCJib29sZWFuXCIpO1xuXHRsZXQgcmVzdWx0OiBhbnk7XG5cdGlmIChpc0NvbnN0YW50KHJlc29sdmVkQmluZGluZykgJiYgcmVzb2x2ZWRCaW5kaW5nLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBObyBlbmFibGVkIHByb3BlcnR5IGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QgZm9yIHRoZSBjdXN0b20gYWN0aW9uIC0tPiBlbmFibGUgY3VzdG9tIGFjdGlvblxuXHRcdHJlc3VsdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChyZXNvbHZlZEJpbmRpbmcpICYmIHR5cGVvZiByZXNvbHZlZEJpbmRpbmcudmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0Ly8gdHJ1ZSAvIGZhbHNlXG5cdFx0cmVzdWx0ID0gcmVzb2x2ZWRCaW5kaW5nLnZhbHVlO1xuXHR9IGVsc2UgaWYgKHJlc29sdmVkQmluZGluZy5fdHlwZSAhPT0gXCJFbWJlZGRlZEJpbmRpbmdcIiAmJiByZXNvbHZlZEJpbmRpbmcuX3R5cGUgIT09IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiKSB7XG5cdFx0Ly8gVGhlbiBpdCdzIGEgbW9kdWxlLW1ldGhvZCByZWZlcmVuY2UgXCJzYXAueHh4Lnl5eS5kb1NvbWV0aGluZ1wiXG5cdFx0Y29uc3QgbWV0aG9kUGF0aCA9IHJlc29sdmVkQmluZGluZy52YWx1ZSBhcyBzdHJpbmc7XG5cdFx0cmVzdWx0ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W2JpbmRpbmdFeHByZXNzaW9uKFwiL1wiLCBcIiR2aWV3XCIpLCBtZXRob2RQYXRoLCBiaW5kaW5nRXhwcmVzc2lvbihcInNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0XHRmcG1Gb3JtYXR0ZXIuY3VzdG9tSXNFbmFibGVkQ2hlY2sgYXMgYW55LFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIHRoZW4gaXQncyBhIGJpbmRpbmdcblx0XHRyZXN1bHQgPSByZXNvbHZlZEJpbmRpbmc7XG5cdH1cblxuXHQvLyBDb25zaWRlciByZXF1aXJlc1NlbGVjdGlvbiBwcm9wZXJ0eSB0byBpbmNsdWRlIHNlbGVjdGVkQ29udGV4dHMgaW4gdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0aWZFbHNlKFxuXHRcdFx0bWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUsXG5cdFx0XHRhbmQoZ3JlYXRlck9yRXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSksIHJlc3VsdCksXG5cdFx0XHRyZXN1bHRcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBhbiBhbm5vdGF0aW9uLWJhc2VkIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtBY3Rpb259IGFjdGlvblRhcmdldCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGFjdGlvblxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChhY3Rpb25UYXJnZXQ/LmlzQm91bmQgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKlxuXHQgICBGSVhNRSBEaXNhYmxlIGZhaWxpbmcgbXVzaWMgdGVzdHNcblx0XHRDdXJyZW50bHkgb24gQ0FQIHRoZSBmb2xsb3dpbmcgYmluZGluZyAod2hpY2ggaXMgdGhlIGdvb2Qgb25lKSBnZW5lcmF0ZXMgZXJyb3I6XG5cdGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gbnVsbCkge1xuXHRcdGNvbnN0IHVuYm91bmRBY3Rpb25OYW1lID0gYWN0aW9uVGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIihcIilbMF07XG5cdFx0cmV0dXJuIFwiez0gISR7I1wiICsgdW5ib3VuZEFjdGlvbk5hbWUgKyBcIn0gPyBmYWxzZSA6IHRydWUgfSB9XCI7XG5cdH1cblx0XHRDQVAgdHJpZXMgdG8gcmVhZCB0aGUgYWN0aW9uIGFzIHByb3BlcnR5IGFuZCBkb2Vzbid0IGZpbmQgaXRcblx0Ki9cblx0aWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lID0gYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0KSBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0aWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhlcXVhbChvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGFNYXBwaW5nczogYW55W10pOiBhbnlbXSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnlbXSA9IFtdO1xuXHRhTWFwcGluZ3MuZm9yRWFjaChvTWFwcGluZyA9PiB7XG5cdFx0Y29uc3Qgb1NPTWFwcGluZyA9IHtcblx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBvTWFwcGluZy5Mb2NhbFByb3BlcnR5LnZhbHVlXG5cdFx0XHR9LFxuXHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IG9NYXBwaW5nLlNlbWFudGljT2JqZWN0UHJvcGVydHlcblx0XHR9O1xuXHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmdzLnB1c2gob1NPTWFwcGluZyk7XG5cdH0pO1xuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbk5hdmlnYWJsZShcblx0YWN0aW9uOiBNYW5pZmVzdEFjdGlvbiB8IE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZDogYm9vbGVhbiA9IHRydWU7XG5cdGlmIChjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncykge1xuXHRcdGNvbnN0IGRldGFpbE9yRGlzcGxheSA9IG5hdmlnYXRpb25TZXR0aW5ncyAmJiAobmF2aWdhdGlvblNldHRpbmdzLmRldGFpbCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheSk7XG5cdFx0YklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSBkZXRhaWxPckRpc3BsYXk/LnJvdXRlID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdC8vIHdoZW4gZW5hYmxlQXV0b1Njcm9sbCBpcyB0cnVlIHRoZSBuYXZpZ2F0ZVRvSW5zdGFuY2UgZmVhdHVyZSBpcyBkaXNhYmxlZFxuXHRpZiAoXG5cdFx0KGFjdGlvbiAmJlxuXHRcdFx0YWN0aW9uLmFmdGVyRXhlY3V0aW9uICYmXG5cdFx0XHQoYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5uYXZpZ2F0ZVRvSW5zdGFuY2UgPT09IGZhbHNlIHx8IGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZSkpIHx8XG5cdFx0IWJJc05hdmlnYXRpb25Db25maWd1cmVkXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUF1dG9TY3JvbGwoYWN0aW9uOiBNYW5pZmVzdEFjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYWN0aW9uPy5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZTtcbn1cbiJdfQ==
366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFjdGlvbi50cyJdLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwicHJlcGFyZU1lbnVBY3Rpb24iLCJhY3Rpb25zIiwiYUFubm90YXRpb25BY3Rpb25zIiwiYUhpZGRlbkhlYWRlckFjdGlvbnMiLCJhbGxBY3Rpb25zIiwibWVudUl0ZW1LZXlzIiwiYWN0aW9uS2V5IiwibWFuaWZlc3RBY3Rpb24iLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJtZW51SXRlbXMiLCJtZW51VmlzaWJsZSIsIl9tZW51SXRlbUtleXMiLCJtZW51IiwibWFwIiwibWVudUtleSIsImFjdGlvbiIsImZpbmQiLCJrZXkiLCJlbmFibGVkIiwidmlzaWJsZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImhpZGRlbkFjdGlvbiIsImNvbXBpbGVCaW5kaW5nIiwib3IiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInB1c2giLCJsZW5ndGgiLCJmb3JFYWNoIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsIm9NZW51SXRlbUtleXMiLCJyZWR1Y2UiLCJpdGVtIiwiZmlsdGVyIiwiX2dldE1hbmlmZXN0RW5hYmxlZCIsImlzQW5ub3RhdGlvbkFjdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJ1bmRlZmluZWQiLCJnZXRNYW5pZmVzdEFjdGlvbkVuYWJsZW1lbnQiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RBY3Rpb25zIiwibmF2aWdhdGlvblNldHRpbmdzIiwiY29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3MiLCJmYWNldE5hbWUiLCJsYXN0RG90SW5kZXgiLCJwcmVzcyIsImxhc3RJbmRleE9mIiwic29tZSIsImlkIiwiQ3VzdG9tQWN0aW9uSUQiLCJoYW5kbGVyTW9kdWxlIiwic3Vic3RyaW5nIiwicmVwbGFjZSIsImhhbmRsZXJNZXRob2QiLCJ0ZXh0Iiwibm9XcmFwIiwiX19ub1dyYXAiLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwiZW5hYmxlT25TZWxlY3QiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJkZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJwb3NpdGlvbiIsImFuY2hvciIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlQXV0b1Njcm9sbCIsImlubGluZSIsIkRlZmF1bHQiLCJyZXNvbHZlZEJpbmRpbmciLCJyZXN1bHQiLCJpc0NvbnN0YW50IiwidmFsdWUiLCJfdHlwZSIsIm1ldGhvZFBhdGgiLCJmb3JtYXRSZXN1bHQiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImZwbUZvcm1hdHRlciIsImN1c3RvbUlzRW5hYmxlZENoZWNrIiwiZ2V0RW50aXR5VHlwZSIsImlmRWxzZSIsImFuZCIsImdyZWF0ZXJPckVxdWFsIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJhY3Rpb25UYXJnZXQiLCJpc0JvdW5kIiwicGFyYW1ldGVycyIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhdGgiLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiZXF1YWwiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJhTWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9NYXBwaW5nIiwib1NPTWFwcGluZyIsIkxvY2FsUHJvcGVydHkiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiYklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQiLCJkZXRhaWxPckRpc3BsYXkiLCJkZXRhaWwiLCJkaXNwbGF5Iiwicm91dGUiLCJhZnRlckV4ZWN1dGlvbiIsIm5hdmln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TUFBQUEsdUJBQXVCLEdBQUdDLGVBQWUsU0FBZixJQUFBQSxlQUFlLFdBQWYsSUFBQUEsZUFBZSxDQUFFRyxLQUFqQixHQUF5QixJQUF6QixHQUFnQyxLQUExRDtBQUNBLEtBTFMsQ0FNVjs7O0FBQ0EsUUFDRWhHLE1BQU0sSUFDTkEsTUFBTSxDQUFDaUcsY0FEUCxLQUVDLDBCQUFBakcsTUFBTSxDQUFDaUcsY0FBUCxnRkFBdUJDLGtCQUF2QixNQUE4QyxLQUE5QyxJQUF1RCwyQkFBQWxHLE1BQU0sQ0FBQ2lHLGNBQVAsa0ZBQXVCM0MsZ0JBQXZCLE1BQTRDLElBRnBHLENBQUQsSUFHQSxDQUFDc0MsdUJBSkYsRUFLRTtBQUNELGFBQU8sS0FBUDtBQUNBOztBQUNELFdBQU8sSUFBUDtBQUNBOzs7O0FBRU0sV0FBU3RDLGdCQUFULENBQTBCdEQsTUFBMUIsRUFBMkQ7QUFBQTs7QUFDakUsV0FBTyxDQUFBQSxNQUFNLFNBQU4sSUFBQUEsTUFBTSxXQUFOLHNDQUFBQSxNQUFNLENBQUVpRyxjQUFSLGtGQUF3QjNDLGdCQUF4QixNQUE2QyxJQUFwRDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEN1c3RvbUFjdGlvbklEIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgTWFuaWZlc3RBY3Rpb24sIE1hbmlmZXN0VGFibGVDb2x1bW4sIE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgZnBtRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRncmVhdGVyT3JFcXVhbCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRvcixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gQnV0dG9uVHlwZSB7XG5cdEFjY2VwdCA9IFwiQWNjZXB0XCIsXG5cdEF0dGVudGlvbiA9IFwiQXR0ZW50aW9uXCIsXG5cdEJhY2sgPSBcIkJhY2tcIixcblx0Q3JpdGljYWwgPSBcIkNyaXRpY2FsXCIsXG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0RW1waGFzaXplZCA9IFwiRW1waGFzaXplZFwiLFxuXHRHaG9zdCA9IFwiR2hvc3RcIixcblx0TmVnYXRpdmUgPSBcIk5lZ2F0aXZlXCIsXG5cdE5ldXRyYWwgPSBcIk5ldXRyYWxcIixcblx0UmVqZWN0ID0gXCJSZWplY3RcIixcblx0U3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuXHRUcmFuc3BhcmVudCA9IFwiVHJhbnNwYXJlbnRcIixcblx0VW5zdHlsZWQgPSBcIlVuc3R5bGVkXCIsXG5cdFVwID0gXCJVcFwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VBY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0eXBlPzogQWN0aW9uVHlwZTtcblx0cHJlc3M/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dmlzaWJsZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRlbmFibGVPblNlbGVjdD86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0cmVxdWlyZXNEaWFsb2c/OiBzdHJpbmc7XG5cdGJpbmRpbmc/OiBzdHJpbmc7XG5cdGJ1dHRvblR5cGU/OiBCdXR0b25UeXBlLkdob3N0IHwgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCB8IHN0cmluZztcblx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZD86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRtZW51PzogKHN0cmluZyB8IEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW107XG5cdGZhY2V0TmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb24gPSBCYXNlQWN0aW9uICYge1xuXHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0Y3VzdG9tRGF0YT86IHN0cmluZztcbn07XG5cbi8qKlxuICogRGVmaW5pdGlvbiBmb3IgY3VzdG9tIGFjdGlvbnNcbiAqXG4gKiBAdHlwZWRlZiBDdXN0b21BY3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tQWN0aW9uID0gQ3VzdG9tRWxlbWVudDxcblx0QmFzZUFjdGlvbiAmIHtcblx0XHR0eXBlPzogQWN0aW9uVHlwZS5EZWZhdWx0IHwgQWN0aW9uVHlwZS5NZW51O1xuXHRcdGhhbmRsZXJNZXRob2Q/OiBzdHJpbmc7XG5cdFx0aGFuZGxlck1vZHVsZT86IHN0cmluZztcblx0XHRtZW51PzogKHN0cmluZyB8IEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW107XG5cdFx0bm9XcmFwPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgd3JhcHBpbmcgZnJvbSB0aGUgRlBNSGVscGVyXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXHR9XG4+O1xuXG4vLyBSZXVzZSBvZiBDb25maWd1cmFibGVPYmplY3QgYW5kIEN1c3RvbUVsZW1lbnQgaXMgZG9uZSBmb3Igb3JkZXJpbmdcbmV4cG9ydCB0eXBlIENvbnZlcnRlckFjdGlvbiA9IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb247XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgbWVudSBhY3Rpb24gZnJvbSBtYW5pZmVzdCBhY3Rpb25zLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+fSBhY3Rpb25zIFRoZSBtYW5pZmVzdCBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge0Jhc2VBY3Rpb25bXX0gYUFubm90YXRpb25BY3Rpb25zIFRoZSBhbm5vdGF0aW9uIGFjdGlvbnMgZGVmaW5pdGlvblxuICogQHBhcmFtIGFIaWRkZW5IZWFkZXJBY3Rpb25zXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPn0gVGhlIGFjdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIHRoZSBtZW51IG9wdGlvbiB0aGF0IHdlcmUgYWRkZWRcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZU1lbnVBY3Rpb24oXG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdGFBbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRhSGlkZGVuSGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+IHtcblx0Y29uc3QgYWxsQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgbWVudUl0ZW1LZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXG5cdGZvciAoY29uc3QgYWN0aW9uS2V5IGluIGFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogQ3VzdG9tQWN0aW9uID0gYWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpIHtcblx0XHRcdGNvbnN0IG1lbnVJdGVtczogKEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW10gPSBbXTtcblx0XHRcdGxldCBtZW51VmlzaWJsZTogYW55ID0gZmFsc2U7XG5cdFx0XHRsZXQgX21lbnVJdGVtS2V5cyA9XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLm1lbnU/Lm1hcCgobWVudUtleTogc3RyaW5nIHwgQ3VzdG9tQWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0bGV0IGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZCA9IGFBbm5vdGF0aW9uQWN0aW9ucy5maW5kKFxuXHRcdFx0XHRcdFx0KGFjdGlvbjogQmFzZUFjdGlvbikgPT4gYWN0aW9uLmtleSA9PT0gbWVudUtleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFhY3Rpb24pIHtcblx0XHRcdFx0XHRcdGFjdGlvbiA9IGFjdGlvbnNbbWVudUtleSBhcyBzdHJpbmddO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvL2NoZWNrIGlmIFwiZW5hYmxlZFwiIGlzIG92ZXJ3cml0dGVuIHZpYSBhIG1hbmlmZXN0IGVudHJ5XG5cdFx0XHRcdFx0XHRjb25zdCBlbmFibGVkOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCA9IGFjdGlvbnNbYWN0aW9uLmtleV0/LmVuYWJsZWQ7XG5cdFx0XHRcdFx0XHRpZiAoZW5hYmxlZCkge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KGFjdGlvbj8udmlzaWJsZSB8fFxuXHRcdFx0XHRcdFx0XHRhY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdFx0XHRcdGFjdGlvbj8udHlwZSA9PT0gQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRcdFx0XHQhYUhpZGRlbkhlYWRlckFjdGlvbnMuZmluZCgoaGlkZGVuQWN0aW9uKSA9PiBoaWRkZW5BY3Rpb24ua2V5ID09PSBtZW51S2V5KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0bWVudVZpc2libGUgPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0b3IocmVzb2x2ZUJpbmRpbmdTdHJpbmcoKGFjdGlvbiBhcyBhbnkpLnZpc2libGUsIFwiYm9vbGVhblwiKSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudVZpc2libGUsIFwiYm9vbGVhblwiKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRtZW51SXRlbXMucHVzaChhY3Rpb24pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBtZW51S2V5IGFzIHN0cmluZztcblx0XHRcdFx0fSkgPz8gW107XG5cblx0XHRcdC8vIFNob3cgbWVudSBidXR0b24gaWYgaXQgaGFzIG9uZSBvciBtb3JlIHRoZW4gMSBpdGVtcyB2aXNpYmxlXG5cdFx0XHRpZiAobWVudUl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gbWVudVZpc2libGU7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLm1lbnUgPSBtZW51SXRlbXM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfbWVudUl0ZW1LZXlzID0gW2FjdGlvbktleV07XG5cdFx0XHR9XG5cblx0XHRcdG1lbnVJdGVtS2V5cyA9IFsuLi5tZW51SXRlbUtleXMsIC4uLl9tZW51SXRlbUtleXNdO1xuXHRcdH1cblx0XHRpZiAoYUhpZGRlbkhlYWRlckFjdGlvbnMuZmluZCgoaGlkZGVuQWN0aW9uKSA9PiBoaWRkZW5BY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGFsbEFjdGlvbnNbYWN0aW9uS2V5XSA9IG1hbmlmZXN0QWN0aW9uO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRtZW51SXRlbUtleXM/LmZvckVhY2goKGFjdGlvbktleTogc3RyaW5nKSA9PiBkZWxldGUgYWxsQWN0aW9uc1thY3Rpb25LZXldKTtcblx0cmV0dXJuIGFsbEFjdGlvbnM7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zID0gKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSA9PiB7XG5cdGxldCBvTWVudUl0ZW1LZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cdGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbj8ubWVudT8ubGVuZ3RoKSB7XG5cdFx0XHRvTWVudUl0ZW1LZXlzID0gYWN0aW9uLm1lbnUucmVkdWNlKChpdGVtLCB7IGtleSB9OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGtleSAmJiAhaXRlbVtrZXldKSB7XG5cdFx0XHRcdFx0aXRlbVtrZXldID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0sIG9NZW51SXRlbUtleXMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiAhb01lbnVJdGVtS2V5c1thY3Rpb24ua2V5XSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhY3Rpb24gZGVmYXVsdCB2YWx1ZSBiYXNlZCBvbiBpdHMga2luZC5cbiAqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlIGZvciBjdXN0b20gYWN0aW9ucyBpZiBub3Qgb3ZlcndyaXR0ZW4gaW4gbWFuaWZlc3QuXG4gKiBAcGFyYW0ge01hbmlmZXN0QWN0aW9ufSBtYW5pZmVzdEFjdGlvbiBUaGUgYWN0aW9uIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQW5ub3RhdGlvbkFjdGlvbiBXaGV0aGVyIHRoZSBhY3Rpb24sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHwgYm9vbGVhbn0gRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGNvbHVtblxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RFbmFibGVkID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24sXG5cdGlzQW5ub3RhdGlvbkFjdGlvbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uICYmIG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gYWN0aW9uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBhY3Rpb24ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gUmV0dXJuIHdoYXQgaXMgZGVmaW5lZCBpbiBtYW5pZmVzdC5cblx0cmV0dXJuIGdldE1hbmlmZXN0QWN0aW9uRW5hYmxlbWVudChtYW5pZmVzdEFjdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGFjdGlvbiBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWFuaWZlc3RBY3Rpb24+IHwgdW5kZWZpbmVkfSBtYW5pZmVzdEFjdGlvbnMgVGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtCYXNlQWN0aW9uW119IGFBbm5vdGF0aW9uQWN0aW9ucyBUaGUgYW5ub3RhdGlvbiBhY3Rpb25zIGRlZmluaXRpb25cbiAqIEBwYXJhbSB7TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbn0gbmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSB7QmFzZUFjdGlvbltdfSBhSGlkZGVuSGVhZGVyQWN0aW9ucyBUaGUgaGlkZGVuIGhlYWRlciBhY3Rpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gZmFjZXROYW1lIFRoZSBmYWNldCB3aGVyZSBhbiBhY3Rpb24gaXMgZGlzcGxheWVkIGlmIGl0IGlzIGlubGluZVxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj59IFRoZSBhY3Rpb25zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0QWN0aW9uPiB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YUFubm90YXRpb25BY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncz86IGJvb2xlYW4sXG5cdGFIaWRkZW5IZWFkZXJBY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRmYWNldE5hbWU/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4ge1xuXHRjb25zdCBhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cdGZvciAoY29uc3QgYWN0aW9uS2V5IGluIG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGNvbnN0IGxhc3REb3RJbmRleCA9IG1hbmlmZXN0QWN0aW9uLnByZXNzPy5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTE7XG5cblx0XHQvLyBUbyBpZGVudGlmeSB0aGUgYW5ub3RhdGlvbiBhY3Rpb24gcHJvcGVydHkgb3ZlcndyaXRlIHZpYSBtYW5pZmVzdCB1c2UtY2FzZS5cblx0XHRjb25zdCBpc0Fubm90YXRpb25BY3Rpb24gPSBhQW5ub3RhdGlvbkFjdGlvbnM/LnNvbWUoKGFjdGlvbikgPT4gYWN0aW9uLmtleSA9PT0gYWN0aW9uS2V5KSB8fCBmYWxzZTtcblx0XHRpZiAobWFuaWZlc3RBY3Rpb24uZmFjZXROYW1lKSB7XG5cdFx0XHRmYWNldE5hbWUgPSBtYW5pZmVzdEFjdGlvbi5mYWNldE5hbWU7XG5cdFx0fVxuXG5cdFx0YWN0aW9uc1thY3Rpb25LZXldID0ge1xuXHRcdFx0aWQ6IGFBbm5vdGF0aW9uQWN0aW9ucz8uc29tZSgoYWN0aW9uKSA9PiBhY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpID8gYWN0aW9uS2V5IDogQ3VzdG9tQWN0aW9uSUQoYWN0aW9uS2V5KSxcblx0XHRcdHZpc2libGU6IG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPT09IHVuZGVmaW5lZCA/IFwidHJ1ZVwiIDogbWFuaWZlc3RBY3Rpb24udmlzaWJsZSxcblx0XHRcdGVuYWJsZWQ6IF9nZXRNYW5pZmVzdEVuYWJsZWQobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYW5kbGVyTW9kdWxlOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdGhhbmRsZXJNZXRob2Q6IG1hbmlmZXN0QWN0aW9uLnByZXNzICYmIG1hbmlmZXN0QWN0aW9uLnByZXNzLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKSxcblx0XHRcdHByZXNzOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyxcblx0XHRcdHRleHQ6IG1hbmlmZXN0QWN0aW9uLnRleHQsXG5cdFx0XHRub1dyYXA6IG1hbmlmZXN0QWN0aW9uLl9fbm9XcmFwLFxuXHRcdFx0a2V5OiByZXBsYWNlU3BlY2lhbENoYXJzKGFjdGlvbktleSksXG5cdFx0XHRlbmFibGVPblNlbGVjdDogbWFuaWZlc3RBY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRWYWx1ZXNGdW5jdGlvbixcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0QWN0aW9uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzKSxcblx0XHRcdHJlcXVpcmVzU2VsZWN0aW9uOiBtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbixcblx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGVuYWJsZUF1dG9TY3JvbGwobWFuaWZlc3RBY3Rpb24pLFxuXHRcdFx0bWVudTogbWFuaWZlc3RBY3Rpb24ubWVudSA/PyBbXSxcblx0XHRcdGZhY2V0TmFtZTogbWFuaWZlc3RBY3Rpb24uaW5saW5lID8gZmFjZXROYW1lIDogdW5kZWZpbmVkXG5cdFx0fTtcblx0XHQvLyBEbyBub3Qgb3ZlcnJpZGUgdGhlICd0eXBlJyBnaXZlbiBpbiBhbiBhbm5vdGF0aW9uIGFjdGlvblxuXHRcdGlmICghaXNBbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0XHRhY3Rpb25zW2FjdGlvbktleV0udHlwZSA9IG1hbmlmZXN0QWN0aW9uLm1lbnUgPyBBY3Rpb25UeXBlLk1lbnUgOiBBY3Rpb25UeXBlLkRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVwYXJlTWVudUFjdGlvbihhY3Rpb25zLCBhQW5ub3RhdGlvbkFjdGlvbnMgPz8gW10sIGFIaWRkZW5IZWFkZXJBY3Rpb25zID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuaWZlc3RBY3Rpb25FbmFibGVtZW50KG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbiwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCByZXNvbHZlZEJpbmRpbmcgPSByZXNvbHZlQmluZGluZ1N0cmluZyhtYW5pZmVzdEFjdGlvbi5lbmFibGVkIGFzIHN0cmluZywgXCJib29sZWFuXCIpO1xuXHRsZXQgcmVzdWx0OiBhbnk7XG5cdGlmIChpc0NvbnN0YW50KHJlc29sdmVkQmluZGluZykgJiYgcmVzb2x2ZWRCaW5kaW5nLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBObyBlbmFibGVkIHByb3BlcnR5IGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QgZm9yIHRoZSBjdXN0b20gYWN0aW9uIC0tPiBlbmFibGUgY3VzdG9tIGFjdGlvblxuXHRcdHJlc3VsdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChyZXNvbHZlZEJpbmRpbmcpICYmIHR5cGVvZiByZXNvbHZlZEJpbmRpbmcudmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0Ly8gdHJ1ZSAvIGZhbHNlXG5cdFx0cmVzdWx0ID0gcmVzb2x2ZWRCaW5kaW5nLnZhbHVlO1xuXHR9IGVsc2UgaWYgKHJlc29sdmVkQmluZGluZy5fdHlwZSAhPT0gXCJFbWJlZGRlZEJpbmRpbmdcIiAmJiByZXNvbHZlZEJpbmRpbmcuX3R5cGUgIT09IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiKSB7XG5cdFx0Ly8gVGhlbiBpdCdzIGEgbW9kdWxlLW1ldGhvZCByZWZlcmVuY2UgXCJzYXAueHh4Lnl5eS5kb1NvbWV0aGluZ1wiXG5cdFx0Y29uc3QgbWV0aG9kUGF0aCA9IHJlc29sdmVkQmluZGluZy52YWx1ZSBhcyBzdHJpbmc7XG5cdFx0cmVzdWx0ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W2JpbmRpbmdFeHByZXNzaW9uKFwiL1wiLCBcIiR2aWV3XCIpLCBtZXRob2RQYXRoLCBiaW5kaW5nRXhwcmVzc2lvbihcInNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0XHRmcG1Gb3JtYXR0ZXIuY3VzdG9tSXNFbmFibGVkQ2hlY2sgYXMgYW55LFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIHRoZW4gaXQncyBhIGJpbmRpbmdcblx0XHRyZXN1bHQgPSByZXNvbHZlZEJpbmRpbmc7XG5cdH1cblxuXHQvLyBDb25zaWRlciByZXF1aXJlc1NlbGVjdGlvbiBwcm9wZXJ0eSB0byBpbmNsdWRlIHNlbGVjdGVkQ29udGV4dHMgaW4gdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0aWZFbHNlKFxuXHRcdFx0bWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUsXG5cdFx0XHRhbmQoZ3JlYXRlck9yRXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSksIHJlc3VsdCksXG5cdFx0XHRyZXN1bHRcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBhbiBhbm5vdGF0aW9uLWJhc2VkIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtBY3Rpb259IGFjdGlvblRhcmdldCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGFjdGlvblxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChhY3Rpb25UYXJnZXQ/LmlzQm91bmQgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKlxuXHQgICBGSVhNRSBEaXNhYmxlIGZhaWxpbmcgbXVzaWMgdGVzdHNcblx0XHRDdXJyZW50bHkgb24gQ0FQIHRoZSBmb2xsb3dpbmcgYmluZGluZyAod2hpY2ggaXMgdGhlIGdvb2Qgb25lKSBnZW5lcmF0ZXMgZXJyb3I6XG5cdGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gbnVsbCkge1xuXHRcdGNvbnN0IHVuYm91bmRBY3Rpb25OYW1lID0gYWN0aW9uVGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIihcIilbMF07XG5cdFx0cmV0dXJuIFwiez0gISR7I1wiICsgdW5ib3VuZEFjdGlvbk5hbWUgKyBcIn0gPyBmYWxzZSA6IHRydWUgfSB9XCI7XG5cdH1cblx0XHRDQVAgdHJpZXMgdG8gcmVhZCB0aGUgYWN0aW9uIGFzIHByb3BlcnR5IGFuZCBkb2Vzbid0IGZpbmQgaXRcblx0Ki9cblx0aWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lID0gYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0KSBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0aWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhlcXVhbChvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGFNYXBwaW5nczogYW55W10pOiBhbnlbXSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnlbXSA9IFtdO1xuXHRhTWFwcGluZ3MuZm9yRWFjaCgob01hcHBpbmcpID0+IHtcblx0XHRjb25zdCBvU09NYXBwaW5nID0ge1xuXHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IG9NYXBwaW5nLkxvY2FsUHJvcGVydHkudmFsdWVcblx0XHRcdH0sXG5cdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogb01hcHBpbmcuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVxuXHRcdH07XG5cdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MucHVzaChvU09NYXBwaW5nKTtcblx0fSk7XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRhY3Rpb246IE1hbmlmZXN0QWN0aW9uIHwgTWFuaWZlc3RUYWJsZUNvbHVtbixcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3M/OiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0bGV0IGJJc05hdmlnYXRpb25Db25maWd1cmVkOiBib29sZWFuID0gdHJ1ZTtcblx0aWYgKGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzKSB7XG5cdFx0Y29uc3QgZGV0YWlsT3JEaXNwbGF5ID0gbmF2aWdhdGlvblNldHRpbmdzICYmIChuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsIHx8IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5KTtcblx0XHRiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCA9IGRldGFpbE9yRGlzcGxheT8ucm91dGUgPyB0cnVlIDogZmFsc2U7XG5cdH1cblx0Ly8gd2hlbiBlbmFibGVBdXRvU2Nyb2xsIGlzIHRydWUgdGhlIG5hdmlnYXRlVG9JbnN0YW5jZSBmZWF0dXJlIGlzIGRpc2FibGVkXG5cdGlmIChcblx0XHQoYWN0aW9uICYmXG5cdFx0XHRhY3Rpb24uYWZ0ZXJFeGVjdXRpb24gJiZcblx0XHRcdChhY3Rpb24uYWZ0ZXJFeGVjdXRpb24/Lm5hdmlnYXRlVG9JbnN0YW5jZSA9PT0gZmFsc2UgfHwgYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5lbmFibGVBdXRvU2Nyb2xsID09PSB0cnVlKSkgfHxcblx0XHQhYklzTmF2aWdhdGlvbkNvbmZpZ3VyZWRcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQXV0b1Njcm9sbChhY3Rpb246IE1hbmlmZXN0QWN0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBhY3Rpb24/LmFmdGVyRXhlY3V0aW9uPy5lbmFibGVBdXRvU2Nyb2xsID09PSB0cnVlO1xufVxuIl19
@@ -1,26 +1,26 @@
1
1
  import { Action } from "@sap-ux/vocabularies-types";
2
- import { ActionType, ManifestAction, NavigationSettingsConfiguration, ManifestTableColumn } from "sap/fe/core/converters/ManifestSettings";
2
+ import { bindingContextPathVisitor } from "sap/fe/core/converters/helpers/BindingHelper";
3
3
  import { ConfigurableObject, CustomElement, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
4
4
  import { CustomActionID } from "sap/fe/core/converters/helpers/ID";
5
- import { replaceSpecialChars } from "sap/fe/core/helpers/StableIdHelper";
5
+ import { ActionType, ManifestAction, ManifestTableColumn, NavigationSettingsConfiguration } from "sap/fe/core/converters/ManifestSettings";
6
+ import fpmFormatter from "sap/fe/core/formatters/FPMFormatter";
6
7
  import {
8
+ and,
7
9
  annotationExpression,
8
10
  bindingExpression,
9
11
  BindingExpression,
12
+ BindingExpressionExpression,
10
13
  compileBinding,
11
- or,
12
- formatResult,
13
- isConstant,
14
- resolveBindingString,
15
14
  equal,
16
- BindingExpressionExpression,
15
+ formatResult,
16
+ greaterOrEqual,
17
17
  ifElse,
18
- and,
19
- greaterOrEqual
18
+ isConstant,
19
+ or,
20
+ resolveBindingString
20
21
  } from "sap/fe/core/helpers/BindingExpression";
21
- import fpmFormatter from "sap/fe/core/formatters/FPMFormatter";
22
+ import { replaceSpecialChars } from "sap/fe/core/helpers/StableIdHelper";
22
23
  import ConverterContext from "../../ConverterContext";
23
- import { bindingContextPathVisitor } from "sap/fe/core/converters/helpers/BindingHelper";
24
24
 
25
25
  export enum ButtonType {
26
26
  Accept = "Accept",
@@ -47,6 +47,7 @@ export type BaseAction = ConfigurableObject & {
47
47
  enabled?: BindingExpression<boolean>;
48
48
  visible?: BindingExpression<boolean>;
49
49
  enableOnSelect?: string;
50
+ annotationPath?: string;
50
51
  defaultValuesExtensionFunction?: string;
51
52
  isNavigable?: boolean;
52
53
  enableAutoScroll?: boolean;
@@ -123,7 +124,7 @@ function prepareMenuAction(
123
124
  (action?.visible ||
124
125
  action?.type === ActionType.DataFieldForAction ||
125
126
  action?.type === ActionType.DataFieldForIntentBasedNavigation) &&
126
- !aHiddenHeaderActions.find(hiddenAction => hiddenAction.key === menuKey)
127
+ !aHiddenHeaderActions.find((hiddenAction) => hiddenAction.key === menuKey)
127
128
  ) {
128
129
  menuVisible = compileBinding(
129
130
  or(resolveBindingString((action as any).visible, "boolean"), resolveBindingString(menuVisible, "boolean"))
@@ -144,7 +145,7 @@ function prepareMenuAction(
144
145
 
145
146
  menuItemKeys = [...menuItemKeys, ..._menuItemKeys];
146
147
  }
147
- if (aHiddenHeaderActions.find(hiddenAction => hiddenAction.key === actionKey)) {
148
+ if (aHiddenHeaderActions.find((hiddenAction) => hiddenAction.key === actionKey)) {
148
149
  manifestAction.visible = false;
149
150
  }
150
151
  allActions[actionKey] = manifestAction;
@@ -157,7 +158,7 @@ function prepareMenuAction(
157
158
 
158
159
  export const removeDuplicateActions = (actions: BaseAction[]): BaseAction[] => {
159
160
  let oMenuItemKeys: { [key: string]: any } = {};
160
- actions.forEach(action => {
161
+ actions.forEach((action) => {
161
162
  if (action?.menu?.length) {
162
163
  oMenuItemKeys = action.menu.reduce((item, { key }: any) => {
163
164
  if (key && !item[key]) {
@@ -167,7 +168,7 @@ export const removeDuplicateActions = (actions: BaseAction[]): BaseAction[] => {
167
168
  }, oMenuItemKeys);
168
169
  }
169
170
  });
170
- return actions.filter(action => !oMenuItemKeys[action.key]);
171
+ return actions.filter((action) => !oMenuItemKeys[action.key]);
171
172
  };
172
173
 
173
174
  /**
@@ -179,7 +180,7 @@ export const removeDuplicateActions = (actions: BaseAction[]): BaseAction[] => {
179
180
  * @param converterContext
180
181
  * @returns {BindingExpression<string> | string | boolean} Determined property value for the column
181
182
  */
182
- const _getManifestEnabled = function(
183
+ const _getManifestEnabled = function (
183
184
  manifestAction: ManifestAction,
184
185
  isAnnotationAction: boolean,
185
186
  converterContext: ConverterContext
@@ -219,13 +220,13 @@ export function getActionsFromManifest(
219
220
  const lastDotIndex = manifestAction.press?.lastIndexOf(".") || -1;
220
221
 
221
222
  // To identify the annotation action property overwrite via manifest use-case.
222
- const isAnnotationAction = aAnnotationActions?.some(action => action.key === actionKey) || false;
223
+ const isAnnotationAction = aAnnotationActions?.some((action) => action.key === actionKey) || false;
223
224
  if (manifestAction.facetName) {
224
225
  facetName = manifestAction.facetName;
225
226
  }
226
227
 
227
228
  actions[actionKey] = {
228
- id: aAnnotationActions?.some(action => action.key === actionKey) ? actionKey : CustomActionID(actionKey),
229
+ id: aAnnotationActions?.some((action) => action.key === actionKey) ? actionKey : CustomActionID(actionKey),
229
230
  visible: manifestAction.visible === undefined ? "true" : manifestAction.visible,
230
231
  enabled: _getManifestEnabled(manifestAction, isAnnotationAction, converterContext),
231
232
  handlerModule: manifestAction.press && manifestAction.press.substring(0, lastDotIndex).replace(/\./gi, "/"),
@@ -326,7 +327,7 @@ export function getEnabledForAnnotationAction(
326
327
 
327
328
  export function getSemanticObjectMapping(aMappings: any[]): any[] {
328
329
  const aSemanticObjectMappings: any[] = [];
329
- aMappings.forEach(oMapping => {
330
+ aMappings.forEach((oMapping) => {
330
331
  const oSOMapping = {
331
332
  "LocalProperty": {
332
333
  "$PropertyPath": oMapping.LocalProperty.value