@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
@@ -252,4 +252,4 @@ sap.ui.define(["sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/Bin
252
252
  _exports.getTitleBindingExpression = getTitleBindingExpression;
253
253
  return _exports;
254
254
  }, false);
255
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ0YXJnZXRPYmplY3QiLCJnZXRQcm9wZXJ0eURlZmluaXRpb24iLCJwcm9wZXJ0eURhdGFNb2RlbE9iamVjdCIsInByb3BlcnR5UGF0aE9yUHJvcGVydHkiLCJpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiaXNPckhhc0FjdGl2ZUVudGl0eSIsImRyYWZ0Um9vdCIsInRhcmdldEVudGl0eVNldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiZHJhZnROb2RlIiwiRHJhZnROb2RlIiwibm90IiwiRHJhZnQiLCJJc05ld09iamVjdCIsImlzVGl0bGVFbXB0eUJvb2xlYW5FeHByZXNzaW9uIiwidGl0bGVWYWx1ZUV4cHJlc3Npb24iLCJfdHlwZSIsImNvbnN0YW50IiwidmFsdWUiLCJpc0VtcHR5IiwiZ2V0VGl0bGVCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsInByb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRPcHRpb25zIiwidGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSIsImRpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0RGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXREaXNwbGF5TW9kZSIsImNvbW1vblRleHQiLCJUZXh0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJwYXJhbXMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwic3BsaXRUaXRsZU9uVHdvTGluZXMiLCJpZkVsc2UiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldENyZWF0ZU1vZGVUaXRsZSIsInZpZXdEYXRhIiwiVHlwZU5hbWUiLCJ0eXBlTmFtZSIsInRpdGxlTm9IZWFkZXJJbmZvIiwicGF0aEluTW9kZWwiLCJjcmVhdGVNb2RlVGl0bGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImVudGl0eVNldCIsInRpdGxlV2l0aEhlYWRlckluZm8iLCJjb25jYXQiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRvU3RyaW5nIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0VGl0bGUiLCJzaG91bGRGb3JjZUVtcHR5U3RyaW5nIiwiQ29yZSIsIkNvbXB1dGVkIiwiSXNJbmFjdGl2ZSIsImdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8iLCJoZWFkZXJJbmZvVGl0bGUiLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCIkVHlwZSIsIlZhbHVlIiwiVGFyZ2V0IiwiY29ubmVjdGVkRmllbGRzUGF0aCIsImdldExhYmVsRm9yQ29ubmVjdGVkRmllbGRzIiwiZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImhlYWRlckluZm8iLCJjdXN0b21Gb3JtYXR0ZXIiLCJmb3JtYXR0ZXIiLCJpc0hlYWRlckluZm9UaXRsZUVtcHR5IiwiVGl0bGUiLCJpc0NvbnN0YW50IiwiY29tcGlsZUV4cHJlc3Npb24iLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJpc1RpdGxlRW1wdHkiLCJmb3JjZUVtcHR5U3RyaW5nIiwiZm9ybWF0dGVkRXhwcmVzc2lvbiIsIm9yIiwiaXNVbmRlZmluZWRFeHByZXNzaW9uIiwiSXNDcmVhdGVNb2RlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUaXRsZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgRGF0YUZpZWxkVHlwZXMsIEhlYWRlckluZm9UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBEcmFmdCwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25jYXQsXG5cdGNvbnN0YW50LFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc0VtcHR5LFxuXHRpc1VuZGVmaW5lZEV4cHJlc3Npb24sXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZyxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgZ2V0TGFiZWxGb3JDb25uZWN0ZWRGaWVsZHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhRmllbGRGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcblxudHlwZSBCaW5kaW5nRXhwcmVzc2lvblR1cGxlID0gW0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPl0gfCBbQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5dO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uKSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZXhwcmVzc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbi8qKlxuICogR2V0IHByb3BlcnR5IGRlZmluaXRpb24gZnJvbSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdCBUaGUgcHJvcGVydHkgZGF0YSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eVxuICovXG5jb25zdCBnZXRQcm9wZXJ0eURlZmluaXRpb24gPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGgpID0+IHtcblx0Y29uc3QgcHJvcGVydHlQYXRoT3JQcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eVBhdGggfCBQcm9wZXJ0eTtcblx0cmV0dXJuIGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihwcm9wZXJ0eVBhdGhPclByb3BlcnR5KSA/IHByb3BlcnR5UGF0aE9yUHJvcGVydHkuJHRhcmdldCA6IHByb3BlcnR5UGF0aE9yUHJvcGVydHk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGFzc29jaWF0ZWQgYWN0aXZlIGVudGl0eSBleGlzdHMuXG4gKlxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5jb25zdCBpc09ySGFzQWN0aXZlRW50aXR5ID0gKGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCkgPT4ge1xuXHRjb25zdCBkcmFmdFJvb3QgPSAoZnVsbENvbnRleHRQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q7XG5cdGNvbnN0IGRyYWZ0Tm9kZSA9IChmdWxsQ29udGV4dFBhdGgudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCB8IHVuZGVmaW5lZCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZTtcblx0aWYgKCEhZHJhZnRSb290IHx8ICEhZHJhZnROb2RlKSB7XG5cdFx0cmV0dXJuIG5vdChEcmFmdC5Jc05ld09iamVjdCk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGl0bGUgdmFsdWUgZXhwcmVzc2lvbiBpcyBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gdGl0bGVWYWx1ZUV4cHJlc3Npb24gVGhlIHRpdGxlIHZhbHVlIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmNvbnN0IGlzVGl0bGVFbXB0eUJvb2xlYW5FeHByZXNzaW9uID0gKHRpdGxlVmFsdWVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPikgPT5cblx0dGl0bGVWYWx1ZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29uc3RhbnRcIiA/IGNvbnN0YW50KCF0aXRsZVZhbHVlRXhwcmVzc2lvbi52YWx1ZSkgOiBpc0VtcHR5KHRpdGxlVmFsdWVFeHByZXNzaW9uKTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRpdGxlIGV4cHJlc3Npb24gYmluZGluZy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHByb3BlcnR5IGNvbnRleHRcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHByb3BlcnR5IGFib3ZlXG4gKiBAcGFyYW0gW2ZpZWxkRm9ybWF0T3B0aW9uc10gVGhlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBmaWVsZFxuICogQHBhcmFtIGZpZWxkRm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgcGFyYW1ldGVyc1xuICovXG5jb25zdCBnZXRUaXRsZUJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmb3JtYXRPcHRpb25zPzogUGFydGlhbDx7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHNwbGl0VGl0bGVPblR3b0xpbmVzPzogYm9vbGVhbiB9PlxuKTogQmluZGluZ0V4cHJlc3Npb25UdXBsZSB7XG5cdGNvbnN0IHRhcmdldERpc3BsYXlNb2RlT3ZlcnJpZGUgPSBmb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZTtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gZ2V0UHJvcGVydHlEZWZpbml0aW9uKHByb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IHRhcmdldERpc3BsYXlNb2RlID0gdGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSB8fCBVSUZvcm1hdHRlcnMuZ2V0RGlzcGxheU1vZGUocHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0Y29uc3QgY29tbW9uVGV4dCA9IHByb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMocHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblxuXHRpZiAocHJvcGVydHlEZWZpbml0aW9uKSB7XG5cdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0fVxuXG5cdGxldCBwYXJhbXM6IEJpbmRpbmdFeHByZXNzaW9uVHVwbGUgPSBbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl07XG5cdGlmICh0YXJnZXREaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiICYmIGNvbW1vblRleHQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldERpc3BsYXlNb2RlKSB7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0cGFyYW1zID0gW2dldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0Zm9ybWF0T3B0aW9ucz8uc3BsaXRUaXRsZU9uVHdvTGluZXMgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBpZkVsc2UoISFjb21tb25UZXh0LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBjb25zdGFudChcIlwiKSlcblx0XHRcdFx0XHRcdDogaWZFbHNlKCEhZm9ybWF0T3B0aW9ucz8uc3BsaXRUaXRsZU9uVHdvTGluZXMsIGNvbnN0YW50KFwiXCIpLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0cGFyYW1zID0gW2dldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKSwgdGFyZ2V0RXhwcmVzc2lvbl07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0cGFyYW1zID0gW1xuXHRcdFx0XHRcdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0aWZFbHNlKCEhZm9ybWF0T3B0aW9ucz8uc3BsaXRUaXRsZU9uVHdvTGluZXMsIGNvbnN0YW50KFwiXCIpLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY29tbW9uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHRcdF07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGFyYW1zO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBhZGQgdGhlIHRleHQgYXJyYW5nZW1lbnQgdG8gYSB0aXRsZSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gYmUgZW5oYW5jZWRcbiAqIEBwYXJhbSBwYXRoIFRoZSBkYXRhIGZpZWxkIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGJpbmRpbmcgcGFyYW1ldGVyc1xuICovXG5jb25zdCBhZGRUZXh0QXJyYW5nZW1lbnRUb1RpdGxlQmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0cGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChwYXRoLCBleHByZXNzaW9uLnBhdGgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0cmV0dXJuIGdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQocHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+O1xuXHR9KTtcbn07XG5cbi8qKlxuICogR2V0cyBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIGNyZWF0ZSBtb2RlIHRpdGxlLlxuICpcbiAqIEBwYXJhbSB2aWV3RGF0YSBUaGUgYXNzb2NpYXRlZCB2aWV3IGRhdGFcbiAqIEBwYXJhbSBbdHlwZU5hbWVdIFRoZSB0eXBlIG5hbWUgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm9cbiAqIEBwYXJhbSB0eXBlTmFtZS5UeXBlTmFtZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0Q3JlYXRlTW9kZVRpdGxlID0gZnVuY3Rpb24gKHZpZXdEYXRhOiBWaWV3RGF0YSwgeyBUeXBlTmFtZTogdHlwZU5hbWUgfTogSGVhZGVySW5mb1R5cGUpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHRpdGxlTm9IZWFkZXJJbmZvID0gcGF0aEluTW9kZWwoXCJUX05FV19PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKTtcblx0bGV0IGNyZWF0ZU1vZGVUaXRsZTogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSB0aXRsZU5vSGVhZGVySW5mbztcblx0aWYgKFxuXHRcdHZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTkVXX09CSkVDVFwiLCB1bmRlZmluZWQsIHZpZXdEYXRhLmVudGl0eVNldCkgPT09XG5cdFx0dmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ORVdfT0JKRUNUX0RFRkFVTFRcIiwgdW5kZWZpbmVkLCB2aWV3RGF0YS5lbnRpdHlTZXQpXG5cdCkge1xuXHRcdC8vVF9ORVdfT0JKRUNUIGhhcyBub3QgYmVlbiBjdXN0b21pemVkXG5cdFx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IHZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0dmlld0RhdGEuZW50aXR5U2V0XG5cdFx0KTtcblx0XHRjcmVhdGVNb2RlVGl0bGUgPSAodHlwZU5hbWUgYXMgc3RyaW5nIHwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPilcblx0XHRcdD8gY29uY2F0KHRpdGxlV2l0aEhlYWRlckluZm8sIFwiOiBcIiwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcodHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0XHQ6IHRpdGxlTm9IZWFkZXJJbmZvO1xuXHR9XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2NyZWF0ZU1vZGVUaXRsZV0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRUaXRsZSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgbWV0YSBwYXRoIHBvaW50aW5nIHRvIHRoZSBwcm9wZXJ0eSB1c2VkIGZvciB0aGUgdGl0bGVcbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmNvbnN0IHNob3VsZEZvcmNlRW1wdHlTdHJpbmcgPSAocGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCkgPT4ge1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBnZXRQcm9wZXJ0eURlZmluaXRpb24ocGF0aCk7XG5cdGlmIChwcm9wZXJ0eURlZmluaXRpb24gJiYgcHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db3JlPy5Db21wdXRlZCkge1xuXHRcdHJldHVybiBVSS5Jc0luYWN0aXZlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB0aXRsZSB2YWx1ZSBleHByZXNzaW9uIGZyb20gb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm8uXG4gKlxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gaGVhZGVySW5mb1RpdGxlIFRoZSB0aXRsZSB2YWx1ZSBmcm9tIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaW5mb1xuICogQHBhcmFtIGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZXh0IGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0VGl0bGVWYWx1ZUV4cHJlc3Npb25Gcm9tSGVhZGVySW5mbyA9IGZ1bmN0aW9uIChcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRoZWFkZXJJbmZvVGl0bGU6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbjogRnVuY3Rpb25cbikge1xuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRpZiAoaGVhZGVySW5mb1RpdGxlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQpIHtcblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoZWFkZXJJbmZvVGl0bGUuVmFsdWUpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3Ncblx0XHRpZiAoKGhlYWRlckluZm9UaXRsZSBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zLkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0XHR9XG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cdGlmIChcblx0XHRoZWFkZXJJbmZvVGl0bGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRoZWFkZXJJbmZvVGl0bGUuVGFyZ2V0LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db25uZWN0ZWRGaWVsZHNUeXBlXG5cdCkge1xuXHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkc1BhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmdWxsQ29udGV4dFBhdGgsIFwiJFR5cGUvQFVJLkhlYWRlckluZm8vVGl0bGUvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKTtcblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldExhYmVsRm9yQ29ubmVjdGVkRmllbGRzKFxuXHRcdFx0Y29ubmVjdGVkRmllbGRzUGF0aCxcblx0XHRcdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZhbHNlXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0fVxuXHRyZXR1cm4gdGl0bGVWYWx1ZUV4cHJlc3Npb247XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYmluZGluZyBleHByZXNzaW9uIGZvciBPYmplY3QgUGFnZSwgTGlzdCBSZXBvcnQsIFF1aWNrIFZpZXcgYW5kIG90aGVyIHRpdGxlcy5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuICogQHBhcmFtIGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZXh0IGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHBhcmFtIFtmaWVsZEZvcm1hdE9wdGlvbnNdIFRoZSBmb3JtYXQgb3B0aW9ucyBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBmaWVsZEZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGVcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcGFyYW0gW2hlYWRlckluZm9dIFRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaW5mb1xuICogQHBhcmFtIFt2aWV3RGF0YV0gVGhlIGFzc29jaWF0ZWQgdmlldyBkYXRhXG4gKiBAcGFyYW0gY3VzdG9tRm9ybWF0dGVyXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0cGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uOiBGdW5jdGlvbixcblx0Zm9ybWF0T3B0aW9ucz86IFBhcnRpYWw8eyBkaXNwbGF5TW9kZT86IERpc3BsYXlNb2RlOyBzcGxpdFRpdGxlT25Ud29MaW5lcz86IGJvb2xlYW4gfT4sXG5cdGhlYWRlckluZm8/OiBIZWFkZXJJbmZvVHlwZSxcblx0dmlld0RhdGE/OiBWaWV3RGF0YSxcblx0Y3VzdG9tRm9ybWF0dGVyPzogc3RyaW5nXG4pIHtcblx0Y29uc3QgZm9ybWF0dGVyID0gY3VzdG9tRm9ybWF0dGVyIHx8IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRUaXRsZTtcblx0bGV0IGNyZWF0ZU1vZGVUaXRsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmcgPSBwYXRoSW5Nb2RlbChcIlRfTkVXX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpO1xuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb247XG5cdGxldCBpc0hlYWRlckluZm9UaXRsZUVtcHR5ID0gZmFsc2U7XG5cdC8vIElmIHdlIGhhdmUgYSBoZWFkZXJJbmZvIGJ1dCBubyB0aXRsZSwgb3IgZW1wdHkgdGl0bGUgd2UgbmVlZCB0byBkaXNwbGF5IGFuIGVtcHR5IHN0cmluZyB3aGVuIHdlIGFyZSBvbiBhbiBhY3RpdmUgb2JqZWN0XG5cdC8vIHJlY2VpdmVkIGhlYWRlciBpbmZvIGZvciBvYmplY3QgcGFnZVxuXHRpZiAoaGVhZGVySW5mbz8uVGl0bGU/LiRUeXBlICYmIHZpZXdEYXRhKSB7XG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBnZXRUaXRsZVZhbHVlRXhwcmVzc2lvbkZyb21IZWFkZXJJbmZvKHBhdGgsIGhlYWRlckluZm8uVGl0bGUsIGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0Y3JlYXRlTW9kZVRpdGxlID0gZ2V0Q3JlYXRlTW9kZVRpdGxlKHZpZXdEYXRhLCBoZWFkZXJJbmZvKTtcblx0XHRpZiAoaXNDb25zdGFudCh0aXRsZVZhbHVlRXhwcmVzc2lvbikgJiYgdGl0bGVWYWx1ZUV4cHJlc3Npb24udmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdGlzSGVhZGVySW5mb1RpdGxlRW1wdHkgPSB0cnVlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChoZWFkZXJJbmZvICYmIChoZWFkZXJJbmZvLlRpdGxlID09PSB1bmRlZmluZWQgfHwgaGVhZGVySW5mby5UaXRsZS50b1N0cmluZygpID09PSBcIlwiKSkge1xuXHRcdGlzSGVhZGVySW5mb1RpdGxlRW1wdHkgPSB0cnVlO1xuXHR9XG5cdGlmICh0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0NvbnN0YW50KHRpdGxlVmFsdWVFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBuZWVkZWQgZm9yIHF1aWNrdmlld1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocGF0aC50YXJnZXRPYmplY3QpKSB7XG5cdFx0cGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKHBhdGgsIHBhdGgudGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gcGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwYXRoKSk7XG5cdGxldCBwYXJhbXM6IEJpbmRpbmdFeHByZXNzaW9uVHVwbGU7XG5cdGlmICh0aXRsZVZhbHVlRXhwcmVzc2lvbikge1xuXHRcdHBhcmFtcyA9IEFycmF5LmlzQXJyYXkodGl0bGVWYWx1ZUV4cHJlc3Npb24pID8gKHRpdGxlVmFsdWVFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQmluZGluZ0V4cHJlc3Npb25UdXBsZSkgOiBbdGl0bGVWYWx1ZUV4cHJlc3Npb25dO1xuXHR9IGVsc2Uge1xuXHRcdHBhcmFtcyA9IGdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQocGF0aCwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgZm9ybWF0T3B0aW9ucyk7XG5cdH1cblx0Y29uc3QgaXNUaXRsZUVtcHR5ID0gaXNUaXRsZUVtcHR5Qm9vbGVhbkV4cHJlc3Npb24ocGFyYW1zWzBdKTtcblx0Y29uc3QgZm9yY2VFbXB0eVN0cmluZyA9IHNob3VsZEZvcmNlRW1wdHlTdHJpbmcocGF0aCk7XG5cdGNvbnN0IGZvcm1hdHRlZEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQocGFyYW1zLCBmb3JtYXR0ZXIpO1xuXHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRpc1RpdGxlRW1wdHksXG5cdFx0aWZFbHNlKFxuXHRcdFx0b3IoaXNIZWFkZXJJbmZvVGl0bGVFbXB0eSAmJiBpc09ySGFzQWN0aXZlRW50aXR5KHBhdGgpLCBmb3JjZUVtcHR5U3RyaW5nKSxcblx0XHRcdFwiXCIsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGlzVW5kZWZpbmVkRXhwcmVzc2lvbihjb25zdGFudChjdXN0b21Gb3JtYXR0ZXIpKSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKFVJLklzQ3JlYXRlTW9kZSwgbm90KGlzT3JIYXNBY3RpdmVFbnRpdHkocGF0aCkpKSxcblx0XHRcdFx0XHRjcmVhdGVNb2RlVGl0bGUsXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfSEVBREVSX1RJVExFX05PX0hFQURFUl9JTkZPXCIsIFwic2FwLmZlLmkxOG5cIilcblx0XHRcdFx0KSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG5vdChpc09ySGFzQWN0aXZlRW50aXR5KHBhdGgpKSxcblx0XHRcdFx0XHR2aWV3RGF0YT8ucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ORVdfT0JKRUNUXCIpLFxuXHRcdFx0XHRcdHZpZXdEYXRhPy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfSEVBREVSX1RJVExFX05PX0hFQURFUl9JTkZPXCIpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpLFxuXHRcdGZvcm1hdHRlZEV4cHJlc3Npb25cblx0KTtcblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odGl0bGVWYWx1ZUV4cHJlc3Npb24pO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDTyxNQUFNQSxzQkFBc0IsR0FBRyxVQUNyQ0MsMEJBQTRELEVBQzVEQyxlQUFvQyxFQUNEO0lBQ25DLE9BQU9DLG9CQUFvQixDQUFDRiwwQkFBMEIsRUFBRSxhQUFhLEVBQUdHLFVBQVUsSUFBSztNQUN0RixJQUFJQyxhQUFhLEdBQUdELFVBQVU7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
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ0YXJnZXRPYmplY3QiLCJnZXRQcm9wZXJ0eURlZmluaXRpb24iLCJwcm9wZXJ0eURhdGFNb2RlbE9iamVjdCIsInByb3BlcnR5UGF0aE9yUHJvcGVydHkiLCJpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiaXNPckhhc0FjdGl2ZUVudGl0eSIsImRyYWZ0Um9vdCIsInRhcmdldEVudGl0eVNldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiZHJhZnROb2RlIiwiRHJhZnROb2RlIiwibm90IiwiRHJhZnQiLCJJc05ld09iamVjdCIsImlzVGl0bGVFbXB0eUJvb2xlYW5FeHByZXNzaW9uIiwidGl0bGVWYWx1ZUV4cHJlc3Npb24iLCJfdHlwZSIsImNvbnN0YW50IiwidmFsdWUiLCJpc0VtcHR5IiwiZ2V0VGl0bGVCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsInByb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRPcHRpb25zIiwidGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSIsImRpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0RGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXREaXNwbGF5TW9kZSIsImNvbW1vblRleHQiLCJUZXh0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJwYXJhbXMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwic3BsaXRUaXRsZU9uVHdvTGluZXMiLCJpZkVsc2UiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldENyZWF0ZU1vZGVUaXRsZSIsInZpZXdEYXRhIiwiVHlwZU5hbWUiLCJ0eXBlTmFtZSIsInRpdGxlTm9IZWFkZXJJbmZvIiwicGF0aEluTW9kZWwiLCJjcmVhdGVNb2RlVGl0bGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImVudGl0eVNldCIsInRpdGxlV2l0aEhlYWRlckluZm8iLCJjb25jYXQiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRvU3RyaW5nIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0VGl0bGUiLCJzaG91bGRGb3JjZUVtcHR5U3RyaW5nIiwiQ29yZSIsIkNvbXB1dGVkIiwiSXNJbmFjdGl2ZSIsImdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8iLCJoZWFkZXJJbmZvVGl0bGUiLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCIkVHlwZSIsIlZhbHVlIiwiVGFyZ2V0IiwiY29ubmVjdGVkRmllbGRzUGF0aCIsImdldExhYmVsRm9yQ29ubmVjdGVkRmllbGRzIiwiZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImhlYWRlckluZm8iLCJjdXN0b21Gb3JtYXR0ZXIiLCJmb3JtYXR0ZXIiLCJpc0hlYWRlckluZm9UaXRsZUVtcHR5IiwiVGl0bGUiLCJpc0NvbnN0YW50IiwiY29tcGlsZUV4cHJlc3Npb24iLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJpc1RpdGxlRW1wdHkiLCJmb3JjZUVtcHR5U3RyaW5nIiwiZm9ybWF0dGVkRXhwcmVzc2lvbiIsIm9yIiwiaXNVbmRlZmluZWRFeHByZXNzaW9uIiwiSXNDcmVhdGVNb2RlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUaXRsZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQ29ubmVjdGVkRmllbGRzLCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhRmllbGRUeXBlcywgSGVhZGVySW5mb1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IERyYWZ0LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbmNhdCxcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzRW1wdHksXG5cdGlzVW5kZWZpbmVkRXhwcmVzc2lvbixcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuXG50eXBlIEJpbmRpbmdFeHByZXNzaW9uVHVwbGUgPSBbQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XSB8IFtCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPl07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5ID0gZnVuY3Rpb24gKFxuXHRiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IFByb3BlcnR5UGF0aD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uKSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZnVsbENvbnRleHRQYXRoLCBleHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0b3V0RXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QhLCBleHByZXNzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuLyoqXG4gKiBHZXQgcHJvcGVydHkgZGVmaW5pdGlvbiBmcm9tIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG4gKlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0IFRoZSBwcm9wZXJ0eSBkYXRhIG1vZGVsIG9iamVjdFxuICogQHJldHVybnMgVGhlIHByb3BlcnR5XG4gKi9cbmNvbnN0IGdldFByb3BlcnR5RGVmaW5pdGlvbiA9IChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IFByb3BlcnR5UGF0aD4pOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHByb3BlcnR5UGF0aE9yUHJvcGVydHkgPSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdC50YXJnZXRPYmplY3Q7XG5cdHJldHVybiBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24ocHJvcGVydHlQYXRoT3JQcm9wZXJ0eSkgPyBwcm9wZXJ0eVBhdGhPclByb3BlcnR5LiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGhPclByb3BlcnR5O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhc3NvY2lhdGVkIGFjdGl2ZSBlbnRpdHkgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgaXNPckhhc0FjdGl2ZUVudGl0eSA9IChmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4pOiBib29sZWFuIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0+IHtcblx0Y29uc3QgZHJhZnRSb290ID0gKGZ1bGxDb250ZXh0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290O1xuXHRjb25zdCBkcmFmdE5vZGUgPSAoZnVsbENvbnRleHRQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGU7XG5cdGlmICghIWRyYWZ0Um9vdCB8fCAhIWRyYWZ0Tm9kZSkge1xuXHRcdHJldHVybiBub3QoRHJhZnQuSXNOZXdPYmplY3QpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRpdGxlIHZhbHVlIGV4cHJlc3Npb24gaXMgZW1wdHkuXG4gKlxuICogQHBhcmFtIHRpdGxlVmFsdWVFeHByZXNzaW9uIFRoZSB0aXRsZSB2YWx1ZSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5jb25zdCBpc1RpdGxlRW1wdHlCb29sZWFuRXhwcmVzc2lvbiA9ICh0aXRsZVZhbHVlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pID0+XG5cdHRpdGxlVmFsdWVFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIgPyBjb25zdGFudCghdGl0bGVWYWx1ZUV4cHJlc3Npb24udmFsdWUpIDogaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbik7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0aXRsZSBleHByZXNzaW9uIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBUaGUgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSBwcm9wZXJ0eSBhYm92ZVxuICogQHBhcmFtIFtmaWVsZEZvcm1hdE9wdGlvbnNdIFRoZSBmb3JtYXQgb3B0aW9ucyBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBmaWVsZEZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGVcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHBhcmFtZXRlcnNcbiAqL1xuY29uc3QgZ2V0VGl0bGVCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGZvcm1hdE9wdGlvbnM/OiBQYXJ0aWFsPHsgZGlzcGxheU1vZGU/OiBEaXNwbGF5TW9kZTsgc3BsaXRUaXRsZU9uVHdvTGluZXM/OiBib29sZWFuIH0+XG4pOiBCaW5kaW5nRXhwcmVzc2lvblR1cGxlIHtcblx0Y29uc3QgdGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSA9IGZvcm1hdE9wdGlvbnM/LmRpc3BsYXlNb2RlO1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBnZXRQcm9wZXJ0eURlZmluaXRpb24ocHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0Y29uc3QgdGFyZ2V0RGlzcGxheU1vZGUgPSB0YXJnZXREaXNwbGF5TW9kZU92ZXJyaWRlIHx8IFVJRm9ybWF0dGVycy5nZXREaXNwbGF5TW9kZShwcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBjb21tb25UZXh0ID0gcHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGlmIChwcm9wZXJ0eURlZmluaXRpb24pIHtcblx0XHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHR9XG5cblx0bGV0IHBhcmFtczogQmluZGluZ0V4cHJlc3Npb25UdXBsZSA9IFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXTtcblx0aWYgKHRhcmdldERpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIgJiYgY29tbW9uVGV4dCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0RGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRwYXJhbXMgPSBbZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRjb25zdCB0YXJnZXRFeHByZXNzaW9uID1cblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zcGxpdFRpdGxlT25Ud29MaW5lcyA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHQ/IGlmRWxzZSghIWNvbW1vblRleHQuYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQsIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIGNvbnN0YW50KFwiXCIpKVxuXHRcdFx0XHRcdFx0OiBpZkVsc2UoISFmb3JtYXRPcHRpb25zPy5zcGxpdFRpdGxlT25Ud29MaW5lcywgY29uc3RhbnQoXCJcIiksIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRwYXJhbXMgPSBbZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pLCB0YXJnZXRFeHByZXNzaW9uXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRwYXJhbXMgPSBbXG5cdFx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdFx0XHRpZkVsc2UoISFmb3JtYXRPcHRpb25zPy5zcGxpdFRpdGxlT25Ud29MaW5lcywgY29uc3RhbnQoXCJcIiksIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdFx0XTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJhbXM7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgdGV4dCBhcnJhbmdlbWVudCB0byBhIHRpdGxlIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIHBhdGggVGhlIGRhdGEgZmllbGQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuICogQHJldHVybnMgQW4gdXBkYXRlZCBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIHRleHQgYXJyYW5nZW1lbnQgYmluZGluZyBwYXJhbWV0ZXJzXG4gKi9cbmNvbnN0IGFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRwYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ocGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRcdHJldHVybiBnZXRUaXRsZUJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50KHByb3BlcnR5RGF0YU1vZGVsUGF0aCwgZXhwcmVzc2lvbikgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55Pjtcblx0fSk7XG59O1xuXG4vKipcbiAqIEdldHMgYmluZGluZyBleHByZXNzaW9uIGZvciBjcmVhdGUgbW9kZSB0aXRsZS5cbiAqXG4gKiBAcGFyYW0gdmlld0RhdGEgVGhlIGFzc29jaWF0ZWQgdmlldyBkYXRhXG4gKiBAcGFyYW0gW3R5cGVOYW1lXSBUaGUgdHlwZSBuYW1lIGZyb20gdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpbmZvXG4gKiBAcGFyYW0gdHlwZU5hbWUuVHlwZU5hbWVcbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmNvbnN0IGdldENyZWF0ZU1vZGVUaXRsZSA9IGZ1bmN0aW9uICh2aWV3RGF0YTogVmlld0RhdGEsIHsgVHlwZU5hbWU6IHR5cGVOYW1lIH06IEhlYWRlckluZm9UeXBlKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0aXRsZU5vSGVhZGVySW5mbyA9IHBhdGhJbk1vZGVsKFwiVF9ORVdfT0JKRUNUXCIsIFwic2FwLmZlLmkxOG5cIik7XG5cdGxldCBjcmVhdGVNb2RlVGl0bGU6IHN0cmluZyB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gdGl0bGVOb0hlYWRlckluZm87XG5cdGlmIChcblx0XHR2aWV3RGF0YS5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX05FV19PQkpFQ1RcIiwgdW5kZWZpbmVkLCB2aWV3RGF0YS5lbnRpdHlTZXQpID09PVxuXHRcdHZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTkVXX09CSkVDVF9ERUZBVUxUXCIsIHVuZGVmaW5lZCwgdmlld0RhdGEuZW50aXR5U2V0KVxuXHQpIHtcblx0XHQvL1RfTkVXX09CSkVDVCBoYXMgbm90IGJlZW4gY3VzdG9taXplZFxuXHRcdGNvbnN0IHRpdGxlV2l0aEhlYWRlckluZm8gPSB2aWV3RGF0YS5yZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVcIixcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHZpZXdEYXRhLmVudGl0eVNldFxuXHRcdCk7XG5cdFx0Y3JlYXRlTW9kZVRpdGxlID0gKHR5cGVOYW1lIGFzIHN0cmluZyB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4pXG5cdFx0XHQ/IGNvbmNhdCh0aXRsZVdpdGhIZWFkZXJJbmZvLCBcIjogXCIsIHJlc29sdmVCaW5kaW5nU3RyaW5nKHR5cGVOYW1lLnRvU3RyaW5nKCkpKVxuXHRcdFx0OiB0aXRsZU5vSGVhZGVySW5mbztcblx0fVxuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtjcmVhdGVNb2RlVGl0bGVdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0VGl0bGUpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBlbXB0eSBzdHJpbmcgc2hvdWxkIGJlIHVzZWQuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIG1ldGEgcGF0aCBwb2ludGluZyB0byB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGhlIHRpdGxlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5jb25zdCBzaG91bGRGb3JjZUVtcHR5U3RyaW5nID0gKHBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0+IHtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gZ2V0UHJvcGVydHlEZWZpbml0aW9uKHBhdGgpO1xuXHRpZiAocHJvcGVydHlEZWZpbml0aW9uICYmIHByb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29yZT8uQ29tcHV0ZWQpIHtcblx0XHRyZXR1cm4gVUkuSXNJbmFjdGl2ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdGl0bGUgdmFsdWUgZXhwcmVzc2lvbiBmcm9tIG9iamVjdCBwYWdlIGhlYWRlciBpbmZvLlxuICpcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGV4dFxuICogQHBhcmFtIGhlYWRlckluZm9UaXRsZSBUaGUgdGl0bGUgdmFsdWUgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm9cbiAqIEBwYXJhbSBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdGV4dCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmNvbnN0IGdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8gPSBmdW5jdGlvbiAoXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGhlYWRlckluZm9UaXRsZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uOiBGdW5jdGlvblxuKSB7XG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGlmIChoZWFkZXJJbmZvVGl0bGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCkge1xuXHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm9UaXRsZS5WYWx1ZSk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuXHRcdGlmICgoaGVhZGVySW5mb1RpdGxlIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gYWRkVGV4dEFycmFuZ2VtZW50VG9UaXRsZUJpbmRpbmdFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHRcdH1cblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkodGl0bGVWYWx1ZUV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblx0aWYgKFxuXHRcdGhlYWRlckluZm9UaXRsZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGhlYWRlckluZm9UaXRsZS5UYXJnZXQuJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbm5lY3RlZEZpZWxkc1R5cGVcblx0KSB7XG5cdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPENvbm5lY3RlZEZpZWxkcz4oXG5cdFx0XHRmdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcIiRUeXBlL0BVSS5IZWFkZXJJbmZvL1RpdGxlL1RhcmdldC8kQW5ub3RhdGlvblBhdGhcIlxuXHRcdCk7XG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyhcblx0XHRcdGNvbm5lY3RlZEZpZWxkc1BhdGgsXG5cdFx0XHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmYWxzZVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdH1cblx0cmV0dXJuIHRpdGxlVmFsdWVFeHByZXNzaW9uO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgT2JqZWN0IFBhZ2UsIExpc3QgUmVwb3J0LCBRdWljayBWaWV3IGFuZCBvdGhlciB0aXRsZXMuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdGV4dCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBbZmllbGRGb3JtYXRPcHRpb25zXSBUaGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGZpZWxkXG4gKiBAcGFyYW0gZmllbGRGb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9uc1xuICogQHBhcmFtIFtoZWFkZXJJbmZvXSBUaGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm9cbiAqIEBwYXJhbSBbdmlld0RhdGFdIFRoZSBhc3NvY2lhdGVkIHZpZXcgZGF0YVxuICogQHBhcmFtIGN1c3RvbUZvcm1hdHRlclxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdHBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb246IEZ1bmN0aW9uLFxuXHRmb3JtYXRPcHRpb25zPzogUGFydGlhbDx7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHNwbGl0VGl0bGVPblR3b0xpbmVzPzogYm9vbGVhbiB9Pixcblx0aGVhZGVySW5mbz86IEhlYWRlckluZm9UeXBlLFxuXHR2aWV3RGF0YT86IFZpZXdEYXRhLFxuXHRjdXN0b21Gb3JtYXR0ZXI/OiBzdHJpbmdcbikge1xuXHRjb25zdCBmb3JtYXR0ZXIgPSBjdXN0b21Gb3JtYXR0ZXIgfHwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFRpdGxlO1xuXHRsZXQgY3JlYXRlTW9kZVRpdGxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyA9IHBhdGhJbk1vZGVsKFwiVF9ORVdfT0JKRUNUXCIsIFwic2FwLmZlLmkxOG5cIik7XG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbjtcblx0bGV0IGlzSGVhZGVySW5mb1RpdGxlRW1wdHkgPSBmYWxzZTtcblx0Ly8gSWYgd2UgaGF2ZSBhIGhlYWRlckluZm8gYnV0IG5vIHRpdGxlLCBvciBlbXB0eSB0aXRsZSB3ZSBuZWVkIHRvIGRpc3BsYXkgYW4gZW1wdHkgc3RyaW5nIHdoZW4gd2UgYXJlIG9uIGFuIGFjdGl2ZSBvYmplY3Rcblx0Ly8gcmVjZWl2ZWQgaGVhZGVyIGluZm8gZm9yIG9iamVjdCBwYWdlXG5cdGlmIChoZWFkZXJJbmZvPy5UaXRsZT8uJFR5cGUgJiYgdmlld0RhdGEpIHtcblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8ocGF0aCwgaGVhZGVySW5mby5UaXRsZSwgZ2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRjcmVhdGVNb2RlVGl0bGUgPSBnZXRDcmVhdGVNb2RlVGl0bGUodmlld0RhdGEsIGhlYWRlckluZm8pO1xuXHRcdGlmIChpc0NvbnN0YW50KHRpdGxlVmFsdWVFeHByZXNzaW9uKSAmJiB0aXRsZVZhbHVlRXhwcmVzc2lvbi52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0aXNIZWFkZXJJbmZvVGl0bGVFbXB0eSA9IHRydWU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGhlYWRlckluZm8gJiYgKGhlYWRlckluZm8uVGl0bGUgPT09IHVuZGVmaW5lZCB8fCBoZWFkZXJJbmZvLlRpdGxlLnRvU3RyaW5nKCkgPT09IFwiXCIpKSB7XG5cdFx0aXNIZWFkZXJJbmZvVGl0bGVFbXB0eSA9IHRydWU7XG5cdH1cblx0aWYgKHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzQ29uc3RhbnQodGl0bGVWYWx1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uKTtcblx0fVxuXG5cdC8vIG5lZWRlZCBmb3IgcXVpY2t2aWV3XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRwYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgocGF0aCwgcGF0aC50YXJnZXRPYmplY3QucGF0aCk7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gPSBwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHBhdGgpKTtcblx0bGV0IHBhcmFtczogQmluZGluZ0V4cHJlc3Npb25UdXBsZTtcblx0aWYgKHRpdGxlVmFsdWVFeHByZXNzaW9uKSB7XG5cdFx0cGFyYW1zID0gQXJyYXkuaXNBcnJheSh0aXRsZVZhbHVlRXhwcmVzc2lvbikgPyAodGl0bGVWYWx1ZUV4cHJlc3Npb24gYXMgdW5rbm93biBhcyBCaW5kaW5nRXhwcmVzc2lvblR1cGxlKSA6IFt0aXRsZVZhbHVlRXhwcmVzc2lvbl07XG5cdH0gZWxzZSB7XG5cdFx0cGFyYW1zID0gZ2V0VGl0bGVCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChwYXRoLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBmb3JtYXRPcHRpb25zKTtcblx0fVxuXHRjb25zdCBpc1RpdGxlRW1wdHkgPSBpc1RpdGxlRW1wdHlCb29sZWFuRXhwcmVzc2lvbihwYXJhbXNbMF0pO1xuXHRjb25zdCBmb3JjZUVtcHR5U3RyaW5nID0gc2hvdWxkRm9yY2VFbXB0eVN0cmluZyhwYXRoKTtcblx0Y29uc3QgZm9ybWF0dGVkRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbXMsIGZvcm1hdHRlcik7XG5cdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdGlzVGl0bGVFbXB0eSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihpc0hlYWRlckluZm9UaXRsZUVtcHR5ICYmIGlzT3JIYXNBY3RpdmVFbnRpdHkocGF0aCksIGZvcmNlRW1wdHlTdHJpbmcpLFxuXHRcdFx0XCJcIixcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0aXNVbmRlZmluZWRFeHByZXNzaW9uKGNvbnN0YW50KGN1c3RvbUZvcm1hdHRlcikpLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoVUkuSXNDcmVhdGVNb2RlLCBub3QoaXNPckhhc0FjdGl2ZUVudGl0eShwYXRoKSkpLFxuXHRcdFx0XHRcdGNyZWF0ZU1vZGVUaXRsZSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0bm90KGlzT3JIYXNBY3RpdmVFbnRpdHkocGF0aCkpLFxuXHRcdFx0XHRcdHZpZXdEYXRhPy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX05FV19PQkpFQ1RcIiksXG5cdFx0XHRcdFx0dmlld0RhdGE/LnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIilcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0Zm9ybWF0dGVkRXhwcmVzc2lvblxuXHQpO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbik7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUNPLE1BQU1BLHNCQUFzQixHQUFHLFVBQ3JDQywwQkFBNEQsRUFDNURDLGVBQTZELEVBQzFCO0lBQ25DLE9BQU9DLG9CQUFvQixDQUFDRiwwQkFBMEIsRUFBRSxhQUFhLEVBQUdHLFVBQVUsSUFBSztNQUN0RixJQUFJQyxhQUFhLEdBQUdELFVBQVU7TUFDOUIsSUFBSUEsVUFBVSxDQUFDRSxTQUFTLEtBQUtDLFNBQVMsRUFBRTtRQUN2QztRQUNBLE1BQU1DLHNCQUFzQixHQUFHQyxvQkFBb0IsQ0FBV1AsZUFBZSxFQUFFRSxVQUFVLENBQUNNLElBQUksQ0FBQztRQUMvRkwsYUFBYSxHQUFHTSx5QkFBeUIsQ0FBQ0gsc0JBQXNCLENBQUNJLFlBQVksRUFBR1IsVUFBVSxDQUFDO01BQzVGO01BQ0EsT0FBT0MsYUFBYTtJQUNyQixDQUFDLENBQUM7RUFDSCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTUEsTUFBTVEscUJBQXFCLEdBQUlDLHVCQUFxRSxJQUEyQjtJQUM5SCxNQUFNQyxzQkFBc0IsR0FBR0QsdUJBQXVCLENBQUNGLFlBQVk7SUFDbkUsT0FBT0ksd0JBQXdCLENBQUNELHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQixDQUFDRSxPQUFPLEdBQUdGLHNCQUFzQjtFQUNsSCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1HLG1CQUFtQixHQUFJaEIsZUFBNkMsSUFBa0Q7SUFBQTtJQUMzSCxNQUFNaUIsU0FBUyw0QkFBSWpCLGVBQWUsQ0FBQ2tCLGVBQWUsb0ZBQWhDLHNCQUE0REMsV0FBVyxxRkFBdkUsdUJBQXlFQyxNQUFNLDJEQUEvRSx1QkFBaUZDLFNBQVM7SUFDNUcsTUFBTUMsU0FB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
@@ -1,5 +1,5 @@
1
1
  import type { EntitySet, Property, PropertyAnnotationValue, PropertyPath } from "@sap-ux/vocabularies-types";
