@sapui5/sap.fe.core 1.141.2 → 1.142.1

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 (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -25,9 +25,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
25
25
  * @param parameters.events The events for the operation
26
26
  * @param parameters.events.onStrictValidation The event triggered when the strict handling is validated by the end user
27
27
  * @param parameters.events.onStrictCancel The event triggered when the strict handling is canceled by the end user
28
- * @param parameters.events.onStrictResponse The event triggered when the backend returns 412 messages (strict handling)
29
- * @param parameters.events.onODataResponse The event triggered when all responses related to the Fiori element operations are received
30
- * @param parameters.events.onODataSubmit The event triggered when the batch is submitted (request sent to the back end)
28
+ * @param parameters.events.onStrictResponse The event triggered when the backend returns 412 messages regarding strict handling,
29
+ * @param parameters.events.onODataResponse The event triggered when all responses related to SAP Fiori element operations are received
30
+ * @param parameters.events.onODataSubmit The event triggered when the batch is submitted. The request is sent to the back end.
31
31
  * @param parameters.events.onAfterODataInvoke The event triggered when the promise of invoke method of the oDataContextBinding is resolved
32
32
  * @param parameters.events.onAfterODataOperationExecution The event triggered when first responses related to the Fiori element operations are received (before strict handling or final response if no 412 are received)
33
33
  * @param parameters.events.onRequestSideEffects The event triggered when side effects are requested
@@ -93,8 +93,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
93
93
  /* The former logic checked if the messagesPath is contained into the SideEffects
94
94
  but the check was invalid (always true)
95
95
  To be compliant with former version we don't check the SideEffects..
96
-
97
- this.sideEffects &&
96
+ this.sideEffects &&
98
97
  messagesPath &&
99
98
  (this.sideEffects.pathExpressions ?? []).some((exp) => typeof exp === "string" && [messagesPath, "*"].includes(exp))*/
100
99
  messagesPath && !!returnEntityType?.entityProperties.find(property => property.name === messagesPath) && !existingSelect.includes(messagesPath)) {
@@ -277,8 +276,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
277
276
  if (this.isContinueOnErrorCompliant) {
278
277
  this.parameters.model.setContinueOnError(groupId);
279
278
  }
279
+ this.parameters.model.submitBatch(groupId); // SubmitBatch is done before requesting side effects to ensure the correct order of the requests in the batch
280
280
  this.requestSideEffects(sideEffectsContext, groupId, []);
281
- this.parameters.model.submitBatch(groupId);
282
281
  }), this.operationProperties.replaceWithRVC);
283
282
  this.requestSideEffects(sideEffectsContext, groupId, [operationInvoke]);
284
283
  await Promise.race([operationInvoke, strictHandlingPromise]);
@@ -421,6 +420,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
421
420
  case "Edm.Int16":
422
421
  case "Edm.Int32":
423
422
  case "Edm.Int64":
423
+ case "Edm.Decimal":
424
424
  defaultValues[name] = 0;
425
425
  break;
426
426
  default:
@@ -468,4 +468,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
468
468
  _exports = ODataOperation;
469
469
  return _exports;
470
470
  }, false);
