@sapui5/sap.fe.core 1.121.2 → 1.123.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 (241) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -2
  5. package/src/sap/fe/core/CommonUtils.js +14 -171
  6. package/src/sap/fe/core/CommonUtils.ts +15 -221
  7. package/src/sap/fe/core/PageController.js +13 -1
  8. package/src/sap/fe/core/PageController.ts +16 -0
  9. package/src/sap/fe/core/TemplateComponent.js +6 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +8 -0
  11. package/src/sap/fe/core/UIProvider.js +23 -0
  12. package/src/sap/fe/core/UIProvider.ts +38 -0
  13. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
  17. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
  18. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
  21. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
  23. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
  24. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
  25. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
  26. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
  29. package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
  30. package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
  47. package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
  48. package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
  49. package/src/sap/fe/core/controllerextensions/Share.js +7 -7
  50. package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
  55. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
  56. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
  65. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
  66. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
  67. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
  68. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
  69. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
  70. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
  71. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
  72. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
  73. package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
  74. package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
  77. package/src/sap/fe/core/converters/ConverterContext.js +17 -9
  78. package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
  79. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
  85. package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
  86. package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
  87. package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
  88. package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
  89. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
  90. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
  91. package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
  92. package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
  93. package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
  94. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
  95. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
  96. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
  97. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
  98. package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
  99. package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
  100. package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
  101. package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
  102. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
  103. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
  104. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
  105. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
  106. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
  107. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
  108. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  109. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
  110. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  111. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
  112. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
  113. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
  114. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
  115. package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
  116. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
  117. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
  118. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  119. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
  120. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  121. package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
  122. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
  123. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
  124. package/src/sap/fe/core/converters/helpers/Key.js +2 -2
  125. package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
  126. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  127. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
  128. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
  129. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
  130. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
  132. package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
  133. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
  134. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
  135. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
  136. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  137. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
  138. package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
  139. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
  141. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
  142. package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
  143. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  144. package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
  145. package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
  146. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
  147. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
  150. package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
  151. package/src/sap/fe/core/fpm/manifest.json +1 -1
  152. package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
  153. package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
  154. package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
  155. package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
  156. package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
  157. package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
  158. package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
  159. package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
  160. package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
  161. package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
  162. package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
  163. package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
  166. package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
  167. package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
  168. package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
  169. package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
  170. package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
  171. package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
  172. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
  173. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
  174. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  175. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
  176. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
  177. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
  178. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
  180. package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
  181. package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
  182. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
  183. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
  184. package/src/sap/fe/core/library.js +1 -1
  185. package/src/sap/fe/core/messagebundle.properties +5 -2
  186. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  187. package/src/sap/fe/core/messagebundle_en.properties +267 -2
  188. package/src/sap/fe/core/messagebundle_sl.properties +1 -1
  189. package/src/sap/fe/core/operationsHelper.js +2 -1
  190. package/src/sap/fe/core/operationsHelper.ts +1 -0
  191. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
  192. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
  193. package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
  194. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
  195. package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
  196. package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
  197. package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
  198. package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
  199. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
  200. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
  201. package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
  202. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
  203. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
  204. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  205. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  206. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  207. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  208. package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
  209. package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
  210. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  211. package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
  212. package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
  213. package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
  214. package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
  215. package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
  216. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  217. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
  218. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  219. package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
  220. package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
  221. package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
  222. package/src/sap/fe/core/templating/FilterHelper.js +13 -10
  223. package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
  224. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  225. package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
  226. package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
  227. package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
  228. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  229. package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
  230. package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
  231. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
  232. package/src/sap/fe/core/templating/UIFormatters.js +23 -22
  233. package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
  234. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  235. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
  236. package/src/sap/fe/core/type/EDM.js +1 -1
  237. package/src/sap/fe/core/type/EDM.ts +2 -2
  238. package/src/sap/fe/core/type/Email.js +1 -1
  239. package/src/sap/fe/core/type/Email.ts +1 -1
  240. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  241. package/src/sap/fe/core/type/FiscalDate.ts +2 -2
@@ -162,4 +162,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/base/util/merge", "sap/fe/core/bu
162
162
  _exports = BuildingBlockTemplatingBase;
163
163
  return _exports;
164
164
  }, false);
165
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJwcm9wcyIsIl9jb250cm9sQ29uZmlndXJhdGlvbiIsIl92aXNpdG9yU2V0dGluZ3MiLCJpc1B1YmxpYyIsImdldENvbnZlcnRlckNvbnRleHQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJzZXR0aW5ncyIsImV4dHJhUGFyYW1zIiwiYXBwQ29tcG9uZW50Iiwib3JpZ2luYWxWaWV3RGF0YSIsIm1vZGVscyIsInZpZXdEYXRhIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInJlc291cmNlTW9kZWwiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInJlbGF0aXZlUGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJlbnRpdHlTZXQiLCJtZXJnZSIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIm5hbWUiLCJtZXRhTW9kZWwiLCJnZXREaWFnbm9zdGljcyIsImtleXMiLCJmb3JFYWNoIiwicHJvcE5hbWUiLCJjcmVhdGVJZCIsImlkIiwic3RyaW5nUGFydHMiLCJnZW5lcmF0ZSIsInVuZGVmaW5lZCIsImdldENvbnRlbnRJZCIsImJ1aWxkaW5nQmxvY2tJZCIsImdldFRyYW5zbGF0ZWRUZXh0IiwidGV4dElEIiwicGFyYW1ldGVycyIsIm1ldGFQYXRoIiwiZ2V0VGV4dCIsImdldFByb3BlcnRpZXMiLCJhbGxQcm9wZXJ0aWVzIiwib0luc3RhbmNlS2V5IiwiaGFzT3duUHJvcGVydHkiLCJyZWdpc3RlciIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXIiLCJ1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsImFkZENvbmRpdGlvbmFsbHkiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhdHRyIiwiYXR0cmlidXRlTmFtZSIsInZhbHVlIiwiaXNVbmRlZmluZWRFeHByZXNzaW9uIiwieG1sIiwiaW50ZXJuYWxNZXRhZGF0YSIsIm5hbWVzcGFjZSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJzdGVyZW90eXBlIiwiaXNSdW50aW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsIE9iamVjdFZhbHVlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHtcblx0VGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0WE1MUHJvY2Vzc29yVHlwZVZhbHVlXG59IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jaywgeG1sIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBidWlsZGluZyBibG9ja3NcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIHtcblx0cHJpdmF0ZSBzdGF0aWMgaW50ZXJuYWxNZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXG5cdHB1YmxpYyBzdGF0aWMgZ2V0IG1ldGFkYXRhKCk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdFx0Ly8gV2UgbmVlZCB0byBzdG9yZSB0aGUgbWV0YWRhdGEgb24gdGhlIGFjdHVhbCBzdWJjbGFzcywgbm90IG9uIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVxuXHRcdHRoaXMuaW50ZXJuYWxNZXRhZGF0YSA/Pz0ge1xuXHRcdFx0bmFtZXNwYWNlOiBcIlwiLFxuXHRcdFx0bmFtZTogXCJcIixcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHN0ZXJlb3R5cGU6IFwieG1sbWFjcm9cIlxuXHRcdH07XG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJuYWxNZXRhZGF0YTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgaXNSdW50aW1lOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIGlzUHVibGljID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZXNvdXJjZU1vZGVsPzogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQgaWQ/OiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBfY29udHJvbENvbmZpZ3VyYXRpb24/OiB1bmtub3duLCBfdmlzaXRvclNldHRpbmdzPzogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0dGhpc1twcm9wTmFtZSBhcyBrZXlvZiB0aGlzXSA9IHByb3BzW3Byb3BOYW1lXSBhcyBuZXZlcjtcblx0XHR9KTtcblxuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IF92aXNpdG9yU2V0dGluZ3M/Lm1vZGVscz8uW1wic2FwLmZlLmkxOG5cIl07XG5cdH1cblxuXHQvKipcblx0ICogT25seSB1c2VkIGludGVybmFsbHlcblx0ICpcblx0ICovXG5cdHB1YmxpYyBnZXRUZW1wbGF0ZT8ob05vZGU/OiBFbGVtZW50KTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBlbGVtZW50IElEIHRvIGEgZ2xvYmFsbHkgdW5pcXVlIElEIGJ5IHByZWZpeGluZyB3aXRoIHRoZSBCdWlsZGluZyBCbG9jayBJRC5cblx0ICpcblx0ICogQHBhcmFtIHN0cmluZ1BhcnRzXG5cdCAqIEByZXR1cm5zIEVpdGhlciB0aGUgZ2xvYmFsIElEIG9yIHVuZGVmaW5lZCBpZiB0aGUgQnVpbGRpbmcgQmxvY2sgZG9lc24ndCBoYXZlIGFuIElEXG5cdCAqL1xuXHRwcm90ZWN0ZWQgY3JlYXRlSWQoLi4uc3RyaW5nUGFydHM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHQvLyBJZiB0aGUgY2hpbGQgaW5zdGFuY2UgaGFzIGFuIElEIHByb3BlcnR5IHVzZSBpdCBvdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gZ2VuZXJhdGUoW3RoaXMuaWQsIC4uLnN0cmluZ1BhcnRzXSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBJRCBvZiB0aGUgY29udGVudCBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gYnVpbGRpbmdCbG9ja0lkXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgSURcblx0ICovXG5cdHByb3RlY3RlZCBnZXRDb250ZW50SWQoYnVpbGRpbmdCbG9ja0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgJHtidWlsZGluZ0Jsb2NrSWR9LWNvbnRlbnRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJhbnNsYXRlZCB0ZXh0IGZvciBhIGdpdmVuIHJlc291cmNlIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHRleHRJRCBJRCBvZiB0aGUgVGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBBcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0XG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBFbnRpdHkgc2V0IG5hbWUgb3IgYWN0aW9uIG5hbWUgdG8gb3ZlcmxvYWQgYSB0ZXh0XG5cdCAqIEByZXR1cm5zIERldGVybWluZWQgdGV4dFxuXHQgKi9cblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dElEOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiB1bmtub3duW10sIG1ldGFQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsPy5nZXRUZXh0KHRleHRJRCwgcGFyYW1ldGVycywgbWV0YVBhdGgpIHx8IHRleHRJRDtcblx0fVxuXG5cdHByb3RlY3RlZCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRleHRyYVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cdCk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHNldHRpbmdzLmFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvcmlnaW5hbFZpZXdEYXRhID0gc2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhPy5nZXREYXRhKCk7XG5cdFx0bGV0IHZpZXdEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWxWaWV3RGF0YSk7XG5cdFx0ZGVsZXRlIHZpZXdEYXRhLnJlc291cmNlTW9kZWw7XG5cdFx0ZGVsZXRlIHZpZXdEYXRhLmFwcENvbXBvbmVudDtcblx0XHR2aWV3RGF0YSA9IGRlZXBDbG9uZSh2aWV3RGF0YSk7XG5cdFx0bGV0IGNvbnRyb2xDb25maWd1cmF0aW9uID0ge307XG5cdFx0Ly8gT25seSBtZXJnZSBpbiBwYWdlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBpZiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgb24gdGhlIHNhbWUgY29udGV4dFxuXHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24gPz8gZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0aWYgKHJlbGF0aXZlUGF0aCA9PT0gb3JpZ2luYWxWaWV3RGF0YT8uY29udGV4dFBhdGggfHwgcmVsYXRpdmVQYXRoID09PSBgLyR7b3JpZ2luYWxWaWV3RGF0YT8uZW50aXR5U2V0fWApIHtcblx0XHRcdGNvbnRyb2xDb25maWd1cmF0aW9uID0gdmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb247XG5cdFx0fVxuXHRcdHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uID0gbWVyZ2UoY29udHJvbENvbmZpZ3VyYXRpb24sIGV4dHJhUGFyYW1zIHx8IHt9KTtcblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRzZXR0aW5ncy5tb2RlbHMubWV0YU1vZGVsLFxuXHRcdFx0YXBwQ29tcG9uZW50Py5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRcdHZpZXdEYXRhXG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogT25seSB1c2VkIGludGVybmFsbHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEFsbCB0aGUgcHJvcGVydGllcyBkZWZpbmVkIG9uIHRoZSBvYmplY3Qgd2l0aCB0aGVpciB2YWx1ZXNcblx0ICovXG5cdHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCk6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPiB7XG5cdFx0Y29uc3QgYWxsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+ID0ge307XG5cdFx0Zm9yIChjb25zdCBvSW5zdGFuY2VLZXkgaW4gdGhpcykge1xuXHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkob0luc3RhbmNlS2V5KSkge1xuXHRcdFx0XHRhbGxQcm9wZXJ0aWVzW29JbnN0YW5jZUtleV0gPSB0aGlzW29JbnN0YW5jZUtleV0gYXMgdW5rbm93biBhcyBPYmplY3RWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFsbFByb3BlcnRpZXM7XG5cdH1cblxuXHRzdGF0aWMgcmVnaXN0ZXIoKTogdm9pZCB7XG5cdFx0cmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKHRoaXMpO1xuXHR9XG5cblx0c3RhdGljIHVucmVnaXN0ZXIoKTogdm9pZCB7XG5cdFx0dW5yZWdpc3RlckJ1aWxkaW5nQmxvY2sodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgcGFydCBvZiBzdHJpbmcgYmFzZWQgb24gdGhlIGNvbmRpdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbmRpdGlvblxuXHQgKiBAcGFyYW0gcGFydFRvQWRkXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJ0IHRvIGFkZCBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmdcblx0ICovXG5cdHByb3RlY3RlZCBhZGRDb25kaXRpb25hbGx5KGNvbmRpdGlvbjogYm9vbGVhbiwgcGFydFRvQWRkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChjb25kaXRpb24pIHtcblx0XHRcdHJldHVybiBwYXJ0VG9BZGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYW4gYXR0cmlidXRlIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIElmIGl0J3MgdW5kZWZpbmVkIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGFkZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlTmFtZVxuXHQgKiBAcGFyYW0gdmFsdWVcblx0ICogQHJldHVybnMgVGhlIGF0dHJpYnV0ZSB0byBhZGQgaWYgdGhlIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmdcblx0ICovXG5cdHByb3RlY3RlZCBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU/OiBYTUxQcm9jZXNzb3JUeXBlVmFsdWUpOiAoKSA9PiBzdHJpbmcge1xuXHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFpc1VuZGVmaW5lZEV4cHJlc3Npb24odmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gKCkgPT4geG1sYCR7YXR0cmlidXRlTmFtZX09XCIke3ZhbHVlfVwiYDtcblx0XHR9IGVsc2Ug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
165
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJwcm9wcyIsIl9jb250cm9sQ29uZmlndXJhdGlvbiIsIl92aXNpdG9yU2V0dGluZ3MiLCJpc1B1YmxpYyIsImdldENvbnZlcnRlckNvbnRleHQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJzZXR0aW5ncyIsImV4dHJhUGFyYW1zIiwiYXBwQ29tcG9uZW50Iiwib3JpZ2luYWxWaWV3RGF0YSIsIm1vZGVscyIsInZpZXdEYXRhIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInJlc291cmNlTW9kZWwiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInJlbGF0aXZlUGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJlbnRpdHlTZXQiLCJtZXJnZSIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIm5hbWUiLCJtZXRhTW9kZWwiLCJnZXREaWFnbm9zdGljcyIsImtleXMiLCJmb3JFYWNoIiwicHJvcE5hbWUiLCJjcmVhdGVJZCIsImlkIiwic3RyaW5nUGFydHMiLCJnZW5lcmF0ZSIsInVuZGVmaW5lZCIsImdldENvbnRlbnRJZCIsImJ1aWxkaW5nQmxvY2tJZCIsImdldFRyYW5zbGF0ZWRUZXh0IiwidGV4dElEIiwicGFyYW1ldGVycyIsIm1ldGFQYXRoIiwiZ2V0VGV4dCIsImdldFByb3BlcnRpZXMiLCJhbGxQcm9wZXJ0aWVzIiwib0luc3RhbmNlS2V5IiwiaGFzT3duUHJvcGVydHkiLCJyZWdpc3RlciIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXIiLCJ1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsImFkZENvbmRpdGlvbmFsbHkiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhdHRyIiwiYXR0cmlidXRlTmFtZSIsInZhbHVlIiwiaXNVbmRlZmluZWRFeHByZXNzaW9uIiwieG1sIiwiaW50ZXJuYWxNZXRhZGF0YSIsIm5hbWVzcGFjZSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJzdGVyZW90eXBlIiwiaXNSdW50aW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsIE9iamVjdFZhbHVlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHtcblx0VGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0WE1MUHJvY2Vzc29yVHlwZVZhbHVlXG59IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jaywgeG1sIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBidWlsZGluZyBibG9ja3NcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIHtcblx0cHJpdmF0ZSBzdGF0aWMgaW50ZXJuYWxNZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXG5cdHB1YmxpYyBzdGF0aWMgZ2V0IG1ldGFkYXRhKCk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdFx0Ly8gV2UgbmVlZCB0byBzdG9yZSB0aGUgbWV0YWRhdGEgb24gdGhlIGFjdHVhbCBzdWJjbGFzcywgbm90IG9uIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVxuXHRcdHRoaXMuaW50ZXJuYWxNZXRhZGF0YSA/Pz0ge1xuXHRcdFx0bmFtZXNwYWNlOiBcIlwiLFxuXHRcdFx0bmFtZTogXCJcIixcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHN0ZXJlb3R5cGU6IFwieG1sbWFjcm9cIlxuXHRcdH07XG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJuYWxNZXRhZGF0YTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgaXNSdW50aW1lOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIGlzUHVibGljID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZXNvdXJjZU1vZGVsPzogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQgaWQ/OiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBfY29udHJvbENvbmZpZ3VyYXRpb24/OiB1bmtub3duLCBfdmlzaXRvclNldHRpbmdzPzogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0dGhpc1twcm9wTmFtZSBhcyBrZXlvZiB0aGlzXSA9IHByb3BzW3Byb3BOYW1lXSBhcyBuZXZlcjtcblx0XHR9KTtcblxuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IF92aXNpdG9yU2V0dGluZ3M/Lm1vZGVscz8uW1wic2FwLmZlLmkxOG5cIl07XG5cdH1cblxuXHQvKipcblx0ICogT25seSB1c2VkIGludGVybmFsbHlcblx0ICpcblx0ICovXG5cdHB1YmxpYyBnZXRUZW1wbGF0ZT8ob05vZGU/OiBFbGVtZW50KTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBlbGVtZW50IElEIHRvIGEgZ2xvYmFsbHkgdW5pcXVlIElEIGJ5IHByZWZpeGluZyB3aXRoIHRoZSBCdWlsZGluZyBCbG9jayBJRC5cblx0ICpcblx0ICogQHBhcmFtIHN0cmluZ1BhcnRzXG5cdCAqIEByZXR1cm5zIEVpdGhlciB0aGUgZ2xvYmFsIElEIG9yIHVuZGVmaW5lZCBpZiB0aGUgQnVpbGRpbmcgQmxvY2sgZG9lc24ndCBoYXZlIGFuIElEXG5cdCAqL1xuXHRwcm90ZWN0ZWQgY3JlYXRlSWQoLi4uc3RyaW5nUGFydHM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHQvLyBJZiB0aGUgY2hpbGQgaW5zdGFuY2UgaGFzIGFuIElEIHByb3BlcnR5IHVzZSBpdCBvdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gZ2VuZXJhdGUoW3RoaXMuaWQsIC4uLnN0cmluZ1BhcnRzXSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBJRCBvZiB0aGUgY29udGVudCBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gYnVpbGRpbmdCbG9ja0lkXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgSURcblx0ICovXG5cdHByb3RlY3RlZCBnZXRDb250ZW50SWQoYnVpbGRpbmdCbG9ja0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgJHtidWlsZGluZ0Jsb2NrSWR9LWNvbnRlbnRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJhbnNsYXRlZCB0ZXh0IGZvciBhIGdpdmVuIHJlc291cmNlIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHRleHRJRCBJRCBvZiB0aGUgVGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBBcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0XG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBFbnRpdHkgc2V0IG5hbWUgb3IgYWN0aW9uIG5hbWUgdG8gb3ZlcmxvYWQgYSB0ZXh0XG5cdCAqIEByZXR1cm5zIERldGVybWluZWQgdGV4dFxuXHQgKi9cblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dElEOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiB1bmtub3duW10sIG1ldGFQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsPy5nZXRUZXh0KHRleHRJRCwgcGFyYW1ldGVycywgbWV0YVBhdGgpIHx8IHRleHRJRDtcblx0fVxuXG5cdHByb3RlY3RlZCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRleHRyYVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cdCk6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gc2V0dGluZ3MuYXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9yaWdpbmFsVmlld0RhdGEgPSBzZXR0aW5ncy5tb2RlbHMudmlld0RhdGE/LmdldERhdGEoKTtcblx0XHRsZXQgdmlld0RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbFZpZXdEYXRhKTtcblx0XHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VNb2RlbDtcblx0XHRkZWxldGUgdmlld0RhdGEuYXBwQ29tcG9uZW50O1xuXHRcdHZpZXdEYXRhID0gZGVlcENsb25lKHZpZXdEYXRhKTtcblx0XHRsZXQgY29udHJvbENvbmZpZ3VyYXRpb24gPSB7fTtcblx0XHQvLyBPbmx5IG1lcmdlIGluIHBhZ2UgY29udHJvbCBjb25maWd1cmF0aW9uIGlmIHRoZSBidWlsZGluZyBibG9jayBpcyBvbiB0aGUgc2FtZSBjb250ZXh0XG5cdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiA/PyBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAocmVsYXRpdmVQYXRoID09PSBvcmlnaW5hbFZpZXdEYXRhPy5jb250ZXh0UGF0aCB8fCByZWxhdGl2ZVBhdGggPT09IGAvJHtvcmlnaW5hbFZpZXdEYXRhPy5lbnRpdHlTZXR9YCkge1xuXHRcdFx0Y29udHJvbENvbmZpZ3VyYXRpb24gPSB2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbjtcblx0XHR9XG5cdFx0dmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gPSBtZXJnZShjb250cm9sQ29uZmlndXJhdGlvbiwgZXh0cmFQYXJhbXMgfHwge30pO1xuXHRcdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdHNldHRpbmdzLm1vZGVscy5tZXRhTW9kZWwsXG5cdFx0XHRhcHBDb21wb25lbnQ/LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRtZXJnZSxcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0dmlld0RhdGFcblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBPbmx5IHVzZWQgaW50ZXJuYWxseS5cblx0ICpcblx0ICogQHJldHVybnMgQWxsIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgb24gdGhlIG9iamVjdCB3aXRoIHRoZWlyIHZhbHVlc1xuXHQgKi9cblx0cHVibGljIGdldFByb3BlcnRpZXMoKTogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+IHtcblx0XHRjb25zdCBhbGxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IG9JbnN0YW5jZUtleSBpbiB0aGlzKSB7XG5cdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShvSW5zdGFuY2VLZXkpKSB7XG5cdFx0XHRcdGFsbFByb3BlcnRpZXNbb0luc3RhbmNlS2V5XSA9IHRoaXNbb0luc3RhbmNlS2V5XSBhcyB1bmtub3duIGFzIE9iamVjdFZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWxsUHJvcGVydGllcztcblx0fVxuXG5cdHN0YXRpYyByZWdpc3RlcigpOiB2b2lkIHtcblx0XHRyZWdpc3RlckJ1aWxkaW5nQmxvY2sodGhpcyk7XG5cdH1cblxuXHRzdGF0aWMgdW5yZWdpc3RlcigpOiB2b2lkIHtcblx0XHR1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBwYXJ0IG9mIHN0cmluZyBiYXNlZCBvbiB0aGUgY29uZGl0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uXG5cdCAqIEBwYXJhbSBwYXJ0VG9BZGRcblx0ICogQHJldHVybnMgVGhlIHBhcnQgdG8gYWRkIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIGFuIGVtcHR5IHN0cmluZ1xuXHQgKi9cblx0cHJvdGVjdGVkIGFkZENvbmRpdGlvbmFsbHkoY29uZGl0aW9uOiBib29sZWFuLCBwYXJ0VG9BZGQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKGNvbmRpdGlvbikge1xuXHRcdFx0cmV0dXJuIHBhcnRUb0FkZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhbiBhdHRyaWJ1dGUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICogSWYgaXQncyB1bmRlZmluZWQgdGhlIGF0dHJpYnV0ZSBpcyBub3QgYWRkZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgYXR0cmlidXRlIHRvIGFkZCBpZiB0aGUgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGFuIGVtcHR5IHN0cmluZ1xuXHQgKi9cblx0cHJvdGVjdGVkIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZT86IFhNTFByb2Nlc3NvclR5cGVWYWx1ZSk6ICgpID0+IHN0cmluZyB7XG5cdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWlzVW5kZWZpbmVkRXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdHJldHVybiAoKSA9PiB4bWxgJHthdHRyaWJ1dGVOYW1lfT1cIiR7dmFsdWV9XCJgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKCkgPT4gXCJcIjtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0VBZ0JBO0FBQ0E7QUFDQTtFQUZBLElBR3FCQSwyQkFBMkI7SUF1Qi9DLHFDQUFZQyxLQUE4QixFQUFFQyxxQkFBK0IsRUFBRUMsZ0JBQTRDLEVBQUU7TUFBQTtNQUFBLEtBTmpIQyxRQUFRLEdBQUcsS0FBSztNQUFBLEtBd0RoQkMsbUJBQW1CLEdBQUcsVUFDL0JDLG1CQUFpRCxFQUNqREMsV0FBK0IsRUFDL0JDLFFBQW1DLEVBQ25DQyxXQUFxQyxFQUNLO1FBQUE7UUFDMUMsTUFBTUMsWUFBWSxHQUFHRixRQUFRLENBQUNFLFlBQVk7UUFDMUMsTUFBTUMsZ0JBQWdCLDRCQUFHSCxRQUFRLENBQUNJLE1BQU0sQ0FBQ0MsUUFBUSwwREFBeEIsc0JBQTBCQyxPQUFPLEVBQUU7UUFDNUQsSUFBSUQsUUFBUSxHQUFHRSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUwsZ0JBQWdCLENBQUM7UUFDbEQsT0FBT0UsUUFBUSxDQUFDSSxhQUFhO1FBQzdCLE9BQU9KLFFBQVEsQ0FBQ0gsWUFBWTtRQUM1QkcsUUFBUSxHQUFHSyxTQUFTLENBQUNMLFFBQVEsQ0FBQztRQUM5QixJQUFJTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDN0I7UUFDQSxNQUFNQyxZQUFZLEdBQUdDLG1CQUFtQixDQUFDZixtQkFBbUIsQ0FBQ2dCLGVBQWUsSUFBSWhCLG1CQUFtQixDQUFDO1FBQ3BHLElBQUljLFlBQVksTUFBS1QsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRUosV0FBVyxLQUFJYSxZQUFZLEtBQU0s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
@@ -1,5 +1,6 @@
1
1
  import deepClone from "sap/base/util/deepClone";
