@sapui5/sap.fe.core 1.135.0 → 1.136.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 (217) 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 +3 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +3 -1
  5. package/src/sap/fe/core/AppComponent.js +6 -4
  6. package/src/sap/fe/core/AppComponent.ts +3 -1
  7. package/src/sap/fe/core/AppStateHandler.js +8 -6
  8. package/src/sap/fe/core/AppStateHandler.ts +7 -5
  9. package/src/sap/fe/core/CommonUtils.js +4 -1
  10. package/src/sap/fe/core/CommonUtils.ts +12 -2
  11. package/src/sap/fe/core/ExtensionAPI.js +5 -3
  12. package/src/sap/fe/core/ExtensionAPI.ts +4 -2
  13. package/src/sap/fe/core/PageController.js +13 -1
  14. package/src/sap/fe/core/PageController.ts +13 -0
  15. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
  16. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
  17. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
  18. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
  19. package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
  20. package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
  21. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
  22. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
  23. package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
  24. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
  27. package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
  28. package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
  29. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
  30. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
  31. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
  32. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
  33. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
  34. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
  35. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
  36. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
  37. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
  39. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
  40. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
  45. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
  47. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
  48. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
  49. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
  50. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
  51. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
  52. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
  53. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
  54. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
  55. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
  56. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
  57. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
  58. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
  59. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  60. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
  61. package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
  62. package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
  63. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
  64. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
  65. package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
  66. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
  67. package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
  68. package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
  69. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
  70. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
  71. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
  72. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
  73. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
  74. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
  75. package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
  76. package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
  77. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
  78. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
  79. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
  80. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
  81. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
  82. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
  83. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
  84. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
  85. package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
  86. package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
  87. package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
  88. package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
  89. package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
  90. package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
  91. package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
  92. package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
  93. package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
  94. package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
  95. package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
  96. package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
  97. package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
  98. package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
  99. package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
  100. package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
  101. package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
  102. package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
  103. package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
  104. package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
  105. package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
  106. package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
  107. package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
  108. package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
  109. package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
  110. package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
  111. package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
  112. package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
  113. package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
  114. package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
  115. package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
  116. package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
  117. package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
  118. package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
  119. package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
  120. package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
  121. package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
  122. package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
  123. package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
  124. package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
  125. package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
  126. package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
  127. package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
  128. package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
  129. package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
  130. package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
  131. package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
  132. package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
  133. package/src/sap/fe/core/fpm/manifest.json +1 -1
  134. package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
  135. package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
  136. package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
  137. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
  138. package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
  139. package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
  140. package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
  141. package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
  142. package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
  143. package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
  144. package/src/sap/fe/core/helpers/WebSocket.js +10 -1
  145. package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
  146. package/src/sap/fe/core/library.js +1 -1
  147. package/src/sap/fe/core/messagebundle.properties +41 -2
  148. package/src/sap/fe/core/messagebundle_ar.properties +23 -2
  149. package/src/sap/fe/core/messagebundle_bg.properties +23 -2
  150. package/src/sap/fe/core/messagebundle_ca.properties +21 -0
  151. package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
  152. package/src/sap/fe/core/messagebundle_cs.properties +21 -0
  153. package/src/sap/fe/core/messagebundle_cy.properties +21 -0
  154. package/src/sap/fe/core/messagebundle_da.properties +23 -2
  155. package/src/sap/fe/core/messagebundle_de.properties +23 -2
  156. package/src/sap/fe/core/messagebundle_el.properties +21 -0
  157. package/src/sap/fe/core/messagebundle_en.properties +23 -2
  158. package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
  159. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
  160. package/src/sap/fe/core/messagebundle_es.properties +21 -0
  161. package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
  162. package/src/sap/fe/core/messagebundle_et.properties +21 -0
  163. package/src/sap/fe/core/messagebundle_fi.properties +21 -0
  164. package/src/sap/fe/core/messagebundle_fr.properties +22 -1
  165. package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
  166. package/src/sap/fe/core/messagebundle_hi.properties +22 -1
  167. package/src/sap/fe/core/messagebundle_hr.properties +24 -3
  168. package/src/sap/fe/core/messagebundle_hu.properties +21 -0
  169. package/src/sap/fe/core/messagebundle_id.properties +21 -0
  170. package/src/sap/fe/core/messagebundle_it.properties +23 -2
  171. package/src/sap/fe/core/messagebundle_iw.properties +21 -0
  172. package/src/sap/fe/core/messagebundle_ja.properties +21 -0
  173. package/src/sap/fe/core/messagebundle_kk.properties +21 -0
  174. package/src/sap/fe/core/messagebundle_ko.properties +21 -0
  175. package/src/sap/fe/core/messagebundle_lt.properties +21 -0
  176. package/src/sap/fe/core/messagebundle_lv.properties +23 -2
  177. package/src/sap/fe/core/messagebundle_mk.properties +21 -0
  178. package/src/sap/fe/core/messagebundle_ms.properties +22 -1
  179. package/src/sap/fe/core/messagebundle_nl.properties +21 -0
  180. package/src/sap/fe/core/messagebundle_no.properties +21 -0
  181. package/src/sap/fe/core/messagebundle_pl.properties +23 -2
  182. package/src/sap/fe/core/messagebundle_pt.properties +23 -2
  183. package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
  184. package/src/sap/fe/core/messagebundle_ro.properties +23 -2
  185. package/src/sap/fe/core/messagebundle_ru.properties +22 -1
  186. package/src/sap/fe/core/messagebundle_sh.properties +23 -2
  187. package/src/sap/fe/core/messagebundle_sk.properties +21 -0
  188. package/src/sap/fe/core/messagebundle_sl.properties +23 -2
  189. package/src/sap/fe/core/messagebundle_sr.properties +23 -2
  190. package/src/sap/fe/core/messagebundle_sv.properties +21 -0
  191. package/src/sap/fe/core/messagebundle_th.properties +21 -0
  192. package/src/sap/fe/core/messagebundle_tr.properties +21 -0
  193. package/src/sap/fe/core/messagebundle_uk.properties +23 -2
  194. package/src/sap/fe/core/messagebundle_vi.properties +23 -2
  195. package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
  196. package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
  197. package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
  198. package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
  199. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  200. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  201. package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
  202. package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
  203. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
  204. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
  205. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
  206. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
  207. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
  208. package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
  209. package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
  210. package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
  211. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
  212. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
  213. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  214. package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
  215. package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
  216. package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
  217. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
@@ -31,7 +31,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
31
31
  var getDesignTimeMetadataSettingsForHeaderFacet = HeaderFacet.getDesignTimeMetadataSettingsForHeaderFacet;
32
32
  var removeDuplicateActions = Action.removeDuplicateActions;
33
33
  var prepareMenuActions = Action.prepareMenuActions;
34
+ var isMenuAIOperation = Action.isMenuAIOperation;
34
35
  var isActionNavigable = Action.isActionNavigable;
36
+ var isActionAIOperation = Action.isActionAIOperation;
35
37
  var getVisibilityEnablementMenuActions = Action.getVisibilityEnablementMenuActions;
36
38
  var getSemanticObjectMapping = Action.getSemanticObjectMapping;
37
39
  var getMatchingManifestAction = Action.getMatchingManifestAction;
@@ -526,6 +528,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
526
528
  key: KeyHelper.generateKeyFromDataField(dataField),
527
529
  id: getFormID(facetDefinition, dataField),
528
530
  visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
