@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
@@ -53,7 +53,6 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelH
53
53
  * @param converterContext
54
54
  * @param creationMode
55
55
  * @param tableManifestConfiguration
56
- * @param viewConfiguration
57
56
  * @returns The context for table actions
58
57
  */
59
58
  _exports.StandardActionKeys = StandardActionKeys;
@@ -276,9 +275,9 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelH
276
275
  */
277
276
  _exports.getCreationRow = getCreationRow;
278
277
  function getCutVisibility(converterContext, standardActionsContext) {
279
- var _standardActionsConte, _standardActionsConte2, _standardActionsConte3;
278
+ var _standardActionsConte, _standardActionsConte2, _converterContext$get5, _converterContext$get6, _standardActionsConte3;
280
279
  const pathUpdatableExpression = (_standardActionsConte = standardActionsContext.restrictions) === null || _standardActionsConte === void 0 ? void 0 : (_standardActionsConte2 = _standardActionsConte.isUpdatable) === null || _standardActionsConte2 === void 0 ? void 0 : _standardActionsConte2.expression;
281
- const templateBindingExpression = converterContext.getTemplateType() !== TemplateType.ListReport ? UI.IsEditable : false;
280
+ const templateBindingExpression = converterContext.getTemplateType() !== TemplateType.ListReport ? UI.IsEditable : ((_converterContext$get5 = converterContext.getEntitySet()) === null || _converterContext$get5 === void 0 ? void 0 : (_converterContext$get6 = _converterContext$get5.annotations.Common) === null || _converterContext$get6 === void 0 ? void 0 : _converterContext$get6.DraftRoot) !== undefined; // To allow cut/paste for a draft TreeTable in a ListReport
282
281
  return ifElse(equal((_standardActionsConte3 = standardActionsContext.tableManifestConfiguration) === null || _standardActionsConte3 === void 0 ? void 0 : _standardActionsConte3.type, "TreeTable"), and(standardActionsContext.tableManifestConfiguration.isHierarchyParentNodeUpdatable, not(and(isConstant(pathUpdatableExpression), equal(pathUpdatableExpression, false))), templateBindingExpression), false);
283
282
  }
284
283
 
@@ -460,7 +459,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelH
460
459
  //If it isn't deactivated within the manifest and we're operating in OP/blocks outside Fiori elements templates,
461
460
  //the treeTable's visibility relies on the cutvisibility,
462
461
  //while the visibility of the other table is determined by insertable restrictions and create visibility.
463
- return and(standardActionsContext.tableManifestConfiguration.type === "TreeTable" ? cutVisibility : and(createVisibility, standardActionsContext.restrictions.isInsertable.expression, notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false)), isInsertUpdateActionsTemplated, ![TemplateType.ListReport, TemplateType.AnalyticalListPage].includes(converterContext.getTemplateType()));
462
+ return and(standardActionsContext.tableManifestConfiguration.type === "TreeTable" ? cutVisibility : and(createVisibility, standardActionsContext.restrictions.isInsertable.expression, notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false), ![TemplateType.ListReport, TemplateType.AnalyticalListPage].includes(converterContext.getTemplateType())), isInsertUpdateActionsTemplated);
464
463
  }
465
464
 