2
2
  import merge from "sap/base/util/merge";
3
+ import type ResourceModel from "sap/fe/core/ResourceModel";
3
4
  import type { BuildingBlockMetadata, ObjectValue } from "sap/fe/core/buildingBlocks/templating/BuildingBlockSupport";
4
5
  import type {
5
6
  TemplateProcessorSettings,
@@ -7,9 +8,9 @@ import type {
7
8
  } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
8
9
  import { registerBuildingBlock, unregisterBuildingBlock, xml } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
9
10
  import ConverterContext from "sap/fe/core/converters/ConverterContext";
11
+ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
10
12
  import { isUndefinedExpression } from "sap/fe/core/helpers/BindingToolkit";
11
13
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
12
- import type ResourceModel from "sap/fe/core/ResourceModel";
13
14
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
14
15
  import { getTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
15
16
 
@@ -90,11 +91,11 @@ export default class BuildingBlockTemplatingBase {
90
91
  }
91
92
 
92
93
  protected getConverterContext = function (
93
- dataModelObjectPath: DataModelObjectPath,
94
+ dataModelObjectPath: DataModelObjectPath<unknown>,
94
95
  contextPath: string | undefined,
95
96
  settings: TemplateProcessorSettings,
96
97
  extraParams?: Record<string, unknown>
97
- ): ConverterContext {
98
+ ): ConverterContext<PageContextPathTarget> {
98
99
  const appComponent = settings.appComponent;
99
100
  const originalViewData = settings.models.viewData?.getData();
100
101
  let viewData = Object.assign({}, originalViewData);
@@ -239,4 +239,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Hook
239
239
  });
240
240
  return _exports;
241
241
  }, false);