531
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined,
529
532
  menu: dataField.Actions.map(action => {
530
533
  const formManifestMenuActionsConfiguration = converterContext.getManifestControlConfiguration(referenceTarget).actions;
531
534
  return getDataFieldAnnotationAction(action, facetDefinition, converterContext, formManifestMenuActionsConfiguration, navigationPropertyPath);
@@ -551,10 +554,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
551
554
  text: dataField.Label?.toString(),
552
555
  annotationPath: "",
553
556
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
554
- binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
557
+ binding: navigationPropertyPath && !dataField.Inline ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
558
+ // Inline Actions don't need the binding as they are inside the Form
555
559
  visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
556
560
  requiresDialog: isActionWithDialog(dataField),
557
561
  buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
562
+ isAIOperation: isActionAIOperation(dataField) === true || undefined,
558
563
  press: compileExpression(fn("invokeAction", [dataField.Action, {
559
564
  contexts: fn("getBindingContext", [], pathInModel("", "$source")),
560
565
  invocationGrouping: dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated",
@@ -680,4 +685,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
680
685
  }
681
686
  return _exports;
682
687
  }, false);
683
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsIl9leHBvcnRzIiwidmlzdWFsaXphdGlvblRlcm1zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldHNUb0NyZWF0ZSIsInJlZHVjZSIsImZhY2V0RGVmaW5pdGlvbiIsIiRUeXBlIiwicHVzaCIsIkZhY2V0cyIsImZpbmQiLCJmYWNldFR5cGUiLCJzcGxpY2UiLCJsZW5ndGgiLCJtYXAiLCJmYWNldCIsImNyZWF0ZVN1YlNlY3Rpb24iLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwiYUN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJ0ZW1wbGF0ZUVkaXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uSUQiLCJnZXRDdXN0b21TdWJTZWN0aW9uSUQiLCJzdWJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsInR5cGUiLCJYTUxGcmFnbWVudCIsInRlbXBsYXRlIiwidmlzaWJsZSIsImxldmVsIiwic2lkZUNvbnRlbnQiLCJ1bmRlZmluZWQiLCJzdGFzaGVkIiwiZmxleFNldHRpbmdzIiwiYWN0aW9ucyIsIm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZCIsImdldFN1YlNlY3Rpb25LZXkiLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsImFkZEZvcm1NZW51QWN0aW9ucyIsInJldmVyc2VJbmRleCIsInN0YXJ0c1dpdGgiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsInBvc2l0aW9uIiwibWVudSIsImZvcm1BY3Rpb25zIiwiZ2V0Rm9ybUFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwibWFuaWZlc3RBY3Rpb24iLCJmb3JtQWxsQWN0aW9ucyIsInByZXBhcmVNZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9uIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJkZWZhdWx0QWN0aW9uIiwiRGVmYXVsdCIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiZmlsdGVyIiwic3ViRmFjZXREZWZpbml0aW9uIiwiaXNSZWZlcmVuY2VGYWNldCIsImFjdGlvblJlZHVjZXIiLCJyZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsImVtcGhhc2l6ZWQiLCJidXR0b25UeXBlQ29uZGl0aW9uIiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIlRyYW5zcGFyZW50IiwiaGFzU2luZ2xlQ29udGVudCIsImdldFN1YlNlY3Rpb25JRCIsImhpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlRXhwcmVzc2lvbiIsIm5vdCIsInBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImlzQ29uc3RhbnQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlVua25vd24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJ1bnN1cHBvcnRlZFRleHQiLCJmYWNldHMiLCJ2aXN1YWxpemF0aW9uRmFjZXRzIiwiaW5kZXgiLCJfcmVmIiwiVGFyZ2V0IiwiJHRhcmdldCIsImluY2x1ZGVzIiwidGVybSIsIm5vblZpc3VhbGl6YXRpb25GYWNldHMiLCJ2aXN1YWxpemF0aW9uIiwidmlzdWFsaXphdGlvbkNvbnRlbnQiLCJmb3JtQ29udGVudCIsIm1peGVkQ29udGVudCIsIkxvZyIsIndhcm5pbmciLCJmYWtlRm9ybUZhY2V0IiwiX3JlZjIiLCJtaXhlZFN1YlNlY3Rpb24iLCJNaXhlZCIsImNvbnRlbnQiLCJmYWNldEFjdGlvbnMiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvblRpdGxlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwiaXNQYXJ0T2ZQcmV2aWV3IiwiUGFydE9mUHJldmlldyIsInZhbHVlT2YiLCJzaG93U3ViU2VjdGlvblRpdGxlIiwiZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZSIsImRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlIiwiYW5kIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJOb3RlcyIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJvciIsIm5vdEVxdWFsIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsIkRhdGEiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwicXVhbGlmaWVyIiwiZGF0YUZpZWxkIiwiUmVxdWlyZXNDb250ZXh0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0Rm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiQWN0aW9ucyIsImZvcm1NYW5pZmVzdE1lbnVBY3Rpb25zQ29uZmlndXJhdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiQWN0aW9uVGFyZ2V0IiwiYmluZGluZyIsInJlcXVpcmVzRGlhbG9nIiwiaXNBY3Rpb25XaXRoRGlhbG9nIiwiY29udGV4dHMiLCJwYXRoSW5Nb2RlbCIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwibW9kZWwiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZmVGcmFtZXdvcmtDYWxsIiwicmVmIiwiaXNEaWFsb2ciLCJhY3Rpb25EZWZpbml0aW9uIiwiYkNyaXRpY2FsIiwiQ29tbW9uIiwiSXNBY3Rpb25Dcml0aWNhbCIsInBhcmFtZXRlcnMiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25LZXkiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9uIiwibWFuaWZlc3RTdWJTZWN0aW9uIiwiZ2V0U2lkZUNvbnRlbnRJRCIsImVxdWFsU3BsaXQiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzVmlzaWJsZSIsImlzRHluYW1pY0V4cHJlc3Npb24iLCJpbmRleE9mIiwic3ViU2VjdGlvbkRlZmluaXRpb24iLCJlbmFibGVMYXp5TG9hZGluZyIsImNvbXBvbmVudE5hbWUiLCJzZXR0aW5ncyIsImFwcGx5U3RhdGUiLCJyZXRyaWV2ZVN0YXRlIiwibmFtZSIsImVtYmVkZGVkQ29tcG9uZW50IiwiRW1iZWRkZWRDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3ViU2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdEVtcGhhc2l6ZWQsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0ZXF1YWwsXG5cdGZuLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZWYsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0QnV0dG9uVHlwZSxcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0Z2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0Z2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHByZXBhcmVNZW51QWN0aW9ucyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0LCBGbGV4U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQge1xuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgTWFuaWZlc3RBY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGlzQWN0aW9uV2l0aERpYWxvZyB9IGZyb20gXCIuLi8uLi9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDb25maWd1cmFibGVSZWNvcmQsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU3ViU2VjdGlvbklELCBnZXRGb3JtSUQsIGdldFNpZGVDb250ZW50SUQsIGdldFN1YlNlY3Rpb25JRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRGb3JtQWN0aW9ucywgZ2V0Rm9ybUhpZGRlbkFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIGlzUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcblxuZXhwb3J0IGVudW0gU3ViU2VjdGlvblR5cGUge1xuXHRVbmtub3duID0gXCJVbmtub3duXCIsIC8vIERlZmF1bHQgVHlwZVxuXHRGb3JtID0gXCJGb3JtXCIsXG5cdE5vdGVzID0gXCJOb3Rlc1wiLFxuXHREYXRhVmlzdWFsaXphdGlvbiA9IFwiRGF0YVZpc3VhbGl6YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCIsXG5cdFBsYWNlaG9sZGVyID0gXCJQbGFjZWhvbGRlclwiLFxuXHRNaXhlZCA9IFwiTWl4ZWRcIixcblx0RW1iZWRkZWRDb21wb25lbnQgPSBcIkVtYmVkZGVkQ29tcG9uZW50XCJcbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gPVxuXHR8IFVuc3VwcG9ydGVkU3ViU2VjdGlvblxuXHR8IEZvcm1TdWJTZWN0aW9uXG5cdHwgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uXG5cdHwgQ29udGFjdFN1YlNlY3Rpb25cblx0fCBYTUxGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvblxuXHR8IE1peGVkU3ViU2VjdGlvblxuXHR8IFJldXNlQ29tcG9uZW50U3ViU2VjdGlvblxuXHR8IE5vdGVTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZTtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlzVmlzaWJpbGl0eUR5bmFtaWM/OiBib29sZWFuIHwgXCJcIjtcblx0ZmxleFNldHRpbmdzPzogRmxleFNldHRpbmdzO1xuXHRzdGFzaGVkPzogYm9vbGVhbjtcblx0bGV2ZWw6IG51bWJlcjtcblx0Y29udGVudD86IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblx0c2lkZUNvbnRlbnQ/OiBTaWRlQ29udGVudERlZjtcblx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBib29sZWFuO1xuXHRjbGFzcz86IHN0cmluZztcblx0YXBwbHlTdGF0ZT86IHN0cmluZztcblx0cmV0cmlldmVTdGF0ZT86IHN0cmluZztcbn07XG5cbnR5cGUgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd247XG5cdHRleHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdGlzUGFydE9mUHJldmlldz86IGJvb2xlYW47XG5cdHNob3dTdWJTZWN0aW9uVGl0bGU6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZGF0YVZpc3VhbGl6YXRpb25UaXRsZVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRkYXRhVmlzdWFsaXphdGlvbk9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbnR5cGUgQ29udGFjdFN1YlNlY3Rpb24gPSBVbnN1cHBvcnRlZFN1YlNlY3Rpb247XG50eXBlIE5vdGVTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk5vdGVzO1xufTtcbnR5cGUgWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIFJldXNlQ29tcG9uZW50U3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5FbWJlZGRlZENvbXBvbmVudDtcblx0Y29tcG9uZW50TmFtZTogc3RyaW5nO1xuXHRzZXR0aW5nczogc3RyaW5nO1xufTtcblxudHlwZSBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgTWl4ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk1peGVkO1xuXHRjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtO1xuXHRmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb247XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0dGl0bGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzaG93VGl0bGU/OiBib29sZWFuO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcblx0YXBwbHlTdGF0ZT86IHN0cmluZztcblx0cmV0cmlldmVTdGF0ZT86IHN0cmluZztcbn07XG5cbnR5cGUgU2lkZUNvbnRlbnREZWYgPSB7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0c2lkZUNvbnRlbnRGYWxsRG93bj86IHN0cmluZztcblx0Y29udGFpbmVyUXVlcnk/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRlcXVhbFNwbGl0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU2VjdGlvbj4gJiB7XG5cdG9uU2VjdGlvbkxvYWRlZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cbmNvbnN0IHZpc3VhbGl6YXRpb25UZXJtczogc3RyaW5nW10gPSBbXG5cdFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtLFxuXHRVSUFubm90YXRpb25UZXJtcy5DaGFydCxcblx0VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCxcblx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXTtcblxuLyoqXG4gKiBDcmVhdGUgc3Vic2VjdGlvbnMgYmFzZWQgb24gZmFjZXQgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBmYWNldENvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBmYWNldHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvbiBUcnVlIGlmIGhlYWRlciBzZWN0aW9uIGlzIGdlbmVyYXRlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICogQHBhcmFtIHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIElmIHRoZSBvbmx5IGZpZWxkIHdpdGhpbiBhIGZvcm0gY29udGFpbmVyIGlzIGEgdGV4dC1hcmVhIGZpZWxkLCB0aGUgbGFiZWwgaXMgaGlkZGVuXG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbnMoXG5cdGZhY2V0Q29sbGVjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW4sXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdC8vIEZpcnN0IHdlIGRldGVybWluZSB3aGljaCBzdWIgc2VjdGlvbiB3ZSBuZWVkIHRvIGNyZWF0ZVxuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGZhY2V0Q29sbGVjdGlvbi5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sIGZhY2V0RGVmaW5pdGlvbikgPT4ge1xuXHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRcdC8vIFRPRE8gSWYgdGhlIENvbGxlY3Rpb24gRmFjZXQgaGFzIGEgY2hpbGQgb2YgdHlwZSBDb2xsZWN0aW9uIEZhY2V0IHdlIGJyaW5nIHRoZW0gdXAgb25lIGxldmVsIChGb3JtICsgVGFibGUgdXNlIGNhc2UpID9cblx0XHRcdFx0Ly8gZmlyc3QgY2FzZSBmYWNldCBDb2xsZWN0aW9uIGlzIGNvbWJpbmF0aW9uIG9mIGNvbGxlY3Rpb24gYW5kIHJlZmVyZW5jZSBmYWNldCBvciBub3QgYWxsIGZhY2V0cyBhcmUgcmVmZXJlbmNlIGZhY2V0cy5cblx0XHRcdFx0aWYgKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmluZCgoZmFjZXRUeXBlKSA9PiBmYWNldFR5cGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkpIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5zcGxpY2UoZmFjZXRzVG9DcmVhdGUubGVuZ3RoLCAwLCAuLi5mYWNldERlZmluaXRpb24uRmFjZXRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0OlxuXHRcdFx0XHQvLyBOb3Qgc3VwcG9ydGVkXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHQvLyBUaGVuIHdlIGNyZWF0ZSB0aGUgYWN0dWFsIHN1YnNlY3Rpb25zXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGZhY2V0KSA9PlxuXHRcdGNyZWF0ZVN1YlNlY3Rpb24oXG5cdFx0XHRmYWNldCxcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdDAsXG5cdFx0XHQhKGZhY2V0IGFzIENvbGxlY3Rpb25GYWNldCk/LkZhY2V0cz8ubGVuZ3RoLFxuXHRcdFx0aXNIZWFkZXJTZWN0aW9uLFxuXHRcdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXNcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzdWJzZWN0aW9ucyBiYXNlZCBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpXG5cdCk7XG5cdGNvbnN0IGFDdXN0b21IZWFkZXJGYWNldHM6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdID0gW107XG5cdE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlckZhY2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0YUN1c3RvbUhlYWRlckZhY2V0cy5wdXNoKGN1c3RvbUhlYWRlckZhY2V0c1trZXldKTtcblx0XHRyZXR1cm4gYUN1c3RvbUhlYWRlckZhY2V0cztcblx0fSk7XG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gYUN1c3RvbUhlYWRlckZhY2V0cy5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSwgY3VzdG9tSGVhZGVyRmFjZXQpID0+IHtcblx0XHRpZiAoY3VzdG9tSGVhZGVyRmFjZXQudGVtcGxhdGVFZGl0KSB7XG5cdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGN1c3RvbUhlYWRlckZhY2V0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoY3VzdG9tSGVhZGVyRmFjZXQpID0+IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldCkpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIGEgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqIEByZXR1cm5zIEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBnZXRDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fSxcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGZhbHNlXG5cdH07XG5cdHJldHVybiBzdWJTZWN0aW9uO1xufVxuXG5jb25zdCBnZXRTdWJTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcbi8qKlxuICogQWRkcyBGb3JtIG1lbnUgYWN0aW9uIHRvIGFsbCBmb3JtIGFjdGlvbnMsIHJlbW92ZXMgZHVwbGljYXRlIGFjdGlvbnMgYW5kIGhpZGRlbiBhY3Rpb25zLlxuICogQHBhcmFtIGFjdGlvbnMgVGhlIGFjdGlvbnMgaW52b2x2ZWRcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gZm9yIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZm9ybSBtZW51IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gYWRkRm9ybU1lbnVBY3Rpb25zKFxuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdC8vIGFubm90YXRpb24gYWN0aW9ucyBwb3NzaWJseSBoYXMgQ3VzdG9tQWN0aW9ucywgd2hpY2ggYXJlIGFkZGVkIGF0IFN1YnNlY3Rpb24udHMjY3JlYXRlRm9ybUFjdGlvblJlZHVjZXJcblx0Ly8gdGhvc2UgYWN0aW9uIGFyZSBpbmNvcnJlY3QgYW5kIGNhdXNlIHVud2FudGVkIHJlc3VsdHMsIHNvIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IHJlbW92ZSBpbmNvcnJlY3Qgb25lcyBoZXJlXG5cdGZvciAobGV0IHJldmVyc2VJbmRleCA9IGFjdGlvbnMubGVuZ3RoIC0gMTsgcmV2ZXJzZUluZGV4ID49IDA7IHJldmVyc2VJbmRleC0tKSB7XG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uc1tyZXZlcnNlSW5kZXhdLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uOjpcIikgJiZcblx0XHRcdChhY3Rpb25zW3JldmVyc2VJbmRleF0ua2V5LnN0YXJ0c1dpdGgoXCJEYXRhRmllbGRGb3JBY3Rpb246OlwiKSB8fFxuXHRcdFx0XHRhY3Rpb25zW3JldmVyc2VJbmRleF0ua2V5LnN0YXJ0c1dpdGgoXCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246OlwiKSlcblx0XHQpIHtcblx0XHRcdGFjdGlvbnMuc3BsaWNlKHJldmVyc2VJbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGhpZGRlbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvcm1IaWRkZW5BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCkgfHwgW10sXG5cdFx0YWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdG1lbnU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0XHR9LFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAxLiBHZXQgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zIC0+IGFjdGlvbnMgYXJlIHBhc3NlZCB0byB0aGlzIG1ldGhvZFxuXHRcdC8vIDIuIEdldCBhY3Rpb25zIGZyb20gbWFuaWZlc3Rcblx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucyksXG5cdFx0Ly8gMy4gR2V0IGFsbCBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0XHRhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zID0gZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyhhY3Rpb25zKSxcblx0XHQvLyA0LiBGaW5kIG1hbmlmZXN0IGFjdGlvbnMgd2hpY2ggb3ZlcnJpZGUgYW55IGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zID0gZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbihhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyksXG5cdFx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdFx0b3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdFx0XHRtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyxcblx0XHRcdGFjdGlvbk92ZXJ3cml0ZUNvbmZpZ1xuXHRcdCkgYXMgQ3VzdG9tQWN0aW9uW107XG5cdC8vIElmIHRoZXJlIGlzIGEgbWFuaWZlc3QgYWN0aW9uIGRlZmluZWQgZm9yIGEgbmVpZ2hib3VyaW5nIHJlZmVyZW5jZSBmYWNldCwgaXQgd291bGQgbm90IGJlIHBhcnQgb2YgbWFuaWZlc3QgYWN0aW9ucyBoZXJlXG5cdC8vIEluIHRoaXMgZm9yLWxvb3AsIGVuc3VyaW5nIGEgcHVyZSBtYW5pZmVzdCBhY3Rpb24gY29taW5nIGZyb20gYW5vdGhlciByZWZlcmVuY2UgZmFjZXQgaXMgbm90IGxvc3Rcblx0Zm9yIChsZXQgcmV2ZXJzZUluZGV4ID0gYWN0aW9ucy5sZW5ndGggLSAxOyByZXZlcnNlSW5kZXggPj0gMDsgcmV2ZXJzZUluZGV4LS0pIHtcblx0XHRpZiAoYWN0aW9uc1tyZXZlcnNlSW5kZXhdLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uOjpcIikpIHtcblx0XHRcdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gaW4gbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpIHtcblx0XHRcdFx0aWYgKG1hbmlmZXN0QWN0aW9uID09PSBhY3Rpb25zW3JldmVyc2VJbmRleF0ua2V5KSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UocmV2ZXJzZUluZGV4LCAxKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyA2LiBPdmVycmlkZSBhbGwgYWN0aW9uc1xuXHRsZXQgZm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gNy4gUmVwbGFjZSBvcmlnaW5hbCBtZW51IGl0ZW1zIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBvdmVycmlkZGVuIG1lbnUgaXRlbXNcblx0cHJlcGFyZU1lbnVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zLCBvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyk7XG5cdC8vIDguIFJlbW92ZSBkdXBsaWNhdGUgYWN0aW9ucyB3aGljaCBhcmUgbWVudSBpdGVtc1xuXHRmb3JtQWxsQWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpO1xuXHQvLyA5LiBIaWRlIG1lbnVzIHdoZXJlIGFsbCBtZW51IGl0ZW1zIGFyZSBoaWRkZW5cblx0Zm9ybUFsbEFjdGlvbnMgPSBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKTtcblx0Ly8gMTAuIChPbmx5IGZvciB0aGlzIHN1YnNlY3Rpb24gVUkgYXJlYSkgZGVmYXVsdEFjdGlvbiBvZiBhIG1lbnUgbXVzdCBiZSBvZiB0eXBlIEFjdGlvblR5cGUuRGVmYXVsdFxuXHRmb3JtQWxsQWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSAmJiAhIWFjdGlvbi5kZWZhdWx0QWN0aW9uKSB7XG5cdFx0XHQoYWN0aW9uLmRlZmF1bHRBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS50eXBlID0gQWN0aW9uVHlwZS5EZWZhdWx0O1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBmb3JtQWxsQWN0aW9ucyA/PyBhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdGlvbiBmb3JtIGEgZmFjZXQuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGxldCBhY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGFjdGlvbnMgPSAoXG5cdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmlsdGVyKChzdWJGYWNldERlZmluaXRpb24pID0+IGlzUmVmZXJlbmNlRmFjZXQoc3ViRmFjZXREZWZpbml0aW9uKSkgYXMgUmVmZXJlbmNlRmFjZXRUeXBlc1tdXG5cdFx0XHQpLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvblJlZHVjZXI6IEJhc2VBY3Rpb25bXSwgcmVmZXJlbmNlRmFjZXQpID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvblJlZHVjZXIsIHJlZmVyZW5jZUZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0W11cblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFtdLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBhZGRGb3JtTWVudUFjdGlvbnMoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYnV0dG9uIHR5cGUgYmFzZWQgb24gQFVJLkVtcGhhc2l6ZWQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBlbXBoYXNpemVkIEVtcGhhc2l6ZWQgYW5ub3RhdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoZW1waGFzaXplZDogRW1waGFzaXplZCB8IHVuZGVmaW5lZCk6IEJ1dHRvblR5cGUge1xuXHQvLyBFbXBoYXNpemVkIGlzIGEgYm9vbGVhbiBzbyBpZiBpdCdzIGVxdWFsIHRvIHRydWUgd2Ugc2hvdyB0aGUgYnV0dG9uIGFzIEdob3N0LCBvdGhlcndpc2UgYXMgVHJhbnNwYXJlbnRcblx0Y29uc3QgYnV0dG9uVHlwZUNvbmRpdGlvbiA9IGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihlbXBoYXNpemVkKSwgdHJ1ZSk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoYnV0dG9uVHlwZUNvbmRpdGlvbiwgQnV0dG9uVHlwZS5HaG9zdCwgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCkpIGFzIEJ1dHRvblR5cGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHBhcmFtIHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIElmIHRoZSBvbmx5IGZpZWxkIHdpdGhpbiBhIGZvcm0gY29udGFpbmVyIGlzIGEgdGV4dC1hcmVhIGZpZWxkLCB0aGUgbGFiZWwgaXMgaGlkZGVuXG4gKiBAcmV0dXJucyBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxldmVsOiBudW1iZXIsXG5cdGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW4sXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBnZXRTdWJTZWN0aW9uSUQoZmFjZXREZWZpbml0aW9uKTtcblx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0Y29uc3QgaXNWaXNpYmxlRXhwcmVzc2lvbiA9IG5vdChcblx0XHRlcXVhbChcblx0XHRcdHRydWUsXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGlkZGVuQW5ub3RhdGlvbiwgW10sIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcblx0Y29uc3QgaXNWaXNpYmlsaXR5RHluYW1pYyA9ICFpc0NvbnN0YW50KGlzVmlzaWJsZUV4cHJlc3Npb24pICYmICFpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihoaWRkZW5Bbm5vdGF0aW9uKTtcblx0Y29uc3QgdGl0bGUgPSBmYWNldERlZmluaXRpb24uTGFiZWwgIT09IHVuZGVmaW5lZCA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uTGFiZWwpKSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgc3ViU2VjdGlvbjogQmFzZVN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFN1YlNlY3Rpb25LZXkoZmFjZXREZWZpbml0aW9uLCBzdWJTZWN0aW9uSUQpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwcmVzc2lvbiksXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNWaXNpYmlsaXR5RHluYW1pYyxcblx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKVxuXHR9O1xuXHRpZiAoaXNIZWFkZXJTZWN0aW9uKSB7XG5cdFx0c3ViU2VjdGlvbi5zdGFzaGVkID0gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdHN1YlNlY3Rpb24uZmxleFNldHRpbmdzID0ge1xuXHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXHR9XG5cdGxldCB1bnN1cHBvcnRlZFRleHQgPSBcIlwiO1xuXHRsZXZlbCsrO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0Y29uc3QgZmFjZXRzID0gZmFjZXREZWZpbml0aW9uLkZhY2V0cztcblxuXHRcdFx0Ly8gRmlsdGVyIGZvciBhbGwgZmFjZXRzIG9mIHRoaXMgc3Vic2VjdGlvbiB0aGF0IGFyZSByZWZlcnJpbmcgdG8gYW4gYW5ub3RhdGlvbiBkZXNjcmliaW5nIGEgdmlzdWFsaXphdGlvbiAoZS5nLiB0YWJsZSBvciBjaGFydClcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25GYWNldHMgPSBmYWNldHNcblx0XHRcdFx0Lm1hcCgoZmFjZXQsIGluZGV4KSA9PiAoeyBpbmRleCwgZmFjZXQgfSkpIC8vIFJlbWVtYmVyIHRoZSBpbmRleCBhc3NpZ25lZCB0byBlYWNoIGZhY2V0XG5cdFx0XHRcdC5maWx0ZXIoKHsgZmFjZXQgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBpc1JlZmVyZW5jZUZhY2V0KGZhY2V0KSAmJiBmYWNldC5UYXJnZXQuJHRhcmdldCAmJiB2aXN1YWxpemF0aW9uVGVybXMuaW5jbHVkZXMoZmFjZXQuVGFyZ2V0LiR0YXJnZXQudGVybSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IGFsbCB2aXN1YWxpemF0aW9uIGZhY2V0czsgXCJ2aXN1YWxpemF0aW9uRmFjZXRzXCIgYW5kIFwibm9uVmlzdWFsaXphdGlvbkZhY2V0c1wiIGFyZSBkaXNqb2ludFxuXHRcdFx0Y29uc3Qgbm9uVmlzdWFsaXphdGlvbkZhY2V0cyA9IGZhY2V0cy5maWx0ZXIoXG5cdFx0XHRcdChmYWNldCkgPT4gIXZpc3VhbGl6YXRpb25GYWNldHMuZmluZCgodmlzdWFsaXphdGlvbikgPT4gdmlzdWFsaXphdGlvbi5mYWNldCA9PT0gZmFjZXQpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIENvbGxlY3Rpb25GYWNldHMgd2l0aCB2aXN1YWxpemF0aW9ucyBtdXN0IGJlIGhhbmRsZWQgc2VwYXJhdGVseSBhcyB0aGV5IGNhbm5vdCBiZSBpbmNsdWRlZCBpbiBmb3Jtc1xuXHRcdFx0XHRjb25zdCB2aXN1YWxpemF0aW9uQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBmb3JtQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBtaXhlZENvbnRlbnQ6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblxuXHRcdFx0XHQvLyBDcmVhdGUgZWFjaCB2aXN1YWxpemF0aW9uIGZhY2V0IGFzIGlmIGl0IHdhcyBpdHMgb3duIHN1YnNlY3Rpb24gKHZpYSByZWN1cnNpb24pLCBhbmQga2VlcCB0aGVpciByZWxhdGl2ZSBvcmRlcmluZ1xuXHRcdFx0XHRmb3IgKGNvbnN0IHsgZmFjZXQgfSBvZiB2aXN1YWxpemF0aW9uRmFjZXRzKSB7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbkNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZhY2V0LCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIHRydWUsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG5vblZpc3VhbGl6YXRpb25GYWNldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vIFRoaXMgc3Vic2VjdGlvbiBpbmNsdWRlcyB2aXN1YWxpemF0aW9ucyBhbmQgb3RoZXIgY29udGVudCwgc28gaXQgaXMgYSBcIk1peGVkXCIgc3Vic2VjdGlvblxuXHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0YFdhcm5pbmc6IENvbGxlY3Rpb25GYWNldCAnJHtmYWNldERlZmluaXRpb24uSUR9JyBpbmNsdWRlcyBhIGNvbWJpbmF0aW9uIG9mIGVpdGhlciBhIGNoYXJ0IG9yIGEgdGFibGUgYW5kIG90aGVyIGNvbnRlbnQuIFRoaXMgY2FuIGxlYWQgdG8gcmVuZGVyaW5nIGlzc3Vlcy4gQ29uc2lkZXIgbW92aW5nIHRoZSBjaGFydCBvciB0YWJsZSBpbnRvIGEgc2VwYXJhdGUgQ29sbGVjdGlvbkZhY2V0LmBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Y29uc3QgZmFrZUZvcm1GYWNldCA9IHsgLi4uZmFjZXREZWZpbml0aW9uIH07XG5cdFx0XHRcdFx0ZmFrZUZvcm1GYWNldC5GYWNldHMgPSBub25WaXN1YWxpemF0aW9uRmFjZXRzO1xuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIGpvaW5lZCBmb3JtIG9mIGFsbCBmYWNldHMgdGhhdCBhcmUgbm90IHJlZmVycmluZyB0byB2aXN1YWxpemF0aW9uc1xuXHRcdFx0XHRcdGZvcm1Db250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWtlRm9ybUZhY2V0LCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGhhc1NpbmdsZUNvbnRlbnQsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTWVyZ2UgdGhlIHZpc3VhbGl6YXRpb24gY29udGVudCB3aXRoIHRoZSBmb3JtIGNvbnRlbnRcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25GYWNldHMuZmluZCgoeyBpbmRleCB9KSA9PiBpbmRleCA9PT0gMCkpIHtcblx0XHRcdFx0XHQvLyBJZiB0aGUgZmlyc3QgZmFjZXQgaXMgYSB2aXN1YWxpemF0aW9uLCBkaXNwbGF5IHRoZSB2aXN1YWxpemF0aW9ucyBmaXJzdFxuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLnZpc3VhbGl6YXRpb25Db250ZW50KTtcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBkaXNwbGF5IHRoZSBmb3JtIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4uZm9ybUNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLnZpc3VhbGl6YXRpb25Db250ZW50KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IG1peGVkQ29udGVudFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gbWl4ZWRTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhpcyBDb2xsZWN0aW9uRmFjZXQgb25seSBpbmNsdWRlcyBjb250ZW50IHRoYXQgY2FuIGJlIHJlbmRlcmVkIGluIGEgbWVyZ2VkIGZvcm1cblx0XHRcdFx0Y29uc3QgZmFjZXRBY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0Zm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0Zm9ybURlZmluaXRpb246IGNyZWF0ZUZvcm1EZWZpbml0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRmYWNldEFjdGlvbnMuYWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0eyB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyB9XG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogZmFjZXRBY3Rpb25zLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZCksXG5cdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsIGNvbnZlcnRlckNvbnRleHQsIHtcblx0XHRcdFx0XHRcdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRcdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZSxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZDogaXNIZWFkZXJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbjogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjb25zdCBzdWJTZWN0aW9uVGl0bGU6IHN0cmluZyA9IHN1YlNlY3Rpb24udGl0bGUgPyBzdWJTZWN0aW9uLnRpdGxlIDogXCJcIjtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xUaXRsZSA9XG5cdFx0XHRcdFx0XHRcdChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKT8uYW5ub3RhdGlvbj8udGl0bGUgfHxcblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pPy50aXRsZTtcblx0XHRcdFx0XHRcdGNvbnN0IGlzUGFydE9mUHJldmlldyA9IGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXc/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdFx0XHRcdFx0XHRjb25zdCBzaG93U3ViU2VjdGlvblRpdGxlID0gZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZShjb250cm9sVGl0bGUgPz8gXCJcIiwgc3ViU2VjdGlvblRpdGxlLCBoYXNTaW5nbGVDb250ZW50KTtcblxuXHRcdFx0XHRcdFx0Ly8gRWl0aGVyIGNhbGN1bGF0ZSB0aGUgdGl0bGUgdmlzaWJpbGl0eSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5XG5cdFx0XHRcdFx0XHQvLyBBZGRpdGlvbmFsbHkgdG8gY2hlY2tpbmcgd2hldGhlciBhIHRpdGxlIGV4aXN0cyxcblx0XHRcdFx0XHRcdC8vIHdlIGFsc28gbmVlZCB0byBjaGVjayB0aGF0IHRoZSBmYWNldCB0aXRsZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGNvbnRyb2wgKGkuZS4gdmlzdWFsaXphdGlvbikgdGl0bGU7XG5cdFx0XHRcdFx0XHQvLyB0aGlzIGlzIGRvbmUgYnkgaW5jbHVkaW5nIFwic2hvd1N1YlNlY3Rpb25UaXRsZVwiIGluIHRoZSBhbmQgZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25UaXRsZVZpc2libGUgPSBpZkVsc2UoXG5cdFx0XHRcdFx0XHRcdGlzVmlzaWJpbGl0eUR5bmFtaWMsXG5cdFx0XHRcdFx0XHRcdGFuZChpc1Zpc2libGVFeHByZXNzaW9uLCBub3QoZXF1YWwodGl0bGUsIFwidW5kZWZpbmVkXCIpKSwgc2hvd1N1YlNlY3Rpb25UaXRsZSksXG5cdFx0XHRcdFx0XHRcdGFuZChcblx0XHRcdFx0XHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSAhPT0gdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlICE9PSBcInVuZGVmaW5lZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0aXNWaXNpYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdFx0XHRzaG93U3ViU2VjdGlvblRpdGxlXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb246IHByZXNlbnRhdGlvbixcblx0XHRcdFx0XHRcdFx0aXNQYXJ0T2ZQcmV2aWV3LFxuXHRcdFx0XHRcdFx0XHRzaG93U3ViU2VjdGlvblRpdGxlOiBjb21waWxlRXhwcmVzc2lvbihzaG93U3ViU2VjdGlvblRpdGxlKSwgLy8gVGhpcyBpcyB1c2VkIG9uIHRoZSBPYmplY3RQYWdlU3ViU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGF0YVZpc3VhbGl6YXRpb25UaXRsZVZpc2libGUpIC8vIFRoaXMgaXMgdXNlZCB0byBoaWRlIHRoZSBUaXRsZSBjb250cm9sIGFib3ZlIGRhdGEgdmlzdWFsaXphdGlvbnNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0OlxuXHRcdFx0XHRcdFx0Ly8gQWxsIHRob3NlIGVsZW1lbnQgYmVsb25nIHRvIGEgZnJvbSBmYWNldFxuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZXRBY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50U3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWNldEFjdGlvbnMuYWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHRcdHsgdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgfVxuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uczogZmFjZXRBY3Rpb25zLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZCksXG5cdFx0XHRcdFx0XHRcdFx0Y29tbWFuZEFjdGlvbnM6IGZhY2V0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZvcm1FbGVtZW50U3ViU2VjdGlvbjtcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTm90ZTpcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk5vdGVzXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgRm9yICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0LnRlcm19IEZyYWdtZW50YDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0OlxuXHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gXCJGb3IgUmVmZXJlbmNlIFVSTCBGYWNldFwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdC8vIElmIHdlIHJlYWNoIGhlcmUgd2UgZW5kZWQgdXAgd2l0aCBhbiB1bnN1cHBvcnRlZCBTdWJTZWN0aW9uIHR5cGVcblx0Y29uc3QgdW5zdXBwb3J0ZWRTdWJTZWN0aW9uOiBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSB7XG5cdFx0Li4uc3ViU2VjdGlvbixcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRvIGhpZGUgb3Igc2hvdyB0aGUgc3Vic2VjdGlvbiB0aXRsZS5cbiAqIEBwYXJhbSBjb250cm9sVGl0bGVcbiAqIEBwYXJhbSBzdWJTZWN0aW9uVGl0bGVcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIG9yIGV4cHJlc3Npb24gZm9yIHNob3dTdWJTZWN0aW9uVGl0bGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNob3dTdWJTZWN0aW9uVGl0bGUoXG5cdGNvbnRyb2xUaXRsZTogc3RyaW5nLFxuXHRzdWJTZWN0aW9uVGl0bGU6IHN0cmluZyxcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gdmlzaWJsZSBzaGFsbCBiZSB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb250ZW50IG9yIGlmIHRoZSBjb250cm9sIGFuZCBzdWJzZWN0aW9uIHRpdGxlIGFyZSBkaWZmZXJlbnRcblx0cmV0dXJuIG9yKG5vdChoYXNTaW5nbGVDb250ZW50KSwgbm90RXF1YWwocmVzb2x2ZUJpbmRpbmdTdHJpbmcoY29udHJvbFRpdGxlKSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcoc3ViU2VjdGlvblRpdGxlKSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihcblx0YWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgcmVmZXJlbmNlVGFyZ2V0ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWU7XG5cdGxldCBtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IGRhdGFGaWVsZENvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSA9IFtdO1xuXHRsZXQgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRbbmF2aWdhdGlvblByb3BlcnR5UGF0aF0gPSB0YXJnZXRWYWx1ZS5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyaW5nKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAocmVmZXJlbmNlVGFyZ2V0KSB7XG5cdFx0c3dpdGNoIChyZWZlcmVuY2VUYXJnZXQudGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gKHJlZmVyZW5jZVRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhO1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnMgYXNcblx0XHRcdFx0XHRcdHwgUmVjb3JkPHN0cmluZywgTWFuaWZlc3RBY3Rpb24+XG5cdFx0XHRcdFx0XHR8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0KS5hY3Rpb25zO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUYXJnZXQucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IHJlZmVyZW5jZVRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRhY3Rpb25zID0gZGF0YUZpZWxkQ29sbGVjdGlvbi5yZWR1Y2UoKGFjdGlvblJlZHVjZXIsIGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5SRVFVSVJFU0NPTlRFWFQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5ERVRFUk1JTklORyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUpLCB0cnVlKSlcblx0XHRcdFx0XHRcdFx0XHQ6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRcdFx0YnV0dG9uVHlwZTogZ2V0QnV0dG9uVHlwZShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVFeHByZXNzaW9uKHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiA9XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Rm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbj4ocmVmZXJlbmNlVGFyZ2V0KS5hY3Rpb25zO1xuXHRcdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaChcblx0XHRcdFx0XHRcdGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbixcblx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKHtcblx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHRcdH0sIGFjdGlvbnMpO1xuXHR9XG5cblx0Ly8gbm8gb3ZlcnJpZGVzIGhlcmUsIHRoZXkgYXJlIGRvbmUgaW4gYSBsYXRlciBzdGVwIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg/OiBzdHJpbmdcbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0cmVxdWlyZXNEaWFsb2c6IGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpLFxuXHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Zm4oXG5cdFx0XHRcdFwiaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRcdFtcblx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBmbihcImdldEJpbmRpbmdDb250ZXh0XCIsIFtdLCBwYXRoSW5Nb2RlbChcIlwiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiAoZGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiKSBhcyBPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFx0XHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIHBhdGhJbk1vZGVsKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uICYmIGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uW2tleV0pLFxuXHRcdFx0XHRcdFx0ZmVGcmFtZXdvcmtDYWxsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdClcblx0XHQpLFxuXHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWRcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IEFjdGlvbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+IHtcblx0Y29uc3Qgc3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFN1YlNlY3Rpb25zKS5mb3JFYWNoKFxuXHRcdChzdWJTZWN0aW9uS2V5KSA9PlxuXHRcdFx0KHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihtYW5pZmVzdFN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldLCBzdWJTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0KTtcblx0cmV0dXJuIHN1YlNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihcblx0bWFuaWZlc3RTdWJTZWN0aW9uOiBNYW5pZmVzdFN1YlNlY3Rpb24sXG5cdHN1YlNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogZ2V0U2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGlzVmlzaWJsZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWU7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0U3ViU2VjdGlvbi5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc3ViU2VjdGlvbkRlZmluaXRpb24gPSB7XG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRpZDogbWFuaWZlc3RTdWJTZWN0aW9uLmlkIHx8IGdldEN1c3RvbVN1YlNlY3Rpb25JRChzdWJTZWN0aW9uS2V5KSxcblx0XHRhY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyxcblx0XHRrZXk6IHN1YlNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IG1hbmlmZXN0U3ViU2VjdGlvbi50aXRsZSxcblx0XHRsZXZlbDogMSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50LFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBtYW5pZmVzdFN1YlNlY3Rpb24uZW5hYmxlTGF6eUxvYWRpbmcgPz8gZmFsc2UsXG5cdFx0Y29tcG9uZW50TmFtZTogXCJcIixcblx0XHRzZXR0aW5nczogXCJcIixcblx0XHRhcHBseVN0YXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uYXBwbHlTdGF0ZSxcblx0XHRyZXRyaWV2ZVN0YXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24ucmV0cmlldmVTdGF0ZVxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIGlmIChtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5FbWJlZGRlZENvbXBvbmVudDtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi5jb21wb25lbnROYW1lID0gbWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50Lm5hbWU7XG5cdFx0aWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudC5zZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi5zZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudC5zZXR0aW5ncyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaWVkIG9uIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBmb3IgY29tcGxpYW50LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24gKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQuJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdWJDb2xsZWN0aW9uRmFjZXQgPSBzdWJGYWNldCBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0XHRcdFx0cmV0dXJuIHN1YkNvbGxlY3Rpb25GYWNldC5GYWNldHMuZXZlcnkoZnVuY3Rpb24gKGZhY2V0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViUmVmRmFjZXQgPSBmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE2RVlBLGNBQWMsMEJBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUNKO0lBRFZBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBQSxPQUFkQSxjQUFjO0VBQUE7RUFBQUMsUUFBQSxDQUFBRCxjQUFBLEdBQUFBLGNBQUE7RUFrSDFCLE1BQU1FLGtCQUE0QixHQUFHLHdMQUtwQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsaUJBQWlCQSxDQUNoQ0MsZUFBNkIsRUFDN0JDLGdCQUF5RCxFQUN6REMsZUFBeUIsRUFDekJDLDZCQUF1QyxFQUNkO0lBQ3pCO0lBQ0EsTUFBTUMsY0FBYyxHQUFHSixlQUFlLENBQUNLLE1BQU0sQ0FBQyxDQUFDRCxjQUE0QixFQUFFRSxlQUFlLEtBQUs7TUFDaEcsUUFBUUEsZUFBZSxDQUFDQyxLQUFLO1FBQzVCO1VBQ0NILGNBQWMsQ0FBQ0ksSUFBSSxDQUFDRixlQUFlLENBQUM7VUFDcEM7UUFDRDtVQUNDO1VBQ0E7VUFDQSxJQUFJQSxlQUFlLENBQUNHLE1BQU0sQ0FBQ0MsSUFBSSxDQUFFQyxTQUFTLElBQUtBLFNBQVMsQ0FBQ0osS0FBSyxpREFBc0MsQ0FBQyxFQUFFO1lBQ3RHSCxjQUFjLENBQUNRLE1BQU0sQ0FBQ1IsY0FBYyxDQUFDUyxNQUFNLEVBQUUsQ0FB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
688
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsIl9leHBvcnRzIiwidmlzdWFsaXphdGlvblRlcm1zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldHNUb0NyZWF0ZSIsInJlZHVjZSIsImZhY2V0RGVmaW5pdGlvbiIsIiRUeXBlIiwicHVzaCIsIkZhY2V0cyIsImZpbmQiLCJmYWNldFR5cGUiLCJzcGxpY2UiLCJsZW5ndGgiLCJtYXAiLCJmYWNldCIsImNyZWF0ZVN1YlNlY3Rpb24iLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwiYUN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJ0ZW1wbGF0ZUVkaXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uSUQiLCJnZXRDdXN0b21TdWJTZWN0aW9uSUQiLCJzdWJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsInR5cGUiLCJYTUxGcmFnbWVudCIsInRlbXBsYXRlIiwidmlzaWJsZSIsImxldmVsIiwic2lkZUNvbnRlbnQiLCJ1bmRlZmluZWQiLCJzdGFzaGVkIiwiZmxleFNldHRpbmdzIiwiYWN0aW9ucyIsIm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZCIsImdldFN1YlNlY3Rpb25LZXkiLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsImFkZEZvcm1NZW51QWN0aW9ucyIsInJldmVyc2VJbmRleCIsInN0YXJ0c1dpdGgiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsInBvc2l0aW9uIiwibWVudSIsImZvcm1BY3Rpb25zIiwiZ2V0Rm9ybUFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwibWFuaWZlc3RBY3Rpb24iLCJmb3JtQWxsQWN0aW9ucyIsInByZXBhcmVNZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9uIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJkZWZhdWx0QWN0aW9uIiwiRGVmYXVsdCIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiZmlsdGVyIiwic3ViRmFjZXREZWZpbml0aW9uIiwiaXNSZWZlcmVuY2VGYWNldCIsImFjdGlvblJlZHVjZXIiLCJyZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsImVtcGhhc2l6ZWQiLCJidXR0b25UeXBlQ29uZGl0aW9uIiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIlRyYW5zcGFyZW50IiwiaGFzU2luZ2xlQ29udGVudCIsImdldFN1YlNlY3Rpb25JRCIsImhpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlRXhwcmVzc2lvbiIsIm5vdCIsInBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImlzQ29uc3RhbnQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlVua25vd24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJ1bnN1cHBvcnRlZFRleHQiLCJmYWNldHMiLCJ2aXN1YWxpemF0aW9uRmFjZXRzIiwiaW5kZXgiLCJfcmVmIiwiVGFyZ2V0IiwiJHRhcmdldCIsImluY2x1ZGVzIiwidGVybSIsIm5vblZpc3VhbGl6YXRpb25GYWNldHMiLCJ2aXN1YWxpemF0aW9uIiwidmlzdWFsaXphdGlvbkNvbnRlbnQiLCJmb3JtQ29udGVudCIsIm1peGVkQ29udGVudCIsIkxvZyIsIndhcm5pbmciLCJmYWtlRm9ybUZhY2V0IiwiX3JlZjIiLCJtaXhlZFN1YlNlY3Rpb24iLCJNaXhlZCIsImNvbnRlbnQiLCJmYWNldEFjdGlvbnMiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvblRpdGxlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwiaXNQYXJ0T2ZQcmV2aWV3IiwiUGFydE9mUHJldmlldyIsInZhbHVlT2YiLCJzaG93U3ViU2VjdGlvblRpdGxlIiwiZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZSIsImRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlIiwiYW5kIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJOb3RlcyIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJvciIsIm5vdEVxdWFsIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsIkRhdGEiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwicXVhbGlmaWVyIiwiZGF0YUZpZWxkIiwiUmVxdWlyZXNDb250ZXh0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0Rm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNBSU9wZXJhdGlvbiIsImlzTWVudUFJT3BlcmF0aW9uIiwiQWN0aW9ucyIsImZvcm1NYW5pZmVzdE1lbnVBY3Rpb25zQ29uZmlndXJhdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiQWN0aW9uVGFyZ2V0IiwiYmluZGluZyIsInJlcXVpcmVzRGlhbG9nIiwiaXNBY3Rpb25XaXRoRGlhbG9nIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsImNvbnRleHRzIiwicGF0aEluTW9kZWwiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsImZlRnJhbWV3b3JrQ2FsbCIsInJlZiIsImlzRGlhbG9nIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsImdldFNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc1Zpc2libGUiLCJpc0R5bmFtaWNFeHByZXNzaW9uIiwiaW5kZXhPZiIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwiZW5hYmxlTGF6eUxvYWRpbmciLCJjb21wb25lbnROYW1lIiwic2V0dGluZ3MiLCJhcHBseVN0YXRlIiwicmV0cmlldmVTdGF0ZSIsIm5hbWUiLCJlbWJlZGRlZENvbXBvbmVudCIsIkVtYmVkZGVkQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHRFbXBoYXNpemVkLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdEJ1dHRvblR5cGUsXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQsIEZsZXhTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7XG5cdGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCxcblx0Z2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLCBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNBY3Rpb25XaXRoRGlhbG9nIH0gZnJvbSBcIi4uLy4uL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TdWJTZWN0aW9uSUQsIGdldEZvcm1JRCwgZ2V0U2lkZUNvbnRlbnRJRCwgZ2V0U3ViU2VjdGlvbklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiwgaXNSZWZlcmVuY2VGYWNldCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG5leHBvcnQgZW51bSBTdWJTZWN0aW9uVHlwZSB7XG5cdFVua25vd24gPSBcIlVua25vd25cIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEZvcm0gPSBcIkZvcm1cIixcblx0Tm90ZXMgPSBcIk5vdGVzXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiLFxuXHRFbWJlZGRlZENvbXBvbmVudCA9IFwiRW1iZWRkZWRDb21wb25lbnRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uXG5cdHwgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uXG5cdHwgTm90ZVN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xuXHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGJvb2xlYW47XG5cdGNsYXNzPzogc3RyaW5nO1xuXHRhcHBseVN0YXRlPzogc3RyaW5nO1xuXHRyZXRyaWV2ZVN0YXRlPzogc3RyaW5nO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bjtcblx0dGV4dDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uO1xuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0aXNQYXJ0T2ZQcmV2aWV3PzogYm9vbGVhbjtcblx0c2hvd1N1YlNlY3Rpb25UaXRsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdGRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxudHlwZSBDb250YWN0U3ViU2VjdGlvbiA9IFVuc3VwcG9ydGVkU3ViU2VjdGlvbjtcbnR5cGUgTm90ZVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXM7XG59O1xudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cdHNldHRpbmdzOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQ7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dUaXRsZT86IGJvb2xlYW47XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuO1xuXHRhcHBseVN0YXRlPzogc3RyaW5nO1xuXHRyZXRyaWV2ZVN0YXRlPzogc3RyaW5nO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPiAmIHtcblx0b25TZWN0aW9uTG9hZGVkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdmlzdWFsaXphdGlvblRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0LFxuXHRVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5dO1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICogQHBhcmFtIGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKChmYWNldFR5cGUpID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoZmFjZXQpID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihcblx0XHRcdGZhY2V0LFxuXHRcdFx0ZmFjZXRzVG9DcmVhdGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0MCxcblx0XHRcdCEoZmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0KT8uRmFjZXRzPy5sZW5ndGgsXG5cdFx0XHRpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlc1xuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRhQ3VzdG9tSGVhZGVyRmFjZXRzLnB1c2goY3VzdG9tSGVhZGVyRmFjZXRzW2tleV0pO1xuXHRcdHJldHVybiBhQ3VzdG9tSGVhZGVyRmFjZXRzO1xuXHR9KTtcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBhQ3VzdG9tSGVhZGVyRmFjZXRzLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdLCBjdXN0b21IZWFkZXJGYWNldCkgPT4ge1xuXHRcdGlmIChjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQpIHtcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goY3VzdG9tSGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChjdXN0b21IZWFkZXJGYWNldCkgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICogQHJldHVybnMgQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9LFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogZmFsc2Vcblx0fTtcblx0cmV0dXJuIHN1YlNlY3Rpb247XG59XG5cbmNvbnN0IGdldFN1YlNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuLyoqXG4gKiBBZGRzIEZvcm0gbWVudSBhY3Rpb24gdG8gYWxsIGZvcm0gYWN0aW9ucywgcmVtb3ZlcyBkdXBsaWNhdGUgYWN0aW9ucyBhbmQgaGlkZGVuIGFjdGlvbnMuXG4gKiBAcGFyYW0gYWN0aW9ucyBUaGUgYWN0aW9ucyBpbnZvbHZlZFxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmb3JtIG1lbnUgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Ly8gYW5ub3RhdGlvbiBhY3Rpb25zIHBvc3NpYmx5IGhhcyBDdXN0b21BY3Rpb25zLCB3aGljaCBhcmUgYWRkZWQgYXQgU3Vic2VjdGlvbi50cyNjcmVhdGVGb3JtQWN0aW9uUmVkdWNlclxuXHQvLyB0aG9zZSBhY3Rpb24gYXJlIGluY29ycmVjdCBhbmQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cywgc28gd2UgbmVlZCB0byBjYXJlZnVsbHkgcmVtb3ZlIGluY29ycmVjdCBvbmVzIGhlcmVcblx0Zm9yIChsZXQgcmV2ZXJzZUluZGV4ID0gYWN0aW9ucy5sZW5ndGggLSAxOyByZXZlcnNlSW5kZXggPj0gMDsgcmV2ZXJzZUluZGV4LS0pIHtcblx0XHRpZiAoXG5cdFx0XHRhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSAmJlxuXHRcdFx0KGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkuc3RhcnRzV2l0aChcIkRhdGFGaWVsZEZvckFjdGlvbjo6XCIpIHx8XG5cdFx0XHRcdGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkuc3RhcnRzV2l0aChcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6XCIpKVxuXHRcdCkge1xuXHRcdFx0YWN0aW9ucy5zcGxpY2UocmV2ZXJzZUluZGV4LCAxKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0bWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdH0sXG5cdFx0Zm9ybUFjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4gPSBnZXRGb3JtQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMgLT4gYWN0aW9ucyBhcmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kXG5cdFx0Ly8gMi4gR2V0IGFjdGlvbnMgZnJvbSBtYW5pZmVzdFxuXHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKSxcblx0XHQvLyAzLiBHZXQgYWxsIGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRcdGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFjdGlvbnMpLFxuXHRcdC8vIDQuIEZpbmQgbWFuaWZlc3QgYWN0aW9ucyB3aGljaCBvdmVycmlkZSBhbnkgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdFx0bWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKSxcblx0XHQvLyA1LiBHZXQgb3ZlcnJpZGRlbiBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0XHRvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zLFxuXHRcdFx0YWN0aW9uT3ZlcndyaXRlQ29uZmlnXG5cdFx0KSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gSWYgdGhlcmUgaXMgYSBtYW5pZmVzdCBhY3Rpb24gZGVmaW5lZCBmb3IgYSBuZWlnaGJvdXJpbmcgcmVmZXJlbmNlIGZhY2V0LCBpdCB3b3VsZCBub3QgYmUgcGFydCBvZiBtYW5pZmVzdCBhY3Rpb25zIGhlcmVcblx0Ly8gSW4gdGhpcyBmb3ItbG9vcCwgZW5zdXJpbmcgYSBwdXJlIG1hbmlmZXN0IGFjdGlvbiBjb21pbmcgZnJvbSBhbm90aGVyIHJlZmVyZW5jZSBmYWNldCBpcyBub3QgbG9zdFxuXHRmb3IgKGxldCByZXZlcnNlSW5kZXggPSBhY3Rpb25zLmxlbmd0aCAtIDE7IHJldmVyc2VJbmRleCA+PSAwOyByZXZlcnNlSW5kZXgtLSkge1xuXHRcdGlmIChhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSkge1xuXHRcdFx0Zm9yIChjb25zdCBtYW5pZmVzdEFjdGlvbiBpbiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykge1xuXHRcdFx0XHRpZiAobWFuaWZlc3RBY3Rpb24gPT09IGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkpIHtcblx0XHRcdFx0XHRhY3Rpb25zLnNwbGljZShyZXZlcnNlSW5kZXgsIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMsIG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zKTtcblx0Ly8gOC4gUmVtb3ZlIGR1cGxpY2F0ZSBhY3Rpb25zIHdoaWNoIGFyZSBtZW51IGl0ZW1zXG5cdGZvcm1BbGxBY3Rpb25zID0gcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhmb3JtQWxsQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRmb3JtQWxsQWN0aW9ucyA9IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpO1xuXHQvLyAxMC4gKE9ubHkgZm9yIHRoaXMgc3Vic2VjdGlvbiBVSSBhcmVhKSBkZWZhdWx0QWN0aW9uIG9mIGEgbWVudSBtdXN0IGJlIG9mIHR5cGUgQWN0aW9uVHlwZS5EZWZhdWx0XG5cdGZvcm1BbGxBY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51ICYmICEhYWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRcdChhY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnR5cGUgPSBBY3Rpb25UeXBlLkRlZmF1bHQ7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGZvcm1BbGxBY3Rpb25zID8/IGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBmYWNldCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbWJpbmVkQWN0aW9uIHtcblx0bGV0IGFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maWx0ZXIoKHN1YkZhY2V0RGVmaW5pdGlvbikgPT4gaXNSZWZlcmVuY2VGYWNldChzdWJGYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW11cblx0XHRcdCkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uUmVkdWNlcjogQmFzZUFjdGlvbltdLCByZWZlcmVuY2VGYWNldCkgPT4gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9uUmVkdWNlciwgcmVmZXJlbmNlRmFjZXQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShlbXBoYXNpemVkOiBFbXBoYXNpemVkIHwgdW5kZWZpbmVkKTogQnV0dG9uVHlwZSB7XG5cdC8vIEVtcGhhc2l6ZWQgaXMgYSBib29sZWFuIHNvIGlmIGl0J3MgZXF1YWwgdG8gdHJ1ZSB3ZSBzaG93IHRoZSBidXR0b24gYXMgR2hvc3QsIG90aGVyd2lzZSBhcyBUcmFuc3BhcmVudFxuXHRjb25zdCBidXR0b25UeXBlQ29uZGl0aW9uID0gZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVtcGhhc2l6ZWQpLCB0cnVlKTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShidXR0b25UeXBlQ29uZGl0aW9uLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLlRyYW5zcGFyZW50KSkgYXMgQnV0dG9uVHlwZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRChmYWNldERlZmluaXRpb24pO1xuXHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGVFeHByZXNzaW9uID0gbm90KFxuXHRcdGVxdWFsKFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoaWRkZW5Bbm5vdGF0aW9uLCBbXSwgZmFsc2UsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xuXHRjb25zdCBpc1Zpc2liaWxpdHlEeW5hbWljID0gIWlzQ29uc3RhbnQoaXNWaXNpYmxlRXhwcmVzc2lvbikgJiYgIWlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGhpZGRlbkFubm90YXRpb24pO1xuXHRjb25zdCB0aXRsZSA9IGZhY2V0RGVmaW5pdGlvbi5MYWJlbCAhPT0gdW5kZWZpbmVkID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc1Zpc2liaWxpdHlEeW5hbWljLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRFbmFibGVMYXp5TG9hZGluZygpXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXG5cdFx0XHQvLyBGaWx0ZXIgZm9yIGFsbCBmYWNldHMgb2YgdGhpcyBzdWJzZWN0aW9uIHRoYXQgYXJlIHJlZmVycmluZyB0byBhbiBhbm5vdGF0aW9uIGRlc2NyaWJpbmcgYSB2aXN1YWxpemF0aW9uIChlLmcuIHRhYmxlIG9yIGNoYXJ0KVxuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbkZhY2V0cyA9IGZhY2V0c1xuXHRcdFx0XHQubWFwKChmYWNldCwgaW5kZXgpID0+ICh7IGluZGV4LCBmYWNldCB9KSkgLy8gUmVtZW1iZXIgdGhlIGluZGV4IGFzc2lnbmVkIHRvIGVhY2ggZmFjZXRcblx0XHRcdFx0LmZpbHRlcigoeyBmYWNldCB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXQpICYmIGZhY2V0LlRhcmdldC4kdGFyZ2V0ICYmIHZpc3VhbGl6YXRpb25UZXJtcy5pbmNsdWRlcyhmYWNldC5UYXJnZXQuJHRhcmdldC50ZXJtKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgYWxsIHZpc3VhbGl6YXRpb24gZmFjZXRzOyBcInZpc3VhbGl6YXRpb25GYWNldHNcIiBhbmQgXCJub25WaXN1YWxpemF0aW9uRmFjZXRzXCIgYXJlIGRpc2pvaW50XG5cdFx0XHRjb25zdCBub25WaXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzLmZpbHRlcihcblx0XHRcdFx0KGZhY2V0KSA9PiAhdmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLmZhY2V0ID09PSBmYWNldClcblx0XHRcdCk7XG5cblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29sbGVjdGlvbkZhY2V0cyB3aXRoIHZpc3VhbGl6YXRpb25zIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGFzIHRoZXkgY2Fubm90IGJlIGluY2x1ZGVkIGluIGZvcm1zXG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IGZvcm1Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IG1peGVkQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBlYWNoIHZpc3VhbGl6YXRpb24gZmFjZXQgYXMgaWYgaXQgd2FzIGl0cyBvd24gc3Vic2VjdGlvbiAodmlhIHJlY3Vyc2lvbiksIGFuZCBrZWVwIHRoZWlyIHJlbGF0aXZlIG9yZGVyaW5nXG5cdFx0XHRcdGZvciAoY29uc3QgeyBmYWNldCB9IG9mIHZpc3VhbGl6YXRpb25GYWNldHMpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgdHJ1ZSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9uVmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBzdWJzZWN0aW9uIGluY2x1ZGVzIHZpc3VhbGl6YXRpb25zIGFuZCBvdGhlciBjb250ZW50LCBzbyBpdCBpcyBhIFwiTWl4ZWRcIiBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgV2FybmluZzogQ29sbGVjdGlvbkZhY2V0ICcke2ZhY2V0RGVmaW5pdGlvbi5JRH0nIGluY2x1ZGVzIGEgY29tYmluYXRpb24gb2YgZWl0aGVyIGEgY2hhcnQgb3IgYSB0YWJsZSBhbmQgb3RoZXIgY29udGVudC4gVGhpcyBjYW4gbGVhZCB0byByZW5kZXJpbmcgaXNzdWVzLiBDb25zaWRlciBtb3ZpbmcgdGhlIGNoYXJ0IG9yIHRhYmxlIGludG8gYSBzZXBhcmF0ZSBDb2xsZWN0aW9uRmFjZXQuYFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRjb25zdCBmYWtlRm9ybUZhY2V0ID0geyAuLi5mYWNldERlZmluaXRpb24gfTtcblx0XHRcdFx0XHRmYWtlRm9ybUZhY2V0LkZhY2V0cyA9IG5vblZpc3VhbGl6YXRpb25GYWNldHM7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgam9pbmVkIGZvcm0gb2YgYWxsIGZhY2V0cyB0aGF0IGFyZSBub3QgcmVmZXJyaW5nIHRvIHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdFx0Zm9ybUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZha2VGb3JtRmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNZXJnZSB0aGUgdmlzdWFsaXphdGlvbiBjb250ZW50IHdpdGggdGhlIGZvcm0gY29udGVudFxuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh7IGluZGV4IH0pID0+IGluZGV4ID09PSAwKSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBmYWNldCBpcyBhIHZpc3VhbGl6YXRpb24sIGRpc3BsYXkgdGhlIHZpc3VhbGl6YXRpb25zIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGZvcm0gZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogbWl4ZWRDb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGlzIENvbGxlY3Rpb25GYWNldCBvbmx5IGluY2x1ZGVzIGNvbnRlbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gYSBtZXJnZWQgZm9ybVxuXHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHR7IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdFx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkOiBpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nID0gc3ViU2VjdGlvbi50aXRsZSA/IHN1YlNlY3Rpb24udGl0bGUgOiBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy50aXRsZSB8fFxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbik/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNQYXJ0T2ZQcmV2aWV3ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dTdWJTZWN0aW9uVGl0bGUgPSBnZXRTaG93U3ViU2VjdGlvblRpdGxlKGNvbnRyb2xUaXRsZSA/PyBcIlwiLCBzdWJTZWN0aW9uVGl0bGUsIGhhc1NpbmdsZUNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0XHQvLyBFaXRoZXIgY2FsY3VsYXRlIHRoZSB0aXRsZSB2aXNpYmlsaXR5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHlcblx0XHRcdFx0XHRcdC8vIEFkZGl0aW9uYWxseSB0byBjaGVja2luZyB3aGV0aGVyIGEgdGl0bGUgZXhpc3RzLFxuXHRcdFx0XHRcdFx0Ly8gd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGZhY2V0IHRpdGxlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29udHJvbCAoaS5lLiB2aXN1YWxpemF0aW9uKSB0aXRsZTtcblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgXCJzaG93U3ViU2VjdGlvblRpdGxlXCIgaW4gdGhlIGFuZCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9IGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aXNWaXNpYmlsaXR5RHluYW1pYyxcblx0XHRcdFx0XHRcdFx0YW5kKGlzVmlzaWJsZUV4cHJlc3Npb24sIG5vdChlcXVhbCh0aXRsZSwgXCJ1bmRlZmluZWRcIikpLCBzaG93U3ViU2VjdGlvblRpdGxlKSxcblx0XHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRpc1Zpc2libGVFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRpc1BhcnRPZlByZXZpZXcsXG5cdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGU6IGNvbXBpbGVFeHByZXNzaW9uKHNob3dTdWJTZWN0aW9uVGl0bGUpLCAvLyBUaGlzIGlzIHVzZWQgb24gdGhlIE9iamVjdFBhZ2VTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSkgLy8gVGhpcyBpcyB1c2VkIHRvIGhpZGUgdGhlIFRpdGxlIGNvbnRyb2wgYWJvdmUgZGF0YSB2aXN1YWxpemF0aW9uc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmcm9tIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdFx0eyB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyB9XG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5Ob3RlOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdG8gaGlkZSBvciBzaG93IHRoZSBzdWJzZWN0aW9uIHRpdGxlLlxuICogQHBhcmFtIGNvbnRyb2xUaXRsZVxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZVxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgb3IgZXhwcmVzc2lvbiBmb3Igc2hvd1N1YlNlY3Rpb25UaXRsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZShcblx0Y29udHJvbFRpdGxlOiBzdHJpbmcsXG5cdHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyB2aXNpYmxlIHNoYWxsIGJlIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRlbnQgb3IgaWYgdGhlIGNvbnRyb2wgYW5kIHN1YnNlY3Rpb24gdGl0bGUgYXJlIGRpZmZlcmVudFxuXHRyZXR1cm4gb3Iobm90KGhhc1NpbmdsZUNvbnRlbnQpLCBub3RFcXVhbChyZXNvbHZlQmluZGluZ1N0cmluZyhjb250cm9sVGl0bGUpLCByZXNvbHZlQmluZGluZ1N0cmluZyhzdWJTZWN0aW9uVGl0bGUpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24+KHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyBhc1xuXHRcdFx0XHRcdFx0fCBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj5cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpLmFjdGlvbnM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9uUmVkdWNlciwgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHRcdDogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uID1cblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHRcdH0sIGFjdGlvbnMpO1xuXHR9XG5cblx0Ly8gbm8gb3ZlcnJpZGVzIGhlcmUsIHRoZXkgYXJlIGRvbmUgaW4gYSBsYXRlciBzdGVwIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg/OiBzdHJpbmdcbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgIWRhdGFGaWVsZC5JbmxpbmUgPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCwgLy8gSW5saW5lIEFjdGlvbnMgZG9uJ3QgbmVlZCB0aGUgYmluZGluZyBhcyB0aGV5IGFyZSBpbnNpZGUgdGhlIEZvcm1cblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0cmVxdWlyZXNEaWFsb2c6IGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpLFxuXHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmbihcblx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIHBhdGhJbk1vZGVsKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRtb2RlbDogZm4oXCJnZXRNb2RlbFwiLCBbXSwgcGF0aEluTW9kZWwoXCIvXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUoZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XSksXG5cdFx0XHRcdFx0XHRmZUZyYW1ld29ya0NhbGw6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdHJlZihcIi5lZGl0Rmxvd1wiKVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0ZmFjZXROYW1lOiBkYXRhRmllbGQuSW5saW5lID8gZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogQWN0aW9uIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBnZXRTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5lbmFibGVMYXp5TG9hZGluZyA/PyBmYWxzZSxcblx0XHRjb21wb25lbnROYW1lOiBcIlwiLFxuXHRcdHNldHRpbmdzOiBcIlwiLFxuXHRcdGFwcGx5U3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5yZXRyaWV2ZVN0YXRlXG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24gYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2UgaWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLmNvbXBvbmVudE5hbWUgPSBtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQubmFtZTtcblx0XHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpZWQgb24gdGhlIHRhYmxlLlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbiAoc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0O1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BK0VZQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFDSjtJQURWQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQUEsT0FBZEEsY0FBYztFQUFBO0VBQUFDLFFBQUEsQ0FBQUQsY0FBQSxHQUFBQSxjQUFBO0VBa0gxQixNQUFNRSxrQkFBNEIsR0FBRyx3TEFLcEM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLGlCQUFpQkEsQ0FDaENDLGVBQTZC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
@@ -46,7 +46,9 @@ import {
46
46
  getMatchingManifestAction,
47
47
  getSemanticObjectMapping,
48
48
  getVisibilityEnablementMenuActions,
49
+ isActionAIOperation,
49
50
  isActionNavigable,
51
+ isMenuAIOperation,
50
52
  prepareMenuActions,
51
53
  removeDuplicateActions
52
54
  } from "sap/fe/core/converters/controls/Common/Action";
@@ -767,6 +769,7 @@ function createFormActionReducer(
767
769
  key: KeyHelper.generateKeyFromDataField(dataField),
768
770
  id: getFormID(facetDefinition, dataField),
769
771
  visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
772
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined,
770
773
  menu: dataField.Actions.map((action) => {
771
774
  const formManifestMenuActionsConfiguration =
772
775
  converterContext.getManifestControlConfiguration<FormManifestConfiguration>(referenceTarget).actions;
@@ -806,10 +809,11 @@ function getDataFieldAnnotationAction(
806
809
  text: dataField.Label?.toString(),
807
810
  annotationPath: "",
808
811
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
809
- binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
812
+ binding: navigationPropertyPath && !dataField.Inline ? `{ 'path' : '${navigationPropertyPath}'}` : undefined, // Inline Actions don't need the binding as they are inside the Form
810
813
  visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
811
814
  requiresDialog: isActionWithDialog(dataField),
812
815
  buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
816
+ isAIOperation: isActionAIOperation(dataField) === true || undefined,
813
817
  press: compileExpression(
814
818
  fn(
815
819
  "invokeAction",