466
465
  /**
@@ -663,4 +662,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelH
663
662
  _exports.isInDisplayMode = isInDisplayMode;
664
663
  return _exports;
665
664
  }, false);
666
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDcmVhdGUiLCJEZWxldGUiLCJDcmVhdGlvblJvdyIsIlBhc3RlIiwiTWFzc0VkaXQiLCJJbnNpZ2h0cyIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGlvbk1vZGUiLCJ0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsImNvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiY3JlYXRlIiwiaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4iLCJkZWxldGUiLCJ1cGRhdGUiLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJuZXdBY3Rpb24iLCJnZXROZXdBY3Rpb24iLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiYklzRHJhZnRTdXBwb3J0ZWQiLCJNb2RlbEhlbHBlciIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImN1cnJlbnRFbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsInVuZGVmaW5lZCIsIm5ld0FjdGlvbk5hbWUiLCJ0b1N0cmluZyIsImF2YWlsYWJsZVByb3BlcnR5IiwiZ2V0RW50aXR5VHlwZSIsImFjdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwibmFtZSIsImF2YWlsYWJsZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uVGVybSIsImJXaXRoTmF2aWdhdGlvblBhdGgiLCJhY3Rpb25Bbm5vdGF0aW9uVmFsdWUiLCJpc1NpbmdsZXRvbiIsIlVJIiwiY29uc3RhbnQiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJsZW5ndGgiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsInJlc3RyaWN0aW9uc0RlZiIsImtleSIsImZ1bmN0aW9uIiwiaXNQYXRoSW5zZXJ0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsInJlc3VsdCIsImZvckVhY2giLCJkZWYiLCJkZWZGdW5jdGlvbiIsImV4cHJlc3Npb24iLCJhcHBseSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiaXNEcmFmdE9yU3RpY2t5IiwiQ3JlYXRpb25Nb2RlIiwiRXh0ZXJuYWwiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImNyZWF0ZVZpc2liaWxpdHkiLCJnZXRDcmVhdGVWaXNpYmlsaXR5IiwiaXNUZW1wbGF0ZWQiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldENyZWF0ZVRlbXBsYXRpbmciLCJ2aXNpYmxlIiwidmlzaWJsZUV4cHJlc3Npb24iLCJlbmFibGVkIiwiZ2V0Q3JlYXRlRW5hYmxlbWVudCIsInR5cGUiLCJBY3Rpb25UeXBlIiwiU3RhbmRhcmQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImN1dFZpc2liaWxpdHkiLCJnZXRDdXRWaXNpYmlsaXR5IiwiZ2V0RGVmYXVsdFRlbXBsYXRpbmciLCJnZXRDdXRFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJkZWxldGVWaXNpYmlsaXR5IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93VmlzaWJpbGl0eSIsImdldENyZWF0aW9uUm93RW5hYmxlbWVudCIsInBhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNVcGRhdGFibGUiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsIklzRWRpdGFibGUiLCJpZkVsc2UiLCJlcXVhbCIsImFuZCIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsIm5vdCIsImlzQ29uc3RhbnQiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiY3JlYXRlRW5hYmxlbWVudCIsInBhc3RlVmlzaWJpbGl0eSIsImdldFBhc3RlVmlzaWJpbGl0eSIsImdldFBhc3RlRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJtYXNzRWRpdFZpc2liaWxpdHkiLCJnZXRNYXNzRWRpdFZpc2liaWxpdHkiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiaXNEZWxldGVIaWRkZW4iLCJwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiIsImlzRGVsZXRhYmxlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwibm90RXF1YWwiLCJlbmFibGVQYXN0ZSIsImluY2x1ZGVzIiwiaXNVcGRhdGVIaWRkZW4iLCJiTWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCIsImVuYWJsZU1hc3NFZGl0IiwiT2JqZWN0UGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJpbmRleE9mIiwibGFzdE5hdiIsInBhcnRuZXIiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIl90eXBlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImZvcm1hdFJlc3VsdCIsInBhdGhJbk1vZGVsIiwidGFibGVGb3JtYXR0ZXJzIiwidmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcyIsImNvbmRpdGlvbnMiLCJwdXNoIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwibGVzc09yRXF1YWwiLCJmb3JDb250ZXh0TWVudSIsImNvbnRleHRQYXRoIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsImdyZWF0ZXJUaGFuIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHkiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJncmVhdGVyT3JFcXVhbCIsIm51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMiLCJiRGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJydW50aW1lQmluZGluZyIsImNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uIiwidGVtcGxhdGVUeXBlIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3RhbmRhcmRBY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQm9vbGVhbiwgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0Z3JlYXRlck9yRXF1YWwsXG5cdGdyZWF0ZXJUaGFuLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRsZW5ndGgsXG5cdGxlc3NPckVxdWFsLFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGgsIGlzUGF0aERlbGV0YWJsZSwgaXNQYXRoSW5zZXJ0YWJsZSwgaXNQYXRoVXBkYXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgQ3JlYXRpb25Nb2RlLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbiA9IEJhc2VBY3Rpb24gJiB7XG5cdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmQ7XG5cdGlzVGVtcGxhdGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlRXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZWRGb3JDb250ZXh0TWVudT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxudHlwZSBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZSA9IHtcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbnR5cGUgU3RhbmRhcmRBY3Rpb25zUmVzdHJpY3Rpb25zVHlwZSA9IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPjtcblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25zQ29udGV4dCA9IHtcblx0Y29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0aGlkZGVuQW5ub3RhdGlvbjoge1xuXHRcdGNyZWF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGRlbGV0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHVwZGF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IFN0YW5kYXJkQWN0aW9uS2V5cyA9IHtcblx0Q3V0OiBcIlN0YW5kYXJkQWN0aW9uOjpDdXRcIixcblx0Q3JlYXRlOiBcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGVcIixcblx0RGVsZXRlOiBcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGVcIixcblx0Q3JlYXRpb25Sb3c6IFwiU3RhbmRhcmRBY3Rpb246OkNyZWF0aW9uUm93XCIsXG5cdFBhc3RlOiBcIlN0YW5kYXJkQWN0aW9uOjpQYXN0ZVwiLFxuXHRNYXNzRWRpdDogXCJTdGFuZGFyZEFjdGlvbjo6TWFzc0VkaXRcIixcblx0SW5zaWdodHM6IFwiU3RhbmRhcmRBY3Rpb246Okluc2lnaHRzXCJcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCB7XG5cdHJldHVybiB7XG5cdFx0Y29sbGVjdGlvblBhdGg6IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdGhpZGRlbkFubm90YXRpb246IHtcblx0XHRcdGNyZWF0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJDcmVhdGVIaWRkZW5cIiksXG5cdFx0XHRkZWxldGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiRGVsZXRlSGlkZGVuXCIpLFxuXHRcdFx0dXBkYXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIlVwZGF0ZUhpZGRlblwiKVxuXHRcdH0sXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCksXG5cdFx0bmV3QWN0aW9uOiBnZXROZXdBY3Rpb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdHJlc3RyaWN0aW9uczogZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdFx0PyB0cnVlXG5cdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRTdXBwb3J0ZWQgfHwgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmVkIG5ld0FjdGlvbiBpbnRvIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBuZXcgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBpc0VudGl0eVNldChjdXJyZW50RW50aXR5U2V0KVxuXHRcdD8gY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uID8/XG5cdFx0ICBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvblxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBuZXdBY3Rpb25OYW1lOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG5ld0FjdGlvbj8udG9TdHJpbmcoKTtcblx0aWYgKG5ld0FjdGlvbk5hbWUpIHtcblx0XHRjb25zdCBhdmFpbGFibGVQcm9wZXJ0eSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdPy5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lOiBuZXdBY3Rpb25OYW1lLFxuXHRcdFx0YXZhaWxhYmxlOiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb248Qm9vbGVhbj4oYXZhaWxhYmxlUHJvcGVydHksIFtdLCB0cnVlKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eSBjb25maWd1cmVkIGludG8gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHNBbm5vdGF0aW9uVGVybVxuICogQHBhcmFtIGJXaXRoTmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNBbm5vdGF0aW9uVGVybTogXCJDcmVhdGVIaWRkZW5cIiB8IFwiVXBkYXRlSGlkZGVuXCIgfCBcIkRlbGV0ZUhpZGRlblwiLFxuXHRiV2l0aE5hdmlnYXRpb25QYXRoID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gVGhlIGFubm90YXRpb25zIGluIHF1ZXN0aW9uIChDcmVhdGVIaWRkZW4sIERlbGV0ZUhpZGRlbiwgVXBkYXRlSGlkZGVuKSBtb3N0IHNwZWNpZmljYWxseSBjYW4gYmUgZGVmaW5lZCBvbiBFbnRpdHlTZXQuXG5cdC8vIEluIHNldmVyYWwgY2FzZXMsIGZhbGxiYWNrIHRvIEVudGl0eVR5cGUgbmVlZHMgdG8gYmUgY2hlY2tlZDpcblx0Ly8gLSBJbiBjYXNlIG9mIHNpbmdsZXRvbiAoYW5ub3RhdGlvbnMgZG8gbm90IGFwcGx5KVxuXHQvLyAtIEVudGl0eVNldCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoY29udGFpbm1lbnQgb3Igbm8gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZylcblx0Ly8gLSBFbnRpdHlTZXQgY2FuIGJlIGRldGVybWluZWQsIGJ1dCB0aGUgYW5ub3RhdGlvbiBpcyBub3QgZGVmaW5lZCB0aGVyZVxuXG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBhY3Rpb25Bbm5vdGF0aW9uVmFsdWUgPVxuXHRcdCghaXNTaW5nbGV0b24oY3VycmVudEVudGl0eVNldCkgJiYgY3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LltzQW5ub3RhdGlvblRlcm1dKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLlVJPy5bc0Fubm90YXRpb25UZXJtXTtcblxuXHRpZiAoIWFjdGlvbkFubm90YXRpb25WYWx1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdC8vIENvbnNpZGVyIG9ubHkgdGhlIGxhc3QgbGV2ZWwgb2YgbmF2aWdhdGlvbi4gVGhlIG90aGVycyBhcmUgYWxyZWFkeSBjb25zaWRlcmVkIGluIHRoZSBlbGVtZW50IGJpbmRpbmcgb2YgdGhlIHBhZ2UuXG5cdGNvbnN0IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPVxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBiV2l0aE5hdmlnYXRpb25QYXRoXG5cdFx0XHQ/IFtkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzW2RhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoIC0gMV0ubmFtZV1cblx0XHRcdDogW107XG5cblx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihhY3Rpb25Bbm5vdGF0aW9uVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHVuZGVmaW5lZCwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYW5ub3RhdGVkIHJlc3RyaWN0aW9ucyBmb3IgdGhlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aEluc2VydGFibGVcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJpc1VwZGF0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aFVwZGF0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzRGVsZXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNEcmFmdE9yU3RpY2t5XG4gKiBAcmV0dXJucyBUcnVlIGlmIHdlIG5lZWQgdG8gdGVtcGxhdGUgaW5zZXJ0IG9yIHVwZGF0ZSBhY3Rpb25zLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzRHJhZnRPclN0aWNreTogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNEcmFmdE9yU3RpY2t5IHx8IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNyZWF0ZVZpc2liaWxpdHkpLFxuXHRcdHZpc2libGVFeHByZXNzaW9uOiBjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3V0KGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQpOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGN1dFZpc2liaWxpdHkgPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhjdXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3V0VmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3V0RW5hYmxlbWVudChjdXRWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3V0LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBkZWxldGVWaXNpYmlsaXR5ID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhkZWxldGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGVsZXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NyZWF0aW9uUm93JyBhY3Rpb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdHVhbGx5IGFuIGFjdGlvbiB0aGF0IGlzIHRlbXBsYXRlZCBhcyBhIGJ1dHRvbiBidXQgaXRzIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGFuIE1EQyBmZWF0dXJlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgU3RhbmRhcmRBY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQpOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uUm93VmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHksIHRydWUpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGlvblJvd1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0aW9uUm93RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHkpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGlvblJvdyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXRWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zPy5pc1VwZGF0YWJsZT8uZXhwcmVzc2lvbjtcblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ID8gVUkuSXNFZGl0YWJsZSA6IGZhbHNlO1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGVxdWFsKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUsIFwiVHJlZVRhYmxlXCIpLFxuXHRcdGFuZChcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlISxcblx0XHRcdG5vdChhbmQoaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBmYWxzZSkpKSxcblx0XHRcdHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb25cblx0XHQpLFxuXHRcdGZhbHNlXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhY3R1YWxseSBhbiBhY3Rpb24gdGhhdCBpcyBkaXNwbGF5ZWQgYXMgYSBidXR0b24gYnV0IGl0cyBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSBhbiBNREMgZmVhdHVyZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZVZpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlLCB0cnVlKTtcblx0Y29uc3QgY3JlYXRlRW5hYmxlbWVudCA9IGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSk7XG5cdGNvbnN0IHBhc3RlVmlzaWJpbGl0eSA9IGdldFBhc3RlVmlzaWJpbGl0eShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRjdXRWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0UGFzdGVFbmFibGVtZW50KHBhc3RlVmlzaWJpbGl0eSwgY3JlYXRlRW5hYmxlbWVudCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBtYXNzRWRpdFZpc2liaWxpdHkgPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obWFzc0VkaXRWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuTWFzc0VkaXQsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQWRkQ2FyZHNUb0luc2lnaHRzJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0FkZENhcmRzVG9JbnNpZ2h0cycgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBpbnNpZ2h0c1Zpc2liaWxpdHkgPSBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkoXCJUYWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGluc2lnaHRzRW5hYmxlbWVudCA9IGFuZChpbnNpZ2h0c1Zpc2liaWxpdHksIGdldEluc2lnaHRzRW5hYmxlbWVudCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoaW5zaWdodHNWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihpbnNpZ2h0c0VuYWJsZW1lbnQpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkluc2lnaHRzLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMgVGhlIGNyZWF0ZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL1RlbXBsYXRpbmcgb2YgQ3JlYXRlIEJ1dHRvbiBpcyBub3QgZG9uZTpcblx0Ly8gXHQgLSBJZiBCdXR0b24gaXMgbmV2ZXIgdmlzaWJsZShjb3ZlcmVkIHRoZSBFeHRlcm5hbCBjcmVhdGUgYnV0dG9uLCBuZXcgQWN0aW9uKVxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGUgQnV0dG9uXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgbm90IG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGlvblJvdyBCdXR0b25cblxuXHRyZXR1cm4gYW5kKFxuXHRcdC8vWE5PUiBnYXRlXG5cdFx0b3IoXG5cdFx0XHRhbmQoaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyksXG5cdFx0XHRhbmQoIWlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpXG5cdFx0KSxcblx0XHRvcihub3QoaXNDb25zdGFudChjcmVhdGVWaXNpYmlsaXR5KSksIGNyZWF0ZVZpc2liaWxpdHkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25WaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRpbmcoYWN0aW9uVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG9yKG5vdChpc0NvbnN0YW50KGFjdGlvblZpc2liaWxpdHkpKSwgYWN0aW9uVmlzaWJpbGl0eSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHBhcmFtIGlzRm9yUGFzdGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZSxcblx0aXNGb3JQYXN0ZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPSBpc0ZvckNyZWF0aW9uUm93XG5cdFx0PyBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkNyZWF0ZUhpZGRlblwiLCBmYWxzZSlcblx0XHQ6IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5jcmVhdGU7XG5cdGNvbnN0IG5ld0FjdGlvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQubmV3QWN0aW9uO1xuXHQvL0NyZWF0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgLSBJZiB0aGUgY3JlYXRpb24gbW9kZSBpcyBleHRlcm5hbFxuXHQvLyAgICAgIC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IGFuZCBjcmVhdGUgaXMgbm90IGhpZGRlblxuXHQvL1x0XHQtIE90aGVyd2lzZSB0aGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdC8vXHQgLSBPdGhlcndpc2Vcblx0Ly9cdFx0LSBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHZhbGlkIHRoZW4gY3JlYXRlIGJ1dHRvbiBpc24ndCB2aXNpYmxlXG5cdC8vXHRcdFx0LSBubyBuZXdBY3Rpb24gYXZhaWxhYmxlXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9uc2l2ZSB0YWJsZSB0eXBlLCB3aXRoIHRoZSBwYXJhbWV0ZXIgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSB0byB0cnVlIHdoaWxlIG5vdCBpbiBjcmVhdGUgbW9kZVxuXHQvLyAgICAgICAgICBcdC0gd2hlbiBjYWxjdWxhdGluZyBwYXN0ZSBidXR0b24gdmlzaWJpbGl0eSwgIHdlIGZvcmNlIHRoZSBjb25kaXRpb24gdG8gZmFsc2Ugd2l0aCB0aGUgaXNGb3JQYXN0ZSBwcm9wZXJ0eVxuXHQvLyAgIC0gT3RoZXJ3aXNlXG5cdC8vIFx0IFx0LSBJZiB3ZSdyZSBvbiB0aGUgbGlzdCByZXBvcnQgLT5cblx0Ly8gXHQgXHRcdC0gSWYgVUkuQ3JlYXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly8gXHQgXHRcdC0gT3RoZXJ3aXNlLCBjcmVhdGUgaXMgdmlzaWJsZVxuXHQvLyBcdCBcdC0gT3RoZXJ3aXNlXG5cdC8vIFx0ICBcdCAtIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIFVJLklzRWRpdGFibGVcblx0cmV0dXJuIGlmRWxzZShcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsLFxuXHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVUkuSXNFZGl0YWJsZSkpLFxuXHRcdGlmRWxzZShcblx0XHRcdG9yKFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChuZXdBY3Rpb24/LmF2YWlsYWJsZSksIGVxdWFsKG5ld0FjdGlvbj8uYXZhaWxhYmxlLCBmYWxzZSkpLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0luc2VydGFibGUpLCBlcXVhbChpc0luc2VydGFibGUsIGZhbHNlKSwgIW5ld0FjdGlvbiksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzQ3JlYXRlSGlkZGVuKSwgZXF1YWwoaXNDcmVhdGVIaWRkZW4sIHRydWUpKSxcblx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzLFxuXHRcdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0Py50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gZmFsc2UsXG5cdFx0XHRcdFx0XHRcdG5vdChpc0ZvclBhc3RlKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRVSS5Jc0NyZWF0ZU1vZGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRmYWxzZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdG9yKG5vdChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihpc0NyZWF0ZUhpZGRlbikpLCBub3QoaXNDcmVhdGVIaWRkZW4pKSxcblx0XHRcdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNEZWxldGVIaWRkZW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uZGVsZXRlO1xuXHRjb25zdCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb247XG5cblx0Ly9EZWxldGUgQnV0dG9uIGlzIHZpc2libGU6XG5cdC8vIFx0IFByZXJlcXVpc2l0ZXM6XG5cdC8vXHQgLSBJZiB3ZSdyZSBub3Qgb24gQUxQXG5cdC8vICAgLSBJZiByZXN0cmljdGlvbnMgb24gZGVsZXRhYmxlIHNldCB0byBmYWxzZSAtPiBub3QgdmlzaWJsZVxuXHQvLyAgIC0gT3RoZXJ3aXNlXG5cdC8vXHRcdFx0LSBJZiBVSS5EZWxldGVIaWRkZW4gaXMgdHJ1ZSAtPiBub3QgdmlzaWJsZVxuXHQvL1x0XHRcdC0gT3RoZXJ3aXNlXG5cdC8vIFx0IFx0XHRcdC0gSWYgd2UncmUgb24gT1AgLT4gZGVwZW5kaW5nIGlmIFVJIGlzIGVkaXRhYmxlIGFuZCByZXN0cmljdGlvbnMgb24gZGVsZXRhYmxlXG5cdC8vXHRcdFx0XHQtIE90aGVyd2lzZVxuXHQvL1x0XHRcdFx0IFx0LSBJZiBVSS5EZWxldGVIaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHkgcGF0aCAtPiBwcm92aWRlIGEgbmVnYXRlZCBiaW5kaW5nIHRvIHRoaXMgcGF0aFxuXHQvL1x0IFx0IFx0XHQgXHQtIE90aGVyd2lzZSwgZGVsZXRlIGlzIHZpc2libGVcblxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UsXG5cdFx0ZmFsc2UsXG5cdFx0aWZFbHNlKFxuXHRcdFx0YW5kKGlzQ29uc3RhbnQocGF0aERlbGV0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0RlbGV0ZUhpZGRlbiksIGVxdWFsKGlzRGVsZXRlSGlkZGVuLCBjb25zdGFudCh0cnVlKSkpLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRcdGFuZChub3QoaXNEZWxldGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdFx0XHRub3QoYW5kKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGlzRGVsZXRlSGlkZGVuKSwgaXNEZWxldGVIaWRkZW4pKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGN1dFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL0lmIGl0IGlzbid0IGRlYWN0aXZhdGVkIHdpdGhpbiB0aGUgbWFuaWZlc3QgYW5kIHdlJ3JlIG9wZXJhdGluZyBpbiBPUC9ibG9ja3Mgb3V0c2lkZSBGaW9yaSBlbGVtZW50cyB0ZW1wbGF0ZXMsXG5cdC8vdGhlIHRyZWVUYWJsZSdzIHZpc2liaWxpdHkgcmVsaWVzIG9uIHRoZSBjdXR2aXNpYmlsaXR5LFxuXHQvL3doaWxlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBvdGhlciB0YWJsZSBpcyBkZXRlcm1pbmVkIGJ5IGluc2VydGFibGUgcmVzdHJpY3Rpb25zIGFuZCBjcmVhdGUgdmlzaWJpbGl0eS5cblx0cmV0dXJuIGFuZChcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdD8gY3V0VmlzaWJpbGl0eVxuXHRcdFx0OiBhbmQoXG5cdFx0XHRcdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbixcblx0XHRcdFx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSlcblx0XHRcdCAgKSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0IVtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZV0uaW5jbHVkZXMoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSlcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzVXBkYXRlSGlkZGVuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLnVwZGF0ZSxcblx0XHRwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb24sXG5cdFx0Yk1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5lbmFibGVNYXNzRWRpdCB8fCBmYWxzZTtcblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2Vcblx0XHRcdD8gVUkuSXNFZGl0YWJsZVxuXHRcdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDtcblx0Ly9NYXNzRWRpdCBpcyB2aXNpYmxlXG5cdC8vIElmXG5cdC8vXHRcdC0gdGhlcmUgaXMgbm8gc3RhdGljIHJlc3RyaWN0aW9ucyBzZXQgdG8gZmFsc2Vcblx0Ly9cdFx0LSBhbmQgZW5hYmxlTWFzc0VkaXQgaXMgbm90IHNldCB0byBmYWxzZSBpbnRvIHRoZSBtYW5pZmVzdFxuXHQvL1x0XHQtIGFuZCB0aGUgc2VsZWN0aW9uTW9kZSBpcyByZWxldmFudFxuXHQvL1x0VGhlbiBNYXNzRWRpdCBpcyBhbHdheXMgdmlzaWJsZSBpbiBMUiBvciBkeW5hbWljYWxseSB2aXNpYmxlIGluIE9QIGFjY29yZGluZyB0byB1aT5FZGl0YWJsZSBhbmQgaGlkZGVuQW5ub3RhdGlvblxuXHQvLyAgQnV0dG9uIGlzIGhpZGRlbiBmb3IgYWxsIG90aGVyIGNhc2VzXG5cdHJldHVybiBhbmQoXG5cdFx0bm90KGFuZChpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSkpLFxuXHRcdGJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0LFxuXHRcdHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0bm90KGlzVXBkYXRlSGlkZGVuKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJlc3RyaWN0aW9uc0luc2VydGFibGUgPSBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+IHtcblx0XHRcdGlmIChwYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdHBhdGggPSBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocyk7XG5cdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5uYXZpZ2F0aW9uUHJvcGVydGllcztcblx0XHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0XHRjb25zdCBsYXN0TmF2ID0gbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGNvbnN0IHBhcnRuZXIgPSBpc05hdmlnYXRpb25Qcm9wZXJ0eShsYXN0TmF2KSAmJiBsYXN0TmF2LnBhcnRuZXI7XG5cdFx0XHRcdGlmIChwYXJ0bmVyKSB7XG5cdFx0XHRcdFx0cGF0aCA9IGAke3BhcnRuZXJ9LyR7cGF0aH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGF0aDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBpc0luc2VydGFibGUgPVxuXHRcdHJlc3RyaWN0aW9uc0luc2VydGFibGUuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdD8gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKVxuXHRcdFx0ICB9KVxuXHRcdFx0OiByZXN0cmljdGlvbnNJbnNlcnRhYmxlO1xuXG5cdHJldHVybiBhbmQoXG5cdFx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0YWJsZSxcblx0XHRvcihcblx0XHRcdCFzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0XHRmb3JtYXRSZXN1bHQoW3BhdGhJbk1vZGVsKFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIFwiaW50ZXJuYWxcIildLCB0YWJsZUZvcm1hdHRlcnMudmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcylcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBjb25kaXRpb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXG5cdGlmIChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdC8vIGZvciBJbmxpbmUgY3JlYXRpb24gcm93cyBjcmVhdGUgY2FuIGJlIGhpZGRlbiB2aWEgbWFuaWZlc3QgYW5kIHRoaXMgc2hvdWxkIG5vdCBpbXBhY3QgaXRzIGVuYWJsZW1lbnRcblx0XHRjb25kaXRpb25zLnB1c2goYW5kKG5vdChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKSwgVUkuSXNFZGl0YWJsZSkpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbmRpdGlvbnMucHVzaChjcmVhdGVWaXNpYmlsaXR5KTtcblx0fVxuXG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBDb2xsZWN0aW9uVHlwZSA9IGNvbnZlcnRlckNvbnRleHQucmVzb2x2ZUFic29sdXRlUGF0aDxFbnRpdHlTZXQ+KHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY29sbGVjdGlvblBhdGgpLnRhcmdldDtcblx0Y29uZGl0aW9ucy5wdXNoKFxuXHRcdG9yKFxuXHRcdFx0aXNFbnRpdHlTZXQoQ29sbGVjdGlvblR5cGUpLFxuXHRcdFx0YW5kKGlzSW5zZXJ0YWJsZSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsIFVJLklzRWRpdGFibGUpKVxuXHRcdClcblx0KTtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Ly8gSW4gY2FzZSBvZiBhIFRyZWVUYWJsZSwgdGhlIGNyZWF0ZSBidXR0b24gc2hhbGwgYmUgYWN0aXZlIG9ubHkgaWYgMCBvciAxIGl0ZW1zIGFyZSBzZWxlY3RlZCAocGFyZW50IG5vZGUpXG5cdFx0Y29uZGl0aW9ucy5wdXNoKGxlc3NPckVxdWFsKHBhdGhJbk1vZGVsKFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpKTtcblxuXHRcdGlmIChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQpIHtcblx0XHRcdC8vIFRoZXJlJ3MgYSBjcmVhdGVFbmFibGVtZW50IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhZGRpdGlvbm5hbCBjb25kaXRpb25zXG5cdFx0XHQvLyBUaGVzZSBjb25kaXRpb25zIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBpbnRlcm5hbCBtb2RlbFxuXHRcdFx0Y29uZGl0aW9ucy5wdXNoKG5vdEVxdWFsKHBhdGhJbk1vZGVsKFwiY3JlYXRlRW5hYmxlbWVudC9DcmVhdGVcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYW5kKC4uLmNvbmRpdGlvbnMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGRlbGV0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGRlbGV0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gVGhlIGZvbGxvd2luZyBjb250ZXh0cyBhcmUgZmlsbGVkIGF0IHJ1bnRpbWUgd2hlbiBhIHVzZXIgc2VsZWN0cyBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIGEgbGlzdC5cblx0Ly8gQ2hlY2tzIGFyZSB0aGVuIG1hZGUgaW4gZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMgaW4gZmlsZSBEZWxldGVIZWxwZXIgdG8gc2VlIGlmIHRoZXJlXG5cdC8vIGFyZSBpdGVtcyB0aGF0IGNhbiBiZSBkZWxldGVkLCB0aHVzIHRoZSBkZWxldGUgYnV0dG9uIHNob3VsZCBiZSBlbmFibGVkIGluIHRoZXNlIGNhc2VzLlxuXHRjb25zdCBjb250ZXh0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRjb25zdCBkZWxldGFibGVDb250ZXh0cyA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkZWxldGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCB1blNhdmVkQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwidW5TYXZlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblxuXHQvLyBcIlVucmVzb2x2YWJsZVwiIGluIG5hdmlnYXRpb25FeHByZXNzaW9uIGlzIGludGVycHJldGVkIHRvIG1lYW4gdGhhdCB0aGVyZSBhcmUgbm8gbmF2aWdhdGlvbkV4cHJlc3Npb25zXG5cdC8vIGRlZmluZWQuXG5cdC8vIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb24gaXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCBjb21lc1xuXHQvLyBmcm9tIHRoZSBEZWxldGUgcmVzdHJpY3Rpb25zIGRlZmluZWQgaW4gTmF2aWdhdGlvblJlc3RyaWN0aW9ucyBmb3IgdGhpcyBlbnRpdHkuIEluIG9yZGVyIHRvXG5cdC8vIGJlIGRlbGV0YWJsZSwgdGhlIGl0ZW0gbXVzdCBhbHNvIGJlIGFsbG93ZWQgdG8gYmUgZGVsZXRhYmxlIGFjY29yZGluZyB0byB0aGUgRGVsZXRlIFJlc3RyaWN0aW9uc1xuXHQvLyBvbiB0aGUgZW50aXR5IGl0c2VsZi5cblx0cmV0dXJuIGFuZChcblx0XHRkZWxldGVWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uXG5cdFx0KSxcblx0XHRvcihcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkZWxldGFibGVDb250ZXh0cywgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgodW5TYXZlZENvbnRleHRzLCB0cnVlKSwgMClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY3JlYXRlRW5hYmxlbWVudFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVFbmFibGVtZW50KFxuXHRwYXN0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y3JlYXRlRW5hYmxlbWVudDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdHBhc3RlVmlzaWJpbGl0eSxcblx0XHRcdG9yKFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdFx0KSxcblx0XHRcdGFuZChcblx0XHRcdFx0ZXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKFwicGFzdGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCB0cnVlKSwgMSksXG5cdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHRcdD8gbGVzc09yRXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSlcblx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwicGFzdGVBdXRob3JpemVkXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gYW5kKHBhc3RlVmlzaWJpbGl0eSwgY3JlYXRlRW5hYmxlbWVudCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBtYXNzRWRpdFZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID1cblx0XHQhaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRjb25zdCB1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcInVwZGF0YWJsZUNvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L3VwZGF0YWJsZUNvbnRleHRzXCI7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpO1xuXHRjb25zdCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSksIDEpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgYkRpc3BsYXlNb2RlID0gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGJpbmRpbmcgaW4gY2FzZVxuXHQvLyAxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5IChpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IGlzIHRydWUpLlxuXHQvLyAyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkKGxpa2UgTFIpLCBpbiB0aGlzIGNhc2Ugb25seSBhY3RpdmUgY29udGV4dHMgY2FuIGJlIG1hc3MgZWRpdGVkLlxuXHQvLyAgICBTbywgdXBkYXRlIGRlcGVuZHMgb24gJ0lzQWN0aXZlRW50aXR5JyB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkIHJ1bnRpbWUuXG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gaWZFbHNlKFxuXHRcdG9yKGFuZChiRGlzcGxheU1vZGUsIGJJc0RyYWZ0U3VwcG9ydGVkKSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cylcblx0KTtcblxuXHRyZXR1cm4gYW5kKG1hc3NFZGl0VmlzaWJpbGl0eSwgaWZFbHNlKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHksIHJ1bnRpbWVCaW5kaW5nLCBhbmQocnVudGltZUJpbmRpbmcsIHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjdXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXRFbmFibGVtZW50KFxuXHRjdXRWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IGVxdWFsKHBhdGhJbk1vZGVsKFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpO1xuXG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gYW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgZXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKFwiY3V0YWJsZUNvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLCAxKSk7XG5cdHJldHVybiBhbmQoXG5cdFx0Y3V0VmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0cnVudGltZUJpbmRpbmdcblx0KTtcbn1cblxuLyoqXG4gKiBUZWxscyBpZiB0aGUgdGFibGUgaW4gdGVtcGxhdGUgaXMgaW4gZGlzcGxheSBtb2RlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFibGUgaXMgaW4gZGlzcGxheSBtb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gPSBmYWxzZSk6IGJvb2xlYW4ge1xuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRpZiAoXG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCB8fFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdChjaGVja011bHRpcGxlVmlzdWFsaXphdGlvbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSlcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIGZhbHNlO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpRU8sTUFBTUEsa0JBQWtCLEdBQUc7SUFDakNDLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUJDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUNDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLFFBQVEsRUFBRTtFQUNYLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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
665
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDcmVhdGUiLCJEZWxldGUiLCJDcmVhdGlvblJvdyIsIlBhc3RlIiwiTWFzc0VkaXQiLCJJbnNpZ2h0cyIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGlvbk1vZGUiLCJ0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsImNvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiY3JlYXRlIiwiaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4iLCJkZWxldGUiLCJ1cGRhdGUiLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJuZXdBY3Rpb24iLCJnZXROZXdBY3Rpb24iLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiYklzRHJhZnRTdXBwb3J0ZWQiLCJNb2RlbEhlbHBlciIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImN1cnJlbnRFbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsInVuZGVmaW5lZCIsIm5ld0FjdGlvbk5hbWUiLCJ0b1N0cmluZyIsImF2YWlsYWJsZVByb3BlcnR5IiwiZ2V0RW50aXR5VHlwZSIsImFjdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwibmFtZSIsImF2YWlsYWJsZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uVGVybSIsImJXaXRoTmF2aWdhdGlvblBhdGgiLCJhY3Rpb25Bbm5vdGF0aW9uVmFsdWUiLCJpc1NpbmdsZXRvbiIsIlVJIiwiY29uc3RhbnQiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJsZW5ndGgiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsInJlc3RyaWN0aW9uc0RlZiIsImtleSIsImZ1bmN0aW9uIiwiaXNQYXRoSW5zZXJ0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsInJlc3VsdCIsImZvckVhY2giLCJkZWYiLCJkZWZGdW5jdGlvbiIsImV4cHJlc3Npb24iLCJhcHBseSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiaXNEcmFmdE9yU3RpY2t5IiwiQ3JlYXRpb25Nb2RlIiwiRXh0ZXJuYWwiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImNyZWF0ZVZpc2liaWxpdHkiLCJnZXRDcmVhdGVWaXNpYmlsaXR5IiwiaXNUZW1wbGF0ZWQiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldENyZWF0ZVRlbXBsYXRpbmciLCJ2aXNpYmxlIiwidmlzaWJsZUV4cHJlc3Npb24iLCJlbmFibGVkIiwiZ2V0Q3JlYXRlRW5hYmxlbWVudCIsInR5cGUiLCJBY3Rpb25UeXBlIiwiU3RhbmRhcmQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImN1dFZpc2liaWxpdHkiLCJnZXRDdXRWaXNpYmlsaXR5IiwiZ2V0RGVmYXVsdFRlbXBsYXRpbmciLCJnZXRDdXRFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJkZWxldGVWaXNpYmlsaXR5IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93VmlzaWJpbGl0eSIsImdldENyZWF0aW9uUm93RW5hYmxlbWVudCIsInBhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNVcGRhdGFibGUiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsIklzRWRpdGFibGUiLCJpZkVsc2UiLCJlcXVhbCIsImFuZCIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsIm5vdCIsImlzQ29uc3RhbnQiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiY3JlYXRlRW5hYmxlbWVudCIsInBhc3RlVmlzaWJpbGl0eSIsImdldFBhc3RlVmlzaWJpbGl0eSIsImdldFBhc3RlRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJtYXNzRWRpdFZpc2liaWxpdHkiLCJnZXRNYXNzRWRpdFZpc2liaWxpdHkiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiaXNEZWxldGVIaWRkZW4iLCJwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiIsImlzRGVsZXRhYmxlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwibm90RXF1YWwiLCJlbmFibGVQYXN0ZSIsImluY2x1ZGVzIiwiaXNVcGRhdGVIaWRkZW4iLCJiTWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCIsImVuYWJsZU1hc3NFZGl0IiwiT2JqZWN0UGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJpbmRleE9mIiwibGFzdE5hdiIsInBhcnRuZXIiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIl90eXBlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImZvcm1hdFJlc3VsdCIsInBhdGhJbk1vZGVsIiwidGFibGVGb3JtYXR0ZXJzIiwidmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcyIsImNvbmRpdGlvbnMiLCJwdXNoIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwibGVzc09yRXF1YWwiLCJmb3JDb250ZXh0TWVudSIsImNvbnRleHRQYXRoIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsImdyZWF0ZXJUaGFuIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHkiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJncmVhdGVyT3JFcXVhbCIsIm51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMiLCJiRGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJydW50aW1lQmluZGluZyIsImNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uIiwidGVtcGxhdGVUeXBlIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3RhbmRhcmRBY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQm9vbGVhbiwgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0Z3JlYXRlck9yRXF1YWwsXG5cdGdyZWF0ZXJUaGFuLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRsZW5ndGgsXG5cdGxlc3NPckVxdWFsLFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGgsIGlzUGF0aERlbGV0YWJsZSwgaXNQYXRoSW5zZXJ0YWJsZSwgaXNQYXRoVXBkYXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgQ3JlYXRpb25Nb2RlLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbiA9IEJhc2VBY3Rpb24gJiB7XG5cdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmQ7XG5cdGlzVGVtcGxhdGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlRXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZWRGb3JDb250ZXh0TWVudT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxudHlwZSBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZSA9IHtcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbnR5cGUgU3RhbmRhcmRBY3Rpb25zUmVzdHJpY3Rpb25zVHlwZSA9IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPjtcblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25zQ29udGV4dCA9IHtcblx0Y29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0aGlkZGVuQW5ub3RhdGlvbjoge1xuXHRcdGNyZWF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGRlbGV0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHVwZGF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IFN0YW5kYXJkQWN0aW9uS2V5cyA9IHtcblx0Q3V0OiBcIlN0YW5kYXJkQWN0aW9uOjpDdXRcIixcblx0Q3JlYXRlOiBcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGVcIixcblx0RGVsZXRlOiBcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGVcIixcblx0Q3JlYXRpb25Sb3c6IFwiU3RhbmRhcmRBY3Rpb246OkNyZWF0aW9uUm93XCIsXG5cdFBhc3RlOiBcIlN0YW5kYXJkQWN0aW9uOjpQYXN0ZVwiLFxuXHRNYXNzRWRpdDogXCJTdGFuZGFyZEFjdGlvbjo6TWFzc0VkaXRcIixcblx0SW5zaWdodHM6IFwiU3RhbmRhcmRBY3Rpb246Okluc2lnaHRzXCJcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zICBUaGUgY29udGV4dCBmb3IgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCB7XG5cdHJldHVybiB7XG5cdFx0Y29sbGVjdGlvblBhdGg6IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdGhpZGRlbkFubm90YXRpb246IHtcblx0XHRcdGNyZWF0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJDcmVhdGVIaWRkZW5cIiksXG5cdFx0XHRkZWxldGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiRGVsZXRlSGlkZGVuXCIpLFxuXHRcdFx0dXBkYXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIlVwZGF0ZUhpZGRlblwiKVxuXHRcdH0sXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCksXG5cdFx0bmV3QWN0aW9uOiBnZXROZXdBY3Rpb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdHJlc3RyaWN0aW9uczogZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gKGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcblx0XHQ/IHRydWVcblx0XHQ6IGZhbHNlO1xuXG5cdHJldHVybiBiSXNEcmFmdFN1cHBvcnRlZCB8fCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgbmV3QWN0aW9uIGludG8gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIG5ldyBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHsgbmFtZTogc3RyaW5nOyBhdmFpbGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB9IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG5ld0FjdGlvbiA9IGlzRW50aXR5U2V0KGN1cnJlbnRFbnRpdHlTZXQpXG5cdFx0PyBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gPz9cblx0XHQgIGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gbmV3QWN0aW9uPy50b1N0cmluZygpO1xuXHRpZiAobmV3QWN0aW9uTmFtZSkge1xuXHRcdGNvbnN0IGF2YWlsYWJsZVByb3BlcnR5ID0gY29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFjdGlvbnNbbmV3QWN0aW9uTmFtZV0/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IG5ld0FjdGlvbk5hbWUsXG5cdFx0XHRhdmFpbGFibGU6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbjxCb29sZWFuPihhdmFpbGFibGVQcm9wZXJ0eSwgW10sIHRydWUpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGFjdGlvbiB2aXNpYmlsaXR5IGNvbmZpZ3VyZWQgaW50byBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc0Fubm90YXRpb25UZXJtXG4gKiBAcGFyYW0gYldpdGhOYXZpZ2F0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGFjdGlvbiB2aXNpYmlsaXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzQW5ub3RhdGlvblRlcm06IFwiQ3JlYXRlSGlkZGVuXCIgfCBcIlVwZGF0ZUhpZGRlblwiIHwgXCJEZWxldGVIaWRkZW5cIixcblx0YldpdGhOYXZpZ2F0aW9uUGF0aCA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIFRoZSBhbm5vdGF0aW9ucyBpbiBxdWVzdGlvbiAoQ3JlYXRlSGlkZGVuLCBEZWxldGVIaWRkZW4sIFVwZGF0ZUhpZGRlbikgbW9zdCBzcGVjaWZpY2FsbHkgY2FuIGJlIGRlZmluZWQgb24gRW50aXR5U2V0LlxuXHQvLyBJbiBzZXZlcmFsIGNhc2VzLCBmYWxsYmFjayB0byBFbnRpdHlUeXBlIG5lZWRzIHRvIGJlIGNoZWNrZWQ6XG5cdC8vIC0gSW4gY2FzZSBvZiBzaW5nbGV0b24gKGFubm90YXRpb25zIGRvIG5vdCBhcHBseSlcblx0Ly8gLSBFbnRpdHlTZXQgY2Fubm90IGJlIGRldGVybWluZWQgKGNvbnRhaW5tZW50IG9yIG5vIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdC8vIC0gRW50aXR5U2V0IGNhbiBiZSBkZXRlcm1pbmVkLCBidXQgdGhlIGFubm90YXRpb24gaXMgbm90IGRlZmluZWQgdGhlcmVcblxuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgYWN0aW9uQW5ub3RhdGlvblZhbHVlID1cblx0XHQoIWlzU2luZ2xldG9uKGN1cnJlbnRFbnRpdHlTZXQpICYmIGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5bc0Fubm90YXRpb25UZXJtXSkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5VST8uW3NBbm5vdGF0aW9uVGVybV07XG5cblx0aWYgKCFhY3Rpb25Bbm5vdGF0aW9uVmFsdWUpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHQvLyBDb25zaWRlciBvbmx5IHRoZSBsYXN0IGxldmVsIG9mIG5hdmlnYXRpb24uIFRoZSBvdGhlcnMgYXJlIGFscmVhZHkgY29uc2lkZXJlZCBpbiB0aGUgZWxlbWVudCBiaW5kaW5nIG9mIHRoZSBwYWdlLlxuXHRjb25zdCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzID1cblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCA+IDAgJiYgYldpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0PyBbZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllc1tkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAtIDFdLm5hbWVdXG5cdFx0XHQ6IFtdO1xuXG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYWN0aW9uQW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFubm90YXRlZCByZXN0cmljdGlvbnMgZm9yIHRoZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aEluc2VydGFibGVcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJpc1VwZGF0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aFVwZGF0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzRGVsZXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNEcmFmdE9yU3RpY2t5XG4gKiBAcmV0dXJucyBUcnVlIGlmIHdlIG5lZWQgdG8gdGVtcGxhdGUgaW5zZXJ0IG9yIHVwZGF0ZSBhY3Rpb25zLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzRHJhZnRPclN0aWNreTogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNEcmFmdE9yU3RpY2t5IHx8IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRlVmlzaWJpbGl0eSksXG5cdFx0dmlzaWJsZUV4cHJlc3Npb246IGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DdXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjdXRWaXNpYmlsaXR5ID0gZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoY3V0VmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGN1dFZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldEN1dEVuYWJsZW1lbnQoY3V0VmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBkZWxldGVWaXNpYmlsaXR5ID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhkZWxldGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGVsZXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NyZWF0aW9uUm93JyBhY3Rpb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdHVhbGx5IGFuIGFjdGlvbiB0aGF0IGlzIHRlbXBsYXRlZCBhcyBhIGJ1dHRvbiBidXQgaXRzIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGFuIE1EQyBmZWF0dXJlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgU3RhbmRhcmRBY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3JlYXRpb25Sb3dWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVUZW1wbGF0aW5nKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0aW9uUm93VmlzaWJpbGl0eSwgdHJ1ZSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNyZWF0aW9uUm93VmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRpb25Sb3dFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0aW9uUm93VmlzaWJpbGl0eSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0aW9uUm93LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1dFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucz8uaXNVcGRhdGFibGU/LmV4cHJlc3Npb247XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShcblx0XHRlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSxcblx0XHRhbmQoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSEsXG5cdFx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0KSxcblx0XHRmYWxzZVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgZGlzcGxheWVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZVZpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlLCB0cnVlKTtcblx0Y29uc3QgY3JlYXRlRW5hYmxlbWVudCA9IGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSk7XG5cdGNvbnN0IHBhc3RlVmlzaWJpbGl0eSA9IGdldFBhc3RlVmlzaWJpbGl0eShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRjdXRWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0UGFzdGVFbmFibGVtZW50KHBhc3RlVmlzaWJpbGl0eSwgY3JlYXRlRW5hYmxlbWVudCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IG1hc3NFZGl0VmlzaWJpbGl0eSA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtYXNzRWRpdFZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdCxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQWRkQ2FyZHNUb0luc2lnaHRzJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmdcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgaW5zaWdodHNWaXNpYmlsaXR5ID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiVGFibGVcIiwgY29udmVydGVyQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpbnNpZ2h0c0VuYWJsZW1lbnQgPSBhbmQoaW5zaWdodHNWaXNpYmlsaXR5LCBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGluc2lnaHRzVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGluc2lnaHRzVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNFbmFibGVtZW50KSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0cyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVUZW1wbGF0aW5nKFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly9UZW1wbGF0aW5nIG9mIENyZWF0ZSBCdXR0b24gaXMgbm90IGRvbmU6XG5cdC8vIFx0IC0gSWYgQnV0dG9uIGlzIG5ldmVyIHZpc2libGUoY292ZXJlZCB0aGUgRXh0ZXJuYWwgY3JlYXRlIGJ1dHRvbiwgbmV3IEFjdGlvbilcblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBvbiBDcmVhdGlvblJvdyBmb3IgQ3JlYXRlIEJ1dHRvblxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG5vdCBvbiBDcmVhdGlvblJvdyBmb3IgQ3JlYXRpb25Sb3cgQnV0dG9uXG5cblx0cmV0dXJuIGFuZChcblx0XHQvL1hOT1IgZ2F0ZVxuXHRcdG9yKFxuXHRcdFx0YW5kKGlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpLFxuXHRcdFx0YW5kKCFpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KVxuXHRcdCksXG5cdFx0b3Iobm90KGlzQ29uc3RhbnQoY3JlYXRlVmlzaWJpbGl0eSkpLCBjcmVhdGVWaXNpYmlsaXR5KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIG5vbi1DcmVhdGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gYWN0aW9uVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIG5vbi1DcmVhdGUgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRUZW1wbGF0aW5nKGFjdGlvblZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBvcihub3QoaXNDb25zdGFudChhY3Rpb25WaXNpYmlsaXR5KSksIGFjdGlvblZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBpc0ZvclBhc3RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZSxcblx0aXNGb3JQYXN0ZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPSBpc0ZvckNyZWF0aW9uUm93XG5cdFx0PyBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkNyZWF0ZUhpZGRlblwiLCBmYWxzZSlcblx0XHQ6IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5jcmVhdGU7XG5cdGNvbnN0IG5ld0FjdGlvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQubmV3QWN0aW9uO1xuXHQvL0NyZWF0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgLSBJZiB0aGUgY3JlYXRpb24gbW9kZSBpcyBleHRlcm5hbFxuXHQvLyAgICAgIC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IGFuZCBjcmVhdGUgaXMgbm90IGhpZGRlblxuXHQvL1x0XHQtIE90aGVyd2lzZSB0aGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdC8vXHQgLSBPdGhlcndpc2Vcblx0Ly9cdFx0LSBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHZhbGlkIHRoZW4gY3JlYXRlIGJ1dHRvbiBpc24ndCB2aXNpYmxlXG5cdC8vXHRcdFx0LSBubyBuZXdBY3Rpb24gYXZhaWxhYmxlXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9uc2l2ZSB0YWJsZSB0eXBlLCB3aXRoIHRoZSBwYXJhbWV0ZXIgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSB0byB0cnVlIHdoaWxlIG5vdCBpbiBjcmVhdGUgbW9kZVxuXHQvLyAgICAgICAgICBcdC0gd2hlbiBjYWxjdWxhdGluZyBwYXN0ZSBidXR0b24gdmlzaWJpbGl0eSwgIHdlIGZvcmNlIHRoZSBjb25kaXRpb24gdG8gZmFsc2Ugd2l0aCB0aGUgaXNGb3JQYXN0ZSBwcm9wZXJ0eVxuXHQvLyAgIC0gT3RoZXJ3aXNlXG5cdC8vIFx0IFx0LSBJZiB3ZSdyZSBvbiB0aGUgbGlzdCByZXBvcnQgLT5cblx0Ly8gXHQgXHRcdC0gSWYgVUkuQ3JlYXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly8gXHQgXHRcdC0gT3RoZXJ3aXNlLCBjcmVhdGUgaXMgdmlzaWJsZVxuXHQvLyBcdCBcdC0gT3RoZXJ3aXNlXG5cdC8vIFx0ICBcdCAtIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIFVJLklzRWRpdGFibGVcblx0cmV0dXJuIGlmRWxzZShcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsLFxuXHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVUkuSXNFZGl0YWJsZSkpLFxuXHRcdGlmRWxzZShcblx0XHRcdG9yKFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChuZXdBY3Rpb24/LmF2YWlsYWJsZSksIGVxdWFsKG5ld0FjdGlvbj8uYXZhaWxhYmxlLCBmYWxzZSkpLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0luc2VydGFibGUpLCBlcXVhbChpc0luc2VydGFibGUsIGZhbHNlKSwgIW5ld0FjdGlvbiksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzQ3JlYXRlSGlkZGVuKSwgZXF1YWwoaXNDcmVhdGVIaWRkZW4sIHRydWUpKSxcblx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzLFxuXHRcdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0Py50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gZmFsc2UsXG5cdFx0XHRcdFx0XHRcdG5vdChpc0ZvclBhc3RlKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRVSS5Jc0NyZWF0ZU1vZGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRmYWxzZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdG9yKG5vdChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihpc0NyZWF0ZUhpZGRlbikpLCBub3QoaXNDcmVhdGVIaWRkZW4pKSxcblx0XHRcdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGNvbnN0IHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbjtcblxuXHQvL0RlbGV0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgUHJlcmVxdWlzaXRlczpcblx0Ly9cdCAtIElmIHdlJ3JlIG5vdCBvbiBBTFBcblx0Ly8gICAtIElmIHJlc3RyaWN0aW9ucyBvbiBkZWxldGFibGUgc2V0IHRvIGZhbHNlIC0+IG5vdCB2aXNpYmxlXG5cdC8vICAgLSBPdGhlcndpc2Vcblx0Ly9cdFx0XHQtIElmIFVJLkRlbGV0ZUhpZGRlbiBpcyB0cnVlIC0+IG5vdCB2aXNpYmxlXG5cdC8vXHRcdFx0LSBPdGhlcndpc2Vcblx0Ly8gXHQgXHRcdFx0LSBJZiB3ZSdyZSBvbiBPUCAtPiBkZXBlbmRpbmcgaWYgVUkgaXMgZWRpdGFibGUgYW5kIHJlc3RyaWN0aW9ucyBvbiBkZWxldGFibGVcblx0Ly9cdFx0XHRcdC0gT3RoZXJ3aXNlXG5cdC8vXHRcdFx0XHQgXHQtIElmIFVJLkRlbGV0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vXHQgXHQgXHRcdCBcdC0gT3RoZXJ3aXNlLCBkZWxldGUgaXMgdmlzaWJsZVxuXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSxcblx0XHRmYWxzZSxcblx0XHRpZkVsc2UoXG5cdFx0XHRhbmQoaXNDb25zdGFudChwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBmYWxzZSkpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzRGVsZXRlSGlkZGVuKSwgZXF1YWwoaXNEZWxldGVIaWRkZW4sIGNvbnN0YW50KHRydWUpKSksXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpLFxuXHRcdFx0XHRcdG5vdChhbmQoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNEZWxldGVIaWRkZW4pLCBpc0RlbGV0ZUhpZGRlbikpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY3V0VmlzaWJpbGl0eVxuICogQHBhcmFtIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjdXRWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly9JZiBpdCBpc24ndCBkZWFjdGl2YXRlZCB3aXRoaW4gdGhlIG1hbmlmZXN0IGFuZCB3ZSdyZSBvcGVyYXRpbmcgaW4gT1AvYmxvY2tzIG91dHNpZGUgRmlvcmkgZWxlbWVudHMgdGVtcGxhdGVzLFxuXHQvL3RoZSB0cmVlVGFibGUncyB2aXNpYmlsaXR5IHJlbGllcyBvbiB0aGUgY3V0dmlzaWJpbGl0eSxcblx0Ly93aGlsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgb3RoZXIgdGFibGUgaXMgZGV0ZXJtaW5lZCBieSBpbnNlcnRhYmxlIHJlc3RyaWN0aW9ucyBhbmQgY3JlYXRlIHZpc2liaWxpdHkuXG5cdHJldHVybiBhbmQoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdFx0XHQ/IGN1dFZpc2liaWxpdHlcblx0XHRcdDogYW5kKFxuXHRcdFx0XHRcdGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb24sXG5cdFx0XHRcdFx0bm90RXF1YWwoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5lbmFibGVQYXN0ZSwgZmFsc2UpLFxuXHRcdFx0XHRcdCFbVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2VdLmluY2x1ZGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpXG5cdFx0XHQgICksXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzVXBkYXRlSGlkZGVuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLnVwZGF0ZSxcblx0XHRwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb24sXG5cdFx0Yk1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5lbmFibGVNYXNzRWRpdCB8fCBmYWxzZTtcblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2Vcblx0XHRcdD8gVUkuSXNFZGl0YWJsZVxuXHRcdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDtcblx0Ly9NYXNzRWRpdCBpcyB2aXNpYmxlXG5cdC8vIElmXG5cdC8vXHRcdC0gdGhlcmUgaXMgbm8gc3RhdGljIHJlc3RyaWN0aW9ucyBzZXQgdG8gZmFsc2Vcblx0Ly9cdFx0LSBhbmQgZW5hYmxlTWFzc0VkaXQgaXMgbm90IHNldCB0byBmYWxzZSBpbnRvIHRoZSBtYW5pZmVzdFxuXHQvL1x0XHQtIGFuZCB0aGUgc2VsZWN0aW9uTW9kZSBpcyByZWxldmFudFxuXHQvL1x0VGhlbiBNYXNzRWRpdCBpcyBhbHdheXMgdmlzaWJsZSBpbiBMUiBvciBkeW5hbWljYWxseSB2aXNpYmxlIGluIE9QIGFjY29yZGluZyB0byB1aT5FZGl0YWJsZSBhbmQgaGlkZGVuQW5ub3RhdGlvblxuXHQvLyAgQnV0dG9uIGlzIGhpZGRlbiBmb3IgYWxsIG90aGVyIGNhc2VzXG5cdHJldHVybiBhbmQoXG5cdFx0bm90KGFuZChpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSkpLFxuXHRcdGJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0LFxuXHRcdHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0bm90KGlzVXBkYXRlSGlkZGVuKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGlvblJvd1Zpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3ROYXYgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxhc3ROYXYpICYmIGxhc3ROYXYucGFydG5lcjtcblx0XHRcdFx0aWYgKHBhcnRuZXIpIHtcblx0XHRcdFx0XHRwYXRoID0gYCR7cGFydG5lcn0vJHtwYXRofWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9XG5cdFx0cmVzdHJpY3Rpb25zSW5zZXJ0YWJsZS5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0PyBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQgIH0pXG5cdFx0XHQ6IHJlc3RyaWN0aW9uc0luc2VydGFibGU7XG5cblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGlvblJvd1Zpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRhYmxlLFxuXHRcdG9yKFxuXHRcdFx0IXN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSxcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgXCJpbnRlcm5hbFwiKV0sIHRhYmxlRm9ybWF0dGVycy52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY29uZGl0aW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHQvLyBmb3IgSW5saW5lIGNyZWF0aW9uIHJvd3MgY3JlYXRlIGNhbiBiZSBoaWRkZW4gdmlhIG1hbmlmZXN0IGFuZCB0aGlzIHNob3VsZCBub3QgaW1wYWN0IGl0cyBlbmFibGVtZW50XG5cdFx0Y29uZGl0aW9ucy5wdXNoKGFuZChub3Qoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmNyZWF0ZSksIFVJLklzRWRpdGFibGUpKTtcblx0fSBlbHNlIHtcblx0XHRjb25kaXRpb25zLnB1c2goY3JlYXRlVmlzaWJpbGl0eSk7XG5cdH1cblxuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgQ29sbGVjdGlvblR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGg8RW50aXR5U2V0PihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNvbGxlY3Rpb25QYXRoKS50YXJnZXQ7XG5cdGNvbmRpdGlvbnMucHVzaChcblx0XHRvcihcblx0XHRcdGlzRW50aXR5U2V0KENvbGxlY3Rpb25UeXBlKSxcblx0XHRcdGFuZChpc0luc2VydGFibGUsIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBVSS5Jc0VkaXRhYmxlKSlcblx0XHQpXG5cdCk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUsIHRoZSBjcmVhdGUgYnV0dG9uIHNoYWxsIGJlIGFjdGl2ZSBvbmx5IGlmIDAgb3IgMSBpdGVtcyBhcmUgc2VsZWN0ZWQgKHBhcmVudCBub2RlKVxuXHRcdGNvbmRpdGlvbnMucHVzaChsZXNzT3JFcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSk7XG5cblx0XHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHQvLyBUaGVyZSdzIGEgY3JlYXRlRW5hYmxlbWVudCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWRkaXRpb25uYWwgY29uZGl0aW9uc1xuXHRcdFx0Ly8gVGhlc2UgY29uZGl0aW9ucyB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRcdGNvbmRpdGlvbnMucHVzaChub3RFcXVhbChwYXRoSW5Nb2RlbChcImNyZWF0ZUVuYWJsZW1lbnQvQ3JlYXRlXCIsIFwiaW50ZXJuYWxcIiksIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFuZCguLi5jb25kaXRpb25zKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBkZWxldGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGRlbGV0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gVGhlIGZvbGxvd2luZyBjb250ZXh0cyBhcmUgZmlsbGVkIGF0IHJ1bnRpbWUgd2hlbiBhIHVzZXIgc2VsZWN0cyBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIGEgbGlzdC5cblx0Ly8gQ2hlY2tzIGFyZSB0aGVuIG1hZGUgaW4gZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMgaW4gZmlsZSBEZWxldGVIZWxwZXIgdG8gc2VlIGlmIHRoZXJlXG5cdC8vIGFyZSBpdGVtcyB0aGF0IGNhbiBiZSBkZWxldGVkLCB0aHVzIHRoZSBkZWxldGUgYnV0dG9uIHNob3VsZCBiZSBlbmFibGVkIGluIHRoZXNlIGNhc2VzLlxuXHRjb25zdCBjb250ZXh0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRjb25zdCBkZWxldGFibGVDb250ZXh0cyA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkZWxldGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCB1blNhdmVkQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwidW5TYXZlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblxuXHQvLyBcIlVucmVzb2x2YWJsZVwiIGluIG5hdmlnYXRpb25FeHByZXNzaW9uIGlzIGludGVycHJldGVkIHRvIG1lYW4gdGhhdCB0aGVyZSBhcmUgbm8gbmF2aWdhdGlvbkV4cHJlc3Npb25zXG5cdC8vIGRlZmluZWQuXG5cdC8vIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb24gaXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCBjb21lc1xuXHQvLyBmcm9tIHRoZSBEZWxldGUgcmVzdHJpY3Rpb25zIGRlZmluZWQgaW4gTmF2aWdhdGlvblJlc3RyaWN0aW9ucyBmb3IgdGhpcyBlbnRpdHkuIEluIG9yZGVyIHRvXG5cdC8vIGJlIGRlbGV0YWJsZSwgdGhlIGl0ZW0gbXVzdCBhbHNvIGJlIGFsbG93ZWQgdG8gYmUgZGVsZXRhYmxlIGFjY29yZGluZyB0byB0aGUgRGVsZXRlIFJlc3RyaWN0aW9uc1xuXHQvLyBvbiB0aGUgZW50aXR5IGl0c2VsZi5cblx0cmV0dXJuIGFuZChcblx0XHRkZWxldGVWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uXG5cdFx0KSxcblx0XHRvcihcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkZWxldGFibGVDb250ZXh0cywgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgodW5TYXZlZENvbnRleHRzLCB0cnVlKSwgMClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY3JlYXRlRW5hYmxlbWVudFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVFbmFibGVtZW50KFxuXHRwYXN0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y3JlYXRlRW5hYmxlbWVudDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdHBhc3RlVmlzaWJpbGl0eSxcblx0XHRcdG9yKFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdFx0KSxcblx0XHRcdGFuZChcblx0XHRcdFx0ZXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKFwicGFzdGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCB0cnVlKSwgMSksXG5cdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHRcdD8gbGVzc09yRXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSlcblx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwicGFzdGVBdXRob3JpemVkXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gYW5kKHBhc3RlVmlzaWJpbGl0eSwgY3JlYXRlRW5hYmxlbWVudCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBtYXNzRWRpdFZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdG1hc3NFZGl0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPVxuXHRcdCFpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dFByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwidXBkYXRhYmxlQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwocGF0aEluTW9kZWwobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSwgMSk7XG5cdGNvbnN0IG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChsZW5ndGgocGF0aEluTW9kZWwodXBkYXRhYmxlQ29udGV4dFByb3BlcnR5LCBcImludGVybmFsXCIpKSwgMSk7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBiRGlzcGxheU1vZGUgPSBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYmluZGluZyBpbiBjYXNlXG5cdC8vIDEuIFVwZGF0ZSBpcyBkZXBlbmRlbnQgb24gY3VycmVudCBlbnRpdHkgcHJvcGVydHkgKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgaXMgdHJ1ZSkuXG5cdC8vIDIuIFRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWQobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQuXG5cdC8vICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgcnVudGltZS5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBpZkVsc2UoXG5cdFx0b3IoYW5kKGJEaXNwbGF5TW9kZSwgYklzRHJhZnRTdXBwb3J0ZWQpLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzKSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzKVxuXHQpO1xuXG5cdHJldHVybiBhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBpZkVsc2UoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSwgcnVudGltZUJpbmRpbmcsIGFuZChydW50aW1lQmluZGluZywgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1dEVuYWJsZW1lbnQoXG5cdGN1dFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gZXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSk7XG5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBlcXVhbChsZW5ndGgocGF0aEluTW9kZWwoXCJjdXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksIDEpKTtcblx0cmV0dXJuIGFuZChcblx0XHRjdXRWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uXG5cdFx0KSxcblx0XHRydW50aW1lQmluZGluZ1xuXHQpO1xufVxuXG4vKipcbiAqIFRlbGxzIGlmIHRoZSB0YWJsZSBpbiB0ZW1wbGF0ZSBpcyBpbiBkaXNwbGF5IG1vZGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjaGVja011bHRpcGxlVmlzdWFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YWJsZSBpcyBpbiBkaXNwbGF5IG1vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sIGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uID0gZmFsc2UpOiBib29sZWFuIHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQoY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0VPLE1BQU1BLGtCQUFrQixHQUFHO0lBQ2pDQyxHQUFHLEVBQUUscUJBQXFCO0lBQzFCQyxNQUFNLEVBQUUsd0JBQXdCO0lBQ2hDQyxNQUFNLEVBQUUsd0JBQXdCO0lBQ2hDQyxXQUFXLEVBQUUsNkJBQTZCO0lBQzFDQyxLQUFLLEVBQUUsdUJBQXVCO0lBQzlCQyxRQUFRLEVBQUUsMEJBQTBCO0lBQ3BDQyxRQUFRLEVBQUU7RUFDWCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQTtFQVFPLFNBQVNDLDhCQUE4QixDQUM3Q0MsZ0JBQXlELEVBQ3pEQyxZQUEwQixFQUMxQkMsMEJBQXFE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