471
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFwaUdyb3VwSWQiLCJhY3Rpb24iLCJpc0FjdGlvbiIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwic2lkZUVmZmVjdHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiY29udGV4dHMiLCJpc0Z1bmN0aW9uIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwib0RhdGFTdHJpY3RIYW5kbGluZyIsIk9EYXRhU3RyaWN0SGFuZGxpbmciLCJsYWJlbCIsImludm9jYXRpb25Hcm91cGluZyIsImV2ZW50cyIsIm9uUmVzcG9uc2UiLCJvblN0cmljdFJlc3BvbnNlIiwib25WYWxpZGF0aW9uIiwib25TdHJpY3RWYWxpZGF0aW9uIiwiYmluZCIsIm9uQ2FuY2VsIiwib25TdHJpY3RDYW5jZWwiLCJkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzIiwic2V0QmluZGluZ1BhcmFtZXRlcnMiLCJpc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudCIsIkNoYW5nZVNldCIsImdyb3VwSWQiLCJpc0FQSU1vZGUiLCJkZWZlcnJlZFN1Ym1pdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiZW5oYW5jZSRzZWxlY3QiLCJleGlzdGluZ1NlbGVjdCIsIiRzZWxlY3QiLCJzcGxpdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImlzU2FtZUVudGl0eSIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJpbmNsdWRlcyIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJleGVjdXRlT3BlcmF0aW9uIiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0IiwicHVzaCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsInByb21pc2VzIiwiaW52b2tlIiwiZGVmYXVsdFN1Ym1pdCIsImFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24iLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImFsbCIsInNldENvbnRpbnVlT25FcnJvciIsIm1hcCIsImNvbnRleHQiLCJleGVjdXRlQm91bmRPcGVyYXRpb24iLCJtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzIiwib25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwicmVkdWNlIiwicHJvbWlzZSIsImlkIiwicmVzb2x2ZSIsImZpbmFsR3JvdXBJZCIsImdldFVwZGF0ZUdyb3VwSWQiLCJvcGVyYXRpb25Qcm9taXNlIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwicmV0dXJuZWRDb250ZXh0IiwiZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24iLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInNvbWUiLCJwYWdlVmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJkaWFsb2ciLCJmaXJzdEl0ZXJhdGlvblJlc29sdmUiLCJmaXJzdEl0ZXJhdGlvblJlamVjdCIsInN0cmljdEhhbmRsaW5nUHJvbWlzZSIsInJlamVjdCIsImFkZCIsInNpZGVFZmZlY3RzQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25JbnZva2UiLCJpZ25vcmVFVGFnIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsInN1Ym1pdEJhdGNoIiwicmVwbGFjZVdpdGhSVkMiLCJyYWNlIiwib25BZnRlck9EYXRhSW52b2tlIiwiYm91bmRDb250ZXh0IiwicmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMiLCJhcGlSZXRyaWdnZXJHcm91cElkIiwiaW5kZXgiLCJmYWlsZWRDb250ZXh0Iiwic3VibWl0Iiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsInN1Ym1pdE9uTW9kZWwiLCJvbk9EYXRhU3VibWl0IiwiaXNTdHJpY3RDYW5jZWxlZCIsImlzQ2FuY2VsZWQiLCJkZWxldGUiLCJzdGFydHNXaXRoIiwic3VibWl0TW9kZSIsImdldE1hbmlmZXN0RW50cnkiLCJtb2RlbHMiLCJzZXR0aW5ncyIsImdyb3VwUHJvcGVydGllcyIsIlN1Ym1pdE1vZGUiLCJBdXRvIiwiRGlyZWN0IiwiZmlyc3RTdWJtaXQiLCJkZWZhdWx0VmFsdWVzIiwicGFyYW1ldGVyc1ZhbHVlcyIsInBhcmFtZXRlciIsInR5cGUiLCJzZXRQYXJhbWV0ZXIiLCJsb2NhbFByb21pc2UiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJkaXNhYmxlU2lkZUVmZmVjdHMiLCJjb25jYXQiLCJ0cmlnZ2VyQWN0aW9ucyIsImV4ZWN1dGVBY3Rpb24iLCJwYXRoRXhwcmVzc2lvbnMiLCJvblJlcXVlc3RTaWRlRWZmZWN0cyIsImluZm8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9EYXRhT3BlcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uSW1wb3J0LCBBY3Rpb25QYXJhbWV0ZXIsIEFjdGlvbiBhcyBFZG1BY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU3VibWl0TW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L1N1Ym1pdE1vZGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCIuLi9kcmFmdFwiO1xuaW1wb3J0IE9EYXRhU3RyaWN0SGFuZGxpbmcgZnJvbSBcIi4vT0RhdGFTdHJpY3RIYW5kbGluZ1wiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwiLi9hY3Rpb25IZWxwZXJcIjtcblxuY29uc3QgSW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0ge1xuXHRyZXR1cm5lZENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0Ym91bmRDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhT3BlcmF0aW9uIHtcblx0cHJpdmF0ZSBvcGVyYXRpb25Db250ZXh0QmluZGluZ3M6IE9EYXRhQ29udGV4dEJpbmRpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFwaUdyb3VwSWRzVG9TdWJtaXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJpbmRpbmdQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRwcml2YXRlIG5ldmVyU3VibWl0dGVkID0gdHJ1ZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9EYXRhU3RyaWN0SGFuZGxpbmc6IE9EYXRhU3RyaWN0SGFuZGxpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBmYWlsZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUHJvbWlzZXM6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PltdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBhcGlHcm91cElkID0gXCJhcGlNb2RlXCI7XG5cblx0cHJpdmF0ZSByZWFkb25seSBpc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBPRGF0YU9wZXJhdGlvbi5cblx0ICogVGhpcyBpbnN0YW5jZSBpcyB1c2VkIHRvIGV4ZWN1dGUgb24gdGhlIG1vZGVsIGFuIE9EYXRhIG9wZXJhdGlvbiwgd2hpY2ggY2FuIGJlIGFuIGFjdGlvbiBvciBhbiBhY3Rpb24gaW1wb3J0LlxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuIFRoaXMgY2FuIGJlIGFuIGFjdGlvbiBvciBhbiBpbXBvcnQuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmNvbnRleHRzIFRoZSBjb250ZXh0cyB0byBiZSB1c2VkIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm1vZGVsIFRoZSBPRGF0YU1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyBUaGUgaW52b2NhdGlvbiBncm91cGluZyBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBjYW4gYmUgJ0NoYW5nZVNldCcgb3IgJ0lzb2xhdGVkJy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nIElmIHRydWUsIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgZGlzYWJsZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzIElmIHRydWUsIHRoZSBzaWRlIGVmZmVjdHMgYXJlIGRpc2FibGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIElmIHRydWUsIHRoZSBnaG9zdCBjb250ZXh0IGJpbmRpbmcgcHJvdGVjdGlvbiBpcyBlbmFibGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmxhYmVsIFRoZSBsYWJlbCBmb3IgdGhlIG9wZXJhdGlvbiwgdXNlZCBpbiB0aGUgc3RyaWN0IGhhbmRsaW5nXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cyBUaGUgZXZlbnRzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblN0cmljdFZhbGlkYXRpb24gVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25TdHJpY3RDYW5jZWwgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIGVuZCB1c2VyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblN0cmljdFJlc3BvbnNlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgYmFja2VuZCByZXR1cm5zIDQxMiBtZXNzYWdlcyAoc3RyaWN0IGhhbmRsaW5nKVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25PRGF0YVJlc3BvbnNlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uT0RhdGFTdWJtaXQgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBiYXRjaCBpcyBzdWJtaXR0ZWQgKHJlcXVlc3Qgc2VudCB0byB0aGUgYmFjayBlbmQpXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vbkFmdGVyT0RhdGFJbnZva2UgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBwcm9taXNlIG9mIGludm9rZSBtZXRob2Qgb2YgdGhlIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgcmVzb2x2ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gZmlyc3QgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWQgKGJlZm9yZSBzdHJpY3QgaGFuZGxpbmcgb3IgZmluYWwgcmVzcG9uc2UgaWYgbm8gNDEyIGFyZSByZWNlaXZlZClcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uUmVxdWVzdFNpZGVFZmZlY3RzIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiBzaWRlIGVmZmVjdHMgYXJlIHJlcXVlc3RlZFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzIFRoZSB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMgVGhlIG1vZGVsIHByb3BlcnRpZXMgZm9yIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMuZW5oYW5jZSRzZWxlY3QgSWYgdHJ1ZSwgdGhlICRzZWxlY3QgcGFyYW1ldGVyIGlzIGVuaGFuY2VkIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIChlLmcuIE1lc3NhZ2VzKVxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkIFRoZSBncm91cElkIGZvciB0aGUgb3BlcmF0aW9uLCB1c2VkIGZvciBiYXRjaCBwcm9jZXNzaW5nXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzIFRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMuZGVmZXJyZWRTdWJtaXQgSWYgdHJ1ZSwgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VibWl0dGVkIGltbWVkaWF0ZWx5IGFuZCBtdXN0IGJlIHN1Ym1pdHRlZCBieSB0aGUgZGV2ZWxvcGVyXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzLmlnbm9yZUVUYWcgSWYgdHJ1ZSwgdGhlIEVUYWcgaXMgaWdub3JlZCBmb3IgdGhlIG9wZXJhdGlvblxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uUHJvcGVydGllcy5yZXBsYWNlV2l0aFJWQyBXaGV0aGVyIHRoaXMgb3BlcmF0aW9uIGJpbmRpbmcncyBwYXJlbnQgY29udGV4dCwgd2hpY2ggbXVzdCBiZWxvbmcgdG8gYSBsaXN0IGJpbmRpbmcsIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9wZXJhdGlvbidzIHJldHVybiB2YWx1ZSBjb250ZXh0IChzZWUgYmVsb3cpIGFuZCB0aGF0IGxpc3QgY29udGV4dCBpcyByZXR1cm5lZCBpbnN0ZWFkXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGRpc2FibGVTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25TdHJpY3RWYWxpZGF0aW9uPzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25TdHJpY3RDYW5jZWw/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblN0cmljdFJlc3BvbnNlPzogKG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10pID0+IHZvaWQ7XG5cdFx0XHRcdG9uT0RhdGFSZXNwb25zZT86ICgpID0+IHZvaWQ7XG5cdFx0XHRcdG9uT0RhdGFTdWJtaXQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvbkFmdGVyT0RhdGFJbnZva2U/OiAob2RhdGFDb250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKSA9PiBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0XHRvbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24/OiAoKSA9PiBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0XHRvblJlcXVlc3RTaWRlRWZmZWN0cz86IChcblx0XHRcdFx0XHRzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlLFxuXHRcdFx0XHRcdG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXVxuXHRcdFx0XHQpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25Qcm9wZXJ0aWVzOiB7XG5cdFx0XHRlbmhhbmNlJHNlbGVjdD86IGJvb2xlYW47XG5cdFx0XHRncm91cElkPzogc3RyaW5nO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0XHRkZWZlcnJlZFN1Ym1pdD86IGJvb2xlYW47XG5cdFx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0XHRcdHJlcGxhY2VXaXRoUlZDPzogYm9vbGVhbjtcblx0XHR9ID0ge31cblx0KSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pID8gdGhpcy5vcGVyYXRpb24gOiB0aGlzLm9wZXJhdGlvbi5hY3Rpb247XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUoYWN0aW9uKTtcblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdC5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHRoaXMuYWN0aW9uTmFtZSwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoIWFjdGlvbi5pc0Z1bmN0aW9uICYmIHRoaXMucGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcgIT09IHRydWUpIHtcblx0XHRcdHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZyA9IG5ldyBPRGF0YVN0cmljdEhhbmRsaW5nKHtcblx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRjb250ZXh0czogdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLFxuXHRcdFx0XHRsYWJlbDogdGhpcy5wYXJhbWV0ZXJzLmxhYmVsID8/IHRoaXMuYWN0aW9uTmFtZSxcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiB0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRldmVudHM6IHtcblx0XHRcdFx0XHRvblJlc3BvbnNlOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFJlc3BvbnNlLFxuXHRcdFx0XHRcdG9uVmFsaWRhdGlvbjogdGhpcy5vblN0cmljdFZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdFx0XHRvbkNhbmNlbDogdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RDYW5jZWxcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycygpO1xuXHRcdHRoaXMuc2V0QmluZGluZ1BhcmFtZXRlcnMoKTtcblxuXHRcdHRoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQgPVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyAhPT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCAmJlxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEgJiZcblx0XHRcdCghdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgfHwgdGhpcy5pc0FQSU1vZGUodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpKSAmJlxuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJpbmRpbmdQYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMgPSBkZWVwQ2xvbmUodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzID8/IHt9KTtcblxuXHRcdGlmIChcblx0XHRcdGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJlxuXHRcdFx0IXRoaXMub3BlcmF0aW9uLmlzRnVuY3Rpb24gJiZcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiZcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdTZWxlY3QgPSAodGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRcdGNvbnN0IHJldHVybkVudGl0eVR5cGUgPSB0aGlzLm9wZXJhdGlvbi5yZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1ldGFNb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSkhO1xuXHRcdFx0Y29uc3QgaXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IXRoaXMub3BlcmF0aW9uLnJldHVybkNvbGxlY3Rpb24gJiYgISFyZXR1cm5FbnRpdHlUeXBlICYmIHRoaXMub3BlcmF0aW9uLnNvdXJjZUVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRpZiAoaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQvKiBUaGUgZm9ybWVyIGxvZ2ljIGNoZWNrZWQgaWYgdGhlIG1lc3NhZ2VzUGF0aCBpcyBjb250YWluZWQgaW50byB0aGUgU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBjaGVjayB3YXMgaW52YWxpZCAoYWx3YXlzIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9uIHdlIGRvbid0IGNoZWNrIHRoZSBTaWRlRWZmZWN0cy4uXG5cdFx0XHRcdFx0ICAgXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gdGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHttZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0OiBtZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQgfHwgdGhpcy5pc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudFxuXHRcdFx0XHRcdD8gdGhpcy5leGVjdXRlT3BlcmF0aW9uKClcblx0XHRcdFx0XHQ6IHRoaXMuZXhlY3V0ZVNlcXVlbnRpYWxseSgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbdGhpcy5leGVjdXRlSW1wb3J0KCldKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIG9wZXJhdGlvbiBcIiArIHRoaXMuYWN0aW9uTmFtZSwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbk9EYXRhUmVzcG9uc2U/LigpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVJbXBvcnQoKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRjb25zdCBvcGVyYXRpb25Db250ZXh0ID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmJpbmRDb250ZXh0KGAvJHt0aGlzLmFjdGlvbk5hbWV9KC4uLilgKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncy5wdXNoKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdHRoaXMuc2V0UGFyYW1ldGVyc1ZhbHVlKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdGNvbnN0IGdyb3VwSWQgPSB0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZ3JvdXBJZCA/PyBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IHByb21pc2VzID0gW3RoaXMuaW52b2tlKG9wZXJhdGlvbkNvbnRleHQsIGdyb3VwSWQpXTtcblxuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChncm91cElkKTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdGNvbnN0IGN1cnJlbnRQcm9taXNlVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdHJldHVybiBjdXJyZW50UHJvbWlzZVZhbHVlc1swXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZU9wZXJhdGlvbigpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQ7XG5cdFx0aWYgKHRoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQpIHtcblx0XHRcdGdyb3VwSWQgPSBncm91cElkID8/IHRoaXMuYXBpR3JvdXBJZDtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5tb2RlbC5zZXRDb250aW51ZU9uRXJyb3IoZ3JvdXBJZCk7XG5cdFx0fVxuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PiB0aGlzLmV4ZWN1dGVCb3VuZE9wZXJhdGlvbihjb250ZXh0LCBncm91cElkKSk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMub3BlcmF0aW9uUHJvbWlzZXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZz8ubWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscygpO1xuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbj8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uc1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlU2VxdWVudGlhbGx5KCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdPiB7XG5cdFx0Ly8gc2VyaWFsaXphdGlvbjogZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBvbmx5IGFmdGVyIHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIG9uZSBiZWZvcmUgaGFzIGJlZW4gcmVzb2x2ZWRcblx0XHRhd2FpdCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMucmVkdWNlKGFzeW5jIChwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMucHVzaChcblx0XHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gYCR7dGhpcy5hcGlHcm91cElkfSR7aWQgKyAxfWApXG5cdFx0XHQpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmlzQ29udGludWVPbkVycm9yQ29tcGxpYW50KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5tb2RlbC5zZXRDb250aW51ZU9uRXJyb3IoZ3JvdXBJZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0NvbnRleHQsIGdyb3VwSWQsIFtdKTtcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5tb2RlbC5zdWJtaXRCYXRjaChncm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5yZXBsYWNlV2l0aFJWQ1xuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW29wZXJhdGlvbkludm9rZV0pO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5yYWNlKFtvcGVyYXRpb25JbnZva2UsIHN0cmljdEhhbmRsaW5nUHJvbWlzZV0pO1xuXG5cdFx0XHRyZXR1cm5lZENvbnRleHQgPSBhd2FpdCBvcGVyYXRpb25JbnZva2U7XG5cdFx0XHR0aGlzLmVuaGFuY2VTaWRlRWZmZWN0cyhvcGVyYXRpb25Db250ZXh0QmluZGluZywgcmV0dXJuZWRDb250ZXh0KTtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVzb2x2ZSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlamVjdChlcnJvcik7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0dGhpcy5mYWlsZWRDb250ZXh0cy5wdXNoKGNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQWZ0ZXJPRGF0YUludm9rZT8uKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCBncm91cElkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmV0dXJuZWRDb250ZXh0LFxuXHRcdFx0Ym91bmRDb250ZXh0OiBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQoKVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogIE1hbmFnZXMgdGhlIHN0cmljdCBoYW5kbGluZyB2YWxpZGF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvblN0cmljdFZhbGlkYXRpb24oKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RWYWxpZGF0aW9uPy4oKTtcblx0XHR0aGlzLnJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIHdoZW4gc3RyaWN0IGhhbmRsaW5nIGlzIHRydWUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBuZXcgb3BlcmF0aW9ucyBhcmUgcmVzb2x2ZWRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9SZXRyeSB0aGUgYWN0aW9uIGV4ZWN1dGlvbiBpbiBjYXNlIG9mIHN0cmljdCBoYW5kbGluZyBhbmQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGZhaWxlZCBjb250ZXh0IChnaXZlIGl0IGFub3RoZXIgdHJ5IHRvIHN1Y2NlZWQpXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgIT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpIHtcblx0XHRcdGNvbnN0IGFwaVJldHJpZ2dlckdyb3VwSWQgPSBcImFwaVJldHJpZ2dlclwiO1xuXHRcdFx0aWYgKHRoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQpIHtcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnNldENvbnRpbnVlT25FcnJvcihhcGlSZXRyaWdnZXJHcm91cElkKTtcblx0XHRcdH1cblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IGZhaWxlZENvbnRleHQgb2YgdGhpcy5mYWlsZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBncm91cElkID0gYCR7YXBpUmV0cmlnZ2VyR3JvdXBJZH0ke3RoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQgPyBcIlwiIDogaW5kZXggKyAxfWA7XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmV4ZWN1dGVCb3VuZE9wZXJhdGlvbihmYWlsZWRDb250ZXh0LCBncm91cElkKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzICYmICF0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzID09PSB0cnVlKSB7XG5cdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKGFjdGlvbiwgY29udGV4dCwgeyBzdWJtaXRCYXRjaDogZmFsc2UsIGdyb3VwSWQgfSk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9uc1xuXHRcdFx0XHRcdD8gc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucywgY29udGV4dCwgZ3JvdXBJZClcblx0XHRcdFx0XHQ6IFtdXG5cdFx0XHQpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0XHRpZiAodGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlcXVlc3RTaWRlRWZmZWN0cz8uKHRoaXMuc2lkZUVmZmVjdHMsIHRoaXMub3BlcmF0aW9uLCBwcm9taXNlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHMgZm9yIHRoZSBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQW1CQSxNQUFNQSxrQkFBa0IsR0FBR0MsU0FBUyxDQUFDRCxrQkFBa0I7RUFBQyxJQU9uQ0UsY0FBYztJQTJCbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxTQUFBQSxlQUNrQkMsU0FBbUMsRUFDbkNDLFVBd0JoQixFQVNBO01BQUEsSUFSZ0JDLG1CQU9oQixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFB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
471
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFwaUdyb3VwSWQiLCJhY3Rpb24iLCJpc0FjdGlvbiIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwic2lkZUVmZmVjdHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiY29udGV4dHMiLCJpc0Z1bmN0aW9uIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwib0RhdGFTdHJpY3RIYW5kbGluZyIsIk9EYXRhU3RyaWN0SGFuZGxpbmciLCJsYWJlbCIsImludm9jYXRpb25Hcm91cGluZyIsImV2ZW50cyIsIm9uUmVzcG9uc2UiLCJvblN0cmljdFJlc3BvbnNlIiwib25WYWxpZGF0aW9uIiwib25TdHJpY3RWYWxpZGF0aW9uIiwiYmluZCIsIm9uQ2FuY2VsIiwib25TdHJpY3RDYW5jZWwiLCJkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzIiwic2V0QmluZGluZ1BhcmFtZXRlcnMiLCJpc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudCIsIkNoYW5nZVNldCIsImdyb3VwSWQiLCJpc0FQSU1vZGUiLCJkZWZlcnJlZFN1Ym1pdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiZW5oYW5jZSRzZWxlY3QiLCJleGlzdGluZ1NlbGVjdCIsIiRzZWxlY3QiLCJzcGxpdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImlzU2FtZUVudGl0eSIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJpbmNsdWRlcyIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJleGVjdXRlT3BlcmF0aW9uIiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0IiwicHVzaCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsInByb21pc2VzIiwiaW52b2tlIiwiZGVmYXVsdFN1Ym1pdCIsImFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24iLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImFsbCIsInNldENvbnRpbnVlT25FcnJvciIsIm1hcCIsImNvbnRleHQiLCJleGVjdXRlQm91bmRPcGVyYXRpb24iLCJtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzIiwib25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwicmVkdWNlIiwicHJvbWlzZSIsImlkIiwicmVzb2x2ZSIsImZpbmFsR3JvdXBJZCIsImdldFVwZGF0ZUdyb3VwSWQiLCJvcGVyYXRpb25Qcm9taXNlIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwicmV0dXJuZWRDb250ZXh0IiwiZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24iLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInNvbWUiLCJwYWdlVmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJkaWFsb2ciLCJmaXJzdEl0ZXJhdGlvblJlc29sdmUiLCJmaXJzdEl0ZXJhdGlvblJlamVjdCIsInN0cmljdEhhbmRsaW5nUHJvbWlzZSIsInJlamVjdCIsImFkZCIsInNpZGVFZmZlY3RzQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25JbnZva2UiLCJpZ25vcmVFVGFnIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsInN1Ym1pdEJhdGNoIiwicmVwbGFjZVdpdGhSVkMiLCJyYWNlIiwib25BZnRlck9EYXRhSW52b2tlIiwiYm91bmRDb250ZXh0IiwicmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMiLCJhcGlSZXRyaWdnZXJHcm91cElkIiwiaW5kZXgiLCJmYWlsZWRDb250ZXh0Iiwic3VibWl0Iiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsInN1Ym1pdE9uTW9kZWwiLCJvbk9EYXRhU3VibWl0IiwiaXNTdHJpY3RDYW5jZWxlZCIsImlzQ2FuY2VsZWQiLCJkZWxldGUiLCJzdGFydHNXaXRoIiwic3VibWl0TW9kZSIsImdldE1hbmlmZXN0RW50cnkiLCJtb2RlbHMiLCJzZXR0aW5ncyIsImdyb3VwUHJvcGVydGllcyIsIlN1Ym1pdE1vZGUiLCJBdXRvIiwiRGlyZWN0IiwiZmlyc3RTdWJtaXQiLCJkZWZhdWx0VmFsdWVzIiwicGFyYW1ldGVyc1ZhbHVlcyIsInBhcmFtZXRlciIsInR5cGUiLCJzZXRQYXJhbWV0ZXIiLCJsb2NhbFByb21pc2UiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJkaXNhYmxlU2lkZUVmZmVjdHMiLCJjb25jYXQiLCJ0cmlnZ2VyQWN0aW9ucyIsImV4ZWN1dGVBY3Rpb24iLCJwYXRoRXhwcmVzc2lvbnMiLCJvblJlcXVlc3RTaWRlRWZmZWN0cyIsImluZm8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9EYXRhT3BlcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uSW1wb3J0LCBBY3Rpb25QYXJhbWV0ZXIsIEFjdGlvbiBhcyBFZG1BY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU3VibWl0TW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L1N1Ym1pdE1vZGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCIuLi9kcmFmdFwiO1xuaW1wb3J0IE9EYXRhU3RyaWN0SGFuZGxpbmcgZnJvbSBcIi4vT0RhdGFTdHJpY3RIYW5kbGluZ1wiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwiLi9hY3Rpb25IZWxwZXJcIjtcblxuY29uc3QgSW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0ge1xuXHRyZXR1cm5lZENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0Ym91bmRDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhT3BlcmF0aW9uIHtcblx0cHJpdmF0ZSBvcGVyYXRpb25Db250ZXh0QmluZGluZ3M6IE9EYXRhQ29udGV4dEJpbmRpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFwaUdyb3VwSWRzVG9TdWJtaXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJpbmRpbmdQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRwcml2YXRlIG5ldmVyU3VibWl0dGVkID0gdHJ1ZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9EYXRhU3RyaWN0SGFuZGxpbmc6IE9EYXRhU3RyaWN0SGFuZGxpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBmYWlsZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUHJvbWlzZXM6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PltdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBhcGlHcm91cElkID0gXCJhcGlNb2RlXCI7XG5cblx0cHJpdmF0ZSByZWFkb25seSBpc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBPRGF0YU9wZXJhdGlvbi5cblx0ICogVGhpcyBpbnN0YW5jZSBpcyB1c2VkIHRvIGV4ZWN1dGUgb24gdGhlIG1vZGVsIGFuIE9EYXRhIG9wZXJhdGlvbiwgd2hpY2ggY2FuIGJlIGFuIGFjdGlvbiBvciBhbiBhY3Rpb24gaW1wb3J0LlxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuIFRoaXMgY2FuIGJlIGFuIGFjdGlvbiBvciBhbiBpbXBvcnQuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmNvbnRleHRzIFRoZSBjb250ZXh0cyB0byBiZSB1c2VkIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm1vZGVsIFRoZSBPRGF0YU1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyBUaGUgaW52b2NhdGlvbiBncm91cGluZyBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBjYW4gYmUgJ0NoYW5nZVNldCcgb3IgJ0lzb2xhdGVkJy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nIElmIHRydWUsIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgZGlzYWJsZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzIElmIHRydWUsIHRoZSBzaWRlIGVmZmVjdHMgYXJlIGRpc2FibGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIElmIHRydWUsIHRoZSBnaG9zdCBjb250ZXh0IGJpbmRpbmcgcHJvdGVjdGlvbiBpcyBlbmFibGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmxhYmVsIFRoZSBsYWJlbCBmb3IgdGhlIG9wZXJhdGlvbiwgdXNlZCBpbiB0aGUgc3RyaWN0IGhhbmRsaW5nXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cyBUaGUgZXZlbnRzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblN0cmljdFZhbGlkYXRpb24gVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25TdHJpY3RDYW5jZWwgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIGVuZCB1c2VyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblN0cmljdFJlc3BvbnNlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgYmFja2VuZCByZXR1cm5zIDQxMiBtZXNzYWdlcyByZWdhcmRpbmcgc3RyaWN0IGhhbmRsaW5nLFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25PRGF0YVJlc3BvbnNlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gU0FQIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uT0RhdGFTdWJtaXQgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBiYXRjaCBpcyBzdWJtaXR0ZWQuIFRoZSByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIGJhY2sgZW5kLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25BZnRlck9EYXRhSW52b2tlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgcHJvbWlzZSBvZiBpbnZva2UgbWV0aG9kIG9mIHRoZSBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIHJlc29sdmVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24gVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIGZpcnN0IHJlc3BvbnNlcyByZWxhdGVkIHRvIHRoZSBGaW9yaSBlbGVtZW50IG9wZXJhdGlvbnMgYXJlIHJlY2VpdmVkIChiZWZvcmUgc3RyaWN0IGhhbmRsaW5nIG9yIGZpbmFsIHJlc3BvbnNlIGlmIG5vIDQxMiBhcmUgcmVjZWl2ZWQpXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblJlcXVlc3RTaWRlRWZmZWN0cyBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gc2lkZSBlZmZlY3RzIGFyZSByZXF1ZXN0ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlcyBUaGUgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzIFRoZSBtb2RlbCBwcm9wZXJ0aWVzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzLmVuaGFuY2Ukc2VsZWN0IElmIHRydWUsIHRoZSAkc2VsZWN0IHBhcmFtZXRlciBpcyBlbmhhbmNlZCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyAoZS5nLiBNZXNzYWdlcylcblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMuZ3JvdXBJZCBUaGUgZ3JvdXBJZCBmb3IgdGhlIG9wZXJhdGlvbiwgdXNlZCBmb3IgYmF0Y2ggcHJvY2Vzc2luZ1xuXHQgKiBAcGFyYW0gb3BlcmF0aW9uUHJvcGVydGllcy5iaW5kaW5nUGFyYW1ldGVycyBUaGUgYmluZGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0IElmIHRydWUsIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1Ym1pdHRlZCBpbW1lZGlhdGVseSBhbmQgbXVzdCBiZSBzdWJtaXR0ZWQgYnkgdGhlIGRldmVsb3BlclxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnIElmIHRydWUsIHRoZSBFVGFnIGlzIGlnbm9yZWQgZm9yIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMucmVwbGFjZVdpdGhSVkMgV2hldGhlciB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nJ3MgcGFyZW50IGNvbnRleHQsIHdoaWNoIG11c3QgYmVsb25nIHRvIGEgbGlzdCBiaW5kaW5nLCBpcyByZXBsYWNlZCB3aXRoIHRoZSBvcGVyYXRpb24ncyByZXR1cm4gdmFsdWUgY29udGV4dCAoc2VlIGJlbG93KSBhbmQgdGhhdCBsaXN0IGNvbnRleHQgaXMgcmV0dXJuZWQgaW5zdGVhZFxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb246IEVkbUFjdGlvbiB8IEFjdGlvbkltcG9ydCxcblx0XHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHtcblx0XHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdFx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRtb2RlbDogT0RhdGFNb2RlbDtcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdFx0XHRkaXNhYmxlU2lkZUVmZmVjdHM/OiBib29sZWFuO1xuXHRcdFx0Z2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uU3RyaWN0VmFsaWRhdGlvbj86ICgpID0+IHZvaWQ7XG5cdFx0XHRcdG9uU3RyaWN0Q2FuY2VsPzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25TdHJpY3RSZXNwb25zZT86IChtZXNzYWdlczQxMjogTWVzc2FnZVtdKSA9PiB2b2lkO1xuXHRcdFx0XHRvbk9EYXRhUmVzcG9uc2U/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvbk9EYXRhU3VibWl0PzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25BZnRlck9EYXRhSW52b2tlPzogKG9kYXRhQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQ6IHN0cmluZykgPT4gUHJvbWlzZTx1bmtub3duPjtcblx0XHRcdFx0b25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPzogKCkgPT4gUHJvbWlzZTx1bmtub3duPjtcblx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM/OiAoXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSxcblx0XHRcdFx0XHRvcGVyYXRpb246IEVkbUFjdGlvbiB8IEFjdGlvbkltcG9ydCxcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzOiBQcm9taXNlPHVua25vd24+W11cblx0XHRcdFx0KSA9PiB2b2lkO1xuXHRcdFx0fTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uUHJvcGVydGllczoge1xuXHRcdFx0ZW5oYW5jZSRzZWxlY3Q/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRcdFx0ZGVmZXJyZWRTdWJtaXQ/OiBib29sZWFuO1xuXHRcdFx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdFx0XHRyZXBsYWNlV2l0aFJWQz86IGJvb2xlYW47XG5cdFx0fSA9IHt9XG5cdCkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSA/IHRoaXMub3BlcmF0aW9uIDogdGhpcy5vcGVyYXRpb24uYWN0aW9uO1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKGFjdGlvbik7XG5cblx0XHR0aGlzLnNpZGVFZmZlY3RzID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudFxuXHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHQuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyh0aGlzLmFjdGlvbk5hbWUsIHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPyB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0gOiB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKCFhY3Rpb24uaXNGdW5jdGlvbiAmJiB0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcgPSBuZXcgT0RhdGFTdHJpY3RIYW5kbGluZyh7XG5cdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0Y29udGV4dHM6IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cyxcblx0XHRcdFx0bGFiZWw6IHRoaXMucGFyYW1ldGVycy5sYWJlbCA/PyB0aGlzLmFjdGlvbk5hbWUsXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0ZXZlbnRzOiB7XG5cdFx0XHRcdFx0b25SZXNwb25zZTogdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RSZXNwb25zZSxcblx0XHRcdFx0XHRvblZhbGlkYXRpb246IHRoaXMub25TdHJpY3RWYWxpZGF0aW9uLmJpbmQodGhpcyksXG5cdFx0XHRcdFx0b25DYW5jZWw6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0Q2FuY2VsXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMoKTtcblx0XHR0aGlzLnNldEJpbmRpbmdQYXJhbWV0ZXJzKCk7XG5cblx0XHR0aGlzLmlzQ29udGludWVPbkVycm9yQ29tcGxpYW50ID1cblx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgIT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQgJiZcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxICYmXG5cdFx0XHQoIXRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkIHx8IHRoaXMuaXNBUElNb2RlKHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkKSkgJiZcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5kZWZlcnJlZFN1Ym1pdCAhPT0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXRCaW5kaW5nUGFyYW1ldGVycygpOiB2b2lkIHtcblx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzID0gZGVlcENsb25lKHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5iaW5kaW5nUGFyYW1ldGVycyA/PyB7fSk7XG5cblx0XHRpZiAoXG5cdFx0XHRpc0FjdGlvbih0aGlzLm9wZXJhdGlvbikgJiZcblx0XHRcdCF0aGlzLm9wZXJhdGlvbi5pc0Z1bmN0aW9uICYmXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoICYmXG5cdFx0XHR0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZW5oYW5jZSRzZWxlY3QgPT09IHRydWVcblx0XHQpIHtcblx0XHRcdGNvbnN0IGV4aXN0aW5nU2VsZWN0ID0gKHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpPy5zcGxpdChcIixcIikgPz8gW107XG5cdFx0XHRjb25zdCByZXR1cm5FbnRpdHlUeXBlID0gdGhpcy5vcGVyYXRpb24ucmV0dXJuRW50aXR5VHlwZTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpITtcblx0XHRcdGNvbnN0IGlzU2FtZUVudGl0eSA9XG5cdFx0XHRcdCF0aGlzLm9wZXJhdGlvbi5yZXR1cm5Db2xsZWN0aW9uICYmICEhcmV0dXJuRW50aXR5VHlwZSAmJiB0aGlzLm9wZXJhdGlvbi5zb3VyY2VFbnRpdHlUeXBlID09PSByZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0aWYgKGlzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0LyogVGhlIGZvcm1lciBsb2dpYyBjaGVja2VkIGlmIHRoZSBtZXNzYWdlc1BhdGggaXMgY29udGFpbmVkIGludG8gdGhlIFNpZGVFZmZlY3RzXG4gICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aGUgY2hlY2sgd2FzIGludmFsaWQgKGFsd2F5cyB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICBUbyBiZSBjb21wbGlhbnQgd2l0aCBmb3JtZXIgdmVyc2lvbiB3ZSBkb24ndCBjaGVjayB0aGUgU2lkZUVmZmVjdHMuLlxuXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gdGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHttZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0OiBtZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQgfHwgdGhpcy5pc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudFxuXHRcdFx0XHRcdD8gdGhpcy5leGVjdXRlT3BlcmF0aW9uKClcblx0XHRcdFx0XHQ6IHRoaXMuZXhlY3V0ZVNlcXVlbnRpYWxseSgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbdGhpcy5leGVjdXRlSW1wb3J0KCldKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIG9wZXJhdGlvbiBcIiArIHRoaXMuYWN0aW9uTmFtZSwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbk9EYXRhUmVzcG9uc2U/LigpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVJbXBvcnQoKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRjb25zdCBvcGVyYXRpb25Db250ZXh0ID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmJpbmRDb250ZXh0KGAvJHt0aGlzLmFjdGlvbk5hbWV9KC4uLilgKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncy5wdXNoKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdHRoaXMuc2V0UGFyYW1ldGVyc1ZhbHVlKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdGNvbnN0IGdyb3VwSWQgPSB0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZ3JvdXBJZCA/PyBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IHByb21pc2VzID0gW3RoaXMuaW52b2tlKG9wZXJhdGlvbkNvbnRleHQsIGdyb3VwSWQpXTtcblxuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChncm91cElkKTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdGNvbnN0IGN1cnJlbnRQcm9taXNlVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdHJldHVybiBjdXJyZW50UHJvbWlzZVZhbHVlc1swXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZU9wZXJhdGlvbigpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQ7XG5cdFx0aWYgKHRoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQpIHtcblx0XHRcdGdyb3VwSWQgPSBncm91cElkID8/IHRoaXMuYXBpR3JvdXBJZDtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5tb2RlbC5zZXRDb250aW51ZU9uRXJyb3IoZ3JvdXBJZCk7XG5cdFx0fVxuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PiB0aGlzLmV4ZWN1dGVCb3VuZE9wZXJhdGlvbihjb250ZXh0LCBncm91cElkKSk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMub3BlcmF0aW9uUHJvbWlzZXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZz8ubWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscygpO1xuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbj8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uc1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlU2VxdWVudGlhbGx5KCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdPiB7XG5cdFx0Ly8gc2VyaWFsaXphdGlvbjogZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBvbmx5IGFmdGVyIHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIG9uZSBiZWZvcmUgaGFzIGJlZW4gcmVzb2x2ZWRcblx0XHRhd2FpdCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMucmVkdWNlKGFzeW5jIChwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMucHVzaChcblx0XHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gYCR7dGhpcy5hcGlHcm91cElkfSR7aWQgKyAxfWApXG5cdFx0XHQpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmlzQ29udGludWVPbkVycm9yQ29tcGxpYW50KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5tb2RlbC5zZXRDb250aW51ZU9uRXJyb3IoZ3JvdXBJZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMubW9kZWwuc3VibWl0QmF0Y2goZ3JvdXBJZCk7IC8vIFN1Ym1pdEJhdGNoIGlzIGRvbmUgYmVmb3JlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBvcmRlciBvZiB0aGUgcmVxdWVzdHMgaW4gdGhlIGJhdGNoXG5cdFx0XHRcdFx0XHR0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0NvbnRleHQsIGdyb3VwSWQsIFtdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5yZXBsYWNlV2l0aFJWQ1xuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW29wZXJhdGlvbkludm9rZV0pO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5yYWNlKFtvcGVyYXRpb25JbnZva2UsIHN0cmljdEhhbmRsaW5nUHJvbWlzZV0pO1xuXG5cdFx0XHRyZXR1cm5lZENvbnRleHQgPSBhd2FpdCBvcGVyYXRpb25JbnZva2U7XG5cdFx0XHR0aGlzLmVuaGFuY2VTaWRlRWZmZWN0cyhvcGVyYXRpb25Db250ZXh0QmluZGluZywgcmV0dXJuZWRDb250ZXh0KTtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVzb2x2ZSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlamVjdChlcnJvcik7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0dGhpcy5mYWlsZWRDb250ZXh0cy5wdXNoKGNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQWZ0ZXJPRGF0YUludm9rZT8uKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCBncm91cElkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmV0dXJuZWRDb250ZXh0LFxuXHRcdFx0Ym91bmRDb250ZXh0OiBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQoKVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogIE1hbmFnZXMgdGhlIHN0cmljdCBoYW5kbGluZyB2YWxpZGF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvblN0cmljdFZhbGlkYXRpb24oKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RWYWxpZGF0aW9uPy4oKTtcblx0XHR0aGlzLnJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIHdoZW4gc3RyaWN0IGhhbmRsaW5nIGlzIHRydWUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBuZXcgb3BlcmF0aW9ucyBhcmUgcmVzb2x2ZWRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9SZXRyeSB0aGUgYWN0aW9uIGV4ZWN1dGlvbiBpbiBjYXNlIG9mIHN0cmljdCBoYW5kbGluZyBhbmQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGZhaWxlZCBjb250ZXh0IChnaXZlIGl0IGFub3RoZXIgdHJ5IHRvIHN1Y2NlZWQpXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgIT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpIHtcblx0XHRcdGNvbnN0IGFwaVJldHJpZ2dlckdyb3VwSWQgPSBcImFwaVJldHJpZ2dlclwiO1xuXHRcdFx0aWYgKHRoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQpIHtcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnNldENvbnRpbnVlT25FcnJvcihhcGlSZXRyaWdnZXJHcm91cElkKTtcblx0XHRcdH1cblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IGZhaWxlZENvbnRleHQgb2YgdGhpcy5mYWlsZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBncm91cElkID0gYCR7YXBpUmV0cmlnZ2VyR3JvdXBJZH0ke3RoaXMuaXNDb250aW51ZU9uRXJyb3JDb21wbGlhbnQgPyBcIlwiIDogaW5kZXggKyAxfWA7XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmV4ZWN1dGVCb3VuZE9wZXJhdGlvbihmYWlsZWRDb250ZXh0LCBncm91cElkKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5EZWNpbWFsXCI6XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNbbmFtZV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5zZXRQYXJhbWV0ZXIobmFtZSwgZGVmYXVsdFZhbHVlc1tuYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIGdyb3VwSWQgIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcGFyYW0gbG9jYWxQcm9taXNlIFRoZSBwcm9taXNlIG9mIHRoZSBpbnZva2VkIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgc2lkZSBlZmZlY3Rcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBncm91cElkOiBzdHJpbmcsIGxvY2FsUHJvbWlzZT86IFByb21pc2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0bGV0IHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBsb2NhbFByb21pc2UgPz8gW107XG5cdFx0Ly8gdHJpZ2dlciBhY3Rpb25zIGZyb20gc2lkZSBlZmZlY3RzXG5cdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMgJiYgIXRoaXMucGFyYW1ldGVycy5kaXNhYmxlU2lkZUVmZmVjdHMgPT09IHRydWUpIHtcblx0XHRcdHByb21pc2VzID0gcHJvbWlzZXMuY29uY2F0KFxuXHRcdFx0XHQodGhpcy5zaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9ucyA/PyBbXSkubWFwKGFzeW5jIChhY3Rpb24pID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5pc0NvbnRpbnVlT25FcnJvckNvbXBsaWFudCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRPbk1vZGVsKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBjb250ZXh0LCB7IHN1Ym1pdEJhdGNoOiBmYWxzZSwgZ3JvdXBJZCB9KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zXG5cdFx0XHRcdFx0PyBzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zLCBjb250ZXh0LCBncm91cElkKVxuXHRcdFx0XHRcdDogW11cblx0XHRcdCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUmVxdWVzdFNpZGVFZmZlY3RzPy4odGhpcy5zaWRlRWZmZWN0cywgdGhpcy5vcGVyYXRpb24sIHByb21pc2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmluZm8oXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0cyBmb3IgdGhlIG9wZXJhdGlvbiBcIiArIHRoaXMuYWN0aW9uTmFtZSwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBbUJBLE1BQU1BLGtCQUFrQixHQUFHQyxTQUFTLENBQUNELGtCQUFrQjtFQUFDLElBT25DRSxjQUFjO0lBMkJsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
@@ -67,9 +67,9 @@ export default class ODataOperation {
67
67
  * @param parameters.events The events for the operation
68
68
  * @param parameters.events.onStrictValidation The event triggered when the strict handling is validated by the end user
69
69
  * @param parameters.events.onStrictCancel The event triggered when the strict handling is canceled by the end user
70
- * @param parameters.events.onStrictResponse The event triggered when the backend returns 412 messages (strict handling)
71
- * @param parameters.events.onODataResponse The event triggered when all responses related to the Fiori element operations are received
72
- * @param parameters.events.onODataSubmit The event triggered when the batch is submitted (request sent to the back end)
70
+ * @param parameters.events.onStrictResponse The event triggered when the backend returns 412 messages regarding strict handling,
71
+ * @param parameters.events.onODataResponse The event triggered when all responses related to SAP Fiori element operations are received
72
+ * @param parameters.events.onODataSubmit The event triggered when the batch is submitted. The request is sent to the back end.
73
73
  * @param parameters.events.onAfterODataInvoke The event triggered when the promise of invoke method of the oDataContextBinding is resolved
74
74
  * @param parameters.events.onAfterODataOperationExecution The event triggered when first responses related to the Fiori element operations are received (before strict handling or final response if no 412 are received)
75
75
  * @param parameters.events.onRequestSideEffects The event triggered when side effects are requested
@@ -171,7 +171,7 @@ export default class ODataOperation {
171
171
  /* The former logic checked if the messagesPath is contained into the SideEffects
172
172
  but the check was invalid (always true)
173
173
  To be compliant with former version we don't check the SideEffects..
174
-
174
+
175
175
  this.sideEffects &&
176
176
  messagesPath &&
177
177
  (this.sideEffects.pathExpressions ?? []).some((exp) => typeof exp === "string" && [messagesPath, "*"].includes(exp))*/
@@ -382,8 +382,8 @@ export default class ODataOperation {
382
382
  if (this.isContinueOnErrorCompliant) {
383
383
  this.parameters.model.setContinueOnError(groupId);
384
384
  }
385
+ this.parameters.model.submitBatch(groupId); // SubmitBatch is done before requesting side effects to ensure the correct order of the requests in the batch
385
386
  this.requestSideEffects(sideEffectsContext, groupId, []);
386
- this.parameters.model.submitBatch(groupId);
387
387
  }
388
388
  ),
389
389
  this.operationProperties.replaceWithRVC
@@ -536,6 +536,7 @@ export default class ODataOperation {
536
536
  case "Edm.Int16":
537
537
  case "Edm.Int32":
538
538
  case "Edm.Int64":
539
+ case "Edm.Decimal":
539
540
  defaultValues[name] = 0;
540
541
  break;
541
542
  default:
@@ -19,7 +19,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/R
19
19
  * @param parameters.label A label for the operation, used in messages.
20
20
  * @param parameters.invocationGrouping Optional parameter to specify the grouping of the invocation (e.g., ChangeSet).
21
21
  * @param parameters.events The events for the strict handling
22
- * @param parameters.events.onResponse The event triggered when the backend returns 412 messages.
22
+ * @param parameters.events.onResponse The event triggered when the back end returns 412 messages.
23
23
  * @param parameters.events.onCancel The event triggered when the strict handling is canceled by the end user.
24
24
  * @param parameters.events.onValidation The event triggered when the strict handling is validated by the end user.
25
25
  */
@@ -211,4 +211,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/R
211
211
  _exports = ODataStrictHandling;
212
212
  return _exports;
213
213
  }, false);