242
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50IiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiRnJhZ21lbnQiLCJSVU5USU1FX0JMT0NLUyIsInN0b3JlUnVudGltZUJsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJuYW1lIiwicmVnaXN0ZXJUeXBlIiwibG9hZCIsIm1TZXR0aW5ncyIsImJ1aWxkaW5nQmxvY2tEZXRhaWwiLCJmcmFnbWVudE5hbWUiLCJlIiwibG9hZEVycm9yTWVzc2FnZSIsImluaXQiLCJMYWJlbCIsInRleHQiLCJmcmFnbWVudENvbnRlbnQiLCJ1bmRlZmluZWQiLCJFcnJvciIsImNsYXNzU2V0dGluZ3MiLCJmZUN1c3RvbURhdGEiLCJjdXN0b21EYXRhIiwibVByb3BlcnRpZXMiLCJ2YWx1ZSIsImZ1bmN0aW9uSG9sZGVyIiwiY29udGFpbmluZ1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0VmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicGFnZU1vZGVsIiwiZ2V0TW9kZWwiLCJmdW5jdGlvblN0cmluZ0luT3JkZXIiLCJzcGxpdCIsInByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24iLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlNZXRhZGF0YSIsInBhZ2VNb2RlbENvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImJpbmRhYmxlIiwiTnVtYmVyIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJmdW5jdGlvbkluZGV4IiwiaW5kZXhPZiIsImZ1bmN0aW9uU3RyaW5nIiwidGFyZ2V0RnVuY3Rpb24iLCJmaW5kIiwiZnVuY3Rpb25EZWYiLCJfc2FwdWlfaGFuZGxlck5hbWUiLCJsZW5ndGgiLCJiaW5kIiwiZ2V0T2JqZWN0IiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyZWRDb250cm9sIiwianN4Iiwid2l0aENvbnRleHQiLCJ2aWV3IiwidGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiSlNPTk1vZGVsIiwiaXNSdW50aW1lSW5zdGFudGlhdGlvbiIsImJ1aWxkaW5nQmxvY2tJbnN0YW5jZSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiZnJhZ21lbnRYTUwiLCJkZXBlbmRlbnRzIiwiZGVwZW5kZW50IiwiYWRkRGVwZW5kZW50IiwiY3VzdG9tRGF0YUhvbGRlciIsImFkZEN1c3RvbURhdGEiLCJsYXlvdXREYXRhIiwic2V0QWdncmVnYXRpb24iLCJnZXRDb250ZW50IiwiX2JBc3luYyIsIl9hQ29udGVudCIsImlkIiwic0lkIiwiY3JlYXRlSWQiLCJzZXR0aW5ncyIsImNvbnRyb2xTZXR0aW5ncyIsImFsbEFzc29jaWF0aW9ucyIsImdldE1ldGFkYXRhIiwiZ2V0QWxsQXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25EZXRhaWxOYW1lIiwiT2JqZWN0Iiwia2V5cyIsImFzc29jaWF0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImFzc29jaWF0aW9uIiwic2luZ2xlQXNzb2NpYXRpb25WYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgUnVudGltZUJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvUnVudGltZUJ1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9jb3JlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgTGF5b3V0RGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG4vKipcbiAqIEludGVybmFsIGV4dGVuc2lvbiB0byB0aGUgRnJhZ21lbnQgY2xhc3MgaW4gb3JkZXIgdG8gYWRkIHNvbWUgcGxhY2UgdG8gaG9sZCBmdW5jdGlvbnMgZm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHtcblx0Lypcblx0ICogRXZlbnQgdG8gaG9sZCBhbmQgcmVzb2x2ZSBmdW5jdGlvbnMgZm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmdW5jdGlvbkhvbGRlciE6IEZ1bmN0aW9uO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGZyYWdtZW50WE1MPzogQ29udHJvbDtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xbXVwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRkZXBlbmRlbnRzITogQ29udHJvbFtdO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ3VzdG9tRGF0YVtdXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGN1c3RvbURhdGFIb2xkZXIhOiBDdXN0b21EYXRhW107XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5MYXlvdXREYXRhXCIgfSlcblx0bGF5b3V0RGF0YSE6IExheW91dERhdGE7XG59XG5cbnR5cGUgRnJhZ21lbnRDdXN0b21EYXRhID0ge1xuXHRtUHJvcGVydGllczoge1xuXHRcdHZhbHVlOiB7XG5cdFx0XHRcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmdcIj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnRTZXR0aW5ncyA9IHtcblx0ZnJhZ21lbnROYW1lOiBzdHJpbmc7XG5cdGZyYWdtZW50Q29udGVudD86IHR5cGVvZiBSdW50aW1lQnVpbGRpbmdCbG9jaztcblx0Y29udGFpbmluZ1ZpZXc6IFZpZXc7XG5cdGN1c3RvbURhdGE/OiBGcmFnbWVudEN1c3RvbURhdGFbXTtcblx0ZGVwZW5kZW50cz86IFVJNUVsZW1lbnRbXTtcblx0Y3VzdG9tRGF0YUhvbGRlcj86IEN1c3RvbURhdGFbXTtcblx0bGF5b3V0RGF0YT86IExheW91dERhdGE7XG5cdGZyYWdtZW50WE1MPzogQ29udHJvbDtcblx0ZnVuY3Rpb25Ib2xkZXI/OiBGdW5jdGlvbldpdGhIYW5kbGVyW11bXTtcblx0bG9hZEVycm9yTWVzc2FnZT86IHN0cmluZztcbn07XG5cbnR5cGUgRnVuY3Rpb25XaXRoSGFuZGxlciA9IEZ1bmN0aW9uICYge1xuXHRfc2FwdWlfaGFuZGxlck5hbWU/OiBzdHJpbmc7XG59O1xudHlwZSBGcmFnbWVudFdpdGhJbnRlcm5hbHMgPSB7XG5cdF9iQXN5bmM6IGJvb2xlYW47XG5cdF9hQ29udGVudDogQ29udHJvbCB8IENvbnRyb2xbXTtcbn07XG5cbmNvbnN0IFJVTlRJTUVfQkxPQ0tTOiBSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2s+ID0ge307XG4vKipcbiAqIFN0b3JlcyB0aGUgY2xhc3Mgb2YgYSBydW50aW1lIGJ1aWxkaW5nIGJsb2NrIHRvIGJlIGxvYWRlZCB3aGVuZXZlciB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBhdCBydW50aW1lLlxuICpcbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlUnVudGltZUJsb2NrKEJ1aWxkaW5nQmxvY2tDbGFzczogdHlwZW9mIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrKTogdm9pZCB7XG5cdFJVTlRJTUVfQkxPQ0tTW1xuXHRcdGAke0J1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgPz8gQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZX0uJHtCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZX1gXG5cdF0gPSBCdWlsZGluZ0Jsb2NrQ2xhc3M7XG59XG5cblJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnQucmVnaXN0ZXJUeXBlKFwiRkVfQ09NUE9ORU5UU1wiLCB7XG5cdGxvYWQ6IGFzeW5jIGZ1bmN0aW9uIChtU2V0dGluZ3M6IFJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnRTZXR0aW5ncykge1xuXHRcdGxldCBidWlsZGluZ0Jsb2NrRGV0YWlsO1xuXHRcdHRyeSB7XG5cdFx0XHRidWlsZGluZ0Jsb2NrRGV0YWlsID0gYXdhaXQgUlVOVElNRV9CTE9DS1NbbVNldHRpbmdzLmZyYWdtZW50TmFtZV0ubG9hZCgpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG1TZXR0aW5ncy5sb2FkRXJyb3JNZXNzYWdlID0gZSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiBidWlsZGluZ0Jsb2NrRGV0YWlsO1xuXHR9LFxuXHRpbml0OiBmdW5jdGlvbiAodGhpczogRnJhZ21lbnRXaXRoSW50ZXJuYWxzLCBtU2V0dGluZ3M6IFJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnRTZXR0aW5ncykge1xuXHRcdC8vIEluIGNhc2UgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLCBleGl0IGVhcmx5XG5cdFx0aWYgKG1TZXR0aW5ncy5sb2FkRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IExhYmVsKHsgdGV4dDogbVNldHRpbmdzLmxvYWRFcnJvck1lc3NhZ2UgfSk7XG5cdFx0fVxuXHRcdGxldCBCdWlsZGluZ0Jsb2NrQ2xhc3MgPSBtU2V0dGluZ3MuZnJhZ21lbnRDb250ZW50O1xuXHRcdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gc29tZSBjYXNlIHdlIG1pZ2h0IGhhdmUgYmVlbiBjYWxsZWQgaGVyZSBzeW5jaHJvbm91c2x5ICh1bnN0YXNoIGNhc2UgZm9yIGluc3RhbmNlKSwgd2hpY2ggbWVhbnMgd2UgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxvYWQgZnVuY3Rpb25cblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcyA9IFJVTlRJTUVfQkxPQ0tTW21TZXR0aW5ncy5mcmFnbWVudE5hbWVdO1xuXHRcdH1cblx0XHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gYnVpbGRpbmcgYmxvY2sgY2xhc3MgZm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2sgJHttU2V0dGluZ3MuZnJhZ21lbnROYW1lfSBmb3VuZGApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsYXNzU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0Y29uc3QgZmVDdXN0b21EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID1cblx0XHRcdG1TZXR0aW5ncy5jdXN0b21EYXRhPy5bMF0/Lm1Qcm9wZXJ0aWVzPy52YWx1ZT8uW1wic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiXSB8fCB7fTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGE7XG5cdFx0Y29uc3QgZnVuY3Rpb25Ib2xkZXI6IEZ1bmN0aW9uV2l0aEhhbmRsZXJbXVtdID0gbVNldHRpbmdzLmZ1bmN0aW9uSG9sZGVyID8/IFtdO1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuZnVuY3Rpb25Ib2xkZXI7XG5cblx0XHQvLyBjb250YWluaW5nVmlldyBjYW4gYWxzbyBiZSBhIGZyYWdtZW50LCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUgY29udHJvbGxlciAod2hpY2ggY291bGQgYWxzbyBiZSBhbiBFeHRlbnNpb25BUEkpIGdldCB0aGUgYWN0dWFsIHZpZXdcblx0XHRjb25zdCBjb250YWluaW5nVmlldyA9XG5cdFx0XHRtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcj8uKCk/LmdldFZpZXc/LigpID8/XG5cdFx0XHQobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXI/LigpIGFzIHVua25vd24gYXMgRXh0ZW5zaW9uQVBJKT8uW1wiX3ZpZXdcIl0gPz9cblx0XHRcdG1TZXR0aW5ncy5jb250YWluaW5nVmlldztcblx0XHRjb25zdCBwYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKGNvbnRhaW5pbmdWaWV3KSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udGFpbmluZ1ZpZXcpO1xuXG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHBhZ2VNb2RlbCA9IHBhZ2VDb21wb25lbnQuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpO1xuXG5cdFx0Y29uc3QgZnVuY3Rpb25TdHJpbmdJbk9yZGVyOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IGZlQ3VzdG9tRGF0YS5mdW5jdGlvblN0cmluZ0luT3JkZXI/LnNwbGl0KFwiLFwiKTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzQXNzaWduZWRUb0Z1bmN0aW9uOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IGZlQ3VzdG9tRGF0YS5wcm9wZXJ0aWVzQXNzaWduZWRUb0Z1bmN0aW9uPy5zcGxpdChcIixcIikgPz8gW107XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TWV0YWRhdGEgPSBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0Y29uc3QgcGFnZU1vZGVsQ29udGV4dCA9IHBhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cblx0XHRcdGlmIChwYWdlTW9kZWxDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0XHRcdC8vIHZhbHVlIGNhbm5vdCBiZSByZXNvbHZlZCwgc28gaXQgaXMgZWl0aGVyIGEgcnVudGltZSBiaW5kaW5nIG9yIGEgY29uc3RhbnRcblx0XHRcdFx0bGV0IHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI+IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5TWV0YWRhdGEuYmluZGFibGUgIT09IHRydWUpIHtcblx0XHRcdFx0XHRcdC8vIHJ1bnRpbWUgYmluZGluZ3MgYXJlIG5vdCBhbGxvd2VkLCBzbyBjb252ZXJ0IHN0cmluZ3MgaW50byBhY3R1YWwgcHJpbWl0aXZlIHR5cGVzXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHByb3BlcnR5TWV0YWRhdGEudHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBydW50aW1lIGJpbmRpbmdzIGFyZSBhbGxvd2VkLCBzbyByZXNvbHZlIHRoZSB2YWx1ZXMgYXMgQmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbnNcblx0XHRcdFx0XHRcdHZhbHVlID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcodmFsdWUsIHByb3BlcnR5TWV0YWRhdGEudHlwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5TWV0YWRhdGEudHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25JbmRleCA9IHByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24uaW5kZXhPZihwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChmdW5jdGlvbkluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGZ1bmN0aW9uU3RyaW5nID0gZnVuY3Rpb25TdHJpbmdJbk9yZGVyW2Z1bmN0aW9uSW5kZXhdO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0RnVuY3Rpb24gPSBmdW5jdGlvbkhvbGRlcj8uZmluZCgoZnVuY3Rpb25EZWYpID0+IGZ1bmN0aW9uRGVmWzBdPy5fc2FwdWlfaGFuZGxlck5hbWUgPT09IGZ1bmN0aW9uU3RyaW5nKTtcblx0XHRcdFx0XHRcdC8vIFdlIHVzZSB0aGUgX3NhcHVpX2hhbmRsZXJOYW1lIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9uIGlzIHRoZSBvbmUgd2Ugd2FudCB0byBiaW5kIGhlcmVcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRGdW5jdGlvbiAmJiB0YXJnZXRGdW5jdGlvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gdGFyZ2V0RnVuY3Rpb25bMF0uYmluZCh0YXJnZXRGdW5jdGlvblsxXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBnZXQgdmFsdWUgZnJvbSBwYWdlIG1vZGVsXG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHBhZ2VNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBiaW5kIHRvIG1ldGFtb2RlbFxuXHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZmVDdXN0b21EYXRhW3Byb3BlcnR5TmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAoTWFuYWdlZE9iamVjdCBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZW5kZXJlZENvbnRyb2wgPSBqc3gud2l0aENvbnRleHQoeyB2aWV3OiBjb250YWluaW5nVmlldywgYXBwQ29tcG9uZW50OiBhcHBDb21wb25lbnQgfSwgKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRlbXBsYXRlUHJvY2Vzc2luZ1NldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogY29udGFpbmluZ1ZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiAoY29udGFpbmluZ1ZpZXcuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpID8/IG5ldyBKU09OTW9kZWwoKSkgYXMgSlNPTk1vZGVsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRpc1J1bnRpbWVJbnN0YW50aWF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0fSBhcyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXG5cdFx0XHRcdFx0Y29uc3QgYnVpbGRpbmdCbG9ja0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyEoY2xhc3NTZXR0aW5ncywge30sIHRlbXBsYXRlUHJvY2Vzc2luZ1NldHRpbmdzKTtcblx0XHRcdFx0XHRpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhidWlsZGluZ0Jsb2NrSW5zdGFuY2UsIGNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcik7XG5cdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5mcmFnbWVudFhNTCkge1xuXHRcdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5kZXBlbmRlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZGVwZW5kZW50IG9mIG1TZXR0aW5ncy5kZXBlbmRlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVNldHRpbmdzLmZyYWdtZW50WE1MLmFkZERlcGVuZGVudChkZXBlbmRlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3MuZGVwZW5kZW50cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtU2V0dGluZ3MuY3VzdG9tRGF0YUhvbGRlcikge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGN1c3RvbURhdGFIb2xkZXIgb2YgbVNldHRpbmdzLmN1c3RvbURhdGFIb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRtU2V0dGluZ3MuZnJhZ21lbnRYTUwuYWRkQ3VzdG9tRGF0YShjdXN0b21EYXRhSG9sZGVyKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGFIb2xkZXI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmxheW91dERhdGEpIHtcblx0XHRcdFx0XHRcdFx0bVNldHRpbmdzLmZyYWdtZW50WE1MLnNldEFnZ3JlZ2F0aW9uKFwibGF5b3V0RGF0YVwiLCBtU2V0dGluZ3MubGF5b3V0RGF0YSk7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3MubGF5b3V0RGF0YTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gYnVpbGRpbmdCbG9ja0luc3RhbmNlLmdldENvbnRlbnQ/Lihjb250YWluaW5nVmlldywgYXBwQ29tcG9uZW50LCBtU2V0dGluZ3MuZnJhZ21lbnRYTUwpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCF0aGlzLl9iQXN5bmMpIHtcblx0XHRcdFx0XHR0aGlzLl9hQ29udGVudCA9IHJlbmRlcmVkQ29udHJvbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVuZGVyZWRDb250cm9sO1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6IGZ1bmN0aW9uIChzSWQ6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuY3JlYXRlSWQoc0lkKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0dGluZ3M6IGZ1bmN0aW9uIChjb250cm9sU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IE1hbmFnZWRPYmplY3QgfCAoc3RyaW5nIHwgTWFuYWdlZE9iamVjdClbXT4pIHtcblx0XHRcdFx0XHRjb25zdCBhbGxBc3NvY2lhdGlvbnMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWxsQXNzb2NpYXRpb25zKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhc3NvY2lhdGlvbkRldGFpbE5hbWUgb2YgT2JqZWN0LmtleXMoYWxsQXNzb2NpYXRpb25zKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKChhbGxBc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSBhcyBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhKS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIE11bHRpcGxlIGFzc29jaWF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGFzc29jaWF0ZWQgZWxlbWVudHMgYXJlIGluZGljYXRlZCB2aWEgbG9jYWwgSURzOyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgcmVmZXJlbmNlcyB0byBnbG9iYWwgb25lc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFzc29jaWF0aW9ucyA9IChcblx0XHRcdFx0XHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBbY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV1dXG5cdFx0XHRcdFx0XHRcdFx0KSBhcyAoc3RyaW5nIHwgTWFuYWdlZE9iamVjdClbXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENyZWF0ZSBnbG9iYWwgSURzIGZvciBhc3NvY2lhdGlvbnMgZ2l2ZW4gYXMgc3RyaW5ncywgbm90IGZvciBhbHJlYWR5IHJlc29sdmVkIE1hbmFnZWRPYmplY3RzXG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0gPSBhc3NvY2lhdGlvbnMubWFwKChhc3NvY2lhdGlvbjogc3RyaW5nIHwgTWFuYWdlZE9iamVjdCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBhc3NvY2lhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChhc3NvY2lhdGlvbikgOiBhc3NvY2lhdGlvblxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gU2luZ2xlIGFzc29jaWF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2luZ2xlQXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdID1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBzaW5nbGVBc3NvY2lhdGlvblZhbHVlID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKHNpbmdsZUFzc29jaWF0aW9uVmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogc2luZ2xlQXNzb2NpYXRpb25WYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNEJxQkEsNEJBQTRCO0VBSmpEO0FBQ0E7QUFDQTtFQUZBLE9BR0NDLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQyxVQUtuRkMsS0FBSyxFQUFFLFVBR1BDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBc0IsQ0FBQyxDQUFDLFVBRzVDRCxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFLHVCQUF1QjtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsVUFHOURGLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsMEJBQTBCO0lBQUVDLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxVQUdqRUYsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUF5QixDQUFDLENBQUM7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBLEVBaEJTRSxRQUFRO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQTtFQWlEbEUsTUFBTUMsY0FBMkQsR0FBRyxDQUFDLENBQUM7RUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLGlCQUFpQixDQUFDQyxrQkFBK0MsRUFBUTtJQUN4RkYsY0FBYyxDQUNaLEdBQUVFLGtCQUFrQixDQUFDQyxRQUFRLENBQUNDLFNBQVMsSUFBSUYsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQ0UsZUFBZ0IsSUFBR0gsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQ0csSUFBSyxFQUFDLENBQzdILEdBQUdKLGtCQUFrQjtFQUN2QjtFQUFDO0VBRURULDRCQUE0QixDQUFDYyxZQUFZLENBQUMsZUFBZSxFQUFFO0lBQzFEQyxJQUFJLEVBQUUsZ0JBQWdCQyxTQUErQyxFQUFFO01BQ3RFLElBQUlDLG1CQUFtQjtNQUN2QixJQUFJO1FBQ0hBLG1CQUFtQixHQUFHLE1BQU1WLGNBQWMsQ0FBQ1MsU0FBUyxDQUFDRSxZQUFZLENBQUMsQ0FBQ0gsSUFBSSxFQUFFO01BQzFFLENBQUMsQ0FBQyxPQUFPSSxDQUFDLEVBQUU7UUFDWEgsU0FBUyxDQUFDSSxnQkFBZ0IsR0FBR0QsQ0FBVztNQUN6QztNQUNBLE9BQU9GLG1CQUFtQjtJQUMzQixDQUFDO0lBQ0RJLElBQUksRUFBRSxVQUF1Q0wsU0FBK0MsRUFBRTtNQUFBO01BQzdGO01BQ0EsSUFBSUEsU0FBUyxDQUFDSSxnQkFBZ0IsRUFBRTtRQUMvQixPQUFPLElBQUlFLEtBQUssQ0FBQztVQUFFQyxJQUFJLEVBQUVQLFNBQVMsQ0FBQ0k7UUFBaUIsQ0FBQyxDQUFDO01BQ3ZEO01BQ0EsSUFBSVgsa0JBQWtCLEdBQUdPLFNBQVMsQ0FBQ1EsZUFBZTtNQUNsRCxJQUFJZixrQkFBa0IsS0FBS2dCLFNBQVMsRUFBRTtRQUNyQztRQUNBaEIsa0JBQWtCLEdBQUdGLGNBQWMsQ0FBQ1MsU0FBUyxDQUFDRSxZQUFZLENBQUM7TUFDNUQ7TUFDQSxJQUFJVCxrQkFBa0IsS0FBS2dCLFNBQVMsRUFBRTtRQUNyQyxNQUFNLElBQUlDLEtBQUssQ0FBRSxzREFBcURWLFNBQVMsQ0FBQ0UsWUFBYSxRQUFPLENBQUM7TUFDdEc7TUFFQSxNQUFNUyxhQUFzQyxHQUFHLENBQUMsQ0FBQztNQUNqRCxNQUFNQyxZQUFvQyxHQUN6QywwQkFBQVosU0FBUyxDQUFDYSxVQUFVLG9GQUFwQixzQkFBdUIsQ0FBQyxDQUFDLHFGQUF6Qix1QkFBMkJDLFdBQVcscUZBQXRDLHVCQUF3Q0MsS0FBSywyREFBN0MsdUJBQWdELHVDQUF1QyxDQUFDLEtBQUksQ0FBQyxDQUFDO01BQy9GLE9BQU9mLFNBQVMsQ0FBQ2EsVUFBVTtNQUMzQixNQUFNRyxjQUF1QyxHQUFHaEIsU0FBUyxDQUFDZ0IsY0FBYyxJQUFJLEVBQUU7TUFDOUUsT0FBT2hCLFNBQVMsQ0FBQ2dCLGNBQWM7O01BRS9CO01BQ0EsTUFBTUMsY0FBYyxHQUNuQixvREFBQWpCLFNBQVMsQ0FBQ2lCLGNBQWMsRUFBQ0MsYUFBYSxvRkFBdEMsa0RBQTBDLHFGQUExQyx1QkFBNENDLE9BQU8sMkRBQW5ELG1EQUF1RCxnQ0FDdEQsMEJBQUFuQixTQUFTLENBQUNpQixjQUFjLEVBQUNDLGFBQWEscUZBQXRDLG1EQUEwQywyREFBM0MsdUJBQTBFLE9BQU8sQ0FBQyxLQUNsRmxCLFNBQVMsQ0FBQ2lCLGNBQWM7TUFDekIsTUFBTUcsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDTCxjQUFjLENBQXNCO01BQ3pGLE1BQU1NLFlBQVksR0FBR0MsV0FBVyxDQUFDQyxlQUFlLENBQUNSLGNBQWMsQ0FBQztNQUVoRSxNQUFNUyxTQUFTLEdBQUdILFlBQVksQ0FBQ0ksWUFBWSxFQUFFO01BQzdDLE1BQU1DLFNBQVMsR0FBR1IsYUFBYSxDQUFDUyxRQUFRLENBQUMsWUFBWSxDQUFDO01BRXRELE1BQU1DLHFCQUEyQyw0QkFBR2xCLFlBQVksQ0FBQ2tCLHFCQUFxQiwwREFBbEMsc0JBQW9DQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQ2xHLE1BQU1DLDRCQUFrRCxHQUFHLDBCQUFBcEIsWUFBWSxDQUFDb0IsNEJBQTRCLDBEQUF6QyxzQkFBMkNELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSSxFQUFFO01BQ3RILEtBQUssTUFBTUUsWUFBWSxJQUFJeEMsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQ3dDLFVBQVUsRUFBRTtRQUNsRSxNQUFNQyxnQkFBZ0IsR0FBRzFDLGtCQUFrQixDQUFDQyxRQUFRLENBQUN3QyxVQUFVLENBQUNELFlBQVksQ0FBQztRQUM3RSxNQUFNRyxnQkFBZ0IsR0FBR1IsU0FBUyxDQUFDUyxvQkFBb0IsQ0FBQ3pCLFlBQVksQ0FBQ3FCLFlBQVksQ0FBQyxDQUFDO1FBRW5GLElBQUlHLGdCQUFnQixLQUFLLElBQUksRUFBRTtVQUM5QjtVQUNBLElBQUlyQixLQUFrRyxHQUNyR0gsWUFBWSxDQUFDcUIsWUFBWSxDQUFDO1VBRTNCLElBQUksT0FBT2xCLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDOUIsSUFBSW9CLGdCQUFnQixDQUFDRyxRQUFRLEtBQUssSUFBSSxFQUFFO2NBQ3ZDO2NBQ0EsUUFBUUgsZ0JBQWdCLENBQUMvQyxJQUFJO2dCQUM1QixLQUFLLFNBQVM7a0JBQ2IyQixLQUFLLEdBQUdBLEtBQUssS0FBSyxNQUFNO2tCQUN4QjtnQkFDRCxLQUFLLFFBQVE7a0JBQ1pBLEtBQUssR0FBR3dCLE1BQU0sQ0FBQ3hCLEtBQUssQ0FBQztrQkFDckI7Y0FBTTtZQUVULENBQUMsTUFBTTtjQUNOO2NBQ0FBLEtBQUssR0FBR3lCLG9CQUFvQixDQUFDekIsS0FBSyxFQUFFb0IsZ0JBQWdCLENBQUMvQyxJQUFJLENBQUM7WUFDM0Q7VUFDRCxDQUFDLE1BQU0sSUFBSStDLGdCQUFnQixDQUFDL0MsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUNoRCxNQUFNcUQsYUFBYSxHQUFHVCw0QkFBNEIsQ0FBQ1UsT0FBTyxDQUFDVCxZQUFZLENBQUM7WUFDeEUsSUFBSVEsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO2NBQ3ZCLE1BQU1FLGNBQWMsR0FBR2IscUJBQXFCLENBQUNXLGFBQWEsQ0FBQztjQUMzRCxNQUFNRyxjQUFjLEdBQUc1QixjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRTZCLElBQUksQ0FBRUMsV0FBVztnQkFBQTtnQkFBQSxPQUFLLGtCQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLGtEQUFkLGNBQWdCQyxrQkFBa0IsTUFBS0osY0FBYztjQUFBLEVBQUM7Y0FDbkg7Y0FDQSxJQUFJQyxjQUFjLElBQUlBLGNBQWMsQ0FBQ0ksTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDaERqQyxLQUFLLEdBQUc2QixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUNLLElBQUksQ0FBQ0wsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ2xEO1lBQ0Q7VUFDRDtVQUVBakMsYUFBYSxDQUFDc0IsWUFBWSxDQUFDLEdBQUdsQixLQUFLO1FBQ3BDLENBQUMsTUFBTSxJQUFJcUIsZ0JBQWdCLENBQUNjLFNBQVMsRUFBRSxLQUFLekMsU0FBUyxFQUFFO1VBQ3REO1VBQ0FFLGFBQWEsQ0FBQ3NCLFlBQVksQ0FBQyxHQUFHRyxnQkFBZ0IsQ0FBQ2MsU0FBUyxFQUFFO1FBQzNELENBQUMsTUFBTTtVQUNOO1VBQ0F2QyxhQUFhLENBQUNzQixZQUFZLENBQUMsR0FBR1AsU0FBUyxDQUFDVyxvQkFBb0IsQ0FBQ3pCLFlBQVksQ0FBQ3FCLFlBQVksQ0FBQyxDQUFDO1FBQ3pGO01BQ0Q7TUFFQSxPQUFRa0IsYUFBYSxDQUFxQkMsb0JBQW9CLENBQzdELE1BQU07UUFDTCxNQUFNQyxlQUFlLEdBQUdDLEdBQUcsQ0FBQ0MsV0FBVyxDQUFDO1VBQUVDLElBQUksRUFBRXZDLGNBQWM7VUFBRU0sWUFBWSxFQUFFQTtRQUFhLENBQUMsRUFBRSxNQUFNO1VBQUE7VUFDbkcsTUFBTWtDLDBCQUEwQixHQUFHO1lBQ2xDQyxNQUFNLEVBQUU7Y0FDUCxhQUFhLEVBQUV6QyxjQUFjLENBQUNZLFFBQVEsQ0FBQyxhQUFhLENBQWtCO2NBQ3RFOEIsZ0JBQWdCLEVBQUcxQyxjQUFjLENBQUNZLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJK0IsU0FBUztZQUMxRSxDQUFDO1lBQ0RyQyxZQUFZLEVBQUVBLFlBQVk7WUFDMUJzQyxzQkFBc0IsRUFBRTtVQUN6QixDQUE4QjtVQUU5QixNQUFNQyxxQkFBcUIsR0FBRyxJQUFJckUsa0JBQWtCLENBQUVrQixhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUU4QywwQkFBMEIsQ0FBQztVQUNwR00sbUNBQW1DLENBQUNELHFCQUFxQixFQUFFN0MsY0FBYyxDQUFDQyxhQUFhLEVBQUUsQ0FBbUI7VUFDNUcsSUFBSWxCLFNBQVMsQ0FBQ2dFLFdBQVcsRUFBRTtZQUMxQixJQUFJaEUsU0FBUyxDQUFDaUUsVUFBVSxFQUFFO2NBQ3pCLEtBQUssTUFBTUMsU0FBUyxJQUFJbEUsU0FBUyxDQUFDaUUsVUFBVSxFQUFFO2dCQUM3Q2pFLFNBQVMsQ0FBQ2dFLFdBQVcsQ0FBQ0csWUFBWSxDQUFDRCxTQUFTLENBQUM7Y0FDOUM7Y0FDQSxPQUFPbEUsU0FBUyxDQUFDaUUsVUFBVTtZQUM1QjtZQUNBLElBQUlqRSxTQUFTLENBQUNvRSxnQkFBZ0IsRUFBRTtjQUMvQixLQUFLLE1BQU1BLGdCQUFnQixJQUFJcEUsU0FBUyxDQUFDb0UsZ0JBQWdCLEVBQUU7Z0JBQzFEcEUsU0FBUyxDQUFDZ0UsV0FBVyxDQUFDSyxhQUFhLENBQUNELGdCQUFnQixDQUFDO2NBQ3REO2NBQ0EsT0FBT3BFLFNBQVMsQ0FBQ29FLGdCQUFnQjtZQUNsQztZQUNBLElBQUlwRSxTQUFTLENBQUNzRSxVQUFVLEVBQUU7Y0FDekJ0RSxTQUFTLENBQUNnRSxXQUFXLENBQUNPLGNBQWMsQ0FBQyxZQUFZLEVBQUV2RSxTQUFTLENBQUNzRSxVQUFVLENBQUM7Y0FDeEUsT0FBT3RFLFNBQVMsQ0FBQ3NFLFVBQVU7WUFDNUI7VUFDRDtVQUVBLGdDQUFPUixxQkFBcUIsQ0FBQ1UsVUFBVSwwREFBaEMsMkJBQUFWLHFCQUFxQixFQUFjN0MsY0FBYyxFQUFFTSxZQUFZLEVBQUV2QixTQUFTLENBQUNnRSxXQUFXLENBQUM7UUFDL0YsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQ1MsT0FBTyxFQUFFO1VBQ2xCLElBQUksQ0FBQ0MsU0FBUyxHQUFHckIsZUFBZTtRQUNqQztRQUNBLE9BQU9BLGVBQWU7TUFDdkIsQ0FBQyxFQUNEO1FBQ0NzQixFQUFFLEVBQUUsVUFBVUMsR0FBVyxFQUFFO1VBQzFCLE9BQU81RSxTQUFTLENBQUNpQixjQUFjLENBQUM0RCxRQUFRLENBQUNELEdBQUcsQ0FBQztRQUM5QyxDQUFDO1FBQ0RFLFFBQVEsRUFBRSxVQUFVQyxlQUFvRixFQUFFO1VBQ3pHLE1BQU1DLGVBQWUsR0FBRyxJQUFJLENBQUNDLFdBQVcsRUFBRSxDQUFDQyxrQkFBa0IsRUFBRTtVQUMvRCxLQUFLLE1BQU1DLHFCQUFxQixJQUFJQyxNQUFNLENBQUNDLElBQUksQ0FBQ0wsZUFBZSxDQUFDLEVBQUU7WUFDakUsSUFBSUQsZUFBZSxDQUFDSSxxQkFBcUIsQ0FBQyxLQUFLMUUsU0FBUyxFQUFFO2NBQ3pELElBQUt1RSxlQUFlLENBQUNHLHFCQUFxQixDQUFDLENBQTRCOUYsUUFBUSxFQUFFO2dCQUNoRjtnQkFDQTtnQkFDQSxNQUFNaUcsWUFBWSxHQUNqQkMsS0FBSyxDQUFDQyxPQUFPLENBQUNULGVBQWUsQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQyxHQUNsREosZUFBZSxDQUFDSSxxQkFBcUIsQ0FBQyxHQUN0QyxDQUFDSixlQUFlLENBQUNJLHFCQUFxQixDQUFDLENBQ1o7O2dCQUUvQjtnQkFDQUosZUFBZSxDQUFDSSxxQkFBcUIsQ0FBQyxHQUFHRyxZQUFZLENBQUNHLEdBQUcsQ0FBRUMsV0FBbUMsSUFDN0YsT0FBT0EsV0FBVyxLQUFLLFFBQVEsR0FBRzFGLFNBQVMsQ0FBQ2lCLGNBQWMsQ0FBQzRELFFBQVEsQ0FBQ2EsV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FDOUY7Y0FDRixDQUFDLE1BQU07Z0JBQ047Z0JBQ0EsTUFBTUMsc0JBQXNCLEdBQUdaLGVBQWUsQ0FBQ0kscUJBQXFCLENBQUM7Z0JBQ3JFSixlQUFlLENBQUNJLHFCQUFxQixDQUFDLEdBQ3JDLE9BQU9RLHNCQUFzQixLQUFLLFFBQVEsR0FDdkMzRixTQUFTLENBQUNpQixjQUFjLENBQUM0RCxRQUFRLENBQUNjLHNCQUFzQixDQUFDLEdBQ3pEQSxzQkFBc0I7Y0FDM0I7WUFDRDtVQUNEO1VBQ0EsT0FBT1osZUFBZTtRQUN2QjtNQUNELENBQUMsQ0FDRDtJQUNGO0VBQ0QsQ0FBQyxDQUFDO0VBQUM7QUFBQSJ9
242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50IiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiRnJhZ21lbnQiLCJSVU5USU1FX0JMT0NLUyIsInN0b3JlUnVudGltZUJsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJuYW1lIiwicmVnaXN0ZXJUeXBlIiwibG9hZCIsIm1TZXR0aW5ncyIsImJ1aWxkaW5nQmxvY2tEZXRhaWwiLCJmcmFnbWVudE5hbWUiLCJlIiwibG9hZEVycm9yTWVzc2FnZSIsImluaXQiLCJMYWJlbCIsInRleHQiLCJmcmFnbWVudENvbnRlbnQiLCJ1bmRlZmluZWQiLCJFcnJvciIsImNsYXNzU2V0dGluZ3MiLCJmZUN1c3RvbURhdGEiLCJjdXN0b21EYXRhIiwibVByb3BlcnRpZXMiLCJ2YWx1ZSIsImZ1bmN0aW9uSG9sZGVyIiwiY29udGFpbmluZ1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0VmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicGFnZU1vZGVsIiwiZ2V0TW9kZWwiLCJmdW5jdGlvblN0cmluZ0luT3JkZXIiLCJzcGxpdCIsInByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24iLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlNZXRhZGF0YSIsInBhZ2VNb2RlbENvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImJpbmRhYmxlIiwiTnVtYmVyIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJmdW5jdGlvbkluZGV4IiwiaW5kZXhPZiIsImZ1bmN0aW9uU3RyaW5nIiwidGFyZ2V0RnVuY3Rpb24iLCJmaW5kIiwiZnVuY3Rpb25EZWYiLCJfc2FwdWlfaGFuZGxlck5hbWUiLCJsZW5ndGgiLCJiaW5kIiwiZ2V0T2JqZWN0IiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyZWRDb250cm9sIiwianN4Iiwid2l0aENvbnRleHQiLCJ2aWV3IiwidGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiSlNPTk1vZGVsIiwiaXNSdW50aW1lSW5zdGFudGlhdGlvbiIsImJ1aWxkaW5nQmxvY2tJbnN0YW5jZSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiZnJhZ21lbnRYTUwiLCJkZXBlbmRlbnRzIiwiZGVwZW5kZW50IiwiYWRkRGVwZW5kZW50IiwiY3VzdG9tRGF0YUhvbGRlciIsImFkZEN1c3RvbURhdGEiLCJsYXlvdXREYXRhIiwic2V0QWdncmVnYXRpb24iLCJnZXRDb250ZW50IiwiX2JBc3luYyIsIl9hQ29udGVudCIsImlkIiwic0lkIiwiY3JlYXRlSWQiLCJzZXR0aW5ncyIsImNvbnRyb2xTZXR0aW5ncyIsImFsbEFzc29jaWF0aW9ucyIsImdldE1ldGFkYXRhIiwiZ2V0QWxsQXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25EZXRhaWxOYW1lIiwiT2JqZWN0Iiwia2V5cyIsImFzc29jaWF0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImFzc29jaWF0aW9uIiwic2luZ2xlQXNzb2NpYXRpb25WYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgUnVudGltZUJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvUnVudGltZUJ1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9jb3JlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgTGF5b3V0RGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgZXh0ZW5zaW9uIHRvIHRoZSBGcmFnbWVudCBjbGFzcyBpbiBvcmRlciB0byBhZGQgc29tZSBwbGFjZSB0byBob2xkIGZ1bmN0aW9ucyBmb3IgcnVudGltZSBidWlsZGluZyBibG9ja3NcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZy5SdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50XCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50IGV4dGVuZHMgRnJhZ21lbnQge1xuXHQvKlxuXHQgKiBFdmVudCB0byBob2xkIGFuZCByZXNvbHZlIGZ1bmN0aW9ucyBmb3IgcnVudGltZSBidWlsZGluZyBibG9ja3Ncblx0ICovXG5cdEBldmVudCgpXG5cdGZ1bmN0aW9uSG9sZGVyITogRnVuY3Rpb247XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIgfSlcblx0ZnJhZ21lbnRYTUw/OiBDb250cm9sO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFtdXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGRlcGVuZGVudHMhOiBDb250cm9sW107XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5DdXN0b21EYXRhW11cIiwgbXVsdGlwbGU6IHRydWUgfSlcblx0Y3VzdG9tRGF0YUhvbGRlciE6IEN1c3RvbURhdGFbXTtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkxheW91dERhdGFcIiB9KVxuXHRsYXlvdXREYXRhITogTGF5b3V0RGF0YTtcbn1cblxudHlwZSBGcmFnbWVudEN1c3RvbURhdGEgPSB7XG5cdG1Qcm9wZXJ0aWVzOiB7XG5cdFx0dmFsdWU6IHtcblx0XHRcdFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFNldHRpbmdzID0ge1xuXHRmcmFnbWVudE5hbWU6IHN0cmluZztcblx0ZnJhZ21lbnRDb250ZW50PzogdHlwZW9mIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrO1xuXHRjb250YWluaW5nVmlldzogVmlldztcblx0Y3VzdG9tRGF0YT86IEZyYWdtZW50Q3VzdG9tRGF0YVtdO1xuXHRkZXBlbmRlbnRzPzogVUk1RWxlbWVudFtdO1xuXHRjdXN0b21EYXRhSG9sZGVyPzogQ3VzdG9tRGF0YVtdO1xuXHRsYXlvdXREYXRhPzogTGF5b3V0RGF0YTtcblx0ZnJhZ21lbnRYTUw/OiBDb250cm9sO1xuXHRmdW5jdGlvbkhvbGRlcj86IEZ1bmN0aW9uV2l0aEhhbmRsZXJbXVtdO1xuXHRsb2FkRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufTtcblxudHlwZSBGdW5jdGlvbldpdGhIYW5kbGVyID0gRnVuY3Rpb24gJiB7XG5cdF9zYXB1aV9oYW5kbGVyTmFtZT86IHN0cmluZztcbn07XG50eXBlIEZyYWdtZW50V2l0aEludGVybmFscyA9IHtcblx0X2JBc3luYzogYm9vbGVhbjtcblx0X2FDb250ZW50OiBDb250cm9sIHwgQ29udHJvbFtdO1xufTtcblxuY29uc3QgUlVOVElNRV9CTE9DS1M6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBSdW50aW1lQnVpbGRpbmdCbG9jaz4gPSB7fTtcbi8qKlxuICogU3RvcmVzIHRoZSBjbGFzcyBvZiBhIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2sgdG8gYmUgbG9hZGVkIHdoZW5ldmVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogQHBhcmFtIEJ1aWxkaW5nQmxvY2tDbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVSdW50aW1lQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spOiB2b2lkIHtcblx0UlVOVElNRV9CTE9DS1NbXG5cdFx0YCR7QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSA/PyBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlfS4ke0J1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lfWBcblx0XSA9IEJ1aWxkaW5nQmxvY2tDbGFzcztcbn1cblxuUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudC5yZWdpc3RlclR5cGUoXCJGRV9DT01QT05FTlRTXCIsIHtcblx0bG9hZDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFNldHRpbmdzKSB7XG5cdFx0bGV0IGJ1aWxkaW5nQmxvY2tEZXRhaWw7XG5cdFx0dHJ5IHtcblx0XHRcdGJ1aWxkaW5nQmxvY2tEZXRhaWwgPSBhd2FpdCBSVU5USU1FX0JMT0NLU1ttU2V0dGluZ3MuZnJhZ21lbnROYW1lXS5sb2FkKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bVNldHRpbmdzLmxvYWRFcnJvck1lc3NhZ2UgPSBlIGFzIHN0cmluZztcblx0XHR9XG5cdFx0cmV0dXJuIGJ1aWxkaW5nQmxvY2tEZXRhaWw7XG5cdH0sXG5cdGluaXQ6IGZ1bmN0aW9uICh0aGlzOiBGcmFnbWVudFdpdGhJbnRlcm5hbHMsIG1TZXR0aW5nczogUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFNldHRpbmdzKSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MsIGV4aXQgZWFybHlcblx0XHRpZiAobVNldHRpbmdzLmxvYWRFcnJvck1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBuZXcgTGFiZWwoeyB0ZXh0OiBtU2V0dGluZ3MubG9hZEVycm9yTWVzc2FnZSB9KTtcblx0XHR9XG5cdFx0bGV0IEJ1aWxkaW5nQmxvY2tDbGFzcyA9IG1TZXR0aW5ncy5mcmFnbWVudENvbnRlbnQ7XG5cdFx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBzb21lIGNhc2Ugd2UgbWlnaHQgaGF2ZSBiZWVuIGNhbGxlZCBoZXJlIHN5bmNocm9ub3VzbHkgKHVuc3Rhc2ggY2FzZSBmb3IgaW5zdGFuY2UpLCB3aGljaCBtZWFucyB3ZSBkaWRuJ3QgZ28gdGhyb3VnaCB0aGUgbG9hZCBmdW5jdGlvblxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzID0gUlVOVElNRV9CTE9DS1NbbVNldHRpbmdzLmZyYWdtZW50TmFtZV07XG5cdFx0fVxuXHRcdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBObyBidWlsZGluZyBibG9jayBjbGFzcyBmb3IgcnVudGltZSBidWlsZGluZyBibG9jayAke21TZXR0aW5ncy5mcmFnbWVudE5hbWV9IGZvdW5kYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xhc3NTZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRjb25zdCBmZUN1c3RvbURhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuXHRcdFx0bVNldHRpbmdzLmN1c3RvbURhdGE/LlswXT8ubVByb3BlcnRpZXM/LnZhbHVlPy5bXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nXCJdIHx8IHt9O1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuY3VzdG9tRGF0YTtcblx0XHRjb25zdCBmdW5jdGlvbkhvbGRlcjogRnVuY3Rpb25XaXRoSGFuZGxlcltdW10gPSBtU2V0dGluZ3MuZnVuY3Rpb25Ib2xkZXIgPz8gW107XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5mdW5jdGlvbkhvbGRlcjtcblxuXHRcdC8vIGNvbnRhaW5pbmdWaWV3IGNhbiBhbHNvIGJlIGEgZnJhZ21lbnQsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBjb250cm9sbGVyICh3aGljaCBjb3VsZCBhbHNvIGJlIGFuIEV4dGVuc2lvbkFQSSkgZ2V0IHRoZSBhY3R1YWwgdmlld1xuXHRcdGNvbnN0IGNvbnRhaW5pbmdWaWV3ID1cblx0XHRcdG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyPy4oKT8uZ2V0Vmlldz8uKCkgPz9cblx0XHRcdChtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcj8uKCkgYXMgdW5rbm93biBhcyBFeHRlbnNpb25BUEkpPy5bXCJfdmlld1wiXSA/P1xuXHRcdFx0bVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3O1xuXHRcdGNvbnN0IHBhZ2VDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IoY29udGFpbmluZ1ZpZXcpIGFzIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250YWluaW5nVmlldyk7XG5cblx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgcGFnZU1vZGVsID0gcGFnZUNvbXBvbmVudC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cblx0XHRjb25zdCBmdW5jdGlvblN0cmluZ0luT3JkZXI6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gZmVDdXN0b21EYXRhLmZ1bmN0aW9uU3RyaW5nSW5PcmRlcj8uc3BsaXQoXCIsXCIpO1xuXHRcdGNvbnN0IHByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb246IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gZmVDdXN0b21EYXRhLnByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRjb25zdCBwYWdlTW9kZWxDb250ZXh0ID0gcGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdKTtcblxuXHRcdFx0aWYgKHBhZ2VNb2RlbENvbnRleHQgPT09IG51bGwpIHtcblx0XHRcdFx0Ly8gdmFsdWUgY2Fubm90IGJlIHJlc29sdmVkLCBzbyBpdCBpcyBlaXRoZXIgYSBydW50aW1lIGJpbmRpbmcgb3IgYSBjb25zdGFudFxuXHRcdFx0XHRsZXQgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcj4gfCB1bmRlZmluZWQgPVxuXHRcdFx0XHRcdGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlNZXRhZGF0YS5iaW5kYWJsZSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gcnVudGltZSBiaW5kaW5ncyBhcmUgbm90IGFsbG93ZWQsIHNvIGNvbnZlcnQgc3RyaW5ncyBpbnRvIGFjdHVhbCBwcmltaXRpdmUgdHlwZXNcblx0XHRcdFx0XHRcdHN3aXRjaCAocHJvcGVydHlNZXRhZGF0YS50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHJ1bnRpbWUgYmluZGluZ3MgYXJlIGFsbG93ZWQsIHNvIHJlc29sdmUgdGhlIHZhbHVlcyBhcyBCaW5kaW5nVG9vbGtpdCBleHByZXNzaW9uc1xuXHRcdFx0XHRcdFx0dmFsdWUgPSByZXNvbHZlQmluZGluZ1N0cmluZyh2YWx1ZSwgcHJvcGVydHlNZXRhZGF0YS50eXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlNZXRhZGF0YS50eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRjb25zdCBmdW5jdGlvbkluZGV4ID0gcHJvcGVydGllc0Fzc2lnbmVkVG9GdW5jdGlvbi5pbmRleE9mKHByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZ1bmN0aW9uSW5kZXggPiAtMSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25TdHJpbmcgPSBmdW5jdGlvblN0cmluZ0luT3JkZXJbZnVuY3Rpb25JbmRleF07XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdW5jdGlvbiA9IGZ1bmN0aW9uSG9sZGVyPy5maW5kKChmdW5jdGlvbkRlZikgPT4gZnVuY3Rpb25EZWZbMF0/Ll9zYXB1aV9oYW5kbGVyTmFtZSA9PT0gZnVuY3Rpb25TdHJpbmcpO1xuXHRcdFx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBfc2FwdWlfaGFuZGxlck5hbWUgdG8gaWRlbnRpZnkgd2hpY2ggZnVuY3Rpb24gaXMgdGhlIG9uZSB3ZSB3YW50IHRvIGJpbmQgaGVyZVxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldEZ1bmN0aW9uICYmIHRhcmdldEZ1bmN0aW9uLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSB0YXJnZXRGdW5jdGlvblswXS5iaW5kKHRhcmdldEZ1bmN0aW9uWzFdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAocGFnZU1vZGVsQ29udGV4dC5nZXRPYmplY3QoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIGdldCB2YWx1ZSBmcm9tIHBhZ2UgbW9kZWxcblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gcGFnZU1vZGVsQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGJpbmQgdG8gbWV0YW1vZGVsXG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChNYW5hZ2VkT2JqZWN0IGFzIE1hbmFnZWRPYmplY3RFeCkucnVuV2l0aFByZXByb2Nlc3NvcnMoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbmRlcmVkQ29udHJvbCA9IGpzeC53aXRoQ29udGV4dCh7IHZpZXc6IGNvbnRhaW5pbmdWaWV3LCBhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCB9LCAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBjb250YWluaW5nVmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IChjb250YWluaW5nVmlldy5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIikgPz8gbmV3IEpTT05Nb2RlbCgpKSBhcyBKU09OTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdGlzUnVudGltZUluc3RhbnRpYXRpb246IHRydWVcblx0XHRcdFx0XHR9IGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cblx0XHRcdFx0XHRjb25zdCBidWlsZGluZ0Jsb2NrSW5zdGFuY2UgPSBuZXcgQnVpbGRpbmdCbG9ja0NsYXNzIShjbGFzc1NldHRpbmdzLCB7fSwgdGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MpO1xuXHRcdFx0XHRcdGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKGJ1aWxkaW5nQmxvY2tJbnN0YW5jZSwgY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKTtcblx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmZyYWdtZW50WE1MKSB7XG5cdFx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmRlcGVuZGVudHMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBkZXBlbmRlbnQgb2YgbVNldHRpbmdzLmRlcGVuZGVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRtU2V0dGluZ3MuZnJhZ21lbnRYTUwuYWRkRGVwZW5kZW50KGRlcGVuZGVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5kZXBlbmRlbnRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5jdXN0b21EYXRhSG9sZGVyKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgY3VzdG9tRGF0YUhvbGRlciBvZiBtU2V0dGluZ3MuY3VzdG9tRGF0YUhvbGRlcikge1xuXHRcdFx0XHRcdFx0XHRcdG1TZXR0aW5ncy5mcmFnbWVudFhNTC5hZGRDdXN0b21EYXRhKGN1c3RvbURhdGFIb2xkZXIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3MuY3VzdG9tRGF0YUhvbGRlcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtU2V0dGluZ3MubGF5b3V0RGF0YSkge1xuXHRcdFx0XHRcdFx0XHRtU2V0dGluZ3MuZnJhZ21lbnRYTUwuc2V0QWdncmVnYXRpb24oXCJsYXlvdXREYXRhXCIsIG1TZXR0aW5ncy5sYXlvdXREYXRhKTtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5sYXlvdXREYXRhO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBidWlsZGluZ0Jsb2NrSW5zdGFuY2UuZ2V0Q29udGVudD8uKGNvbnRhaW5pbmdWaWV3LCBhcHBDb21wb25lbnQsIG1TZXR0aW5ncy5mcmFnbWVudFhNTCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2JBc3luYykge1xuXHRcdFx0XHRcdHRoaXMuX2FDb250ZW50ID0gcmVuZGVyZWRDb250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZW5kZXJlZENvbnRyb2w7XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChzSWQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2xTZXR0aW5nczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgTWFuYWdlZE9iamVjdCB8IChzdHJpbmcgfCBNYW5hZ2VkT2JqZWN0KVtdPikge1xuXHRcdFx0XHRcdGNvbnN0IGFsbEFzc29jaWF0aW9ucyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBc3NvY2lhdGlvbnMoKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGFzc29jaWF0aW9uRGV0YWlsTmFtZSBvZiBPYmplY3Qua2V5cyhhbGxBc3NvY2lhdGlvbnMpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoKGFsbEFzc29jaWF0aW9uc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdIGFzIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gTXVsdGlwbGUgYXNzb2NpYXRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgYXNzb2NpYXRlZCBlbGVtZW50cyBhcmUgaW5kaWNhdGVkIHZpYSBsb2NhbCBJRHM7IHdlIG5lZWQgdG8gY2hhbmdlIHRoZSByZWZlcmVuY2VzIHRvIGdsb2JhbCBvbmVzXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXNzb2NpYXRpb25zID0gKFxuXHRcdFx0XHRcdFx0XHRcdFx0QXJyYXkuaXNBcnJheShjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFtjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXV1cblx0XHRcdFx0XHRcdFx0XHQpIGFzIChzdHJpbmcgfCBNYW5hZ2VkT2JqZWN0KVtdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGdsb2JhbCBJRHMgZm9yIGFzc29jaWF0aW9ucyBnaXZlbiBhcyBzdHJpbmdzLCBub3QgZm9yIGFscmVhZHkgcmVzb2x2ZWQgTWFuYWdlZE9iamVjdHNcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSA9IGFzc29jaWF0aW9ucy5tYXAoKGFzc29jaWF0aW9uOiBzdHJpbmcgfCBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGFzc29jaWF0aW9uID09PSBcInN0cmluZ1wiID8gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKGFzc29jaWF0aW9uKSA6IGFzc29jaWF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBTaW5nbGUgYXNzb2NpYXRpb25cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzaW5nbGVBc3NvY2lhdGlvblZhbHVlID0gY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHNpbmdsZUFzc29jaWF0aW9uVmFsdWUgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuY3JlYXRlSWQoc2luZ2xlQXNzb2NpYXRpb25WYWx1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBzaW5nbGVBc3NvY2lhdGlvblZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBjb250cm9sU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE2QnFCQSw0QkFBNEI7RUFKakQ7QUFDQTtBQUNBO0VBRkEsT0FHQ0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDLFVBS25GQyxLQUFLLEVBQUUsVUFHUEMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFzQixDQUFDLENBQUMsVUFHNUNELFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsdUJBQXVCO0lBQUVDLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxVQUc5REYsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSwwQkFBMEI7SUFBRUMsUUFBUSxFQUFFO0VBQUssQ0FBQyxDQUFDLFVBR2pFRixXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQXlCLENBQUMsQ0FBQztJQUFBO0lBQUE7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUEsRUFoQlNFLFFBQVE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtFQUFBO0VBaURsRSxNQUFNQyxjQUEyRCxHQUFHLENBQUMsQ0FBQztFQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsaUJBQWlCLENBQUNDLGtCQUErQyxFQUFRO0lBQ3hGRixjQUFjLENBQ1osR0FBRUUs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
@@ -22,6 +22,7 @@ import type LayoutData from "sap/ui/core/LayoutData";
22
22
  import type View from "sap/ui/core/mvc/View";