2
- import type { DataFieldAbstractTypes, DataFieldTypes, HeaderInfoType } from "@sap-ux/vocabularies-types/vocabularies/UI";
2
+ import type { ConnectedFields, DataFieldAbstractTypes, DataFieldTypes, HeaderInfoType } from "@sap-ux/vocabularies-types/vocabularies/UI";
3
3
  import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
4
4
  import valueFormatters from "sap/fe/core/formatters/ValueFormatter";
5
5
  import { Draft, UI } from "sap/fe/core/helpers/BindingHelper";
@@ -33,14 +33,14 @@ type BindingExpressionTuple = [BindingToolkitExpression<string>, BindingToolkitE
33
33
 
34
34
  export const formatValueRecursively = function (
35
35
  bindingExpressionToEnhance: BindingToolkitExpression<string>,
36
- fullContextPath: DataModelObjectPath
36
+ fullContextPath: DataModelObjectPath<Property | PropertyPath>
37
37
  ): BindingToolkitExpression<string> {
38
38
  return transformRecursively(bindingExpressionToEnhance, "PathInModel", (expression) => {
39
39
  let outExpression = expression;
40
40
  if (expression.modelName === undefined) {
41
41
  // In case of default model we then need to resolve the text arrangement property
42
- const oPropertyDataModelPath = enhanceDataModelPath(fullContextPath, expression.path);
43
- outExpression = formatWithTypeInformation(oPropertyDataModelPath.targetObject, expression);
42
+ const oPropertyDataModelPath = enhanceDataModelPath<Property>(fullContextPath, expression.path);
43
+ outExpression = formatWithTypeInformation(oPropertyDataModelPath.targetObject!, expression);
44
44
  }
45
45
  return outExpression;
46
46
  });
@@ -52,8 +52,8 @@ export const formatValueRecursively = function (
52
52
  * @param propertyDataModelObject The property data model object
53
53
  * @returns The property
54
54
  */
55
- const getPropertyDefinition = (propertyDataModelObject: DataModelObjectPath) => {
56
- const propertyPathOrProperty = propertyDataModelObject.targetObject as PropertyPath | Property;
55
+ const getPropertyDefinition = (propertyDataModelObject: DataModelObjectPath<Property | PropertyPath>): Property | undefined => {
56
+ const propertyPathOrProperty = propertyDataModelObject.targetObject;
57
57
  return isPropertyPathExpression(propertyPathOrProperty) ? propertyPathOrProperty.$target : propertyPathOrProperty;
58
58
  };
59
59
 
@@ -63,7 +63,7 @@ const getPropertyDefinition = (propertyDataModelObject: DataModelObjectPath) =>
63
63
  * @param fullContextPath The full path to the context
64
64
  * @returns The expression-binding string
65
65
  */
66
- const isOrHasActiveEntity = (fullContextPath: DataModelObjectPath) => {
66
+ const isOrHasActiveEntity = (fullContextPath: DataModelObjectPath<unknown>): boolean | BindingToolkitExpression<boolean> => {
67
67
  const draftRoot = (fullContextPath.targetEntitySet as EntitySet | undefined)?.annotations?.Common?.DraftRoot;
68
68
  const draftNode = (fullContextPath.targetEntitySet as EntitySet | undefined)?.annotations?.Common?.DraftNode;
69
69
  if (!!draftRoot || !!draftNode) {
@@ -92,7 +92,7 @@ const isTitleEmptyBooleanExpression = (titleValueExpression: BindingToolkitExpre
92
92
  * @returns The expression-binding parameters
93
93
  */
94
94
  const getTitleBindingWithTextArrangement = function (
95
- propertyDataModelPath: DataModelObjectPath,
95
+ propertyDataModelPath: DataModelObjectPath<Property>,
96
96
  propertyBindingExpression: BindingToolkitExpression<string>,
97
97
  formatOptions?: Partial<{ displayMode?: DisplayMode; splitTitleOnTwoLines?: boolean }>
98
98
  ): BindingExpressionTuple {
@@ -139,12 +139,12 @@ const getTitleBindingWithTextArrangement = function (
139
139
  */
140
140
  const addTextArrangementToTitleBindingExpression = function (
141
141
  bindingExpressionToEnhance: BindingToolkitExpression<string>,
142
- path: DataModelObjectPath
142
+ path: DataModelObjectPath<Property>
143
143
  ): BindingToolkitExpression<string> {
144
144
  return transformRecursively(bindingExpressionToEnhance, "PathInModel", (expression: PathInModelExpression<unknown>) => {
145
145
  if (expression.modelName !== undefined) return expression;
146
146
  // In case of default model we then need to resolve the text arrangement property
147
- const propertyDataModelPath = enhanceDataModelPath(path, expression.path);
147
+ const propertyDataModelPath = enhanceDataModelPath<Property>(path, expression.path);
148
148
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
149
  return getTitleBindingWithTextArrangement(propertyDataModelPath, expression) as unknown as BindingToolkitExpression<any>;
150
150
  });
@@ -184,7 +184,7 @@ const getCreateModeTitle = function (viewData: ViewData, { TypeName: typeName }:
184
184
  * @param path The meta path pointing to the property used for the title
185
185
  * @returns The expression-binding string
186
186
  */
187
- const shouldForceEmptyString = (path: DataModelObjectPath) => {
187
+ const shouldForceEmptyString = (path: DataModelObjectPath<Property | PropertyPath>): BindingToolkitExpression<boolean> => {
188
188
  const propertyDefinition = getPropertyDefinition(path);
189
189
  if (propertyDefinition && propertyDefinition.annotations?.Core?.Computed) {
190
190
  return UI.IsInactive;
@@ -202,7 +202,7 @@ const shouldForceEmptyString = (path: DataModelObjectPath) => {
202
202
  * @returns The expression-binding string
203
203
  */
204
204
  const getTitleValueExpressionFromHeaderInfo = function (
205
- fullContextPath: DataModelObjectPath,
205
+ fullContextPath: DataModelObjectPath<Property>,
206
206
  headerInfoTitle: DataFieldAbstractTypes,
207
207
  getTextBindingExpression: Function
208
208
  ) {
@@ -220,7 +220,10 @@ const getTitleValueExpressionFromHeaderInfo = function (
220
220
  headerInfoTitle.$Type === UIAnnotationTypes.DataFieldForAnnotation &&
221
221
  headerInfoTitle.Target.$target?.$Type === UIAnnotationTypes.ConnectedFieldsType
222
222
  ) {
223
- const connectedFieldsPath = enhanceDataModelPath(fullContextPath, "$Type/@UI.HeaderInfo/Title/Target/$AnnotationPath");
223
+ const connectedFieldsPath = enhanceDataModelPath<ConnectedFields>(
224
+ fullContextPath,
225
+ "$Type/@UI.HeaderInfo/Title/Target/$AnnotationPath"
226
+ );
224
227
  titleValueExpression = getLabelForConnectedFields(
225
228
  connectedFieldsPath,
226
229
  getTextBindingExpression,
@@ -244,7 +247,7 @@ const getTitleValueExpressionFromHeaderInfo = function (
244
247
  * @returns The compiled expression-binding string
245
248
  */
246
249
  export const getTitleBindingExpression = function (
247
- path: DataModelObjectPath,
250
+ path: DataModelObjectPath<Property>,
248
251
  getTextBindingExpression: Function,
249
252
  formatOptions?: Partial<{ displayMode?: DisplayMode; splitTitleOnTwoLines?: boolean }>,
250
253
  headerInfo?: HeaderInfoType,
@@ -15,8 +15,32 @@ sap.ui.define([], function () {
15
15
  return Array.isArray(potentialFunctionArray) && potentialFunctionArray.length > 0 && potentialFunctionArray.every(item => typeof item === "function");
16
16
  }
17
17
  _exports.isFunctionArray = isFunctionArray;
18
+ /**
19
+ * Checks whether the argument is an annotation of the given type.
20
+ * @param potentialAnnotationType The annotation to check
21
+ * @param typeName The type to check for
22
+ * @returns Whether the argument is an annotation of the given type
23
+ */
18
24
  function isAnnotationOfType(potentialAnnotationType, typeName) {
19
- return potentialAnnotationType.$Type === typeName;
25
+ if (Array.isArray(typeName)) {
26
+ return typeName.includes(potentialAnnotationType === null || potentialAnnotationType === void 0 ? void 0 : potentialAnnotationType.$Type);
27
+ }
28
+ return (potentialAnnotationType === null || potentialAnnotationType === void 0 ? void 0 : potentialAnnotationType.$Type) === typeName;
29
+ }
30
+
31
+ /**
32
+ * Checks whether the argument is an annotation of the given term.
33
+ * @param potentialAnnotation The annotation to check
34
+ * @param termName The term to check for
35
+ * @returns Whether the argument is an annotation of the given term
36
+ */
37
+ _exports.isAnnotationOfType = isAnnotationOfType;
38
+ function isAnnotationOfTerm(potentialAnnotation, termName) {
39
+ return (potentialAnnotation === null || potentialAnnotation === void 0 ? void 0 : potentialAnnotation.term) === termName;
40
+ }
41
+ _exports.isAnnotationOfTerm = isAnnotationOfTerm;
42
+ function isAnnotationTerm(potentialAnnotation) {
43
+ return potentialAnnotation.hasOwnProperty("term");
20
44
  }
21
45
 
22
46
  /**
@@ -25,7 +49,7 @@ sap.ui.define([], function () {
25
49
  * @param serviceObject The object to be checked.
26
50
  * @returns Whether the argument is a {@link ServiceObject}.
27
51
  */
28
- _exports.isAnnotationOfType = isAnnotationOfType;
52
+ _exports.isAnnotationTerm = isAnnotationTerm;
29
53
  function isServiceObject(serviceObject) {
30
54
  return (serviceObject === null || serviceObject === void 0 ? void 0 : serviceObject.hasOwnProperty("_type")) ?? false;
31
55
  }
@@ -178,4 +202,4 @@ sap.ui.define([], function () {
178
202
  _exports.isPropertyPathExpression = isPropertyPathExpression;
179
203
  return _exports;
180
204
  }, false);
181
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0NvbnRleHQiLCJwb3RlbnRpYWxDb250ZXh0IiwiaXNBIiwiaXNGdW5jdGlvbkFycmF5IiwicG90ZW50aWFsRnVuY3Rpb25BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImV2ZXJ5IiwiaXRlbSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsInBvdGVudGlhbEFubm90YXRpb25UeXBlIiwidHlwZU5hbWUiLCIkVHlwZSIsImlzU2VydmljZU9iamVjdCIsInNlcnZpY2VPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImlzQ29tcGxleFR5cGUiLCJfdHlwZSIsImlzVHlwZURlZmluaXRpb24iLCJpc0VudGl0eUNvbnRhaW5lciIsImlzRW50aXR5U2V0IiwiaXNTaW5nbGV0b24iLCJpc0VudGl0eVR5cGUiLCJpc1Byb3BlcnR5IiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc1NpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzQ29sbGVjdGlvbiIsImlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJ0eXBlIiwiaXNBbm5vdGF0aW9uUGF0aCIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVHlwZUd1YXJkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRDb21wbGV4VHlwZSxcblx0RW50aXR5Q29udGFpbmVyLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE11bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5UGF0aCxcblx0U2VydmljZU9iamVjdCxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0U2luZ2xldG9uLFxuXHRUeXBlRGVmaW5pdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0KHBvdGVudGlhbENvbnRleHQ6IENvbnRleHQgfCB1bmtub3duIHwgdW5kZWZpbmVkKTogcG90ZW50aWFsQ29udGV4dCBpcyBDb250ZXh0IHtcblx0cmV0dXJuIChwb3RlbnRpYWxDb250ZXh0IGFzIENvbnRleHQpPy5pc0E/LjxDb250ZXh0PihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbkFycmF5KHBvdGVudGlhbEZ1bmN0aW9uQXJyYXk6IEZ1bmN0aW9uW10gfCB1bmtub3duKTogcG90ZW50aWFsRnVuY3Rpb25BcnJheSBpcyBGdW5jdGlvbltdIHtcblx0cmV0dXJuIChcblx0XHRBcnJheS5pc0FycmF5KHBvdGVudGlhbEZ1bmN0aW9uQXJyYXkpICYmXG5cdFx0cG90ZW50aWFsRnVuY3Rpb25BcnJheS5sZW5ndGggPiAwICYmXG5cdFx0cG90ZW50aWFsRnVuY3Rpb25BcnJheS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09IFwiZnVuY3Rpb25cIilcblx0KTtcbn1cblxudHlwZSBBbm5vdGF0aW9uVHlwZSA9IHtcblx0JFR5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fubm90YXRpb25PZlR5cGU8VCBleHRlbmRzIG9iamVjdCAmIEFubm90YXRpb25UeXBlPihcblx0cG90ZW50aWFsQW5ub3RhdGlvblR5cGU6IEFubm90YXRpb25UZXJtPGFueT4sXG5cdHR5cGVOYW1lOiBUW1wiJFR5cGVcIl1cbik6IHBvdGVudGlhbEFubm90YXRpb25UeXBlIGlzIEFubm90YXRpb25UZXJtPFQ+IHtcblx0cmV0dXJuIHBvdGVudGlhbEFubm90YXRpb25UeXBlLiRUeXBlID09PSB0eXBlTmFtZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2VydmljZU9iamVjdH0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2VydmljZU9iamVjdH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VPYmplY3Qoc2VydmljZU9iamVjdDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gfCB1bmRlZmluZWQpOiBzZXJ2aWNlT2JqZWN0IGlzIFNlcnZpY2VPYmplY3Qge1xuXHRyZXR1cm4gc2VydmljZU9iamVjdD8uaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgQ29tcGxleFR5cGV9LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIENvbXBsZXhUeXBlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGUoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgQ29tcGxleFR5cGUge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgQ29tcGxleFR5cGUpPy5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgVHlwZURlZmluaXRpb259LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlRGVmaW5pdGlvbihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBUeXBlRGVmaW5pdGlvbiB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBUeXBlRGVmaW5pdGlvbik/Ll90eXBlID09PSBcIlR5cGVEZWZpbml0aW9uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlDb250YWluZXJ9LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlDb250YWluZXJ9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlDb250YWluZXIoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgRW50aXR5Q29udGFpbmVyIHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIEVudGl0eUNvbnRhaW5lcik/Ll90eXBlID09PSBcIkVudGl0eUNvbnRhaW5lclwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiB7QGxpbmsgRW50aXR5U2V0fS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiB7QGxpbmsgRW50aXR5U2V0fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5U2V0KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEVudGl0eVNldCB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBFbnRpdHlTZXQpPy5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2luZ2xldG9ufS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTaW5nbGV0b259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZXRvbihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBTaW5nbGV0b24ge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgU2luZ2xldG9uKT8uX3R5cGUgPT09IFwiU2luZ2xldG9uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlUeXBlfS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiB7QGxpbmsgRW50aXR5VHlwZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBFbnRpdHlUeXBlIHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIEVudGl0eVR5cGUpPy5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFByb3BlcnR5fS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBQcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFByb3BlcnR5IHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIFByb3BlcnR5KT8uX3R5cGUgPT09IFwiUHJvcGVydHlcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTmF2aWdhdGlvblByb3BlcnR5fS5cbiAqXG4gKiBIaW50OiBUaGVyZSBhcmUgYWxzbyB0aGUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMge0BsaW5rIGlzU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5fSBhbmQge0BsaW5rIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LiBUaGVzZSBjYW4gYmVcbiAqIHVzZWQgdG8gY2hlY2sgZm9yIHRvLW9uZSBhbmQgdG8tbWFueSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYXZpZ2F0aW9uUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgTmF2aWdhdGlvblByb3BlcnR5IHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRyZXR1cm4gaXNOYXZpZ2F0aW9uUHJvcGVydHkoc2VydmljZU9iamVjdCkgJiYgIXNlcnZpY2VPYmplY3QuaXNDb2xsZWN0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdHJldHVybiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0KSAmJiBzZXJ2aWNlT2JqZWN0LmlzQ29sbGVjdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUGF0aEFubm90YXRpb25FeHByZXNzaW9ufS5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb259LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4oZXhwcmVzc2lvbjogdW5rbm93bik6IGV4cHJlc3Npb24gaXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPik/LnR5cGUgPT09IFwiUGF0aFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb259LlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fubm90YXRpb25QYXRoPFQ+KGV4cHJlc3Npb246IHVua25vd24pOiBleHByZXNzaW9uIGlzIEFubm90YXRpb25QYXRoPFQ+IHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEFubm90YXRpb25QYXRoPFQ+KT8udHlwZSA9PT0gXCJBbm5vdGF0aW9uUGF0aFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBQcm9wZXJ0eVBhdGh9LlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFByb3BlcnR5UGF0aH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24oZXhwcmVzc2lvbjogdW5rbm93bik6IGV4cHJlc3Npb24gaXMgUHJvcGVydHlQYXRoIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIFByb3BlcnR5UGF0aCk/LnR5cGUgPT09IFwiUHJvcGVydHlQYXRoXCI7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBb0JPLFNBQVNBLFNBQVMsQ0FBQ0MsZ0JBQStDLEVBQStCO0lBQUE7SUFDdkcsT0FBUUEsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsK0JBQWpCLFFBQUNBLGdCQUFnQixFQUFjQyxHQUFHLHlDQUFsQyxnQkFBOEMsc0JBQXNCLENBQUM7RUFDN0U7RUFBQztFQUVNLFNBQVNDLGVBQWUsQ0FBQ0Msc0JBQTRDLEVBQXdDO0lBQ25ILE9BQ0NDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixzQkFBc0IsQ0FBQyxJQUNyQ0Esc0JBQXNCLENBQUNHLE1BQU0sR0FBRyxDQUFDLElBQ2pDSCxzQkFBc0IsQ0FBQ0ksS0FBSyxDQUFFQyxJQUFJLElBQUssT0FBT0EsSUFBSSxLQUFLLFVBQVUsQ0FBQztFQUVwRTtFQUFDO0VBTU0sU0FBU0Msa0JBQWtCLENBQ2pDQyx1QkFBNEMsRUFDNUNDLFFBQW9CLEVBQzJCO0lBQy9DLE9BQU9ELHVCQUF1QixDQUFDRSxLQUFLLEtBQUtELFFBQVE7RUFDbEQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTRSxlQUFlLENBQUNDLGFBQXFELEVBQWtDO0lBQ3RILE9BQU8sQ0FBQUEsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSSxLQUFLO0VBQ3ZEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sU0FBU0MsYUFBYSxDQUFDRixhQUFzQixFQUFnQztJQUNuRixPQUFPLENBQUNBLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFrQkcsS0FBSyxNQUFLLGFBQWE7RUFDL0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTQyxnQkFBZ0IsQ0FBQ0osYUFBc0IsRUFBbUM7SUFDekYsT0FBTyxDQUFDQSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBcUJHLEtBQUssTUFBSyxnQkFBZ0I7RUFDckU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTRSxpQkFBaUIsQ0FBQ0wsYUFBc0IsRUFBb0M7SUFDM0YsT0FBTyxDQUFDQSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBc0JHLEtBQUssTUFBSyxpQkFBaUI7RUFDdkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTRyxXQUFXLENBQUNOLGFBQXNCLEVBQThCO0lBQy9FLE9BQU8sQ0FBQ0EsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQWdCRyxLQUFLLE1BQUssV0FBVztFQUMzRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLFNBQVNJLFdBQVcsQ0FBQ1AsYUFBc0IsRUFBOEI7SUFDL0UsT0FBTyxDQUFDQSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBZ0JHLEtBQUssTUFBSyxXQUFXO0VBQzNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sU0FBU0ssWUFBWSxDQUFDUixhQUFzQixFQUErQjtJQUNqRixPQUFPLENBQUNBLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFpQkcsS0FBSyxNQUFLLFlBQVk7RUFDN0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTTSxVQUFVLENBQUNULGFBQXNCLEVBQTZCO0lBQzdFLE9BQU8sQ0FBQ0EsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQWVHLEtBQUssTUFBSyxVQUFVO0VBQ3pEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBO0VBU08sU0FBU08sb0JBQW9CLENBQUNWLGFBQXNCLEVBQXVDO0lBQ2pHLE9BQU8sQ0FBQ0EsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQXlCRyxLQUFLLE1BQUssb0JBQW9CO0VBQzdFOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sU0FBU1EsMEJBQTBCLENBQUNYLGFBQXNCLEVBQTZDO0lBQzdHLE9BQU9VLG9CQUFvQixDQUFDVixhQUFhLENBQUMsSUFBSSxDQUFDQSxhQUFhLENBQUNZLFlBQVk7RUFDMUU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTQyw0QkFBNEIsQ0FBQ2IsYUFBc0IsRUFBK0M7SUFDakgsT0FBT1Usb0JBQW9CLENBQUNWLGFBQWEsQ0FBQyxJQUFJQSxhQUFhLENBQUNZLFlBQVk7RUFDekU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTRSwwQkFBMEIsQ0FBSUMsVUFBbUIsRUFBNkM7SUFDN0csT0FBTyxDQUFDQSxVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBa0NDLElBQUksTUFBSyxNQUFNO0VBQ3BFOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sU0FBU0MsZ0JBQWdCLENBQUlGLFVBQW1CLEVBQW1DO0lBQ3pGLE9BQU8sQ0FBQ0EsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQXdCQyxJQUFJLE1BQUssZ0JBQWdCO0VBQ3BFOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sU0FBU0Usd0JBQXdCLENBQUNILFVBQW1CLEVBQThCO0lBQ3pGLE9BQU8sQ0FBQ0EsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQW1CQyxJQUFJLE1BQUssY0FBYztFQUM3RDtFQUFDO0VBQUE7QUFBQSJ9
205
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0NvbnRleHQiLCJwb3RlbnRpYWxDb250ZXh0IiwiaXNBIiwiaXNGdW5jdGlvbkFycmF5IiwicG90ZW50aWFsRnVuY3Rpb25BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImV2ZXJ5IiwiaXRlbSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsInBvdGVudGlhbEFubm90YXRpb25UeXBlIiwidHlwZU5hbWUiLCJpbmNsdWRlcyIsIiRUeXBlIiwiaXNBbm5vdGF0aW9uT2ZUZXJtIiwicG90ZW50aWFsQW5ub3RhdGlvbiIsInRlcm1OYW1lIiwidGVybSIsImlzQW5ub3RhdGlvblRlcm0iLCJoYXNPd25Qcm9wZXJ0eSIsImlzU2VydmljZU9iamVjdCIsInNlcnZpY2VPYmplY3QiLCJpc0NvbXBsZXhUeXBlIiwiX3R5cGUiLCJpc1R5cGVEZWZpbml0aW9uIiwiaXNFbnRpdHlDb250YWluZXIiLCJpc0VudGl0eVNldCIsImlzU2luZ2xldG9uIiwiaXNFbnRpdHlUeXBlIiwiaXNQcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiaXNTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc0NvbGxlY3Rpb24iLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJleHByZXNzaW9uIiwidHlwZSIsImlzQW5ub3RhdGlvblBhdGgiLCJpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlR5cGVHdWFyZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGVybSxcblx0Q29tcGxleFR5cGUsXG5cdEVudGl0eUNvbnRhaW5lcixcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eVBhdGgsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0U2luZ2xldG9uLFxuXHRUeXBlRGVmaW5pdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0KHBvdGVudGlhbENvbnRleHQ6IENvbnRleHQgfCB1bmtub3duIHwgdW5kZWZpbmVkKTogcG90ZW50aWFsQ29udGV4dCBpcyBDb250ZXh0IHtcblx0cmV0dXJuIChwb3RlbnRpYWxDb250ZXh0IGFzIENvbnRleHQpPy5pc0E/LjxDb250ZXh0PihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbkFycmF5KHBvdGVudGlhbEZ1bmN0aW9uQXJyYXk6IEZ1bmN0aW9uW10gfCB1bmtub3duKTogcG90ZW50aWFsRnVuY3Rpb25BcnJheSBpcyBGdW5jdGlvbltdIHtcblx0cmV0dXJuIChcblx0XHRBcnJheS5pc0FycmF5KHBvdGVudGlhbEZ1bmN0aW9uQXJyYXkpICYmXG5cdFx0cG90ZW50aWFsRnVuY3Rpb25BcnJheS5sZW5ndGggPiAwICYmXG5cdFx0cG90ZW50aWFsRnVuY3Rpb25BcnJheS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09IFwiZnVuY3Rpb25cIilcblx0KTtcbn1cblxudHlwZSBBbm5vdGF0aW9uVHlwZSA9IHtcblx0JFR5cGU/OiBzdHJpbmc7XG5cdGZ1bGx5UXVhbGlmaWVkTmFtZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBfQW5ub3RhdGlvblRlcm0gPSB7XG5cdHRlcm06IHN0cmluZztcblx0cXVhbGlmaWVyPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gYW5ub3RhdGlvbiBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIEBwYXJhbSBwb3RlbnRpYWxBbm5vdGF0aW9uVHlwZSBUaGUgYW5ub3RhdGlvbiB0byBjaGVja1xuICogQHBhcmFtIHR5cGVOYW1lIFRoZSB0eXBlIHRvIGNoZWNrIGZvclxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gYW5ub3RhdGlvbiBvZiB0aGUgZ2l2ZW4gdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uT2ZUeXBlPFQgZXh0ZW5kcyBvYmplY3QgJiBBbm5vdGF0aW9uVHlwZT4oXG5cdHBvdGVudGlhbEFubm90YXRpb25UeXBlOiB1bmtub3duLFxuXHR0eXBlTmFtZTogVFtcIiRUeXBlXCJdIHwgVFtcIiRUeXBlXCJdW11cbik6IHBvdGVudGlhbEFubm90YXRpb25UeXBlIGlzIFQge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh0eXBlTmFtZSkpIHtcblx0XHRyZXR1cm4gdHlwZU5hbWUuaW5jbHVkZXMoKHBvdGVudGlhbEFubm90YXRpb25UeXBlIGFzIEFubm90YXRpb25UeXBlKT8uJFR5cGUpO1xuXHR9XG5cdHJldHVybiAocG90ZW50aWFsQW5ub3RhdGlvblR5cGUgYXMgQW5ub3RhdGlvblR5cGUpPy4kVHlwZSA9PT0gdHlwZU5hbWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGFubm90YXRpb24gb2YgdGhlIGdpdmVuIHRlcm0uXG4gKiBAcGFyYW0gcG90ZW50aWFsQW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbiB0byBjaGVja1xuICogQHBhcmFtIHRlcm1OYW1lIFRoZSB0ZXJtIHRvIGNoZWNrIGZvclxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gYW5ub3RhdGlvbiBvZiB0aGUgZ2l2ZW4gdGVybVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uT2ZUZXJtPFQgZXh0ZW5kcyBvYmplY3QgJiBfQW5ub3RhdGlvblRlcm0+KFxuXHRwb3RlbnRpYWxBbm5vdGF0aW9uOiB1bmtub3duLFxuXHR0ZXJtTmFtZTogVFtcInRlcm1cIl1cbik6IHBvdGVudGlhbEFubm90YXRpb24gaXMgQW5ub3RhdGlvblRlcm08VD4ge1xuXHRyZXR1cm4gKHBvdGVudGlhbEFubm90YXRpb24gYXMgX0Fubm90YXRpb25UZXJtKT8udGVybSA9PT0gdGVybU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fubm90YXRpb25UZXJtKHBvdGVudGlhbEFubm90YXRpb246IHVua25vd24pOiBwb3RlbnRpYWxBbm5vdGF0aW9uIGlzIF9Bbm5vdGF0aW9uVGVybSB7XG5cdHJldHVybiAocG90ZW50aWFsQW5ub3RhdGlvbiBhcyBfQW5ub3RhdGlvblRlcm0pLmhhc093blByb3BlcnR5KFwidGVybVwiKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2VydmljZU9iamVjdH0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2VydmljZU9iamVjdH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VPYmplY3Qoc2VydmljZU9iamVjdDogdW5rbm93biB8IHVuZGVmaW5lZCk6IHNlcnZpY2VPYmplY3QgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBzZXJ2aWNlT2JqZWN0Py5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBDb21wbGV4VHlwZX0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgQ29tcGxleFR5cGV9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBDb21wbGV4VHlwZSB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBDb21wbGV4VHlwZSk/Ll90eXBlID09PSBcIkNvbXBsZXhUeXBlXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVEZWZpbml0aW9uKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFR5cGVEZWZpbml0aW9uIHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIFR5cGVEZWZpbml0aW9uKT8uX3R5cGUgPT09IFwiVHlwZURlZmluaXRpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eUNvbnRhaW5lcn0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eUNvbnRhaW5lcn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eUNvbnRhaW5lcihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBFbnRpdHlDb250YWluZXIge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgRW50aXR5Q29udGFpbmVyKT8uX3R5cGUgPT09IFwiRW50aXR5Q29udGFpbmVyXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlTZXR9LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlTZXR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlTZXQoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgRW50aXR5U2V0IHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIEVudGl0eVNldCk/Ll90eXBlID09PSBcIkVudGl0eVNldFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTaW5nbGV0b259LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZXRvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xldG9uKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFNpbmdsZXRvbiB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBTaW5nbGV0b24pPy5fdHlwZSA9PT0gXCJTaW5nbGV0b25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eVR5cGV9LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlUeXBlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlUeXBlKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEVudGl0eVR5cGUge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgRW50aXR5VHlwZSk/Ll90eXBlID09PSBcIkVudGl0eVR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUHJvcGVydHl9LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFByb3BlcnR5fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgUHJvcGVydHkpPy5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICpcbiAqIEhpbnQ6IFRoZXJlIGFyZSBhbHNvIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyB7QGxpbmsgaXNTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHl9IGFuZCB7QGxpbmsgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uIFRoZXNlIGNhbiBiZVxuICogdXNlZCB0byBjaGVjayBmb3IgdG8tb25lIGFuZCB0by1tYW55IG5hdmlnYXRpb24gcHJvcGVydGllcywgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIE5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KT8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdHJldHVybiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0KSAmJiAhc2VydmljZU9iamVjdC5pc0NvbGxlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIE11bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5fS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIE11bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IHtcblx0cmV0dXJuIGlzTmF2aWdhdGlvblByb3BlcnR5KHNlcnZpY2VPYmplY3QpICYmIHNlcnZpY2VPYmplY3QuaXNDb2xsZWN0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb259LlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFQ+KT8udHlwZSA9PT0gXCJQYXRoXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbn0uXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgQW5ub3RhdGlvblBhdGhFeHByZXNzaW9ufS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5ub3RhdGlvblBhdGg8VD4oZXhwcmVzc2lvbjogdW5rbm93bik6IGV4cHJlc3Npb24gaXMgQW5ub3RhdGlvblBhdGg8VD4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQW5ub3RhdGlvblBhdGg8VD4pPy50eXBlID09PSBcIkFubm90YXRpb25QYXRoXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFByb3BlcnR5UGF0aH0uXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUHJvcGVydHlQYXRofS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBQcm9wZXJ0eVBhdGgge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgUHJvcGVydHlQYXRoKT8udHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIjtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUFtQk8sU0FBU0EsU0FBUyxDQUFDQyxnQkFBK0MsRUFBK0I7SUFBQTtJQUN2RyxPQUFRQSxnQkFBZ0IsYUFBaEJBLGdCQUFnQiwrQkFBakIsUUFBQ0EsZ0JBQWdCLEVBQWNDLEdBQUcseUNBQWxDLGdCQUE4QyxzQkFBc0IsQ0FBQztFQUM3RTtFQUFDO0VBRU0sU0FBU0MsZUFBZSxDQUFDQyxzQkFBNEMsRUFBd0M7SUFDbkgsT0FDQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNGLHNCQUFzQixDQUFDLElBQ3JDQSxzQkFBc0IsQ0FBQ0csTUFBTSxHQUFHLENBQUMsSUFDakNILHNCQUFzQixDQUFDSSxLQUFLLENBQUVDLElBQUksSUFBSyxPQUFPQSxJQUFJLEtBQUssVUFBVSxDQUFDO0VBRXBFO0VBQUM7RUFXRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxrQkFBa0IsQ0FDakNDLHVCQUFnQyxFQUNoQ0MsUUFBbUMsRUFDSjtJQUMvQixJQUFJUCxLQUFLLENBQUNDLE9BQU8sQ0FBQ00sUUFBUSxDQUFDLEVBQUU7TUFDNUIsT0FBT0Es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
@@ -10,7 +10,6 @@ import type {
10
10
  Property,
11
11
  PropertyPath,
12
12
  ServiceObject,
13
- ServiceObjectAndAnnotation,
14
13
  SingleNavigationProperty,
15
14
  Singleton,
16
15
  TypeDefinition
@@ -31,14 +30,45 @@ export function isFunctionArray(potentialFunctionArray: Function[] | unknown): p
31
30
  }
32
31
 
33
32
  type AnnotationType = {
34
- $Type: string;
33
+ $Type?: string;
34
+ fullyQualifiedName?: string;
35
+ };
36
+ export type _AnnotationTerm = {
37
+ term: string;
38
+ qualifier?: string;
35
39
  };
36
40
 
41
+ /**
42
+ * Checks whether the argument is an annotation of the given type.
43
+ * @param potentialAnnotationType The annotation to check
44
+ * @param typeName The type to check for
45
+ * @returns Whether the argument is an annotation of the given type
46
+ */
37
47
  export function isAnnotationOfType<T extends object & AnnotationType>(
38
- potentialAnnotationType: AnnotationTerm<any>,
39
- typeName: T["$Type"]
40
- ): potentialAnnotationType is AnnotationTerm<T> {
41
- return potentialAnnotationType.$Type === typeName;
48
+ potentialAnnotationType: unknown,
49
+ typeName: T["$Type"] | T["$Type"][]
50
+ ): potentialAnnotationType is T {
51
+ if (Array.isArray(typeName)) {
52
+ return typeName.includes((potentialAnnotationType as AnnotationType)?.$Type);
53
+ }
54
+ return (potentialAnnotationType as AnnotationType)?.$Type === typeName;
55
+ }
56
+
57
+ /**
58
+ * Checks whether the argument is an annotation of the given term.
59
+ * @param potentialAnnotation The annotation to check
60
+ * @param termName The term to check for
61
+ * @returns Whether the argument is an annotation of the given term
62
+ */
63
+ export function isAnnotationOfTerm<T extends object & _AnnotationTerm>(
64
+ potentialAnnotation: unknown,
65
+ termName: T["term"]
66
+ ): potentialAnnotation is AnnotationTerm<T> {
67
+ return (potentialAnnotation as _AnnotationTerm)?.term === termName;
68
+ }
69
+
70
+ export function isAnnotationTerm(potentialAnnotation: unknown): potentialAnnotation is _AnnotationTerm {
71
+ return (potentialAnnotation as _AnnotationTerm).hasOwnProperty("term");
42
72
  }
43
73
 
44
74
  /**
@@ -47,7 +77,7 @@ export function isAnnotationOfType<T extends object & AnnotationType>(
47
77
  * @param serviceObject The object to be checked.
48
78
  * @returns Whether the argument is a {@link ServiceObject}.
49
79
  */
50
- export function isServiceObject(serviceObject: ServiceObjectAndAnnotation | undefined): serviceObject is ServiceObject {
80
+ export function isServiceObject(serviceObject: unknown | undefined): serviceObject is ServiceObject {
51
81
  return serviceObject?.hasOwnProperty("_type") ?? false;
52
82
  }
53
83