214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwicGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZXMiLCJzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyIsImNhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImNvbnRleHRzIiwibGVuZ3RoIiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0EiLCJ0YWJsZUFQSSIsIkVsZW1lbnRSZWdpc3RyeSIsImZpbHRlciIsImVsZW1lbnQiLCJnZXRDb250ZW50IiwiZ2V0Um93QmluZGluZyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJvbkNvbnRleHRWYWxpZGF0aW9uIiwibWVzc2FnZXM0MTIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGluZ1Jlc29sdmUiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJtZXNzYWdlIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiYWRkaXRpb25hbFRleHQiLCJjb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZ2V0Q29udGV4dCIsImdldE9iamVjdCIsInNldEFkZGl0aW9uYWxUZXh0IiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm1hbmFnZVN0cmljdEhhbmRsaW5nRmFpbHMiLCJtZXNzYWdlSGFuZGxpbmciLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImludm9jYXRpb25Hcm91cGluZyIsIkNoYW5nZVNldCIsImRpc3BsYXlNZXNzYWdlcyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZSIsIm1lc3NhZ2VNb2RlbCIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImdldERhdGEiLCJzZXREYXRhIiwiY29uY2F0IiwiZXJyb3IiLCJtZXNzYWdlcyIsImFjdGlvbk5hbWUiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0TG9jYWxpemVkVGV4dCIsImxhYmVsIiwiYXBwQ29tcG9uZW50IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsImRpc3BsYXlNZXNzYWdlT25NZXNzYWdlQm94IiwiZGlzcGxheU1lc3NhZ2VzT25EaWFsb2ciLCJtZXNzYWdlUmVzb2x2ZSIsInByb21pc2UiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIm1lc3NhZ2VUZXh0IiwiZ2V0TWVzc2FnZSIsImlkZW50aWZpZXJUZXh0IiwiZ2V0QWRkaXRpb25hbFRleHQiLCJpc011bHRpQ29udGV4dDQxMiIsImdlbmVyaWNDaGFuZ2VzZXRNZXNzYWdlIiwiZ2V0VGV4dCIsIndhcm5pbmdNZXNzYWdlVGV4dCIsImNhbmNlbEJ1dHRvblR4dCIsImRpc3BsYXllZE1lc3NhZ2UiLCJ0YWJsZVR5cGVOYW1lIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIiwidG9TdHJpbmciLCJNZXNzYWdlQm94IiwidGl0bGUiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJhY3Rpb24iLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdEZXNjIiwiZ2VuZXJpY01lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIkluZm9ybWF0aW9uIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiU3RyaWN0RGlhbG9nIiwibWVzc2FnZU9iamVjdCIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9uQmVnaW5CdXR0b25QcmVzcyIsImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24iLCJiaW5kIiwib25FbmRCdXR0b25QcmVzcyIsImhhbmRsZU1lc3NhZ2VPbkNhbmNlbCIsIm9wZW4iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJvblZhbGlkYXRpb24iLCJpbmZvcm1hdGlvbiIsImNvbnRlbnRXaWR0aCIsIm9uQ2FuY2VsIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPRGF0YVN0cmljdEhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IEVsZW1lbnRSZWdpc3RyeSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFJlZ2lzdHJ5XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBTdHJpY3REaWFsb2cgZnJvbSBcIi4uLy4uL2RpYWxvZy9PRGF0YVN0cmljdERpYWxvZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi4vLi4vbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPRGF0YVN0cmljdEhhbmRsaW5nIHtcblx0cHJpdmF0ZSBzdHJpY3RIYW5kbGluZ1Jlc29sdmVzOiB7IGhhbmRsaW5nUmVzb2x2ZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkOyBvbkNvbnRleHRWYWxpZGF0aW9uOiBGdW5jdGlvbiB9W10gPSBbXTtcblxuXHRwcml2YXRlIHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcml2YXRlIGNhbmNlbGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT0RhdGFTdHJpY3RIYW5kbGluZy5cblx0ICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhhbmRsZSBzdHJpY3QgaGFuZGxpbmcgb3BlcmF0aW9ucyBpbiBPRGF0YSBWNC5cblx0ICogSXQgbWFuYWdlcyB0aGUgcmVzcG9uc2VzIGZyb20gdGhlIE9EYXRhIHNlcnZpY2Ugd2hlbiBzdHJpY3QgaGFuZGxpbmcgaXMgZW5hYmxlZCxcblx0ICogYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIgd2hlbiBvcGVyYXRpb25zIGZhaWwgZHVlIHRvIHN0cmljdCBoYW5kbGluZy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzdHJpY3QgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jb250ZXh0cyBBbiBhcnJheSBvZiBDb250ZXh0IGluc3RhbmNlcyB1c2VkIGZvciB0aGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5sYWJlbCBBIGxhYmVsIGZvciB0aGUgb3BlcmF0aW9uLCB1c2VkIGluIG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGdyb3VwaW5nIG9mIHRoZSBpbnZvY2F0aW9uIChlLmcuLCBDaGFuZ2VTZXQpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMgVGhlIGV2ZW50cyBmb3IgdGhlIHN0cmljdCBoYW5kbGluZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25SZXNwb25zZSBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGJhY2tlbmQgcmV0dXJucyA0MTIgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vbkNhbmNlbCBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHN0cmljdCBoYW5kbGluZyBpcyBjYW5jZWxlZCBieSB0aGUgZW5kIHVzZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblZhbGlkYXRpb24gVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogQ29udGV4dFtdO1xuXHRcdFx0bGFiZWw6IHN0cmluZztcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25SZXNwb25zZT86IChtZXNzYWdlczogTWVzc2FnZVtdKSA9PiB2b2lkO1xuXHRcdFx0XHRvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG5cdFx0XHRcdG9uVmFsaWRhdGlvbj86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH1cblx0KSB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkgPSBFbGVtZW50UmVnaXN0cnkuZmlsdGVyKFxuXHRcdFx0XHRcdChlbGVtZW50KSA9PiBlbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpICYmIGVsZW1lbnQuZ2V0Q29udGVudCgpPy5nZXRSb3dCaW5kaW5nKCkgPT09IGJpbmRpbmdcblx0XHRcdFx0KVswXSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBoYW5kbGVPZGF0YVN0cmljdEhhbmRsaW5nKFxuXHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvbkNvbnRleHRWYWxpZGF0aW9uOiBGdW5jdGlvbixcblx0XHRtZXNzYWdlczQxMjogTWVzc2FnZVtdID0gW11cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IGhhbmRsaW5nUmVzb2x2ZSE6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxib29sZWFuPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0aGFuZGxpbmdSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMucHVzaCh7IGhhbmRsaW5nUmVzb2x2ZSwgb25Db250ZXh0VmFsaWRhdGlvbiB9KTtcblx0XHQvLyBGaW5kIGVycm9yIG1lc3NhZ2UgaW4gdGhlIDQxMiByZXNwb25zZSBhbmQgcmFpc2Ugd2FybmluZy5cblx0XHRpZiAobWVzc2FnZXM0MTIuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3IpLmxlbmd0aCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFwiV2FybmluZzogNDEyICgnUHJlLWNvbmRpdGlvbiBDaGVjayBGYWlsZWQgZHVlIHRvIHN0cmljdC1oYW5kbGluZycpIHJldHVybnMgbWVzc2FnZXMgb2YgdHlwZSBlcnJvciBidXQgb25seSB3YXJuaW5nIG1lc3NhZ2VzIGFyZSBhcHByb3ByaWF0ZSFcIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0XHQvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNvbnRleHQgd2UgbmVlZCB0aGUgaWRlbnRpZmllci4gVGhpcyB3b3VsZCBmaXggaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIHRhYmxlIGNoZXZyb25cblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMudGFibGVBUEk/LmdldElkZW50aWZpZXJDb2x1bW4oKTtcblx0XHRcdGlmICh0eXBlb2YgY29sdW1uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGFkZGl0aW9uYWxUZXh0ID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Q29udGV4dCgpPy5nZXRPYmplY3QoY29sdW1uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gc2V0IHR5cGUgYW5kIHN1YnRpdGxlIGZvciBhbGwgd2FybmluZyBtZXNzYWdlc1xuXHRcdGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlczQxMikge1xuXHRcdFx0bWVzc2FnZS5zZXRBZGRpdGlvbmFsVGV4dChhZGRpdGlvbmFsVGV4dCk7XG5cdFx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUmVzcG9uc2U/LihtZXNzYWdlczQxMik7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU/LigpO1xuXHRcdHJldHVybiBzdHJpY3RIYW5kbGluZ1Byb21pc2U7XG5cdH1cblxuXHRwdWJsaWMgaXNDYW5jZWxlZCA9ICgpOiBib29sZWFuID0+IHtcblx0XHRyZXR1cm4gdGhpcy5jYW5jZWxlZDtcblx0fTtcblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIGZhaWxzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgc3RyaWN0IGhhbmRsaW5nXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgbWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzLmxlbmd0aCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghbWVzc2FnZUhhbmRsaW5nLmhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkgfHxcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgIT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpICYmXG5cdFx0XHRcdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5kaXNwbGF5TWVzc2FnZXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN0cmljdEhhbmRsaW5nUmVzb2x2ZSBvZiB0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMpIHtcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUmVzb2x2ZS5oYW5kbGluZ1Jlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRtZXNzYWdlTW9kZWwuc2V0RGF0YShtZXNzYWdlc0luTW9kZWwuY29uY2F0KHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdExvZy5lcnJvcihcIlJlLXRyaWdnZXJpbmcgb2Ygc3RyaWN0IGhhbmRsaW5nIG9wZXJhdGlvbnMgZmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcztcblx0XHRpZiAoIW1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhY3Rpb25OYW1lID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRMb2NhbGl6ZWRUZXh0KHRoaXMucGFyYW1ldGVycy5sYWJlbCwgdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCk7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAhKG1lc3NhZ2VzWzBdLmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlc1swXS5nZXREZXNjcmlwdGlvblVybCgpPy5sZW5ndGgpXG5cdFx0XHQ/IHRoaXMuZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3gobWVzc2FnZXNbMF0sIGFjdGlvbk5hbWUpXG5cdFx0XHQ6IHRoaXMuZGlzcGxheU1lc3NhZ2VzT25EaWFsb2cobWVzc2FnZXMsIGFjdGlvbk5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwbGF5TWVzc2FnZU9uTWVzc2FnZUJveChtZXNzYWdlOiBNZXNzYWdlLCBhY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgbWVzc2FnZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdG1lc3NhZ2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS5nZXRNZXNzYWdlKCk7XG5cdFx0Y29uc3QgaWRlbnRpZmllclRleHQgPSBtZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCk7XG5cdFx0Y29uc3QgaXNNdWx0aUNvbnRleHQ0MTIgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMTtcblx0XHRjb25zdCBnZW5lcmljQ2hhbmdlc2V0TWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX01FU1NBR0VfVEVYVFwiKTtcblx0XHRjb25zdCB3YXJuaW5nTWVzc2FnZVRleHQgPVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfTUVTU0FHRV9URVhUXCIsIFthY3Rpb25OYW1lXSlcblx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9TSU5HTEVfTUVTU0FHRV9URVhUXCIpO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0bGV0IGRpc3BsYXllZE1lc3NhZ2UgPSBcIlwiO1xuXHRcdGlmICghaXNNdWx0aUNvbnRleHQ0MTIpIHtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlBST0NFRURcIil9YDtcblx0XHR9IGVsc2UgaWYgKGlkZW50aWZpZXJUZXh0ICE9PSB1bmRlZmluZWQgJiYgaWRlbnRpZmllclRleHQgIT09IFwiXCIpIHtcblx0XHRcdGNhbmNlbEJ1dHRvblR4dCA9XG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IGNhbmNlbEJ1dHRvblR4dFxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBcIik7XG5cdFx0XHRjb25zdCB0YWJsZVR5cGVOYW1lID0gdGhpcy50YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1R5cGVOYW1lO1xuXHRcdFx0Y29uc3QgaGVhZGVySW5mb1R5cGVOYW1lID1cblx0XHRcdFx0dGhpcy50YWJsZUFQSSAmJiB0eXBlb2YgdGFibGVUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyh0YWJsZVR5cGVOYW1lLCB0aGlzLnRhYmxlQVBJKVxuXHRcdFx0XHRcdDogdGFibGVUeXBlTmFtZTtcblx0XHRcdGlmIChoZWFkZXJJbmZvVHlwZU5hbWUpIHtcblx0XHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2hlYWRlckluZm9UeXBlTmFtZS50b1N0cmluZygpfSAke2lkZW50aWZpZXJUZXh0fTogJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2lkZW50aWZpZXJUZXh0fTogJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke21lc3NhZ2VUZXh0fVxcblxcbiR7d2FybmluZ01lc3NhZ2VUZXh0fWA7XG5cdFx0fVxuXHRcdGlmIChpc011bHRpQ29udGV4dDQxMiAmJiB0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRkaXNwbGF5ZWRNZXNzYWdlID0gYCR7Z2VuZXJpY0NoYW5nZXNldE1lc3NhZ2V9XFxuXFxuJHtkaXNwbGF5ZWRNZXNzYWdlfWA7XG5cdFx0fVxuXHRcdE1lc3NhZ2VCb3gud2FybmluZyhkaXNwbGF5ZWRNZXNzYWdlLCB7XG5cdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdGFjdGlvbnM6IFthY3Rpb25OYW1lLCBjYW5jZWxCdXR0b25UeHRdLFxuXHRcdFx0ZW1waGFzaXplZEFjdGlvbjogYWN0aW9uTmFtZSxcblx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHR0aGlzW2FjdGlvbiA9PT0gYWN0aW9uTmFtZSA/IFwiaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvblwiIDogXCJoYW5kbGVNZXNzYWdlT25DYW5jZWxcIl0oKTtcblx0XHRcdFx0bWVzc2FnZVJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VzT25EaWFsb2cobWVzc2FnZXM6IE1lc3NhZ2VbXSwgYWN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG1lc3NhZ2VSZXNvbHZlITogRnVuY3Rpb247XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRtZXNzYWdlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVzc2FnZURpYWxvZ01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCk7XG5cdFx0Y29uc3QgaXNNdWx0aUNvbnRleHQ0MTIgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMTtcblx0XHRsZXQgd2FybmluZ01lc3NhZ2UgPSBcIlwiO1xuXHRcdGxldCB3YXJuaW5nRGVzYyA9IFwiXCI7XG5cdFx0bGV0IGNhbmNlbEJ1dHRvblR4dDogc3RyaW5nID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKTtcblx0XHRpZiAoaXNNdWx0aUNvbnRleHQ0MTIpIHtcblx0XHRcdGNhbmNlbEJ1dHRvblR4dCA9XG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IGNhbmNlbEJ1dHRvblR4dFxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBcIik7XG5cdFx0XHR3YXJuaW5nTWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VTX1dBUk5JTkdcIlxuXHRcdFx0XHRcdDogXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9NRVNTQUdFU19XQVJOSU5HXCJcblx0XHRcdCk7XG5cdFx0XHR3YXJuaW5nRGVzYyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VTX1RFWFRcIlxuXHRcdFx0XHRcdDogXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9NRVNTQUdFU19URVhUXCIsXG5cdFx0XHRcdFthY3Rpb25OYW1lXVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2FybmluZ01lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VTX0dFTkVSSUNfQUNUSU9OX1dBUk5JTkdcIiwgW2FjdGlvbk5hbWVdKTtcblx0XHR9XG5cdFx0Y29uc3QgZ2VuZXJpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiB3YXJuaW5nTWVzc2FnZSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uLFxuXHRcdFx0dGFyZ2V0OiB1bmRlZmluZWQsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0ZGVzY3JpcHRpb246IHdhcm5pbmdEZXNjLmxlbmd0aCA/IHdhcm5pbmdEZXNjIDogdW5kZWZpbmVkXG5cdFx0fSk7XG5cdFx0bWVzc2FnZXMgPSBbZ2VuZXJpY01lc3NhZ2VdLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0bWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEobWVzc2FnZXMpO1xuXHRcdG5ldyBTdHJpY3REaWFsb2coe1xuXHRcdFx0bWVzc2FnZU9iamVjdDogbWVzc2FnZUhhbmRsaW5nLnByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhtZXNzYWdlRGlhbG9nTW9kZWwsIHRydWUsIGlzTXVsdGlDb250ZXh0NDEyKSxcblx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRtZXNzYWdlRGlhbG9nTW9kZWwsXG5cdFx0XHRjYW5jZWxCdXR0b25UeHQsXG5cdFx0XHRvbkJlZ2luQnV0dG9uUHJlc3M6IHRoaXMuaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbi5iaW5kKHRoaXMpLFxuXHRcdFx0b25FbmRCdXR0b25QcmVzczogdGhpcy5oYW5kbGVNZXNzYWdlT25DYW5jZWwuYmluZCh0aGlzKSxcblx0XHRcdG9uQ2xvc2U6IG1lc3NhZ2VSZXNvbHZlXG5cdFx0fSkub3BlbigpO1xuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXNzYWdlT25WYWxpZGF0aW9uKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qgc3RyaWN0SGFuZGxpbmdSZXNvbHZlIG9mIHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcykge1xuXHRcdFx0c3RyaWN0SGFuZGxpbmdSZXNvbHZlLm9uQ29udGV4dFZhbGlkYXRpb24oKTtcblx0XHRcdHN0cmljdEhhbmRsaW5nUmVzb2x2ZS5oYW5kbGluZ1Jlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyA9IFtdO1xuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uVmFsaWRhdGlvbj8uKCk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZU1lc3NhZ2VPbkNhbmNlbCgpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0XHR0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcblx0XHRmb3IgKGNvbnN0IHN0cmljdEhhbmRsaW5nUmVzb2x2ZSBvZiB0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMpIHtcblx0XHRcdHN0cmljdEhhbmRsaW5nUmVzb2x2ZS5oYW5kbGluZ1Jlc29sdmUoZmFsc2UpO1xuXHRcdH1cblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMgPSBbXTtcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkge1xuXHRcdFx0TWVzc2FnZUJveC5pbmZvcm1hdGlvbihyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX0NIQU5HRVNFVF9DQU5DRUxfTUVTU0FHRVNcIiksIHtcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjE1MHB4XCJcblx0XHRcdH0gYXMgb2JqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25DYW5jZWw/LigpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBZ0JBLE1BQU1BLGtCQUFrQixHQUFHQyxTQUFTLENBQUNELGtCQUFrQjtFQUFDLElBRW5DRSxtQkFBbUI7SUFTdkM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0MsU0FBQUEsb0JBQ2tCQyxVQVVoQixFQUNBO01BQUEsS0FuQ01DLHNCQUFzQixHQUFtRixFQUFFO01BQUEsS0FFM0dDLDZCQUE2QixHQUFjLEVBQUU7TUFBQSxLQUU3Q0MsUUFBUSxHQUFHLEtBQUs7TUFBQSxLQTZFakJDLFVBQVUsR0FBRyxNQUFlO1FBQ2xDLE9BQU8sSUFBSSxDQUFDRCxRQUFRO01BQ3JCLENBQUM7TUFBQSxLQTNEaUJILFVBVWhCLEdBVmdCQSxVQVVoQjtNQUVELElBQUksSUFBSSxDQUFDQSxVQUFVLENBQUNLLFFBQVEsQ0FBQ0MsTUFBTSxFQUFFO1FBQ3BDLE1BQU1DLE9BQU8sR0FBRyxJQUFJLENBQUNQLFVBQVUsQ0FBQ0ssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxVQUFVLENBQUMsQ0FBQztRQUN4RCxJQUFJRCxPQUFPLEVBQUVFLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFO1VBQzNELElBQUksQ0FBQ0MsUUFBUSxHQUFHQyxlQUFlLENBQUNDLE1BQU0sQ0FDcENDLE9BQU8sSUFBS0EsT0FBTyxDQUFDSixHQUFH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QixPQUFPLEVBQUV4QjtNQUNWLENBQUMsQ0FBQyxDQUFDNkMsSUFBSSxDQUFDLENBQUM7TUFDVCxPQUFPNUMsT0FBTztJQUNmLENBQUM7SUFBQXRELE1BQUEsQ0FFTzhGLHlCQUF5QixHQUFqQyxTQUFRQSx5QkFBeUJBLENBQUEsRUFBUztNQUN6QyxLQUFLLE1BQU01RCxxQkFBcUIsSUFBSSxJQUFJLENBQUNsRCxzQkFBc0IsRUFBRTtRQUNoRWtELHFCQUFxQixDQUFDN0IsbUJBQW1CLENBQUMsQ0FBQztRQUMzQzZCLHFCQUFxQixDQUFDekIsZUFBZSxDQUFDLElBQUksQ0FBQztNQUM1QztNQUNBb0IsZUFBZSxDQUFDc0UsNkJBQTZCLENBQUMsQ0FBQztNQUMvQ3RFLGVBQWUsQ0FBQ3VFLCtCQUErQixDQUFDLENBQUM7TUFDakQsSUFBSSxDQUFDbkgsNkJBQTZCLEdBQUcsRUFBRTtNQUN2QyxJQUFJLENBQUNGLFVBQVUsQ0FBQzJDLE1BQU0sRUFBRTJFLFlBQVksR0FBRyxDQUFDO0lBQ3pDLENBQUM7SUFBQXJHLE1BQUEsQ0FFT2lHLHFCQUFxQixHQUE3QixTQUFRQSxxQkFBcUJBLENBQUEsRUFBUztNQUNyQyxNQUFNMUMsYUFBYSxHQUFHVixtQkFBbUIsQ0FBQ1csZ0JBQWdCLENBQUMsSUFBSSxDQUFDekUsVUFBVSxDQUFDaUUsWUFBWSxDQUFDO01BQ3hGLElBQUksQ0FBQy9ELDZCQUE2QixHQUFHLEVBQUU7TUFDdkMsSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSTtNQUNwQixLQUFLLE1BQU1nRCxxQkFBcUIsSUFBSSxJQUFJLENBQUNsRCxzQkFBc0IsRUFBRTtRQUNoRWtELHFCQUFxQixDQUFDekIsZUFBZSxDQUFDLEtBQUssQ0FBQztNQUM3QztNQUNBLElBQUksQ0FBQ3pCLHNCQUFzQixHQUFHLEVBQUU7TUFDaEMsSUFBSSxJQUFJLENBQUNELFVBQVUsQ0FBQ2dELGtCQUFrQixLQUFLbkQsa0JBQWtCLENBQUNvRCxTQUFTLEVBQUU7UUFDeEV5QyxVQUFVLENBQUM2QixXQUFXLENBQUMvQyxhQUFhLENBQUNRLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1VBQzVFd0MsWUFBWSxFQUFFO1FBQ2YsQ0FBVyxDQUFDO01BQ2I7TUFDQSxJQUFJLENBQUN4SCxVQUFVLENBQUMyQyxNQUFNLEVBQUU4RSxRQUFRLEdBQUcsQ0FBQztJQUNyQyxDQUFDO0lBQUEsT0FBQTFILG1CQUFBO0VBQUE7RUFBQWlCLFFBQUEsR0FBQWpCLG1CQUFBO0VBQUEsT0FBQWlCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
214
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwicGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZXMiLCJzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyIsImNhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImNvbnRleHRzIiwibGVuZ3RoIiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0EiLCJ0YWJsZUFQSSIsIkVsZW1lbnRSZWdpc3RyeSIsImZpbHRlciIsImVsZW1lbnQiLCJnZXRDb250ZW50IiwiZ2V0Um93QmluZGluZyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJvbkNvbnRleHRWYWxpZGF0aW9uIiwibWVzc2FnZXM0MTIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGluZ1Jlc29sdmUiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJtZXNzYWdlIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiYWRkaXRpb25hbFRleHQiLCJjb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZ2V0Q29udGV4dCIsImdldE9iamVjdCIsInNldEFkZGl0aW9uYWxUZXh0IiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm1hbmFnZVN0cmljdEhhbmRsaW5nRmFpbHMiLCJtZXNzYWdlSGFuZGxpbmciLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImludm9jYXRpb25Hcm91cGluZyIsIkNoYW5nZVNldCIsImRpc3BsYXlNZXNzYWdlcyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZSIsIm1lc3NhZ2VNb2RlbCIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImdldERhdGEiLCJzZXREYXRhIiwiY29uY2F0IiwiZXJyb3IiLCJtZXNzYWdlcyIsImFjdGlvbk5hbWUiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0TG9jYWxpemVkVGV4dCIsImxhYmVsIiwiYXBwQ29tcG9uZW50IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsImRpc3BsYXlNZXNzYWdlT25NZXNzYWdlQm94IiwiZGlzcGxheU1lc3NhZ2VzT25EaWFsb2ciLCJtZXNzYWdlUmVzb2x2ZSIsInByb21pc2UiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIm1lc3NhZ2VUZXh0IiwiZ2V0TWVzc2FnZSIsImlkZW50aWZpZXJUZXh0IiwiZ2V0QWRkaXRpb25hbFRleHQiLCJpc011bHRpQ29udGV4dDQxMiIsImdlbmVyaWNDaGFuZ2VzZXRNZXNzYWdlIiwiZ2V0VGV4dCIsIndhcm5pbmdNZXNzYWdlVGV4dCIsImNhbmNlbEJ1dHRvblR4dCIsImRpc3BsYXllZE1lc3NhZ2UiLCJ0YWJsZVR5cGVOYW1lIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIiwidG9TdHJpbmciLCJNZXNzYWdlQm94IiwidGl0bGUiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJhY3Rpb24iLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdEZXNjIiwiZ2VuZXJpY01lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIkluZm9ybWF0aW9uIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiU3RyaWN0RGlhbG9nIiwibWVzc2FnZU9iamVjdCIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9uQmVnaW5CdXR0b25QcmVzcyIsImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24iLCJiaW5kIiwib25FbmRCdXR0b25QcmVzcyIsImhhbmRsZU1lc3NhZ2VPbkNhbmNlbCIsIm9wZW4iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJvblZhbGlkYXRpb24iLCJpbmZvcm1hdGlvbiIsImNvbnRlbnRXaWR0aCIsIm9uQ2FuY2VsIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPRGF0YVN0cmljdEhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IEVsZW1lbnRSZWdpc3RyeSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFJlZ2lzdHJ5XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBTdHJpY3REaWFsb2cgZnJvbSBcIi4uLy4uL2RpYWxvZy9PRGF0YVN0cmljdERpYWxvZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi4vLi4vbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPRGF0YVN0cmljdEhhbmRsaW5nIHtcblx0cHJpdmF0ZSBzdHJpY3RIYW5kbGluZ1Jlc29sdmVzOiB7IGhhbmRsaW5nUmVzb2x2ZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkOyBvbkNvbnRleHRWYWxpZGF0aW9uOiBGdW5jdGlvbiB9W10gPSBbXTtcblxuXHRwcml2YXRlIHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcml2YXRlIGNhbmNlbGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT0RhdGFTdHJpY3RIYW5kbGluZy5cblx0ICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhhbmRsZSBzdHJpY3QgaGFuZGxpbmcgb3BlcmF0aW9ucyBpbiBPRGF0YSBWNC5cblx0ICogSXQgbWFuYWdlcyB0aGUgcmVzcG9uc2VzIGZyb20gdGhlIE9EYXRhIHNlcnZpY2Ugd2hlbiBzdHJpY3QgaGFuZGxpbmcgaXMgZW5hYmxlZCxcblx0ICogYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIgd2hlbiBvcGVyYXRpb25zIGZhaWwgZHVlIHRvIHN0cmljdCBoYW5kbGluZy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzdHJpY3QgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jb250ZXh0cyBBbiBhcnJheSBvZiBDb250ZXh0IGluc3RhbmNlcyB1c2VkIGZvciB0aGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5sYWJlbCBBIGxhYmVsIGZvciB0aGUgb3BlcmF0aW9uLCB1c2VkIGluIG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGdyb3VwaW5nIG9mIHRoZSBpbnZvY2F0aW9uIChlLmcuLCBDaGFuZ2VTZXQpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMgVGhlIGV2ZW50cyBmb3IgdGhlIHN0cmljdCBoYW5kbGluZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25SZXNwb25zZSBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGJhY2sgZW5kIHJldHVybnMgNDEyIG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25DYW5jZWwgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIGVuZCB1c2VyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25WYWxpZGF0aW9uIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc3RyaWN0IGhhbmRsaW5nIGlzIHZhbGlkYXRlZCBieSB0aGUgZW5kIHVzZXIuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHtcblx0XHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdFx0Y29udGV4dHM6IENvbnRleHRbXTtcblx0XHRcdGxhYmVsOiBzdHJpbmc7XG5cdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uUmVzcG9uc2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSkgPT4gdm9pZDtcblx0XHRcdFx0b25DYW5jZWw/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblZhbGlkYXRpb24/OiAoKSA9PiB2b2lkO1xuXHRcdFx0fTtcblx0XHR9XG5cdCkge1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJID0gRWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihcblx0XHRcdFx0XHQoZWxlbWVudCkgPT4gZWxlbWVudC5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSAmJiBlbGVtZW50LmdldENvbnRlbnQoKT8uZ2V0Um93QmluZGluZygpID09PSBiaW5kaW5nXG5cdFx0XHRcdClbMF0gYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyhcblx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyxcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTogRnVuY3Rpb24gfCB1bmRlZmluZWQsXG5cdFx0b25Db250ZXh0VmFsaWRhdGlvbjogRnVuY3Rpb24sXG5cdFx0bWVzc2FnZXM0MTI6IE1lc3NhZ2VbXSA9IFtdXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBoYW5kbGluZ1Jlc29sdmUhOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG5cdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdQcm9taXNlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGhhbmRsaW5nUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzLnB1c2goeyBoYW5kbGluZ1Jlc29sdmUsIG9uQ29udGV4dFZhbGlkYXRpb24gfSk7XG5cdFx0Ly8gRmluZCBlcnJvciBtZXNzYWdlIGluIHRoZSA0MTIgcmVzcG9uc2UgYW5kIHJhaXNlIHdhcm5pbmcuXG5cdFx0aWYgKG1lc3NhZ2VzNDEyLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKS5sZW5ndGgpIHtcblx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcIldhcm5pbmc6IDQxMiAoJ1ByZS1jb25kaXRpb24gQ2hlY2sgRmFpbGVkIGR1ZSB0byBzdHJpY3QtaGFuZGxpbmcnKSByZXR1cm5zIG1lc3NhZ2VzIG9mIHR5cGUgZXJyb3IgYnV0IG9ubHkgd2FybmluZyBtZXNzYWdlcyBhcmUgYXBwcm9wcmlhdGUhXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGxldCBhZGRpdGlvbmFsVGV4dCA9IFwiXCI7XG5cdFx0Ly8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjb250ZXh0IHdlIG5lZWQgdGhlIGlkZW50aWZpZXIuIFRoaXMgd291bGQgZml4IGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIHZpYSB0YWJsZSBjaGV2cm9uXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlQVBJPy5nZXRJZGVudGlmaWVyQ29sdW1uKCk7XG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRhZGRpdGlvbmFsVGV4dCA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKT8uZ2V0T2JqZWN0KGNvbHVtbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHNldCB0eXBlIGFuZCBzdWJ0aXRsZSBmb3IgYWxsIHdhcm5pbmcgbWVzc2FnZXNcblx0XHRmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXM0MTIpIHtcblx0XHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYWRkaXRpb25hbFRleHQpO1xuXHRcdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlc3BvbnNlPy4obWVzc2FnZXM0MTIpO1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlPy4oKTtcblx0XHRyZXR1cm4gc3RyaWN0SGFuZGxpbmdQcm9taXNlO1xuXHR9XG5cblx0cHVibGljIGlzQ2FuY2VsZWQgPSAoKTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FuY2VsZWQ7XG5cdH07XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHN0cmljdCBoYW5kbGluZyBmYWlscy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHN0cmljdCBoYW5kbGluZ1xuXHQgKi9cblx0cHVibGljIGFzeW5jIG1hbmFnZVN0cmljdEhhbmRsaW5nRmFpbHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcy5sZW5ndGgpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIW1lc3NhZ2VIYW5kbGluZy5oYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpIHx8XG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSAmJlxuXHRcdFx0XHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMubGVuZ3RoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuZGlzcGxheU1lc3NhZ2VzKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzdHJpY3RIYW5kbGluZ1Jlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1Jlc29sdmUuaGFuZGxpbmdSZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRcdFx0bWVzc2FnZU1vZGVsLnNldERhdGEobWVzc2FnZXNJbk1vZGVsLmNvbmNhdCh0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJSZS10cmlnZ2VyaW5nIG9mIHN0cmljdCBoYW5kbGluZyBvcGVyYXRpb25zIGZhaWxlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BsYXlNZXNzYWdlcygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM7XG5cdFx0aWYgKCFtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0TG9jYWxpemVkVGV4dCh0aGlzLnBhcmFtZXRlcnMubGFiZWwsIHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHJldHVybiBtZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgIShtZXNzYWdlc1swXS5nZXREZXNjcmlwdGlvbigpPy5sZW5ndGggfHwgbWVzc2FnZXNbMF0uZ2V0RGVzY3JpcHRpb25VcmwoKT8ubGVuZ3RoKVxuXHRcdFx0PyB0aGlzLmRpc3BsYXlNZXNzYWdlT25NZXNzYWdlQm94KG1lc3NhZ2VzWzBdLCBhY3Rpb25OYW1lKVxuXHRcdFx0OiB0aGlzLmRpc3BsYXlNZXNzYWdlc09uRGlhbG9nKG1lc3NhZ2VzLCBhY3Rpb25OYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3gobWVzc2FnZTogTWVzc2FnZSwgYWN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG1lc3NhZ2VSZXNvbHZlITogRnVuY3Rpb247XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRtZXNzYWdlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHRjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpO1xuXHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0ID0gbWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpO1xuXHRcdGNvbnN0IGlzTXVsdGlDb250ZXh0NDEyID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDE7XG5cdFx0Y29uc3QgZ2VuZXJpY0NoYW5nZXNldE1lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9NRVNTQUdFX1RFWFRcIik7XG5cdFx0Y29uc3Qgd2FybmluZ01lc3NhZ2VUZXh0ID1cblx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VfVEVYVFwiLCBbYWN0aW9uTmFtZV0pXG5cdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBfU0lOR0xFX01FU1NBR0VfVEVYVFwiKTtcblx0XHRsZXQgY2FuY2VsQnV0dG9uVHh0OiBzdHJpbmcgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMXCIpO1xuXHRcdGxldCBkaXNwbGF5ZWRNZXNzYWdlID0gXCJcIjtcblx0XHRpZiAoIWlzTXVsdGlDb250ZXh0NDEyKSB7XG5cdFx0XHRkaXNwbGF5ZWRNZXNzYWdlID0gYCR7bWVzc2FnZVRleHR9XFxuJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJQUk9DRUVEXCIpfWA7XG5cdFx0fSBlbHNlIGlmIChpZGVudGlmaWVyVGV4dCAhPT0gdW5kZWZpbmVkICYmIGlkZW50aWZpZXJUZXh0ICE9PSBcIlwiKSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0Y29uc3QgdGFibGVUeXBlTmFtZSA9IHRoaXMudGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UeXBlTmFtZTtcblx0XHRcdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9XG5cdFx0XHRcdHRoaXMudGFibGVBUEkgJiYgdHlwZW9mIHRhYmxlVHlwZU5hbWUgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcodGFibGVUeXBlTmFtZSwgdGhpcy50YWJsZUFQSSlcblx0XHRcdFx0XHQ6IHRhYmxlVHlwZU5hbWU7XG5cdFx0XHRpZiAoaGVhZGVySW5mb1R5cGVOYW1lKSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtoZWFkZXJJbmZvVHlwZU5hbWUudG9TdHJpbmcoKX0gJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0ID1cblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gY2FuY2VsQnV0dG9uVHh0XG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUFwiKTtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdH1cblx0XHRpZiAoaXNNdWx0aUNvbnRleHQ0MTIgJiYgdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkge1xuXHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2dlbmVyaWNDaGFuZ2VzZXRNZXNzYWdlfVxcblxcbiR7ZGlzcGxheWVkTWVzc2FnZX1gO1xuXHRcdH1cblx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZGlzcGxheWVkTWVzc2FnZSwge1xuXHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRhY3Rpb25zOiBbYWN0aW9uTmFtZSwgY2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGFjdGlvbk5hbWUsXG5cdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpc1thY3Rpb24gPT09IGFjdGlvbk5hbWUgPyBcImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb25cIiA6IFwiaGFuZGxlTWVzc2FnZU9uQ2FuY2VsXCJdKCk7XG5cdFx0XHRcdG1lc3NhZ2VSZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BsYXlNZXNzYWdlc09uRGlhbG9nKG1lc3NhZ2VzOiBNZXNzYWdlW10sIGFjdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBtZXNzYWdlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRcdGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0bWVzc2FnZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IGlzTXVsdGlDb250ZXh0NDEyID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDE7XG5cdFx0bGV0IHdhcm5pbmdNZXNzYWdlID0gXCJcIjtcblx0XHRsZXQgd2FybmluZ0Rlc2MgPSBcIlwiO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0aWYgKGlzTXVsdGlDb250ZXh0NDEyKSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0d2FybmluZ01lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19XQVJOSU5HXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfV0FSTklOR1wiXG5cdFx0XHQpO1xuXHRcdFx0d2FybmluZ0Rlc2MgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19URVhUXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfVEVYVFwiLFxuXHRcdFx0XHRbYWN0aW9uTmFtZV1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdhcm5pbmdNZXNzYWdlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19HRU5FUklDX0FDVElPTl9XQVJOSU5HXCIsIFthY3Rpb25OYW1lXSk7XG5cdFx0fVxuXHRcdGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0bWVzc2FnZTogd2FybmluZ01lc3NhZ2UsXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdHRhcmdldDogdW5kZWZpbmVkLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGRlc2NyaXB0aW9uOiB3YXJuaW5nRGVzYy5sZW5ndGggPyB3YXJuaW5nRGVzYyA6IHVuZGVmaW5lZFxuXHRcdH0pO1xuXHRcdG1lc3NhZ2VzID0gW2dlbmVyaWNNZXNzYWdlXS5jb25jYXQobWVzc2FnZXMpO1xuXHRcdG1lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKG1lc3NhZ2VzKTtcblx0XHRuZXcgU3RyaWN0RGlhbG9nKHtcblx0XHRcdG1lc3NhZ2VPYmplY3Q6IG1lc3NhZ2VIYW5kbGluZy5wcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCB0cnVlLCBpc011bHRpQ29udGV4dDQxMiksXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0bWVzc2FnZURpYWxvZ01vZGVsLFxuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0LFxuXHRcdFx0b25CZWdpbkJ1dHRvblByZXNzOiB0aGlzLmhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdG9uRW5kQnV0dG9uUHJlc3M6IHRoaXMuaGFuZGxlTWVzc2FnZU9uQ2FuY2VsLmJpbmQodGhpcyksXG5cdFx0XHRvbkNsb3NlOiBtZXNzYWdlUmVzb2x2ZVxuXHRcdH0pLm9wZW4oKTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHN0cmljdEhhbmRsaW5nUmVzb2x2ZSBvZiB0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMpIHtcblx0XHRcdHN0cmljdEhhbmRsaW5nUmVzb2x2ZS5vbkNvbnRleHRWYWxpZGF0aW9uKCk7XG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Jlc29sdmUuaGFuZGxpbmdSZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblZhbGlkYXRpb24/LigpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXNzYWdlT25DYW5jZWwoKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzID0gW107XG5cdFx0dGhpcy5jYW5jZWxlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBzdHJpY3RIYW5kbGluZ1Jlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Jlc29sdmUuaGFuZGxpbmdSZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzID0gW107XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpIHtcblx0XHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24ocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9DSEFOR0VTRVRfQ0FOQ0VMX01FU1NBR0VTXCIpLCB7XG5cdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIxNTBweFwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQ2FuY2VsPy4oKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQWdCQSxNQUFNQSxrQkFBa0IsR0FBR0MsU0FBUyxDQUFDRCxrQkFBa0I7RUFBQyxJQUVuQ0UsbUJBQW1CO0lBU3ZDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLG9CQUNrQkMsVUFVaEIsRUFDQTtNQUFBLEtBbkNNQyxzQkFBc0IsR0FBbUYsRUFBRTtNQUFBLEtBRTNHQyw2QkFBNkIsR0FBYyxFQUFFO01BQUEsS0FFN0NDLFFBQVEsR0FBRyxLQUFLO01BQUEsS0E2RWpCQyxVQUFVLEdBQUcsTUFBZTtRQUNsQyxPQUFPLElBQUksQ0FBQ0QsUUFBUTtNQUNyQixDQUFDO01BQUEsS0EzRGlCSCxVQVVoQixHQVZnQkEsVUFVaEI7TUFFRCxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sRUFBRTtRQUNwQyxNQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDUCxVQUFVLENBQUNLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSUQsT0FBTyxFQUFFRSxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtVQUMzRCxJQUFJLENBQUNDLFFBQVEsR0FBR0MsZUFBZSxDQUFDQyxNQUFNLENBQ3BDQyxPQUFPLElBQUtBLE9BQU8sQ0FBQ0osR0FB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bEIsT0FBTyxFQUFFeEI7TUFDVixDQUFDLENBQUMsQ0FBQzZDLElBQUksQ0FBQyxDQUFDO01BQ1QsT0FBTzVDLE9BQU87SUFDZixDQUFDO0lBQUF0RCxNQUFBLENBRU84Rix5QkFBeUIsR0FBakMsU0FBUUEseUJBQXlCQSxDQUFBLEVBQVM7TUFDekMsS0FBSyxNQUFNNUQscUJBQXFCLElBQUksSUFBSSxDQUFDbEQsc0JBQXNCLEVBQUU7UUFDaEVrRCxxQkFBcUIsQ0FBQzdCLG1CQUFtQixDQUFDLENBQUM7UUFDM0M2QixxQkFBcUIsQ0FBQ3pCLGVBQWUsQ0FBQyxJQUFJLENBQUM7TUFDNUM7TUFDQW9CLGVBQWUsQ0FBQ3NFLDZCQUE2QixDQUFDLENBQUM7TUFDL0N0RSxlQUFlLENBQUN1RSwrQkFBK0IsQ0FBQyxDQUFDO01BQ2pELElBQUksQ0FBQ25ILDZCQUE2QixHQUFHLEVBQUU7TUFDdkMsSUFBSSxDQUFDRixVQUFVLENBQUMyQyxNQUFNLEVBQUUyRSxZQUFZLEdBQUcsQ0FBQztJQUN6QyxDQUFDO0lBQUFyRyxNQUFBLENBRU9pRyxxQkFBcUIsR0FBN0IsU0FBUUEscUJBQXFCQSxDQUFBLEVBQVM7TUFDckMsTUFBTTFDLGFBQWEsR0FBR1YsbUJBQW1CLENBQUNXLGdCQUFnQixDQUFDLElBQUksQ0FBQ3pFLFVBQVUsQ0FBQ2lFLFlBQVksQ0FBQztNQUN4RixJQUFJLENBQUMvRCw2QkFBNkIsR0FBRyxFQUFFO01BQ3ZDLElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUk7TUFDcEIsS0FBSyxNQUFNZ0QscUJBQXFCLElBQUksSUFBSSxDQUFDbEQsc0JBQXNCLEVBQUU7UUFDaEVrRCxxQkFBcUIsQ0FBQ3pCLGVBQWUsQ0FBQyxLQUFLLENBQUM7TUFDN0M7TUFDQSxJQUFJLENBQUN6QixzQkFBc0IsR0FBRyxFQUFFO01BQ2hDLElBQUksSUFBSSxDQUFDRCxVQUFVLENBQUNnRCxrQkFBa0IsS0FBS25ELGtCQUFrQixDQUFDb0QsU0FBUyxFQUFFO1FBQ3hFeUMsVUFBVSxDQUFDNkIsV0FBVyxDQUFDL0MsYUFBYSxDQUFDUSxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtVQUM1RXdDLFlBQVksRUFBRTtRQUNmLENBQVcsQ0FBQztNQUNiO01BQ0EsSUFBSSxDQUFDeEgsVUFBVSxDQUFDMkMsTUFBTSxFQUFFOEUsUUFBUSxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUFBLE9BQUExSCxtQkFBQTtFQUFBO0VBQUFpQixRQUFBLEdBQUFqQixtQkFBQTtFQUFBLE9BQUFpQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -36,7 +36,7 @@ export default class ODataStrictHandling {
36
36
  * @param parameters.label A label for the operation, used in messages.
37
37
  * @param parameters.invocationGrouping Optional parameter to specify the grouping of the invocation (e.g., ChangeSet).
38
38
  * @param parameters.events The events for the strict handling
39
- * @param parameters.events.onResponse The event triggered when the backend returns 412 messages.
39
+ * @param parameters.events.onResponse The event triggered when the back end returns 412 messages.
40
40
  * @param parameters.events.onCancel The event triggered when the strict handling is canceled by the end user.
41
41
  * @param parameters.events.onValidation The event triggered when the strict handling is validated by the end user.
42
42
  */