23
23
  import JSONModel from "sap/ui/model/json/JSONModel";
24
24
  import type { ManagedObjectEx } from "types/extension_types";
25
+
25
26
  /**
26
27
  * Internal extension to the Fragment class in order to add some place to hold functions for runtime building blocks
27
28
  */
@@ -26,10 +26,51 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/ui/core/mvc/ControllerEx
26
26
  _assertThisInitialized(_this).init();
27
27
  return _this;
28
28
  }
29
+
30
+ /**
31
+ * This method is called when the controller extension is instantiated.
32
+ * We need to override it for the specific handling for BeforeAsync and AfterAsync methods, otherwise the last level of extension just replace our implementation.
33
+ * @returns The interface for this controller extension
34
+ */
29
35
  _exports = BaseControllerExtension;
36
+ var _proto = BaseControllerExtension.prototype;
37
+ _proto.getInterface = function getInterface() {
38
+ var _this2 = this;
39
+ const interfaceObj = _ControllerExtension.prototype.getInterface.call(this);
40
+ const metadata = this.getMetadata();
41
+ const allMethods = metadata.getAllMethods();
42
+ const methodHolder = {};
43
+ for (const methodName in allMethods) {
44
+ const method = allMethods[methodName];
45
+ if (method.overrideExecution && (method.overrideExecution === "AfterAsync" || method.overrideExecution === "BeforeAsync")) {
46
+ methodHolder[methodName] = [interfaceObj[methodName]];
47
+ Object.defineProperty(interfaceObj, methodName, {
48
+ configurable: true,
49
+ set: v => {
50
+ return methodHolder[methodName].push(v);
51
+ },
52
+ get: () => {
53
+ return async function () {
54
+ const methodArrays = methodHolder[methodName];
55
+ if (method.overrideExecution === "BeforeAsync") {
56
+ methodArrays.reverse();
57
+ }
58
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
59
+ args[_key] = arguments[_key];
60
+ }
61
+ for (const arg of methodArrays) {
62
+ await arg.apply(_this2, args);
63
+ }
64
+ };
65
+ }
66
+ });
67
+ }
68
+ }
69
+ return interfaceObj;
70
+ };
30
71
  return BaseControllerExtension;
31
72
  }(ControllerExtension)) || _class);
32
73
  _exports = BaseControllerExtension;
33
74
  return _exports;
34
75
  }, false);
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwiaW5pdCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJhc2VDb250cm9sbGVyRXh0ZW5zaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbi8qKlxuICogQSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciBjb250cm9sbGVyIGV4dGVuc2lvbiB1c2VkIGludGVybmFsbHkgaW4gc2FwLmZlIGZvciBjZW50cmFsIGZ1bmN0aW9uYWxpdGllcy5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTguMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQodGhpcyBhcyB1bmtub3duIGFzIHsgaW5pdDogRnVuY3Rpb24gfSkuaW5pdCgpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7TUFTcUJBLHVCQUF1QjtFQVA1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQSxPQU1DQyxjQUFjLENBQUMsMERBQTBELENBQUM7SUFBQTtJQUUxRSxtQ0FBYztNQUFBO01BQ2IsdUNBQU87TUFDUCw4QkFBd0NDLElBQUksRUFBRTtNQUFDO0lBQ2hEO0lBQUM7SUFBQTtFQUFBLEVBSm1EQyxtQkFBbUI7RUFBQTtFQUFBO0FBQUEifQ==
76
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwiaW5pdCIsImdldEludGVyZmFjZSIsImludGVyZmFjZU9iaiIsIm1ldGFkYXRhIiwiZ2V0TWV0YWRhdGEiLCJhbGxNZXRob2RzIiwiZ2V0QWxsTWV0aG9kcyIsIm1ldGhvZEhvbGRlciIsIm1ldGhvZE5hbWUiLCJtZXRob2QiLCJvdmVycmlkZUV4ZWN1dGlvbiIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwidiIsInB1c2giLCJnZXQiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwiYXJncyIsImFyZyIsImFwcGx5IiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbi8qKlxuICogQSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciBjb250cm9sbGVyIGV4dGVuc2lvbiB1c2VkIGludGVybmFsbHkgaW4gc2FwLmZlIGZvciBjZW50cmFsIGZ1bmN0aW9uYWxpdGllcy5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTguMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQodGhpcyBhcyB1bmtub3duIGFzIHsgaW5pdDogRnVuY3Rpb24gfSkuaW5pdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpcyBpbnN0YW50aWF0ZWQuXG5cdCAqIFdlIG5lZWQgdG8gb3ZlcnJpZGUgaXQgZm9yIHRoZSBzcGVjaWZpYyBoYW5kbGluZyBmb3IgQmVmb3JlQXN5bmMgYW5kIEFmdGVyQXN5bmMgbWV0aG9kcywgb3RoZXJ3aXNlIHRoZSBsYXN0IGxldmVsIG9mIGV4dGVuc2lvbiBqdXN0IHJlcGxhY2Ugb3VyIGltcGxlbWVudGF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgaW50ZXJmYWNlIGZvciB0aGlzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2UoKTogQmFzZU9iamVjdCB7XG5cdFx0Y29uc3QgaW50ZXJmYWNlT2JqID0gc3VwZXIuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSB0aGlzLmdldE1ldGFkYXRhKCkgYXMgQ29udHJvbGxlck1ldGFkYXRhO1xuXHRcdGNvbnN0IGFsbE1ldGhvZHMgPSBtZXRhZGF0YS5nZXRBbGxNZXRob2RzKCk7XG5cdFx0Y29uc3QgbWV0aG9kSG9sZGVyOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbltdPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIGFsbE1ldGhvZHMpIHtcblx0XHRcdGNvbnN0IG1ldGhvZCA9IGFsbE1ldGhvZHNbbWV0aG9kTmFtZV07XG5cdFx0XHRpZiAobWV0aG9kLm92ZXJyaWRlRXhlY3V0aW9uICYmIChtZXRob2Qub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZC5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSkge1xuXHRcdFx0XHRtZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbKGludGVyZmFjZU9iaiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoaW50ZXJmYWNlT2JqLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdLnB1c2godik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IG1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYgKG1ldGhvZC5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0bWV0aG9kQXJyYXlzLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBhcmcuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaW50ZXJmYWNlT2JqO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7TUFXcUJBLHVCQUF1QjtFQVA1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQSxPQU1DQyxjQUFjLENBQUMsMERBQTBELENBQUM7SUFBQTtJQUUxRSxtQ0FBYztNQUFBO01BQ2IsdUNBQU87TUFDUCw4QkFBd0NDLElBQUksRUFBRTtNQUFDO0lBQ2hEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFKQztJQUFBO0lBQUEsT0FLQUMsWUFBWSxHQUFaLHdCQUEyQjtNQUFBO01BQzFCLE1BQU1DLFlBQVksa0NBQVNELFlBQVksV0FBRTtNQUN6QyxNQUFNRSxRQUFRLEdBQUcsSUFBSSxDQUFDQyxXQUFXLEVBQXdCO01BQ3pELE1BQU1DLFVBQVUsR0FBR0YsUUFBUSxDQUFDRyxhQUFhLEVBQUU7TUFDM0MsTUFBTUMsWUFBd0MsR0FBRyxDQUFDLENBQUM7TUFFbkQsS0FBSyxNQUFNQyxVQUFVLElBQUlILFVBQVUsRUFBRTtRQUNwQyxNQUFNSSxNQUFNLEdBQUdKLFVBQVUsQ0FBQ0csVUFBVSxDQUFDO1FBQ3JDLElBQUlDLE1BQU0sQ0FBQ0MsaUJBQWlCLEtBQUtELE1BQU0sQ0FBQ0MsaUJBQWlCLEtBQUssWUFBWSxJQUFJRCxNQUFNLENBQUNDLGlCQUFpQixLQUFLLGFBQWEsQ0FBQyxFQUFFO1VBQzFISCxZQUFZLENBQUNDLFVBQVUsQ0FBQyxHQUFHLENBQUVOLFlBQVksQ0FBeUNNLFVBQVUsQ0FBQyxDQUFDO1VBQzlGRyxNQUFNLENBQUNDLGNBQWMsQ0FBQ1YsWUFBWSxFQUFFTSxVQUFVLEVBQUU7WUFDL0NLLFlBQVksRUFBRSxJQUFJO1lBQ2xCQyxHQUFHLEVBQUdDLENBQVcsSUFBSztjQUNyQixPQUFPUixZQUFZLENBQUNDLFVBQVUsQ0FBQyxDQUFDUSxJQUFJLENBQUNELENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0RFLEdBQUcsRUFBRSxNQUFNO2NBQ1YsT0FBTyxrQkFBOEI7Z0JBQ3BDLE1BQU1DLFlBQVksR0FBR1gsWUFBWSxDQUFDQyxVQUFVLENBQUM7Z0JBQzdDLElBQUlDLE1BQU0sQ0FBQ0MsaUJBQWlCLEtBQUssYUFBYSxFQUFFO2tCQUMvQ1EsWUFBWSxDQUFDQyxPQUFPLEVBQUU7Z0JBQ3ZCO2dCQUFDLGtDQUplQyxJQUFJO2tCQUFKQSxJQUFJO2dCQUFBO2dCQUtwQixLQUFLLE1BQU1DLEdBQUcsSUFBSUgsWUFBWSxFQUFFO2tCQUMvQixNQUFNRyxHQUFHLENBQUNDLEtBQUssQ0FBQyxNQUFJLEVBQUVGLElBQUksQ0FBQztnQkFDNUI7Y0FDRCxDQUFDO1lBQ0Y7VUFDRCxDQUFDLENBQUM7UUFDSDtNQUNEO01BRUEsT0FBT2xCLFlBQVk7SUFDcEIsQ0FBQztJQUFBO0VBQUEsRUExQ21EcUIsbUJBQW1CO0VBQUE7RUFBQTtBQUFBIn0=
@@ -1,5 +1,7 @@
1
1
  import { defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
2
+ import type BaseObject from "sap/ui/base/Object";
2
3
  import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
4
+ import type ControllerMetadata from "sap/ui/core/mvc/ControllerMetadata";
3
5
  /**
4
6
  * A base implementation for controller extension used internally in sap.fe for central functionalities.
5
7
  *
@@ -12,4 +14,42 @@ export default class BaseControllerExtension extends ControllerExtension {
12
14
  super();
13
15
  (this as unknown as { init: Function }).init();
14
16
  }
17
+
18
+ /**
19
+ * This method is called when the controller extension is instantiated.
20
+ * We need to override it for the specific handling for BeforeAsync and AfterAsync methods, otherwise the last level of extension just replace our implementation.
21
+ * @returns The interface for this controller extension
22
+ */
23
+ getInterface(): BaseObject {
24
+ const interfaceObj = super.getInterface();
25
+ const metadata = this.getMetadata() as ControllerMetadata;
26
+ const allMethods = metadata.getAllMethods();
27
+ const methodHolder: Record<string, Function[]> = {};
28
+
29
+ for (const methodName in allMethods) {
30
+ const method = allMethods[methodName];
31
+ if (method.overrideExecution && (method.overrideExecution === "AfterAsync" || method.overrideExecution === "BeforeAsync")) {
32
+ methodHolder[methodName] = [(interfaceObj as unknown as Record<string, Function>)[methodName]];
33
+ Object.defineProperty(interfaceObj, methodName, {
34
+ configurable: true,
35
+ set: (v: Function) => {
36
+ return methodHolder[methodName].push(v);
37
+ },
38
+ get: () => {
39
+ return async (...args: unknown[]) => {
40
+ const methodArrays = methodHolder[methodName];
41
+ if (method.overrideExecution === "BeforeAsync") {
42
+ methodArrays.reverse();
43
+ }
44
+ for (const arg of methodArrays) {
45
+ await arg.apply(this, args);
46
+ }
47
+ };
48
+ }
49
+ });
50
+ }
51
+ }
52
+
53
+ return interfaceObj;
54
+ }
15
55
  }
@@ -133,6 +133,9 @@ sap.ui.define(["sap/ui/core/Element", "sap/ui/mdc/enums/FieldEditMode", "../help
133
133
  * @param fieldpAPI
134
134
  */;
135
135
  _proto.sendFocusOutMessage = function sendFocusOutMessage(fieldpAPI) {
136
+ if (!fieldpAPI) {
137
+ return;
138
+ }
136
139
  const collaborationPath = this.getCollaborationPath(fieldpAPI);
137
140
  if (collaborationPath) {
138
141
  this.send({
@@ -151,7 +154,7 @@ sap.ui.define(["sap/ui/core/Element", "sap/ui/mdc/enums/FieldEditMode", "../help
151
154
  _proto.getCollaborationPath = function getCollaborationPath(field) {
152
155
  // Note: we send messages even if the context is inactive (empty creation rows),
153
156
  // otherwise we can't update the corresponding locks when the context is activated.
154
- const bindingContext = field.getBindingContext();
157
+ const bindingContext = field === null || field === void 0 ? void 0 : field.getBindingContext();
155
158
  if (!bindingContext) {
156
159
  return;
157
160
  }
@@ -199,4 +202,4 @@ sap.ui.define(["sap/ui/core/Element", "sap/ui/mdc/enums/FieldEditMode", "../help
199
202
  _exports = CollaborationDraft;
200
203
  return _exports;
201
204
  }, false);
202
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uRHJhZnQiLCJkZWZpbmVVSTVDbGFzcyIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwiZm9jdXNFdmVudCIsImZpZWxkcEFQSSIsImdldFNvdXJjZSIsImlzQSIsImdldERvbVJlZiIsImNvbnRhaW5zIiwiZ2V0UGFyYW1ldGVyIiwibGFzdEZvY3VzSWQiLCJnZXRMYXN0Rm9jdXNJZCIsImdldElkIiwiZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMiLCJnZXRGaWVsZEdyb3VwSWRzIiwiam9pbiIsImxhc3RGb2N1c2VkIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwic2VuZEZvY3VzT3V0TWVzc2FnZSIsInNldExhc3RGb2N1c0luZm9ybWF0aW9uIiwic2VuZEZvY3VzSW5NZXNzYWdlIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0IiwiZmllbGRHcm91cEV2ZW50IiwiY29udHJvbCIsImdldFBhcmVudCIsImZpZWxkR3JvdXBJZHMiLCJzb21lIiwiZ3JvdXBJZCIsInN0YXJ0c1dpdGgiLCJDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCIsInNvdXJjZUNvbnRyb2wiLCJjdXJyZW50Rm9jdXNlZENvbnRyb2wiLCJnZXRBY3RpdmVFbGVtZW50IiwidW5kZWZpbmVkIiwibGFzdEZvY3VzRmllbGRHcm91cHMiLCJmb2N1c2VkRmllbGRBUEkiLCJjb2xsYWJvcmF0aW9uUGF0aCIsImdldENvbGxhYm9yYXRpb25QYXRoIiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiTG9jayIsImNvbnRlbnQiLCJVbmxvY2siLCJmaWVsZCIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJmaWVsZFdyYXBwZXIiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiaW5jbHVkZXMiLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJrZXlwYXRoIiwiZ2V0QmluZGluZ0luZm8iLCJ0ZW1wbGF0ZSIsImdldEJpbmRpbmdQYXRoIiwicGF0aCIsIm1lc3NhZ2UiLCJnZXRWaWV3IiwiaXNDb25uZWN0ZWQiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJyZXRhaW5Bc3luY01lc3NhZ2VzIiwiYWN0aXZpdHlQYXRocyIsInJlbGVhc2VBc3luY01lc3NhZ2VzIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsIm9sZENvbnRleHRQYXRoIiwibmV3Q29udGV4dFBhdGgiLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29sbGFib3JhdGl2ZURyYWZ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQVBJXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcIi4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBCYXNlQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwiLi9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcIi4vY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGlvbkRyYWZ0IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIGxhc3RGb2N1c0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBsYXN0Rm9jdXNGaWVsZEdyb3Vwczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSE6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cblx0cHJpdmF0ZSBnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA9IHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA/PyB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpO1xuXHRcdHJldHVybiB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgZm9jdXMgaXMgc2V0IGluIHRoZSBGaWVsZEFQSSBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm9jdXNFdmVudFxuXHQgKi9cblx0cHVibGljIGhhbmRsZUNvbnRlbnRGb2N1c0luKGZvY3VzRXZlbnQ6IFVJNUV2ZW50PHsgcmVsYXRlZFRhcmdldDogTm9kZSB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IGZpZWxkcEFQSTogRmllbGRBUEkgfCBNdWx0aVZhbHVlRmllbGQgPSBmb2N1c0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdC8vIFdlIHNlbmQgdGhlIGV2ZW50IG9ubHkgaWYgdGhlIGZvY3VzIHdhcyBwcmV2aW91c2x5IG91dCBvZiB0aGUgRmllbGRBUElcblx0XHRpZiAoXG5cdFx0XHRmaWVsZHBBUEkuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSB8fFxuXHRcdFx0IWZpZWxkcEFQSS5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNFdmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKVxuXHRcdCkge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG5ld2x5IGZvY3VzZWQgRmllbGRBUEkgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIG9uZSwgYnV0IHRoZXkgc2hhcmUgdGhlIHNhbWUgZmllbGRHcm91cElEc1xuXHRcdFx0Ly8gKGUuZy4gZmllbGRzIGluIGRpZmZlcmVudCByb3dzIGluIHRoZSBzYW1lIGNvbHVtbiBvZiBhIHRhYmxlKVxuXHRcdFx0Ly8gSW4gc3VjaCBjYXNlLCB0aGUgZm9jdXNPdXQgaGFuZGxlciB3YXMgbm90IGNhbGxlZCAoYmVjYXVzZSB3ZSBzdGF5IGluIHRoZSBzYW1lIGZpZWxkR3JvdXBJRCksIHNvIHdlIG5lZWQgdG8gc2VuZCBhIGZvY3VzT3V0IGV2ZW50IG1hbnVhbGx5XG5cdFx0XHRjb25zdCBsYXN0Rm9jdXNJZCA9IHRoaXMuZ2V0TGFzdEZvY3VzSWQoKTtcblx0XHRcdGlmIChcblx0XHRcdFx0bGFzdEZvY3VzSWQgJiZcblx0XHRcdFx0bGFzdEZvY3VzSWQgIT09IGZpZWxkcEFQSS5nZXRJZCgpICYmXG5cdFx0XHRcdHRoaXMuZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMoKSA9PT0gZmllbGRwQVBJLmdldEZpZWxkR3JvdXBJZHMoKS5qb2luKFwiLFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RGb2N1c2VkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChsYXN0Rm9jdXNJZCkgYXMgRmllbGRBUEk7XG5cdFx0XHRcdHRoaXM/LnNlbmRGb2N1c091dE1lc3NhZ2UobGFzdEZvY3VzZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldExhc3RGb2N1c0luZm9ybWF0aW9uKGZpZWxkcEFQSSk7XG5cblx0XHRcdHRoaXMuc2VuZEZvY3VzSW5NZXNzYWdlKGZpZWxkcEFQSSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGZvY3VzIGlzIHJlbW92ZWQgZnJvbSB0aGUgRmllbGRBUEkgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBFdmVudFxuXHQgKi9cblx0cHVibGljIGhhbmRsZUNvbnRlbnRGb2N1c091dChmaWVsZEdyb3VwRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRsZXQgY29udHJvbDogTWFuYWdlZE9iamVjdCB8IG51bGwgPSBmaWVsZEdyb3VwRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0aWYgKCFjb250cm9sLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sPy5pc0E8RmllbGRBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZEFQSVwiKSkge1xuXHRcdFx0XHRjb250cm9sID0gY29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNvbnRyb2wpIHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gZmllbGRHcm91cEV2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIikgYXMgc3RyaW5nW107XG5cblx0XHQvLyBXZSBzZW5kIHRoZSBldmVudCBvbmx5IGlmIHRoZSB2YWxpZGF0ZWQgZmllbGRDcm91cCBjb3JyZXNwb25kcyB0byBhIGNvbGxhYm9yYXRpb24gZ3JvdXBcblx0XHRpZiAoXG5cdFx0XHRmaWVsZEdyb3VwSWRzLnNvbWUoKGdyb3VwSWQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdyb3VwSWQuc3RhcnRzV2l0aChDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCk7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc291cmNlQ29udHJvbDogQ29udHJvbCA9IGZpZWxkR3JvdXBFdmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHRoZSBjb250cm9sIHRoYXQgc2VudCB0aGUgZXZlbnQgc3RpbGwgaGFzIHRoZSBmb2N1cyAob3Igb25lIG9mIGl0cyBjaGlsZHJlbikuXG5cdFx0XHQvLyBUaGlzIGNvdWxkIGhhcHBlbiBlLmcuIGlmIHRoZSB1c2VyIHByZXNzZWQgPEVudGVyPiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQuXG5cdFx0XHRsZXQgY3VycmVudEZvY3VzZWRDb250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCA9IEVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpO1xuXHRcdFx0d2hpbGUgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAmJiBjdXJyZW50Rm9jdXNlZENvbnRyb2wgIT09IHNvdXJjZUNvbnRyb2wpIHtcblx0XHRcdFx0Y3VycmVudEZvY3VzZWRDb250cm9sID0gY3VycmVudEZvY3VzZWRDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAhPT0gc291cmNlQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgY29udHJvbCB0aGF0IHNlbnQgdGhlIGV2ZW50IGlzbid0IGZvY3VzZWQgYW55bW9yZVxuXHRcdFx0XHR0aGlzLnNlbmRGb2N1c091dE1lc3NhZ2UoY29udHJvbCk7XG5cdFx0XHRcdGlmICh0aGlzLmdldExhc3RGb2N1c0lkKCkgPT09IGNvbnRyb2wuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdEZvY3VzSW5mb3JtYXRpb24odW5kZWZpbmVkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpZCBvZiB0aGUgbGFzdCBmb2N1c2VkIEZpZWxkQVBJIChpZiBhbnkpLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBJRFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRMYXN0Rm9jdXNJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxhc3RGb2N1c0lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZpZWxkZ3JvdXBzIG9mIHRoZSBsYXN0IGZvY3VzZWQgRmllbGRBUEkgKGlmIGFueSkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZpZWxkZ3JvdXBzIHNlcGFyYXRlZCBieSAnLCdcblx0ICovXG5cdHByaXZhdGUgZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5sYXN0Rm9jdXNGaWVsZEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhc3QgZm9jdXNlZCBGaWVsZEFQSSAoaWQgYW5kIGZpZWxkZ3JvdXBzKS5cblx0ICpcblx0ICogQHBhcmFtIGZvY3VzZWRGaWVsZEFQSVxuXHQgKi9cblx0cHJpdmF0ZSBzZXRMYXN0Rm9jdXNJbmZvcm1hdGlvbihmb2N1c2VkRmllbGRBUEk6IEZpZWxkQVBJIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5sYXN0Rm9jdXNJZCA9IGZvY3VzZWRGaWVsZEFQST8uZ2V0SWQoKTtcblx0XHR0aGlzLmxhc3RGb2N1c0ZpZWxkR3JvdXBzID0gZm9jdXNlZEZpZWxkQVBJPy5nZXRGaWVsZEdyb3VwSWRzKCkuam9pbihcIixcIik7XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGEgTG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzSW5NZXNzYWdlKGZpZWxkcEFQSTogRmllbGRBUEkgfCBNdWx0aVZhbHVlRmllbGQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uUGF0aCA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvblBhdGgoZmllbGRwQVBJKTtcblxuXHRcdGlmIChjb2xsYWJvcmF0aW9uUGF0aCkge1xuXHRcdFx0dGhpcy5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrLCBjb250ZW50OiBjb2xsYWJvcmF0aW9uUGF0aCB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGFuIFVubG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzT3V0TWVzc2FnZShmaWVsZHBBUEk6IEZpZWxkQVBJIHwgTXVsdGlWYWx1ZUZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvblBhdGggPSB0aGlzLmdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkcEFQSSk7XG5cblx0XHRpZiAoY29sbGFib3JhdGlvblBhdGgpIHtcblx0XHRcdHRoaXMuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBjb2xsYWJvcmF0aW9uUGF0aCB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGF0aCB1c2VkIHRvIHNlbmQgY29sbGFib3JhdGlvbiBtZXNzYWdlcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkcEFQSVxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCAob3IgdW5kZWZpbmVkIGlzIG5vIHZhbGlkIHBhdGggY291bGQgYmUgZm91bmQpXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkOiBGaWVsZEFQSSB8IE11bHRpVmFsdWVGaWVsZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gTm90ZTogd2Ugc2VuZCBtZXNzYWdlcyBldmVuIGlmIHRoZSBjb250ZXh0IGlzIGluYWN0aXZlIChlbXB0eSBjcmVhdGlvbiByb3dzKSxcblx0XHQvLyBvdGhlcndpc2Ugd2UgY2FuJ3QgdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGxvY2tzIHdoZW4gdGhlIGNvbnRleHQgaXMgYWN0aXZhdGVkLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGZpZWxkLmlzQTxGaWVsZEFQST4oXCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkQVBJXCIpKSB7XG5cdFx0XHRpZiAoIWZpZWxkLmdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IGZpZWxkLmNvbnRlbnQgYXMgRmllbGRXcmFwcGVyIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhW0ZpZWxkRWRpdE1vZGUuRWRpdGFibGUsIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHldLmluY2x1ZGVzKFxuXHRcdFx0XHRcdGZpZWxkV3JhcHBlcj8uZ2V0UHJvcGVydHkoXCJlZGl0TW9kZVwiKVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhlIGZpZWxkIGlzIG5vdCBpbiBlZGl0IG1vZGUgLS0+IG5vIGNvbGxhYm9yYXRpb24gbWVzc2FnZXNcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGAke2JpbmRpbmdDb250ZXh0LmdldFBhdGgoKX0vJHtmaWVsZC5nZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgoKX1gO1xuXHRcdH0gZWxzZSBpZiAoZmllbGQuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0Y29uc3Qga2V5cGF0aCA9IGZpZWxkLmdldEJpbmRpbmdJbmZvKFwiaXRlbXNcIikudGVtcGxhdGUuZ2V0QmluZGluZ1BhdGgoXCJrZXlcIik7XG5cdFx0XHRyZXR1cm4gYCR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfS8ke2ZpZWxkLmdldEJpbmRpbmdJbmZvKFwiaXRlbXNcIikucGF0aH0vJHtrZXlwYXRofWA7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNlbmQobWVzc2FnZToge1xuXHRcdGFjdGlvbjogQWN0aXZpdHk7XG5cdFx0Y29udGVudDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdFx0dHJpZ2dlcmVkQWN0aW9uTmFtZT86IHN0cmluZztcblx0XHRyZWZyZXNoTGlzdEJpbmRpbmc/OiBib29sZWFuO1xuXHRcdGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fSk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLnNlbmQodGhpcy5nZXRWaWV3KCksIG1lc3NhZ2UpO1xuXHR9XG5cblx0cHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5pc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuY29ubmVjdCh0aGlzLmdldFZpZXcoKSBhcyBGRVZpZXcpO1xuXHR9XG5cblx0cHVibGljIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLmRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkgYXMgRkVWaWV3KTtcblx0fVxuXG5cdHB1YmxpYyBpc0NvbGxhYm9yYXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5pc0NvbGxhYm9yYXRpb25FbmFibGVkKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdHB1YmxpYyByZXRhaW5Bc3luY01lc3NhZ2VzKGFjdGl2aXR5UGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLnJldGFpbkFzeW5jTWVzc2FnZXModGhpcy5nZXRWaWV3KCksIGFjdGl2aXR5UGF0aHMpO1xuXHR9XG5cblx0cHVibGljIHJlbGVhc2VBc3luY01lc3NhZ2VzKGFjdGl2aXR5UGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLnJlbGVhc2VBc3luY01lc3NhZ2VzKHRoaXMuZ2V0VmlldygpLCBhY3Rpdml0eVBhdGhzKTtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKG9sZENvbnRleHRQYXRoOiBzdHJpbmcsIG5ld0NvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkudXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCh0aGlzLmdldFZpZXcoKSwgb2xkQ29udGV4dFBhdGgsIG5ld0NvbnRleHRQYXRoKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7OztNQWtCcUJBLGtCQUFrQixXQUR0Q0MsY0FBYyxDQUFDLHFEQUFxRCxDQUFDO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUEsT0FVN0RDLDRCQUE0QixHQUFwQyx3Q0FBa0U7TUFDakUsSUFBSSxDQUFDQyx5QkFBeUIsR0FBRyxJQUFJLENBQUNBLHlCQUF5QixJQUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxlQUFlLEVBQUUsQ0FBQ0gsNEJBQTRCLEVBQUU7TUFDN0gsT0FBTyxJQUFJLENBQUNDLHlCQUF5QjtJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFB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
205
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uRHJhZnQiLCJkZWZpbmVVSTVDbGFzcyIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwiZm9jdXNFdmVudCIsImZpZWxkcEFQSSIsImdldFNvdXJjZSIsImlzQSIsImdldERvbVJlZiIsImNvbnRhaW5zIiwiZ2V0UGFyYW1ldGVyIiwibGFzdEZvY3VzSWQiLCJnZXRMYXN0Rm9jdXNJZCIsImdldElkIiwiZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMiLCJnZXRGaWVsZEdyb3VwSWRzIiwiam9pbiIsImxhc3RGb2N1c2VkIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwic2VuZEZvY3VzT3V0TWVzc2FnZSIsInNldExhc3RGb2N1c0luZm9ybWF0aW9uIiwic2VuZEZvY3VzSW5NZXNzYWdlIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0IiwiZmllbGRHcm91cEV2ZW50IiwiY29udHJvbCIsImdldFBhcmVudCIsImZpZWxkR3JvdXBJZHMiLCJzb21lIiwiZ3JvdXBJZCIsInN0YXJ0c1dpdGgiLCJDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCIsInNvdXJjZUNvbnRyb2wiLCJjdXJyZW50Rm9jdXNlZENvbnRyb2wiLCJnZXRBY3RpdmVFbGVtZW50IiwidW5kZWZpbmVkIiwibGFzdEZvY3VzRmllbGRHcm91cHMiLCJmb2N1c2VkRmllbGRBUEkiLCJjb2xsYWJvcmF0aW9uUGF0aCIsImdldENvbGxhYm9yYXRpb25QYXRoIiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiTG9jayIsImNvbnRlbnQiLCJVbmxvY2siLCJmaWVsZCIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJmaWVsZFdyYXBwZXIiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiaW5jbHVkZXMiLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJrZXlwYXRoIiwiZ2V0QmluZGluZ0luZm8iLCJ0ZW1wbGF0ZSIsImdldEJpbmRpbmdQYXRoIiwicGF0aCIsIm1lc3NhZ2UiLCJnZXRWaWV3IiwiaXNDb25uZWN0ZWQiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJyZXRhaW5Bc3luY01lc3NhZ2VzIiwiYWN0aXZpdHlQYXRocyIsInJlbGVhc2VBc3luY01lc3NhZ2VzIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsIm9sZENvbnRleHRQYXRoIiwibmV3Q29udGV4dFBhdGgiLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29sbGFib3JhdGl2ZURyYWZ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQVBJXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcIi4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBCYXNlQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwiLi9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcIi4vY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGlvbkRyYWZ0IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIGxhc3RGb2N1c0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBsYXN0Rm9jdXNGaWVsZEdyb3Vwczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSE6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cblx0cHJpdmF0ZSBnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA9IHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA/PyB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpO1xuXHRcdHJldHVybiB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgZm9jdXMgaXMgc2V0IGluIHRoZSBGaWVsZEFQSSBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm9jdXNFdmVudFxuXHQgKi9cblx0cHVibGljIGhhbmRsZUNvbnRlbnRGb2N1c0luKGZvY3VzRXZlbnQ6IFVJNUV2ZW50PHsgcmVsYXRlZFRhcmdldDogTm9kZSB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IGZpZWxkcEFQSTogRmllbGRBUEkgfCBNdWx0aVZhbHVlRmllbGQgPSBmb2N1c0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdC8vIFdlIHNlbmQgdGhlIGV2ZW50IG9ubHkgaWYgdGhlIGZvY3VzIHdhcyBwcmV2aW91c2x5IG91dCBvZiB0aGUgRmllbGRBUElcblx0XHRpZiAoXG5cdFx0XHRmaWVsZHBBUEkuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSB8fFxuXHRcdFx0IWZpZWxkcEFQSS5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNFdmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKVxuXHRcdCkge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG5ld2x5IGZvY3VzZWQgRmllbGRBUEkgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIG9uZSwgYnV0IHRoZXkgc2hhcmUgdGhlIHNhbWUgZmllbGRHcm91cElEc1xuXHRcdFx0Ly8gKGUuZy4gZmllbGRzIGluIGRpZmZlcmVudCByb3dzIGluIHRoZSBzYW1lIGNvbHVtbiBvZiBhIHRhYmxlKVxuXHRcdFx0Ly8gSW4gc3VjaCBjYXNlLCB0aGUgZm9jdXNPdXQgaGFuZGxlciB3YXMgbm90IGNhbGxlZCAoYmVjYXVzZSB3ZSBzdGF5IGluIHRoZSBzYW1lIGZpZWxkR3JvdXBJRCksIHNvIHdlIG5lZWQgdG8gc2VuZCBhIGZvY3VzT3V0IGV2ZW50IG1hbnVhbGx5XG5cdFx0XHRjb25zdCBsYXN0Rm9jdXNJZCA9IHRoaXMuZ2V0TGFzdEZvY3VzSWQoKTtcblx0XHRcdGlmIChcblx0XHRcdFx0bGFzdEZvY3VzSWQgJiZcblx0XHRcdFx0bGFzdEZvY3VzSWQgIT09IGZpZWxkcEFQSS5nZXRJZCgpICYmXG5cdFx0XHRcdHRoaXMuZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMoKSA9PT0gZmllbGRwQVBJLmdldEZpZWxkR3JvdXBJZHMoKS5qb2luKFwiLFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RGb2N1c2VkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChsYXN0Rm9jdXNJZCkgYXMgRmllbGRBUEk7XG5cdFx0XHRcdHRoaXM/LnNlbmRGb2N1c091dE1lc3NhZ2UobGFzdEZvY3VzZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldExhc3RGb2N1c0luZm9ybWF0aW9uKGZpZWxkcEFQSSk7XG5cblx0XHRcdHRoaXMuc2VuZEZvY3VzSW5NZXNzYWdlKGZpZWxkcEFQSSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGZvY3VzIGlzIHJlbW92ZWQgZnJvbSB0aGUgRmllbGRBUEkgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBFdmVudFxuXHQgKi9cblx0cHVibGljIGhhbmRsZUNvbnRlbnRGb2N1c091dChmaWVsZEdyb3VwRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRsZXQgY29udHJvbDogTWFuYWdlZE9iamVjdCB8IG51bGwgPSBmaWVsZEdyb3VwRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0aWYgKCFjb250cm9sLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sPy5pc0E8RmllbGRBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZEFQSVwiKSkge1xuXHRcdFx0XHRjb250cm9sID0gY29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNvbnRyb2wpIHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gZmllbGRHcm91cEV2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIikgYXMgc3RyaW5nW107XG5cblx0XHQvLyBXZSBzZW5kIHRoZSBldmVudCBvbmx5IGlmIHRoZSB2YWxpZGF0ZWQgZmllbGRDcm91cCBjb3JyZXNwb25kcyB0byBhIGNvbGxhYm9yYXRpb24gZ3JvdXBcblx0XHRpZiAoXG5cdFx0XHRmaWVsZEdyb3VwSWRzLnNvbWUoKGdyb3VwSWQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdyb3VwSWQuc3RhcnRzV2l0aChDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCk7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc291cmNlQ29udHJvbDogQ29udHJvbCA9IGZpZWxkR3JvdXBFdmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHRoZSBjb250cm9sIHRoYXQgc2VudCB0aGUgZXZlbnQgc3RpbGwgaGFzIHRoZSBmb2N1cyAob3Igb25lIG9mIGl0cyBjaGlsZHJlbikuXG5cdFx0XHQvLyBUaGlzIGNvdWxkIGhhcHBlbiBlLmcuIGlmIHRoZSB1c2VyIHByZXNzZWQgPEVudGVyPiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQuXG5cdFx0XHRsZXQgY3VycmVudEZvY3VzZWRDb250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCA9IEVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpO1xuXHRcdFx0d2hpbGUgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAmJiBjdXJyZW50Rm9jdXNlZENvbnRyb2wgIT09IHNvdXJjZUNvbnRyb2wpIHtcblx0XHRcdFx0Y3VycmVudEZvY3VzZWRDb250cm9sID0gY3VycmVudEZvY3VzZWRDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAhPT0gc291cmNlQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgY29udHJvbCB0aGF0IHNlbnQgdGhlIGV2ZW50IGlzbid0IGZvY3VzZWQgYW55bW9yZVxuXHRcdFx0XHR0aGlzLnNlbmRGb2N1c091dE1lc3NhZ2UoY29udHJvbCk7XG5cdFx0XHRcdGlmICh0aGlzLmdldExhc3RGb2N1c0lkKCkgPT09IGNvbnRyb2wuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdEZvY3VzSW5mb3JtYXRpb24odW5kZWZpbmVkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpZCBvZiB0aGUgbGFzdCBmb2N1c2VkIEZpZWxkQVBJIChpZiBhbnkpLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBJRFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRMYXN0Rm9jdXNJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxhc3RGb2N1c0lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZpZWxkZ3JvdXBzIG9mIHRoZSBsYXN0IGZvY3VzZWQgRmllbGRBUEkgKGlmIGFueSkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZpZWxkZ3JvdXBzIHNlcGFyYXRlZCBieSAnLCdcblx0ICovXG5cdHByaXZhdGUgZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5sYXN0Rm9jdXNGaWVsZEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhc3QgZm9jdXNlZCBGaWVsZEFQSSAoaWQgYW5kIGZpZWxkZ3JvdXBzKS5cblx0ICpcblx0ICogQHBhcmFtIGZvY3VzZWRGaWVsZEFQSVxuXHQgKi9cblx0cHJpdmF0ZSBzZXRMYXN0Rm9jdXNJbmZvcm1hdGlvbihmb2N1c2VkRmllbGRBUEk6IEZpZWxkQVBJIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5sYXN0Rm9jdXNJZCA9IGZvY3VzZWRGaWVsZEFQST8uZ2V0SWQoKTtcblx0XHR0aGlzLmxhc3RGb2N1c0ZpZWxkR3JvdXBzID0gZm9jdXNlZEZpZWxkQVBJPy5nZXRGaWVsZEdyb3VwSWRzKCkuam9pbihcIixcIik7XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGEgTG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzSW5NZXNzYWdlKGZpZWxkcEFQSTogRmllbGRBUEkgfCBNdWx0aVZhbHVlRmllbGQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uUGF0aCA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvblBhdGgoZmllbGRwQVBJKTtcblxuXHRcdGlmIChjb2xsYWJvcmF0aW9uUGF0aCkge1xuXHRcdFx0dGhpcy5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrLCBjb250ZW50OiBjb2xsYWJvcmF0aW9uUGF0aCB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGFuIFVubG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzT3V0TWVzc2FnZShmaWVsZHBBUEk6IEZpZWxkQVBJIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKCFmaWVsZHBBUEkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvblBhdGggPSB0aGlzLmdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkcEFQSSk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25QYXRoKSB7XG5cdFx0XHR0aGlzLnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LlVubG9jaywgY29udGVudDogY29sbGFib3JhdGlvblBhdGggfSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggdXNlZCB0byBzZW5kIGNvbGxhYm9yYXRpb24gbWVzc2FnZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICogQHJldHVybnMgVGhlIHBhdGggKG9yIHVuZGVmaW5lZCBpcyBubyB2YWxpZCBwYXRoIGNvdWxkIGJlIGZvdW5kKVxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb2xsYWJvcmF0aW9uUGF0aChmaWVsZDogRmllbGRBUEkgfCBNdWx0aVZhbHVlRmllbGQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdC8vIE5vdGU6IHdlIHNlbmQgbWVzc2FnZXMgZXZlbiBpZiB0aGUgY29udGV4dCBpcyBpbmFjdGl2ZSAoZW1wdHkgY3JlYXRpb24gcm93cyksXG5cdFx0Ly8gb3RoZXJ3aXNlIHdlIGNhbid0IHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBsb2NrcyB3aGVuIHRoZSBjb250ZXh0IGlzIGFjdGl2YXRlZC5cblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IGZpZWxkPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoZmllbGQuaXNBPEZpZWxkQVBJPihcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRBUElcIikpIHtcblx0XHRcdGlmICghZmllbGQuZ2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoKCkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZmllbGRXcmFwcGVyID0gZmllbGQuY29udGVudCBhcyBGaWVsZFdyYXBwZXIgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFbRmllbGRFZGl0TW9kZS5FZGl0YWJsZSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVSZWFkT25seV0uaW5jbHVkZXMoXG5cdFx0XHRcdFx0ZmllbGRXcmFwcGVyPy5nZXRQcm9wZXJ0eShcImVkaXRNb2RlXCIpXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGUgZmllbGQgaXMgbm90IGluIGVkaXQgbW9kZSAtLT4gbm8gY29sbGFib3JhdGlvbiBtZXNzYWdlc1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYCR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfS8ke2ZpZWxkLmdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpfWA7XG5cdFx0fSBlbHNlIGlmIChmaWVsZC5pc0E8TXVsdGlWYWx1ZUZpZWxkPihcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRjb25zdCBrZXlwYXRoID0gZmllbGQuZ2V0QmluZGluZ0luZm8oXCJpdGVtc1wiKS50ZW1wbGF0ZS5nZXRCaW5kaW5nUGF0aChcImtleVwiKTtcblx0XHRcdHJldHVybiBgJHtiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCl9LyR7ZmllbGQuZ2V0QmluZGluZ0luZm8oXCJpdGVtc1wiKS5wYXRofS8ke2tleXBhdGh9YDtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2VuZChtZXNzYWdlOiB7XG5cdFx0YWN0aW9uOiBBY3Rpdml0eTtcblx0XHRjb250ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblx0XHR0cmlnZ2VyZWRBY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRcdHJlZnJlc2hMaXN0QmluZGluZz86IGJvb2xlYW47XG5cdFx0YWN0aW9uUmVxdWVzdGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9KTogdm9pZCB7XG5cdFx0dGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuc2VuZCh0aGlzLmdldFZpZXcoKSwgbWVzc2FnZSk7XG5cdH1cblxuXHRwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLmlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5jb25uZWN0KHRoaXMuZ2V0VmlldygpIGFzIEZFVmlldyk7XG5cdH1cblxuXHRwdWJsaWMgZGlzY29ubmVjdCgpOiB2b2lkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSBhcyBGRVZpZXcpO1xuXHR9XG5cblx0cHVibGljIGlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLmlzQ29sbGFib3JhdGlvbkVuYWJsZWQodGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0cHVibGljIHJldGFpbkFzeW5jTWVzc2FnZXMoYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkucmV0YWluQXN5bmNNZXNzYWdlcyh0aGlzLmdldFZpZXcoKSwgYWN0aXZpdHlQYXRocyk7XG5cdH1cblxuXHRwdWJsaWMgcmVsZWFzZUFzeW5jTWVzc2FnZXMoYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkucmVsZWFzZUFzeW5jTWVzc2FnZXModGhpcy5nZXRWaWV3KCksIGFjdGl2aXR5UGF0aHMpO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgob2xkQ29udGV4dFBhdGg6IHN0cmluZywgbmV3Q29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS51cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKHRoaXMuZ2V0VmlldygpLCBvbGRDb250ZXh0UGF0aCwgbmV3Q29udGV4dFBhdGgpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7O01Ba0JxQkEsa0JBQWtCLFdBRHRDQyxjQUFjLENBQUMscURBQXFELENBQUM7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBQUE7SUFBQSxPQVU3REMsNEJBQTRCLEdBQXBDLHdDQUFrRTtNQUNqRSxJQUFJLENBQUNDLHlCQUF5QixHQUFHLElBQUksQ0FBQ0EseUJBQXlCLElBQUksSUFBSSxDQUFDQyxJQUFJLENBQUNDLGVBQWUsRUFBRSxDQUFDSCw0QkFBNEIsRUFBRTtNQUM3SCxPQUFPLElB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
@@ -146,9 +146,11 @@ export default class CollaborationDraft extends BaseControllerExtension {
146
146
  *
147
147
  * @param fieldpAPI
148
148
  */
149
- private sendFocusOutMessage(fieldpAPI: FieldAPI | MultiValueField): void {
149
+ private sendFocusOutMessage(fieldpAPI: FieldAPI | MultiValueField | undefined): void {
150
+ if (!fieldpAPI) {
151
+ return;
152
+ }
150
153
  const collaborationPath = this.getCollaborationPath(fieldpAPI);
151
-
152
154
  if (collaborationPath) {
153
155
  this.send({ action: Activity.Unlock, content: collaborationPath });
154
156
  }
@@ -163,7 +165,7 @@ export default class CollaborationDraft extends BaseControllerExtension {
163
165
  private getCollaborationPath(field: FieldAPI | MultiValueField): string | undefined {
164
166
  // Note: we send messages even if the context is inactive (empty creation rows),
165
167
  // otherwise we can't update the corresponding locks when the context is activated.
166
- const bindingContext = field.getBindingContext() as Context | undefined;
168
+ const bindingContext = field?.getBindingContext() as Context | undefined;
167
169
  if (!bindingContext) {
168
170
  return;
169
171
  }