@sapui5/sap.fe.macros 1.141.0 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -359,6 +359,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
359
359
  * @param enableAutoScroll Action either triggers scrolling to the newly created items in the related table or not
360
360
  * @param defaultValuesExtensionFunction Function name to prefill dialog parameters
361
361
  * @param forContextMenu Indicates if the action appears in the context menu. If false, the action appears in the table toolbar
362
+ * @param disableStrictHandling Disable strict handling for this specific action
362
363
  * @returns The binding expression
363
364
  */
364
365
  pressEventDataFieldForActionButton: function (tableProperties, dataField, entitySetName, operationAvailableMap, actionObject) {
@@ -366,6 +367,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
366
367
  let enableAutoScroll = arguments.length > 6 ? arguments[6] : undefined;
367
368
  let defaultValuesExtensionFunction = arguments.length > 7 ? arguments[7] : undefined;
368
369
  let forContextMenu = arguments.length > 8 ? arguments[8] : undefined;
370
+ let disableStrictHandling = arguments.length > 9 ? arguments[9] : undefined;
369
371
  if (!dataField) return undefined;
370
372
  const sActionName = dataField.Action,
371
373
  targetEntityTypeName = tableProperties.contextObjectPath.targetEntityType.fullyQualifiedName,
@@ -386,7 +388,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
386
388
  invocationGrouping: dataField?.InvocationGrouping === "UI.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated",
387
389
  controlId: tableProperties.contentId,
388
390
  operationAvailableMap: operationAvailableMap,
389
- label: dataField.Label
391
+ label: dataField.Label,
392
+ disableStrictHandling: disableStrictHandling
390
393
  };
391
394
  return compileExpression(fn("API.onActionPress", [ref("$event"), ref("$controller"), dataField.Action, params]));
392
395
  //return ActionHelper.getPressEventDataFieldForActionButton(table.id!, dataField, params, operationAvailableMap);
@@ -672,4 +675,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
672
675
  TableHelper.getTextOnActionField.requiresIContext = true;
673
676
  return TableHelper;
674
677
  }, false);
675
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsImFjdGlvbk9iamVjdCIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlbnRpdHlUeXBlIiwiX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZSIsInRvU3RyaW5nIiwiZmluZCIsIl9hY3Rpb24iLCIkSXNCb3VuZCIsIiRQYXJhbWV0ZXIiLCIkVHlwZSIsIiRpc0NvbGxlY3Rpb24iLCJzQWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiYVBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwidW5kZWZpbmVkIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUiLCJzRW50aXR5VHlwZSIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJsaW5lSXRlbUNvbGxlY3Rpb24iLCJvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJzS2V5IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwiT2JqZWN0Iiwia2V5cyIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnZlcnRlZE1ldGFEYXRhIiwibGluZUl0ZW1PclByZXNlbnRhdGlvbk9iamVjdCIsInJlc29sdmVQYXRoIiwiZ2V0UGF0aCIsInRhcmdldCIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJsaW5lSXRlbU9iamVjdCIsIml0ZW0iLCJ2YWx1ZSIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZUJpbmRpbmdUb0xvYWRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInByb3BlcnR5QmluZGluZ3MiLCJtYXAiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImdldENvbHVtbldpZHRoIiwib1RoaXMiLCJjb2x1bW4iLCJkYXRhRmllbGQiLCJkYXRhRmllbGRBY3Rpb25UZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInVzZVJlbVVuaXQiLCJtaWNyb0NoYXJ0VGl0bGUiLCJ3aWR0aCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImdldENvbHVtbldpZHRoRm9ySW1hZ2UiLCJnZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZCIsIm5hbWUiLCJfc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uIiwic29ydGFibGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlcXVpcmVkIiwiVGFibGVGb3JtYXR0ZXIiLCJhbm5vdGF0aW9ucyIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiZGF0YVR5cGUiLCJ0eXBlIiwiZ2V0RWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImhhc1RleHRBbm5vdGF0aW9uIiwiaGFzVGV4dCIsIkNvcmUiLCJNZWRpYVR5cGUiLCJpc0ltYWdlVVJMIiwidGFibGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIm5UbXBUZXh0V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsIm5UbXBWaXN1YWxpemF0aW9uV2lkdGgiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJwcm9wZXJ0eVdpZHRoIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZ2V0Q29sdW1uV2lkdGhGb3JDaGFydCIsImNvbHVtbkxhYmVsV2lkdGgiLCJjaGFydFNpemUiLCJnZXRDaGFydFNpemUiLCJnZXRTaG93T25seUNoYXJ0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInRtcFRleHQiLCJ0aXRsZVNpemUiLCJ0bXBXaWR0aCIsImdldE1hcmdpbkNsYXNzIiwic1Zpc3VhbGl6YXRpb24iLCJpc0xhc3RGaWVsZCIsInNDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImZpZWxkR3JvdXAiLCJhbGxTdGF0aWMiLCJoaWRkZW5QYXRocyIsImhpZGRlbkFubm90YXRpb25WYWx1ZSIsInB1c2giLCIkUGF0aCIsImhhc0FueVBhdGhFeHByZXNzaW9ucyIsImNvbnN0YW50IiwiaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMiLCJpZkVsc2UiLCJnZXRFbGVtZW50U3RhYmxlSWQiLCJ0YWJsZUlkIiwiZWxlbWVudElkIiwiZGF0YUZpZWxkUGFydCIsImdlbmVyYXRlIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJpZCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInRhYmxlUHJvcGVydGllcyIsImVudGl0eVNldE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc05hdmlnYWJsZSIsImFyZ3VtZW50cyIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic3RhdGljQWN0aW9uIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiY29udGV4dE1lbnVQYXRoIiwiY29udGV4dCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsImxhYmVsIiwiZm4iLCJyZWYiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJ0YWJsZURlZmluaXRpb24iLCJpc0JvdW5kIiwiZW5hYmxlT25TZWxlY3QiLCJhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSIsImlzQ29weSIsImlzU3RhdGljQWN0aW9uIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uSGVscGVyIiwiZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24iLCJkYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsInJlcXVpcmVzQ29udGV4dCIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgiLCJpc0FuYWx5dGljYWxUYWJsZSIsImVuYWJsZUFuYWx5dGljcyIsImVudGl0eVNldCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiTG9nIiwid2FybmluZyIsImdldE9iamVjdCIsInN1YnN0cmluZyIsImRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHkiLCJvciIsInJlYWRPbmx5IiwiYW5kIiwiVUkiLCJJc0luYWN0aXZlIiwiY3JlYXRpb25Nb2RlIiwiZXF1YWwiLCJmaWVsZE1vZGUiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJkYXRhZmllbGQiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic29tZSIsIm9EQyIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwib0RhdGFGaWVsZCIsIm9Db250ZXh0Iiwic1BhdGhEYXRhRmllbGRzIiwiYU11bHRpcGxlTGFiZWxzIiwiaSIsInJlZHVjZSIsImEiLCJiIiwiX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzIiwib0NvbHVtbiIsInRhYmxlVHlwZSIsInNldHRpbmdzIiwibWljcm9DaGFydFNpemUiLCJzaG93TWljcm9DaGFydExhYmVsIiwiZ2V0RGVsZWdhdGUiLCJpc0FMUCIsImVudGl0eU5hbWUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZGVsZWdhdGUiLCJjb250cm9sIiwiRXJyb3IiLCJwYXlsb2FkIiwiY29sbGVjdGlvbk5hbWUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJhbm5vdGF0aW9uIiwiY3JlYXRlSW5QbGFjZSIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbiIsImxlYWZMZXZlbCIsInN0cmluZ2lmeSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJzUGF0aCIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsImlzRGVsZXRlZCIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwib0Vycm9yIiwiZXJyb3IiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkVHlwZXMiLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsInZhbHVlT2YiLCJyZXF1aXJlc1NlbGVjdGlvbiIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5TZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNUZXh0LCBpc0ltYWdlVVJMIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgVGFibGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZS5ibG9ja1wiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBCYXNlQ29udGV4dCwgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB2NENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIEhpZGRlbiA9IHsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IGJvb2xlYW4gfCB7ICRQYXRoPzogc3RyaW5nIH0gfTtcbnR5cGUgQ29sdW1uV2lkdGhUaGlzID0geyBlbmFibGVBdXRvQ29sdW1uV2lkdGg/OiBib29sZWFuOyB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47IHRhYmxlVHlwZTogc3RyaW5nIH07XG50eXBlIE1pY3JvQ2hhcnRJbmZvID0geyB0aXRsZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4vKipcbiAqIEhlbHBlciBjbGFzcyB1c2VkIGJ5IHRoZSBjb250cm9sIGxpYnJhcnkgZm9yIE9EYXRhLXNwZWNpZmljIGhhbmRsaW5nIChPRGF0YSBWNClcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlSGVscGVyID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBnaXZlbiBhY3Rpb24gaXMgc3RhdGljLlxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0IFRoZSBpbnN0YW5jZSBvciB0aGUgcGF0aCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgYWN0aW9uIGlzIHN0YXRpYywgZWxzZSAnZmFsc2UnXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaXNTdGF0aWNBY3Rpb246IGZ1bmN0aW9uIChhY3Rpb25PYmplY3Q6IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBhY3Rpb25OYW1lOiBTdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24gfCB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0aWYgKGFjdGlvbk9iamVjdCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5fZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uT2JqZWN0LmZpbmQoZnVuY3Rpb24gKF9hY3Rpb246IE1ldGFNb2RlbEFjdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9hY3Rpb24uJElzQm91bmQgJiYgX2FjdGlvbi4kUGFyYW1ldGVyWzBdLiRUeXBlID09PSBlbnRpdHlUeXBlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoaXMgaXMganVzdCBvbmUgLSBPSyB3ZSB0YWtlIGl0LiBJZiBpdCdzIG1vcmUgaXQncyBhY3R1YWxseSBhIHdyb25nIHVzYWdlIGJ5IHRoZSBhcHBcblx0XHRcdFx0XHQvLyBhcyB3ZSB1c2VkIHRoZSBmaXJzdCBvbmUgYWxsIHRoZSB0aW1lIHdlIGtlZXAgaXQgYXMgaXQgaXNcblx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25PYmplY3RbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbk9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gISFhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBhY3Rpb24uJElzQm91bmQgJiYgISFhY3Rpb24uJFBhcmFtZXRlclswXS4kaXNDb2xsZWN0aW9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGVudGl0eSB0eXBlIG9mIGFuIGFjdGlvbiBvdmVybG9hZC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSB1c2VkIGluIHRoZSBhY3Rpb24gb3ZlcmxvYWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0cmV0dXJuIGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZUFsbChcIilcIiwgXCJcIik7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgb3ZlcmxvYWRlZCBvbiBhIGRpZmZlcmVudCBlbnRpdHkgdHlwZS5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldC5cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgdGhlIGFjdGlvbiBpcyBvdmVybG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgZW50aXR5IHR5cGUsIGVsc2UgJ2ZhbHNlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZywgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZShzQWN0aW9uTmFtZSk7XG5cdFx0cmV0dXJuICEhc0VudGl0eVR5cGUgJiYgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBmdW5jdGlvbiAobGluZUl0ZW1Db2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0lCTk5hdmlnYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0bGluZUl0ZW1Db2xsZWN0aW9uPy5mb3JFYWNoKChyZWNvcmQpID0+IHtcblx0XHRcdGlmIChcIlNlbWFudGljT2JqZWN0XCIgaW4gcmVjb3JkKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtyZWNvcmQuU2VtYW50aWNPYmplY3R9LSR7cmVjb3JkLkFjdGlvbn1gO1xuXHRcdFx0XHRpZiAocmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiYgIXJlY29yZC5JbmxpbmUgJiYgcmVjb3JkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKVxuXHRcdFx0XHRcdFx0XHQ/IChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pLnBhdGhcblx0XHRcdFx0XHRcdFx0OiByZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkubGVuZ3RoID4gMCA/IG9JQk5OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFVpTGluZUl0ZW1PYmplY3Q6IGZ1bmN0aW9uIChcblx0XHRsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGFcblx0KTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0ID0gY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXNcblx0XHRcdHwgUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0fCBMaW5lSXRlbTtcblx0XHRpZiAoIWxpbmVJdGVtT3JQcmVzZW50YXRpb25PYmplY3QpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAoY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQuVmlzdWFsaXphdGlvbnM7XG5cblx0XHRjb25zdCBsaW5lSXRlbU9iamVjdCA9IChcblx0XHRcdHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdD8gdmlzdWFsaXphdGlvbnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSA9PT0gMCk/LiR0YXJnZXRcblx0XHRcdFx0OiBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0XG5cdFx0KSBhcyBMaW5lSXRlbTtcblx0XHRyZXR1cm4gbGluZUl0ZW1PYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gbGluZUl0ZW1PYmplY3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCBhIGdpdmVuIGxpc3Qgb2YgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgb24gYSBjdXN0b20gY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCB0aGUgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRjcmVhdGVCaW5kaW5nVG9Mb2FkUHJvcGVydGllczogZnVuY3Rpb24gKHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdzID0gcHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwYXRoSW5Nb2RlbChwcm9wKSkgPz8gW107XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChwcm9wZXJ0eUJpbmRpbmdzLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNsb2FkUHJvcGVydGllc1wiKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGNvbHVtbidzIHdpZHRoIGlmIGRlZmluZWQgZnJvbSBtYW5pZmVzdCBvciBmcm9tIGN1c3RvbWl6YXRpb24gdmlhIGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGluc3RhbmNlIG9mIHRoZSBpbm5lciBtb2RlbCBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIG9UaGlzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgYmUgY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5XG5cdCAqIEBwYXJhbSBvVGhpcy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZGVmaW5pdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIGRhdGFGaWVsZEFjdGlvblRleHQgRGF0YUZpZWxkJ3MgdGV4dCBmcm9tIGJ1dHRvblxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgb2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcblx0ICogQHBhcmFtIHVzZVJlbVVuaXQgSW5kaWNhdGVzIGlmIHRoZSByZW0gdW5pdCBtdXN0IGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBjb2x1bW4gd2lkdGggcmVzdWx0XG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlLnRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbWljcm9jaGFydFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWljcm9jaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2Ugd2lkdGggaXMgc2V0IHRvIGF1dG9cblx0ICovXG5cdGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiAoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQWN0aW9uVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0dXNlUmVtVW5pdDogYm9vbGVhbixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbHVtbi53aWR0aCkge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi53aWR0aDtcblx0XHR9XG5cdFx0aWYgKG9UaGlzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0bGV0IHdpZHRoO1xuXHRcdFx0d2lkdGggPVxuXHRcdFx0XHR0aGlzLmdldENvbHVtbldpZHRoRm9ySW1hZ2UoZGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPikgfHxcblx0XHRcdFx0dGhpcy5nZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZChvVGhpcywgY29sdW1uLCBkYXRhRmllbGQsIGRhdGFGaWVsZEFjdGlvblRleHQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIG1pY3JvQ2hhcnRUaXRsZSkgfHxcblx0XHRcdFx0dW5kZWZpbmVkO1xuXHRcdFx0aWYgKHdpZHRoKSB7XG5cdFx0XHRcdHJldHVybiB1c2VSZW1Vbml0ID8gYCR7d2lkdGh9cmVtYCA6IHdpZHRoO1xuXHRcdFx0fVxuXHRcdFx0d2lkdGggPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUsXG5cdFx0XHRcdFx0XHR1c2VSZW1Vbml0LFxuXHRcdFx0XHRcdFx0dGhpcy5fc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uKG9UaGlzLCBjb2x1bW4pLFxuXHRcdFx0XHRcdFx0Y29sdW1uLnNvcnRhYmxlID8/IGZhbHNlLFxuXHRcdFx0XHRcdFx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcoY29sdW1uLnJlcXVpcmVkID8/IGZhbHNlLCBcImJvb2xlYW5cIikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPGJvb2xlYW4+XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRUYWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHdpZHRoO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgYW4gaW1hZ2UuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEByZXR1cm5zIC0gQ29sdW1uIHdpZHRoIGlmIGRlZmluZWQsIG90aGVyd2lzZSBudWxsICh0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9ySW1hZ2U6IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPik6IG51bWJlciB8IG51bGwge1xuXHRcdGxldCB3aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IGRhdGFUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdGlmIChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZSAmJlxuXHRcdFx0Z2V0RWRpdE1vZGUoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlPy4kdGFyZ2V0LFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHQpID09PSBGaWVsZEVkaXRNb2RlLkRpc3BsYXkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlPy4kdGFyZ2V0XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBoYXNUZXh0QW5ub3RhdGlvbiA9IGhhc1RleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldCk7XG5cdFx0XHRpZiAoZGF0YVR5cGUgPT09IFwiRWRtLlN0cmVhbVwiICYmICFoYXNUZXh0QW5ub3RhdGlvbiAmJiBhbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy5pbmNsdWRlcz8uKFwiaW1hZ2UvXCIpKSB7XG5cdFx0XHRcdHdpZHRoID0gNi4yO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRhbm5vdGF0aW9ucyAmJlxuXHRcdFx0KGlzSW1hZ2VVUkwoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0KSB8fCBhbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy5pbmNsdWRlcz8uKFwiaW1hZ2UvXCIpKVxuXHRcdCkge1xuXHRcdFx0d2lkdGggPSA2LjI7XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGNvbHVtbiBoZWFkZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjb2x1bW4gd2lkdGguXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHRhYmxlLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIHdpZHRoIHNob3VsZCBpbmNsdWRlIHRoZSBoZWFkZXJcblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGNvbmZpZ3VyYXRpb25cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKi9cblx0X3Nob3VsZEluY2x1ZGVIZWFkZXJJbkNvbHVtbndpZGhDYWxjdWxhdGlvbih0YWJsZTogQ29sdW1uV2lkdGhUaGlzLCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBjb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgIT09IHVuZGVmaW5lZCA/IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA6IHRhYmxlLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIERhdGFGaWVsZC5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBvVGhpcy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhIEZpZWxkXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBY3Rpb25UZXh0IERhdGFGaWVsZCdzIHRleHQgZnJvbSBidXR0b25cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAoIHRoZSB3aWR0aCBpcyB0cmVhdGVkIGFzIGEgcmVtIHZhbHVlKVxuXHQgKi9cblx0Z2V0Q29sdW1uV2lkdGhGb3JEYXRhRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRvVGhpczogQ29sdW1uV2lkdGhUaGlzLFxuXHRcdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGRhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGQgfCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPixcblx0XHRkYXRhRmllbGRBY3Rpb25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBudW1iZXIgfCBudWxsIHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBkYXRhVHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py4kVHlwZTtcblx0XHRsZXQgd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGlmIChcblx0XHRcdGRhdGFUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdGRhdGFUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdChkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHQhKGRhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KS5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cH1gKSlcblx0XHQpIHtcblx0XHRcdGxldCBuVG1wVGV4dFdpZHRoO1xuXHRcdFx0blRtcFRleHRXaWR0aCA9XG5cdFx0XHRcdFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoZGF0YUZpZWxkQWN0aW9uVGV4dCkgfHxcblx0XHRcdFx0U2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChkYXRhRmllbGQ/LkxhYmVsPy50b1N0cmluZygpKSB8fFxuXHRcdFx0XHRTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKChhbm5vdGF0aW9ucyBhcyB7IExhYmVsPzogc3RyaW5nIH0pPy5MYWJlbCk7IC8vIFJFVklFVyA6IFRoaXMgbWFrZXMgbm8gc2Vuc2UgOilcblxuXHRcdFx0Ly8gZ2V0IHdpZHRoIGZvciByYXRpbmcgb3IgcHJvZ3Jlc3MgYmFyIGRhdGFmaWVsZFxuXHRcdFx0Y29uc3QgblRtcFZpc3VhbGl6YXRpb25XaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdFx0XHR0aGlzLl9zaG91bGRJbmNsdWRlSGVhZGVySW5Db2x1bW53aWRoQ2FsY3VsYXRpb24ob1RoaXMsIGNvbHVtbilcblx0XHRcdCkucHJvcGVydHlXaWR0aDtcblxuXHRcdFx0aWYgKG5UbXBWaXN1YWxpemF0aW9uV2lkdGggPiBuVG1wVGV4dFdpZHRoKSB7XG5cdFx0XHRcdHdpZHRoID0gblRtcFZpc3VhbGl6YXRpb25XaWR0aDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGRhdGFGaWVsZEFjdGlvblRleHQgfHxcblx0XHRcdFx0KGFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0KGlzQW5ub3RhdGlvbk9mVHlwZShhbm5vdGF0aW9ucywgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB8fFxuXHRcdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlKGFubm90YXRpb25zLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pKSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBZGQgYWRkaXRpb25hbCAxLjggcmVtIHRvIGF2b2lkIHNob3dpbmcgZWxsaXBzaXMgaW4gc29tZSBjYXNlcy5cblx0XHRcdFx0blRtcFRleHRXaWR0aCArPSAxLjg7XG5cdFx0XHRcdHdpZHRoID0gblRtcFRleHRXaWR0aDtcblx0XHRcdH1cblx0XHRcdHdpZHRoID0gd2lkdGggPz8gdGhpcy5nZXRDb2x1bW5XaWR0aEZvckNoYXJ0KG9UaGlzLCBjb2x1bW4sIGRhdGFGaWVsZCwgblRtcFRleHRXaWR0aCwgbWljcm9DaGFydFRpdGxlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIENoYXJ0LlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGluc3RhbmNlIG9mIHRoZSBpbm5lciBtb2RlbCBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIGNvbHVtbiBEZWZpbmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4sIHdoaWNoIGlzIHRha2VuIHdpdGggcHJpb3JpdHkgaWYgbm90IG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eVxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGEgRmllbGRcblx0ICogQHBhcmFtIGNvbHVtbkxhYmVsV2lkdGggVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gbGFiZWwgb3IgYnV0dG9uIGxhYmVsXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0aXRsZSBhbmQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEByZXR1cm5zIC0gQ29sdW1uIHdpZHRoIGlmIGRlZmluZWQsIG90aGVyd2lzZSBudWxsICh0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9yQ2hhcnQoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0Y29sdW1uTGFiZWxXaWR0aDogbnVtYmVyLFxuXHRcdG1pY3JvQ2hhcnRUaXRsZT86IE1pY3JvQ2hhcnRJbmZvXG5cdCk6IG51bWJlciB8IG51bGwge1xuXHRcdGxldCBjaGFydFNpemUsXG5cdFx0XHR3aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdFx0aWYgKChkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPikuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGg/LmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKSkge1xuXHRcdFx0c3dpdGNoICh0aGlzLmdldENoYXJ0U2l6ZShvVGhpcywgY29sdW1uKSkge1xuXHRcdFx0XHRjYXNlIFwiWFNcIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA0LjQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNC42O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTVwiOlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDUuNTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkxcIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA2Ljk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNS4zO1xuXHRcdFx0fVxuXHRcdFx0Y29sdW1uTGFiZWxXaWR0aCArPSAxLjg7XG5cdFx0XHRpZiAoIXRoaXMuZ2V0U2hvd09ubHlDaGFydChvVGhpcywgY29sdW1uKSAmJiAobWljcm9DaGFydFRpdGxlPy50aXRsZS5sZW5ndGggfHwgbWljcm9DaGFydFRpdGxlPy5kZXNjcmlwdGlvbi5sZW5ndGgpKSB7XG5cdFx0XHRcdGNvbnN0IHRtcFRleHQgPVxuXHRcdFx0XHRcdG1pY3JvQ2hhcnRUaXRsZS50aXRsZS5sZW5ndGggPiBtaWNyb0NoYXJ0VGl0bGUuZGVzY3JpcHRpb24ubGVuZ3RoID8gbWljcm9DaGFydFRpdGxlLnRpdGxlIDogbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uO1xuXHRcdFx0XHRjb25zdCB0aXRsZVNpemUgPSBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHRtcFRleHQpICsgNztcblx0XHRcdFx0Y29uc3QgdG1wV2lkdGggPSB0aXRsZVNpemUgPiBjb2x1bW5MYWJlbFdpZHRoID8gdGl0bGVTaXplIDogY29sdW1uTGFiZWxXaWR0aDtcblx0XHRcdFx0d2lkdGggPSB0bXBXaWR0aDtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uTGFiZWxXaWR0aCA+IGNoYXJ0U2l6ZSkge1xuXHRcdFx0XHR3aWR0aCA9IGNvbHVtbkxhYmVsV2lkdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aWR0aCA9IGNoYXJ0U2l6ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGFkZCBhIG1hcmdpbiBjbGFzcyBhdCB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIHNWaXN1YWxpemF0aW9uXG5cdCAqIEBwYXJhbSBpc0xhc3RGaWVsZCBJbmRpY2F0ZXMgaWYgdGhlIGZpZWxkIGlzIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBmaWVsZCBncm91cFxuXHQgKiBAcmV0dXJucyBBZGp1c3RpbmcgdGhlIG1hcmdpblxuXHQgKi9cblx0Z2V0TWFyZ2luQ2xhc3M6IGZ1bmN0aW9uIChzVmlzdWFsaXphdGlvbjogc3RyaW5nLCBpc0xhc3RGaWVsZDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0bGV0IHNDbGFzcyA9IFwiXCI7XG5cdFx0aWYgKGlzTGFzdEZpZWxkKSB7XG5cdFx0XHQvL0lmIHJhdGluZyBpbmRpY2F0b3IgaXMgbGFzdCBlbGVtZW50IGluIGZpZWxkZ3JvdXAsIHRoZW4gdGhlIDAuNXJlbSBtYXJnaW4gYWRkZWQgYnkgc2FwTVJJIGNsYXNzIG9mIGludGVyYWN0aXZlIHJhdGluZyBpbmRpY2F0b3Igb24gdG9wIGFuZCBib3R0b20gbXVzdCBiZSBudWxsaWZpZWQuXG5cdFx0XHRpZiAoc1Zpc3VhbGl6YXRpb24gPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0XHRzQ2xhc3MgPSBcInNhcFVpTm9NYXJnaW5Cb3R0b20gc2FwVWlOb01hcmdpblRvcFwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc1Zpc3VhbGl6YXRpb24gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdC8vSWYgcmF0aW5nIGluZGljYXRvciBpcyBOT1QgdGhlIGxhc3QgZWxlbWVudCBpbiBmaWVsZGdyb3VwLCB0aGVuIHRvIG1haW50YWluIHRoZSAwLjVyZW0gc3BhY2luZyBiZXR3ZWVuIGNvZ2V0TWFyZ2luQ2xhc3NudHJvbHMgKGFzIHBlciBVWCBzcGVjKSxcblx0XHRcdC8vb25seSB0aGUgdG9wIG1hcmdpbiBhZGRlZCBieSBzYXBNUkkgY2xhc3Mgb2YgaW50ZXJhY3RpdmUgcmF0aW5nIGluZGljYXRvciBtdXN0IGJlIG51bGxpZmllZC5cblxuXHRcdFx0c0NsYXNzID0gXCJzYXBVaU5vTWFyZ2luVG9wXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDbGFzcyA9IFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCI7XG5cdFx0fVxuXHRcdHJldHVybiBzQ2xhc3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgVkJveCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gY29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGluIFZCb3hcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyBIaWRkZW4gZXhwcmVzc2lvbiBjb250YWluZWQgaW4gRmllbGRHcm91cFxuXHQgKiBAcGFyYW0gZmllbGRHcm91cCBEYXRhIGZpZWxkIGNvbnRhaW5pbmcgdGhlIFZCb3hcblx0ICogQHJldHVybnMgVmlzaWJpbGl0eSBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXRWQm94VmlzaWJpbGl0eTogZnVuY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb246IEFycmF5PERhdGFGaWVsZEZvckFubm90YXRpb24gJiBIaWRkZW4+LFxuXHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0ZmllbGRHcm91cDogRmllbGRHcm91cCAmIEhpZGRlblxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IGFsbFN0YXRpYyA9IHRydWU7XG5cdFx0Y29uc3QgaGlkZGVuUGF0aHMgPSBbXTtcblxuXHRcdGlmIChmaWVsZEdyb3VwW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0pIHtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgY29sbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvblZhbHVlID0gZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF07XG5cdFx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSB1bmRlZmluZWQgfHwgaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKGZhbHNlKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblBhdGhzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZS4kUGF0aCkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKHBhdGhJbk1vZGVsKGhpZGRlbkFubm90YXRpb25WYWx1ZS4kUGF0aCkpO1xuXHRcdFx0XHRhbGxTdGF0aWMgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyBEeW5hbWljIGV4cHJlc3Npb24gZm91bmQgaW4gYSBmaWVsZFxuXHRcdFx0XHRyZXR1cm4gZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGhhc0FueVBhdGhFeHByZXNzaW9ucyA9IGNvbnN0YW50KGhpZGRlblBhdGhzLmxlbmd0aCA+IDAgJiYgYWxsU3RhdGljICE9PSB0cnVlKTtcblx0XHRjb25zdCBoYXNBbGxIaWRkZW5TdGF0aWNFeHByZXNzaW9ucyA9IGNvbnN0YW50KGhpZGRlblBhdGhzLmxlbmd0aCA+IDAgJiYgIWhpZGRlblBhdGhzLmluY2x1ZGVzKGZhbHNlKSAmJiBhbGxTdGF0aWMpO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRoYXNBbnlQYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChoaWRkZW5QYXRocywgVGFibGVGb3JtYXR0ZXIuZ2V0VkJveFZpc2liaWxpdHkpLFxuXHRcdFx0XHRpZkVsc2UoaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMsIGNvbnN0YW50KGZhbHNlKSwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgc3RhYmxlIElEIG9mIGEgdGFibGUgZWxlbWVudCAoY29sdW1uIG9yIEZpZWxkR3JvdXAgbGFiZWwpLlxuXHQgKiBAcGFyYW0gdGFibGVJZCBDdXJyZW50IG9iamVjdCBJRFxuXHQgKiBAcGFyYW0gZWxlbWVudElkIEVsZW1lbnQgSWQgb3Igc3VmZml4XG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGRhdGFGaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgc3RhYmxlIElEIGZvciBhIGdpdmVuIGNvbHVtblxuXHQgKi9cblx0Z2V0RWxlbWVudFN0YWJsZUlkOiBmdW5jdGlvbiAoXG5cdFx0dGFibGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGVsZW1lbnRJZDogc3RyaW5nLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRhYmxlSWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGxldCBkYXRhRmllbGRQYXJ0OiBzdHJpbmcgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gZGF0YUZpZWxkLlRhcmdldC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gZGF0YUZpZWxkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGRhdGFGaWVsZFBhcnQgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LnBhdGggPz8gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmF0ZShbdGFibGVJZCwgZWxlbWVudElkLCBkYXRhRmllbGRQYXJ0XSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHN0YWJsZSBJRCBvZiB0aGUgY29sdW1uLlxuXHQgKiBAcGFyYW0gaWQgQ3VycmVudCBvYmplY3QgSURcblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBzdGFibGUgSUQgZm9yIGEgZ2l2ZW4gY29sdW1uXG5cdCAqL1xuXHRnZXRDb2x1bW5TdGFibGVJZDogZnVuY3Rpb24gKGlkOiBzdHJpbmcsIGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBUYWJsZUhlbHBlci5nZXRFbGVtZW50U3RhYmxlSWQoaWQsIFwiQ1wiLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fSxcblxuXHRnZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZDogZnVuY3Rpb24gKFxuXHRcdGlkOiBzdHJpbmcsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPlxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBUYWJsZUhlbHBlci5nZXRFbGVtZW50U3RhYmxlSWQoaWQsIFwiRkdMYWJlbFwiLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlICdwcmVzcycgZXZlbnQgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YW1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQgVGhlIGlkIG9mIHRoZSBNREMgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFZhbHVlIG9mIHRoZSBEYXRhUG9pbnRcblx0ICogQHBhcmFtIGVudGl0eVNldE5hbWUgTmFtZSBvZiB0aGUgRW50aXR5U2V0XG5cdCAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgT3BlcmF0aW9uQXZhaWxhYmxlTWFwIGFzIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqIEBwYXJhbSBhY3Rpb25PYmplY3Rcblx0ICogQHBhcmFtIGlzTmF2aWdhYmxlIEFjdGlvbiBlaXRoZXIgdHJpZ2dlcnMgbmF2aWdhdGlvbiBvciBub3Rcblx0ICogQHBhcmFtIGVuYWJsZUF1dG9TY3JvbGwgQWN0aW9uIGVpdGhlciB0cmlnZ2VycyBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbXMgaW4gdGhlIHJlbGF0ZWQgdGFibGUgb3Igbm90XG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gRnVuY3Rpb24gbmFtZSB0byBwcmVmaWxsIGRpYWxvZyBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0cHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbjogZnVuY3Rpb24gKFxuXHRcdHRhYmxlUHJvcGVydGllczoge1xuXHRcdFx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRjb250ZW50SWQ6IHN0cmluZztcblx0XHR9LFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGVudGl0eVNldE5hbWU6IHN0cmluZyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyxcblx0XHRhY3Rpb25PYmplY3Q/OiBNZXRhTW9kZWxBY3Rpb24gfCBNZXRhTW9kZWxBY3Rpb25bXSB8IHN0cmluZyxcblx0XHRpc05hdmlnYWJsZSA9IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZyxcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW5cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGlmICghZGF0YUZpZWxkKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdHRhcmdldEVudGl0eVR5cGVOYW1lID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0c3RhdGljQWN0aW9uID1cblx0XHRcdFx0dHlwZW9mIGFjdGlvbk9iamVjdCAhPT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQodGhpcy5faXNTdGF0aWNBY3Rpb24oYWN0aW9uT2JqZWN0LCBzQWN0aW9uTmFtZSkgfHxcblx0XHRcdFx0XHR0aGlzLl9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlKHNBY3Rpb25OYW1lLnRvU3RyaW5nKCksIHRhcmdldEVudGl0eVR5cGVOYW1lKSksXG5cdFx0XHRhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRcdG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiLFxuXHRcdFx0Y29udGV4dE1lbnVQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCIsXG5cdFx0XHRjb250ZXh0ID0gcGF0aEluTW9kZWwoYCR7Y29udGV4dE1lbnVQYXRofXNlbGVjdGVkQ29udGV4dHNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGFyYW1zID0ge1xuXHRcdFx0XHRjb250ZXh0czogIXN0YXRpY0FjdGlvbiA/IGNvbnRleHQgOiBudWxsLFxuXHRcdFx0XHRiU3RhdGljQWN0aW9uOiBzdGF0aWNBY3Rpb24gPyBzdGF0aWNBY3Rpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdGVudGl0eVNldE5hbWU6IGVudGl0eVNldE5hbWUsXG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0czogIXN0YXRpY0FjdGlvblxuXHRcdFx0XHRcdD8gcGF0aEluTW9kZWwoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHl9L2AsIFwiaW50ZXJuYWxcIilcblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0czogIXN0YXRpY0FjdGlvblxuXHRcdFx0XHRcdD8gcGF0aEluTW9kZWwoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9L2AsIFwiaW50ZXJuYWxcIilcblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBpc05hdmlnYWJsZSxcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogZGF0YUZpZWxkPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0Y29udHJvbElkOiB0YWJsZVByb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5MYWJlbFxuXHRcdFx0fTtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm4oXCJBUEkub25BY3Rpb25QcmVzc1wiLCBbcmVmKFwiJGV2ZW50XCIpLCByZWYoXCIkY29udHJvbGxlclwiKSwgZGF0YUZpZWxkLkFjdGlvbiwgcGFyYW1zXSkpO1xuXHRcdC8vcmV0dXJuIEFjdGlvbkhlbHBlci5nZXRQcmVzc0V2ZW50RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKHRhYmxlLmlkISwgZGF0YUZpZWxkLCBwYXJhbXMsIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBhY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBpc0JvdW5kIElzQm91bmQgZm9yIEFjdGlvblxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBlbmFibGVPblNlbGVjdCBEZWZpbmUgdGhlIGVuYWJsaW5nIG9mIHRoZSBhY3Rpb24gKHNpbmdsZSBvciBtdWx0aXNlbGVjdClcblx0ICogQHBhcmFtIGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgYW5ub3RhdGlvbiB0YXJnZXRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcGFyYW0gaXNDb3B5XG5cdCAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cblx0ICovXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdGFjdGlvbk5hbWU6IHN0cmluZyB8IFN0cmluZyxcblx0XHRpc0JvdW5kOiBib29sZWFuLFxuXHRcdGFjdGlvbk9iamVjdD86IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgc3RyaW5nLFxuXHRcdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nLFxuXHRcdGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW4sXG5cdFx0aXNDb3B5PzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoIWFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlKSByZXR1cm4gZmFsc2U7XG5cblx0XHRjb25zdCBpc1N0YXRpY0FjdGlvbiA9IHRoaXMuX2lzU3RhdGljQWN0aW9uKGFjdGlvbk9iamVjdCwgYWN0aW9uTmFtZSk7XG5cblx0XHQvLyBDaGVjayBmb3IgYWN0aW9uIG92ZXJsb2FkIG9uIGEgZGlmZmVyZW50IEVudGl0eSB0eXBlLlxuXHRcdC8vIElmIHllcywgdGFibGUgcm93IHNlbGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgYWN0aW9uLlxuXHRcdGlmICh0aGlzLl9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSwgYW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0Ly8gQWN0aW9uIG92ZXJsb2FkIGRlZmluZWQgb24gZGlmZmVyZW50IGVudGl0eSB0eXBlXG5cdFx0XHRjb25zdCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVEZWZpbml0aW9uICYmIEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRpZiAob09wZXJhdGlvbkF2YWlsYWJsZU1hcD8uaGFzT3duUHJvcGVydHkoYWN0aW9uTmFtZSkpIHtcblx0XHRcdFx0Ly8gQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBkZWZpbmVkIGZvciB0aGUgYWN0aW9uLlxuXHRcdFx0XHQvLyBOZWVkIHRvIHJlZmVyIHRvIGludGVybmFsIG1vZGVsIGZvciBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbi5cblx0XHRcdFx0Ly8gcmV0dXJuIGNvbXBpbGVCaW5kaW5nKGJpbmRpbmdFeHByZXNzaW9uKFwiZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uTmFtZSArIFwiL2JFbmFibGVkXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gIWZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBgez0gXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWR9IH1gXG5cdFx0XHRcdFx0OiBgez0gXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX0gfWA7XG5cdFx0XHR9XG5cdFx0XHQvLyBDb25zaWRlciB0aGUgYWN0aW9uIGp1c3QgbGlrZSBhbnkgb3RoZXIgc3RhdGljIERhdGFGaWVsZEZvckFjdGlvbi5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoIWlzQm91bmQgfHwgaXNTdGF0aWNBY3Rpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBpc0NvcHlcblx0XHRcdD8gQWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KVxuXHRcdFx0OiBBY3Rpb25IZWxwZXIuZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24oZW5hYmxlT25TZWxlY3QgPz8gXCJtdWx0aXNlbGVjdFwiLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRsZXQgZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgYWN0aW9uID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBcXCR7aW50ZXJuYWw+ZHluYW1pY0FjdGlvbnMvJHthY3Rpb25OYW1lfS9iRW5hYmxlZH1gXG5cdFx0XHQ6IGBcXCR7aW50ZXJuYWw+ZHluYW1pY0FjdGlvbnMvJHthY3Rpb25OYW1lfS9iRW5hYmxlZEZvckNvbnRleHRNZW51fWA7XG5cdFx0ZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gPSBgJHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ICYmICR7YWN0aW9ufWA7XG5cblx0XHRyZXR1cm4gYHs9ICR7ZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb259fWA7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JJQk4gYWN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzLmNvbGxlY3Rpb24gIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdG8gYmUgdXNlZFxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGRcblx0ICogQHBhcmFtIHJlcXVpcmVzQ29udGV4dCBSZXF1aXJlc0NvbnRleHQgZm9yIElCTlxuXHQgKiBAcGFyYW0gaXNOYXZpZ2F0aW9uQXZhaWxhYmxlIERlZmluZSBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cblx0ICovXG5cdGlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlUHJvcGVydGllczoge1xuXHRcdFx0Y29sbGVjdGlvbjogQ29udGV4dDtcblx0XHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdH0sXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0cmVxdWlyZXNDb250ZXh0OiBib29sZWFuIHwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Qm9vbGVhbj4sXG5cdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlPzogYm9vbGVhbiB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHRcdGZvckNvbnRleHRNZW51PzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRsZXQgaXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aCA9IG51bGw7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSkpIHtcblx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggPSBpc05hdmlnYXRpb25BdmFpbGFibGUucGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZVByb3BlcnRpZXM/LnRhYmxlRGVmaW5pdGlvbj8uZW5hYmxlQW5hbHl0aWNzO1xuXG5cdFx0aWYgKCFyZXF1aXJlc0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uLmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uLmdldE1vZGVsKCk7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uQXZhaWxhYmxlID09PSBmYWxzZSAmJiAhaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJOYXZpZ2F0aW9uQXZhaWxhYmxlIGFzIGZhbHNlIGlzIGluY29ycmVjdCB1c2FnZVwiKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aCAmJlxuXHRcdFx0XHQhaXNBbmFseXRpY2FsVGFibGUgJiZcblx0XHRcdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkPy5OYXZpZ2F0aW9uQXZhaWxhYmxlKSAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldCArIFwiLyRQYXJ0bmVyXCIpID09PSBkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZS5wYXRoLnNwbGl0KFwiL1wiKVswXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBgez0gXFwkeyR7aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5pbmRleE9mKFwiL1wiKSArIDEsXG5cdFx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5sZW5ndGhcblx0XHRcdFx0KX19fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSBcIlwiLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0YWN0aW9uO1xuXG5cdFx0aWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gdHJ1ZSB8fCBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSAhKGZvckNvbnRleHRNZW51ID8/IGZhbHNlKVxuXHRcdFx0XHQ/IFwiJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIlxuXHRcdFx0XHQ6IFwiJXtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIjtcblx0XHR9IGVsc2UgaWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBmYWxzZSBpcyBpbmNvcnJlY3QgdXNhZ2VcIik7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9ICEoZm9yQ29udGV4dE1lbnUgPz8gZmFsc2UpXG5cdFx0XHRcdD8gXCIle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMVwiXG5cdFx0XHRcdDogXCIle2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMVwiO1xuXHRcdFx0YWN0aW9uID0gIShmb3JDb250ZXh0TWVudSA/PyBmYWxzZSlcblx0XHRcdFx0PyBgXFwke2ludGVybmFsPmlibi8ke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH0tJHtkYXRhRmllbGQuQWN0aW9ufS9iRW5hYmxlZH1gXG5cdFx0XHRcdDogYFxcJHtpbnRlcm5hbD5pYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX1gO1xuXHRcdFx0ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgKyBcIiAmJiBcIiArIGFjdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gYHs9ICR7ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb259fWA7XG5cdH0sXG5cblx0YnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHk6IGZ1bmN0aW9uICh0YWJsZTogVGFibGVCbG9jayk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKHRhYmxlLnJlYWRPbmx5ID09PSB0cnVlLCBhbmQoVUkuSXNJbmFjdGl2ZSwgdGFibGUuY3JlYXRpb25Nb2RlLm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHRhYmxlLmZpZWxkTW9kZSwgXCJub3dyYXBwZXJcIilcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuXG5cdCAqIEBwYXJhbSBkYXRhZmllbGQgRGF0YUZpZWxkXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb2xsZWN0aW9uIExpc3Qgb2YgaXRlbXMgaW5zaWRlIGEgZmllbGRncm91cCAoaWYgYW55KVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBsYWJlbCBuZWVkcyB0byBiZSB2aXNpYmxlIGVsc2UgZmFsc2UuXG5cdCAqL1xuXHRzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRkYXRhZmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPixcblx0XHRkYXRhRmllbGRDb2xsZWN0aW9uPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+W11cblx0KTogYm9vbGVhbiB7XG5cdFx0Ly8gSWYgSW5saW5lIGJ1dHRvbi9uYXZpZ2F0aW9uIGFjdGlvbiwgcmV0dXJuIGZhbHNlLCBlbHNlIHRydWU7XG5cdFx0aWYgKCFkYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRpZiAoZGF0YWZpZWxkLiRUeXBlPy5pbmNsdWRlcyhcIkRhdGFGaWVsZEZvckFjdGlvblwiKSAmJiBkYXRhZmllbGQuSW5saW5lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChkYXRhZmllbGQuJFR5cGU/LmluY2x1ZGVzKFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpICYmIGRhdGFmaWVsZC5JbmxpbmUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gRmllbGRncm91cCwgSWYgTk9UIGFsbCBkYXRhZmllbGQvZGF0YWZpZWxkRm9yQW5ub3RhdGlvbiBleGlzdHMgd2l0aCBoaWRkZW4sIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBkYXRhRmllbGRDb2xsZWN0aW9uLnNvbWUoZnVuY3Rpb24gKG9EQykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob0RDLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHwgb0RDLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdFx0XHQob0RDIGFzIHVua25vd24gYXMgSGlkZGVuKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdICE9PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHRleHQgZnJvbSB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpbnRvIHRoZSBjb2x1bW4uXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9iamVjdCBvZiB0aGUgTGluZUl0ZW1cblx0ICogQHBhcmFtIG9Db250ZXh0LmNvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgdGhlIExpbmVJdGVtXG5cdCAqIEByZXR1cm5zIFN0cmluZyBmcm9tIGxhYmVsIHJlZmVycmluZyB0byBhY3Rpb24gdGV4dFxuXHQgKi9cblx0Z2V0VGV4dE9uQWN0aW9uRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdG9Db250ZXh0OiB7IGNvbnRleHQ6IEJhc2VDb250ZXh0IH1cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG9EYXRhRmllbGQuTGFiZWw7XG5cdFx0fVxuXHRcdC8vIGZvciBGaWVsZEdyb3VwIGNvbnRhaW5pbmcgRGF0YUZpZWxkRm9yQW5ub3RhdGlvblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKS5pbmRleE9mKFwiQFwiICsgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkgPiAtMVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc1BhdGhEYXRhRmllbGRzID0gXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCI7XG5cdFx0XHRjb25zdCBhTXVsdGlwbGVMYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gb0NvbnRleHQuY29udGV4dC5nZXRPYmplY3Qoc1BhdGhEYXRhRmllbGRzKSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRleHQuY29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGhEYXRhRmllbGRzICsgaX0vJFR5cGVgKSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdFx0b0NvbnRleHQuY29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGhEYXRhRmllbGRzICsgaX0vJFR5cGVgKSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFNdWx0aXBsZUxhYmVscy5wdXNoKG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9L0xhYmVsYCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBhY3Rpb25zIGluc2lkZSBhIEZpZWxkIEdyb3VwIHNlbGVjdCB0aGUgbGFyZ2VzdCBBY3Rpb24gTGFiZWxcblx0XHRcdGlmIChhTXVsdGlwbGVMYWJlbHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gYU11bHRpcGxlTGFiZWxzLnJlZHVjZShmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5sZW5ndGggPiBiLmxlbmd0aCA/IGEgOiBiO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhTXVsdGlwbGVMYWJlbHMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogYU11bHRpcGxlTGFiZWxzLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5nczogZnVuY3Rpb24gKG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsIG9Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IFRhYmxlQ29sdW1uU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuXHRcdGlmIChvVGhpcy50YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLnNldHRpbmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldENoYXJ0U2l6ZTogZnVuY3Rpb24gKG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsIG9Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5ncyhvVGhpcywgb0NvbHVtbik7XG5cdFx0aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLm1pY3JvQ2hhcnRTaXplKSB7XG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MubWljcm9DaGFydFNpemU7XG5cdFx0fVxuXHRcdHJldHVybiBcIlhTXCI7XG5cdH0sXG5cdGdldFNob3dPbmx5Q2hhcnQ6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzKG9UaGlzLCBvQ29sdW1uKTtcblx0XHRpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3Muc2hvd01pY3JvQ2hhcnRMYWJlbCkge1xuXHRcdFx0cmV0dXJuICFzZXR0aW5ncy5zaG93TWljcm9DaGFydExhYmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRnZXREZWxlZ2F0ZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZVZpc3VhbGl6YXRpb24sIGlzQUxQOiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcsIGZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCBkZWxlZ2F0ZToge1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0cGF5bG9hZD86XG5cdFx0XHRcdHwgeyBjb2xsZWN0aW9uTmFtZT86IHN0cmluZzsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW47IGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbj86IHsgbGVhZkxldmVsOiBib29sZWFuIH0gfVxuXHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogc3RyaW5nO1xuXHRcdFx0XHRcdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXHRcdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllczogYm9vbGVhbjtcblx0XHRcdFx0XHRcdGNyZWF0ZUluUGxhY2U/OiBib29sZWFuO1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25Db25maWd1cmF0aW9uPzogeyBsZWFmTGV2ZWw6IGJvb2xlYW4gfTtcblx0XHRcdFx0ICB9O1xuXHRcdH07XG5cdFx0aWYgKGlzQUxQKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IFRyZWVUYWJsZSBpbiBBTFBcblx0XHRcdGlmICh0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVHJlZVRhYmxlIG5vdCBzdXBwb3J0ZWQgaW4gQW5hbHl0aWNhbCBMaXN0UGFnZVwiKTtcblx0XHRcdH1cblx0XHRcdGRlbGVnYXRlID0ge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL0FMUFRhYmxlRGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25OYW1lOiBlbnRpdHlOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpZiAodGFibGUuZW5hYmxlQW5hbHl0aWNzICYmIGZpbHRlck9uQWN0aXZlRW50aXRpZXMpIHtcblx0XHRcdFx0ZGVsZWdhdGUucGF5bG9hZCEuZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdGlmICghdGFibGUuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQSBoaWVyYXJjaHkgcXVhbGlmaWVyIGlzIG1hbmRhdG9yeSB3aXRoIGEgVHJlZVRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZWdhdGUgPSB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVHJlZVRhYmxlRGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogdGFibGUuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIsXG5cdFx0XHRcdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsOiB0YWJsZS5hbm5vdGF0aW9uLmluaXRpYWxFeHBhbnNpb25MZXZlbCxcblx0XHRcdFx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzLFxuXHRcdFx0XHRcdGNyZWF0ZUluUGxhY2U6IHRhYmxlLmNvbnRyb2wuY3JlYXRlSW5QbGFjZSA9PT0gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCJcblx0XHRcdH07XG5cdFx0XHRpZiAodGFibGUuZW5hYmxlQW5hbHl0aWNzICYmIGZpbHRlck9uQWN0aXZlRW50aXRpZXMpIHtcblx0XHRcdFx0ZGVsZWdhdGUucGF5bG9hZCA9IHtcblx0XHRcdFx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSAmJiB0YWJsZS5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsID09PSB0cnVlKSB7XG5cdFx0XHRkZWxlZ2F0ZS5wYXlsb2FkID0geyAuLi5kZWxlZ2F0ZS5wYXlsb2FkLCAuLi57IGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbjogeyBsZWFmTGV2ZWw6IHRydWUgfSB9IH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGRlbGVnYXRlKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIG9GYXN0Q3JlYXRpb25Sb3dcblx0ICogQHBhcmFtIHNQYXRoXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcGFyYW0gb01vZGVsXG5cdCAqIEBwYXJhbSBvRmluYWxVSVN0YXRlXG5cdCAqL1xuXHRlbmFibGVGYXN0Q3JlYXRpb25Sb3c6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvRmFzdENyZWF0aW9uUm93OiBDcmVhdGlvblJvdyB8IHVuZGVmaW5lZCxcblx0XHRzUGF0aDogc3RyaW5nLFxuXHRcdG9Db250ZXh0OiB2NENvbnRleHQsXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9GaW5hbFVJU3RhdGU6IFByb21pc2U8dW5rbm93bj5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgb0ZpbmFsVUlTdGF0ZTtcblx0XHRcdFx0Ly8gSWYgYSBkcmFmdCBpcyBkaXNjYXJkZWQgd2hpbGUgYSBtZXNzYWdlIHN0cmlwIGZpbHRlciBpcyBhY3RpdmUgb24gdGhlIHRhYmxlIHRoZXJlIGlzIGEgdGFibGUgcmViaW5kIGNhdXNlZCBieSB0aGUgRGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRcdC8vIFRvIHByZXZlbnQgYSBuZXcgY3JlYXRpb24gcm93IGJpbmRpbmcgYmVpbmcgY3JlYXRlZCBhdCB0aGF0IG1vbWVudCB3ZSBjaGVjayBpZiB0aGUgY29udGV4dCBpcyBhbHJlYWR5IGRlbGV0ZWRcblx0XHRcdFx0aWYgKENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob0Zhc3RDcmVhdGlvblJvdykgJiYgIW9Db250ZXh0LmlzRGVsZXRlZCgpKSB7XG5cdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KHNQYXRoLCBvQ29udGV4dCwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFdmFsdWF0ZXMsIGlmIGFjdGlvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHRhYmxlIGNvbnRleHQgbWVudS5cblx0ICogU2hvdyBhY3Rpb24gb25seSBmb3IgYm91bmQgYWN0aW9ucywgd2hlbiByZXF1aXJlc1NlbGVjdGlvbiBpcyBzZXQgZm9yIGN1c3RvbSBhY3Rpb25zIG9yIHdoZW4gY29udGV4dCBpcyByZXF1aXJlZCBmb3IgSUJOIGFjdGlvbnMuXG5cdCAqIEBwYXJhbSBhY3Rpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSwgaWYgYWN0aW9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gY29udGV4dCBtZW51LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51OiBmdW5jdGlvbiAoXG5cdFx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0XHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gKGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb25cblx0XHRcdFx0XHR8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOiB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5pc0JvdW5kID09PSB0cnVlICYmXG5cdFx0XHRcdFx0IWFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbiAmJlxuXHRcdFx0XHRcdGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlID09PSBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWU7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbihUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oVGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5REE7QUFDQTtBQUNBO0FBQ0E7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
678
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsImFjdGlvbk9iamVjdCIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlbnRpdHlUeXBlIiwiX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZSIsInRvU3RyaW5nIiwiZmluZCIsIl9hY3Rpb24iLCIkSXNCb3VuZCIsIiRQYXJhbWV0ZXIiLCIkVHlwZSIsIiRpc0NvbGxlY3Rpb24iLCJzQWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiYVBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwidW5kZWZpbmVkIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUiLCJzRW50aXR5VHlwZSIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJsaW5lSXRlbUNvbGxlY3Rpb24iLCJvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJzS2V5IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwiT2JqZWN0Iiwia2V5cyIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnZlcnRlZE1ldGFEYXRhIiwibGluZUl0ZW1PclByZXNlbnRhdGlvbk9iamVjdCIsInJlc29sdmVQYXRoIiwiZ2V0UGF0aCIsInRhcmdldCIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJsaW5lSXRlbU9iamVjdCIsIml0ZW0iLCJ2YWx1ZSIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZUJpbmRpbmdUb0xvYWRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInByb3BlcnR5QmluZGluZ3MiLCJtYXAiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImdldENvbHVtbldpZHRoIiwib1RoaXMiLCJjb2x1bW4iLCJkYXRhRmllbGQiLCJkYXRhRmllbGRBY3Rpb25UZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInVzZVJlbVVuaXQiLCJtaWNyb0NoYXJ0VGl0bGUiLCJ3aWR0aCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImdldENvbHVtbldpZHRoRm9ySW1hZ2UiLCJnZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZCIsIm5hbWUiLCJfc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uIiwic29ydGFibGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlcXVpcmVkIiwiVGFibGVGb3JtYXR0ZXIiLCJhbm5vdGF0aW9ucyIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiZGF0YVR5cGUiLCJ0eXBlIiwiZ2V0RWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImhhc1RleHRBbm5vdGF0aW9uIiwiaGFzVGV4dCIsIkNvcmUiLCJNZWRpYVR5cGUiLCJpc0ltYWdlVVJMIiwidGFibGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIm5UbXBUZXh0V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsIm5UbXBWaXN1YWxpemF0aW9uV2lkdGgiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJwcm9wZXJ0eVdpZHRoIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZ2V0Q29sdW1uV2lkdGhGb3JDaGFydCIsImNvbHVtbkxhYmVsV2lkdGgiLCJjaGFydFNpemUiLCJnZXRDaGFydFNpemUiLCJnZXRTaG93T25seUNoYXJ0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInRtcFRleHQiLCJ0aXRsZVNpemUiLCJ0bXBXaWR0aCIsImdldE1hcmdpbkNsYXNzIiwic1Zpc3VhbGl6YXRpb24iLCJpc0xhc3RGaWVsZCIsInNDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImZpZWxkR3JvdXAiLCJhbGxTdGF0aWMiLCJoaWRkZW5QYXRocyIsImhpZGRlbkFubm90YXRpb25WYWx1ZSIsInB1c2giLCIkUGF0aCIsImhhc0FueVBhdGhFeHByZXNzaW9ucyIsImNvbnN0YW50IiwiaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMiLCJpZkVsc2UiLCJnZXRFbGVtZW50U3RhYmxlSWQiLCJ0YWJsZUlkIiwiZWxlbWVudElkIiwiZGF0YUZpZWxkUGFydCIsImdlbmVyYXRlIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJpZCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInRhYmxlUHJvcGVydGllcyIsImVudGl0eVNldE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc05hdmlnYWJsZSIsImFyZ3VtZW50cyIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic3RhdGljQWN0aW9uIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiY29udGV4dE1lbnVQYXRoIiwiY29udGV4dCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsImxhYmVsIiwiZm4iLCJyZWYiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJ0YWJsZURlZmluaXRpb24iLCJpc0JvdW5kIiwiZW5hYmxlT25TZWxlY3QiLCJhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSIsImlzQ29weSIsImlzU3RhdGljQWN0aW9uIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uSGVscGVyIiwiZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24iLCJkYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsInJlcXVpcmVzQ29udGV4dCIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgiLCJpc0FuYWx5dGljYWxUYWJsZSIsImVuYWJsZUFuYWx5dGljcyIsImVudGl0eVNldCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiTG9nIiwid2FybmluZyIsImdldE9iamVjdCIsInN1YnN0cmluZyIsImRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHkiLCJvciIsInJlYWRPbmx5IiwiYW5kIiwiVUkiLCJJc0luYWN0aXZlIiwiY3JlYXRpb25Nb2RlIiwiZXF1YWwiLCJmaWVsZE1vZGUiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJkYXRhZmllbGQiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic29tZSIsIm9EQyIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwib0RhdGFGaWVsZCIsIm9Db250ZXh0Iiwic1BhdGhEYXRhRmllbGRzIiwiYU11bHRpcGxlTGFiZWxzIiwiaSIsInJlZHVjZSIsImEiLCJiIiwiX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzIiwib0NvbHVtbiIsInRhYmxlVHlwZSIsInNldHRpbmdzIiwibWljcm9DaGFydFNpemUiLCJzaG93TWljcm9DaGFydExhYmVsIiwiZ2V0RGVsZWdhdGUiLCJpc0FMUCIsImVudGl0eU5hbWUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZGVsZWdhdGUiLCJjb250cm9sIiwiRXJyb3IiLCJwYXlsb2FkIiwiY29sbGVjdGlvbk5hbWUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJhbm5vdGF0aW9uIiwiY3JlYXRlSW5QbGFjZSIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbiIsImxlYWZMZXZlbCIsInN0cmluZ2lmeSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJzUGF0aCIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsImlzRGVsZXRlZCIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwib0Vycm9yIiwiZXJyb3IiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkVHlwZXMiLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsInZhbHVlT2YiLCJyZXF1aXJlc1NlbGVjdGlvbiIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5TZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNUZXh0LCBpc0ltYWdlVVJMIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgVGFibGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZS5ibG9ja1wiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBCYXNlQ29udGV4dCwgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB2NENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIEhpZGRlbiA9IHsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IGJvb2xlYW4gfCB7ICRQYXRoPzogc3RyaW5nIH0gfTtcbnR5cGUgQ29sdW1uV2lkdGhUaGlzID0geyBlbmFibGVBdXRvQ29sdW1uV2lkdGg/OiBib29sZWFuOyB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47IHRhYmxlVHlwZTogc3RyaW5nIH07XG50eXBlIE1pY3JvQ2hhcnRJbmZvID0geyB0aXRsZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4vKipcbiAqIEhlbHBlciBjbGFzcyB1c2VkIGJ5IHRoZSBjb250cm9sIGxpYnJhcnkgZm9yIE9EYXRhLXNwZWNpZmljIGhhbmRsaW5nIChPRGF0YSBWNClcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlSGVscGVyID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBnaXZlbiBhY3Rpb24gaXMgc3RhdGljLlxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0IFRoZSBpbnN0YW5jZSBvciB0aGUgcGF0aCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgYWN0aW9uIGlzIHN0YXRpYywgZWxzZSAnZmFsc2UnXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaXNTdGF0aWNBY3Rpb246IGZ1bmN0aW9uIChhY3Rpb25PYmplY3Q6IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBhY3Rpb25OYW1lOiBTdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24gfCB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0aWYgKGFjdGlvbk9iamVjdCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5fZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uT2JqZWN0LmZpbmQoZnVuY3Rpb24gKF9hY3Rpb246IE1ldGFNb2RlbEFjdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9hY3Rpb24uJElzQm91bmQgJiYgX2FjdGlvbi4kUGFyYW1ldGVyWzBdLiRUeXBlID09PSBlbnRpdHlUeXBlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoaXMgaXMganVzdCBvbmUgLSBPSyB3ZSB0YWtlIGl0LiBJZiBpdCdzIG1vcmUgaXQncyBhY3R1YWxseSBhIHdyb25nIHVzYWdlIGJ5IHRoZSBhcHBcblx0XHRcdFx0XHQvLyBhcyB3ZSB1c2VkIHRoZSBmaXJzdCBvbmUgYWxsIHRoZSB0aW1lIHdlIGtlZXAgaXQgYXMgaXQgaXNcblx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25PYmplY3RbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbk9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gISFhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBhY3Rpb24uJElzQm91bmQgJiYgISFhY3Rpb24uJFBhcmFtZXRlclswXS4kaXNDb2xsZWN0aW9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGVudGl0eSB0eXBlIG9mIGFuIGFjdGlvbiBvdmVybG9hZC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSB1c2VkIGluIHRoZSBhY3Rpb24gb3ZlcmxvYWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0cmV0dXJuIGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZUFsbChcIilcIiwgXCJcIik7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgb3ZlcmxvYWRlZCBvbiBhIGRpZmZlcmVudCBlbnRpdHkgdHlwZS5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldC5cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgdGhlIGFjdGlvbiBpcyBvdmVybG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgZW50aXR5IHR5cGUsIGVsc2UgJ2ZhbHNlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZywgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZShzQWN0aW9uTmFtZSk7XG5cdFx0cmV0dXJuICEhc0VudGl0eVR5cGUgJiYgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBmdW5jdGlvbiAobGluZUl0ZW1Db2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0lCTk5hdmlnYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0bGluZUl0ZW1Db2xsZWN0aW9uPy5mb3JFYWNoKChyZWNvcmQpID0+IHtcblx0XHRcdGlmIChcIlNlbWFudGljT2JqZWN0XCIgaW4gcmVjb3JkKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtyZWNvcmQuU2VtYW50aWNPYmplY3R9LSR7cmVjb3JkLkFjdGlvbn1gO1xuXHRcdFx0XHRpZiAocmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiYgIXJlY29yZC5JbmxpbmUgJiYgcmVjb3JkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKVxuXHRcdFx0XHRcdFx0XHQ/IChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pLnBhdGhcblx0XHRcdFx0XHRcdFx0OiByZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkubGVuZ3RoID4gMCA/IG9JQk5OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFVpTGluZUl0ZW1PYmplY3Q6IGZ1bmN0aW9uIChcblx0XHRsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGFcblx0KTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0ID0gY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXNcblx0XHRcdHwgUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0fCBMaW5lSXRlbTtcblx0XHRpZiAoIWxpbmVJdGVtT3JQcmVzZW50YXRpb25PYmplY3QpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAoY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQuVmlzdWFsaXphdGlvbnM7XG5cblx0XHRjb25zdCBsaW5lSXRlbU9iamVjdCA9IChcblx0XHRcdHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdD8gdmlzdWFsaXphdGlvbnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSA9PT0gMCk/LiR0YXJnZXRcblx0XHRcdFx0OiBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0XG5cdFx0KSBhcyBMaW5lSXRlbTtcblx0XHRyZXR1cm4gbGluZUl0ZW1PYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gbGluZUl0ZW1PYmplY3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCBhIGdpdmVuIGxpc3Qgb2YgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgb24gYSBjdXN0b20gY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCB0aGUgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRjcmVhdGVCaW5kaW5nVG9Mb2FkUHJvcGVydGllczogZnVuY3Rpb24gKHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdzID0gcHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwYXRoSW5Nb2RlbChwcm9wKSkgPz8gW107XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChwcm9wZXJ0eUJpbmRpbmdzLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNsb2FkUHJvcGVydGllc1wiKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGNvbHVtbidzIHdpZHRoIGlmIGRlZmluZWQgZnJvbSBtYW5pZmVzdCBvciBmcm9tIGN1c3RvbWl6YXRpb24gdmlhIGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGluc3RhbmNlIG9mIHRoZSBpbm5lciBtb2RlbCBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIG9UaGlzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgYmUgY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5XG5cdCAqIEBwYXJhbSBvVGhpcy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZGVmaW5pdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIGRhdGFGaWVsZEFjdGlvblRleHQgRGF0YUZpZWxkJ3MgdGV4dCBmcm9tIGJ1dHRvblxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgb2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcblx0ICogQHBhcmFtIHVzZVJlbVVuaXQgSW5kaWNhdGVzIGlmIHRoZSByZW0gdW5pdCBtdXN0IGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBjb2x1bW4gd2lkdGggcmVzdWx0XG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlLnRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbWljcm9jaGFydFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWljcm9jaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2Ugd2lkdGggaXMgc2V0IHRvIGF1dG9cblx0ICovXG5cdGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiAoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQWN0aW9uVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0dXNlUmVtVW5pdDogYm9vbGVhbixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbHVtbi53aWR0aCkge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi53aWR0aDtcblx0XHR9XG5cdFx0aWYgKG9UaGlzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0bGV0IHdpZHRoO1xuXHRcdFx0d2lkdGggPVxuXHRcdFx0XHR0aGlzLmdldENvbHVtbldpZHRoRm9ySW1hZ2UoZGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPikgfHxcblx0XHRcdFx0dGhpcy5nZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZChvVGhpcywgY29sdW1uLCBkYXRhRmllbGQsIGRhdGFGaWVsZEFjdGlvblRleHQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIG1pY3JvQ2hhcnRUaXRsZSkgfHxcblx0XHRcdFx0dW5kZWZpbmVkO1xuXHRcdFx0aWYgKHdpZHRoKSB7XG5cdFx0XHRcdHJldHVybiB1c2VSZW1Vbml0ID8gYCR7d2lkdGh9cmVtYCA6IHdpZHRoO1xuXHRcdFx0fVxuXHRcdFx0d2lkdGggPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUsXG5cdFx0XHRcdFx0XHR1c2VSZW1Vbml0LFxuXHRcdFx0XHRcdFx0dGhpcy5fc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uKG9UaGlzLCBjb2x1bW4pLFxuXHRcdFx0XHRcdFx0Y29sdW1uLnNvcnRhYmxlID8/IGZhbHNlLFxuXHRcdFx0XHRcdFx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcoY29sdW1uLnJlcXVpcmVkID8/IGZhbHNlLCBcImJvb2xlYW5cIikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPGJvb2xlYW4+XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRUYWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHdpZHRoO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgYW4gaW1hZ2UuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEByZXR1cm5zIC0gQ29sdW1uIHdpZHRoIGlmIGRlZmluZWQsIG90aGVyd2lzZSBudWxsICh0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9ySW1hZ2U6IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPik6IG51bWJlciB8IG51bGwge1xuXHRcdGxldCB3aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IGRhdGFUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdGlmIChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZSAmJlxuXHRcdFx0Z2V0RWRpdE1vZGUoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlPy4kdGFyZ2V0LFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHQpID09PSBGaWVsZEVkaXRNb2RlLkRpc3BsYXkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlPy4kdGFyZ2V0XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBoYXNUZXh0QW5ub3RhdGlvbiA9IGhhc1RleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldCk7XG5cdFx0XHRpZiAoZGF0YVR5cGUgPT09IFwiRWRtLlN0cmVhbVwiICYmICFoYXNUZXh0QW5ub3RhdGlvbiAmJiBhbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy5pbmNsdWRlcz8uKFwiaW1hZ2UvXCIpKSB7XG5cdFx0XHRcdHdpZHRoID0gNi4yO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRhbm5vdGF0aW9ucyAmJlxuXHRcdFx0KGlzSW1hZ2VVUkwoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0KSB8fCBhbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy5pbmNsdWRlcz8uKFwiaW1hZ2UvXCIpKVxuXHRcdCkge1xuXHRcdFx0d2lkdGggPSA2LjI7XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGNvbHVtbiBoZWFkZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjb2x1bW4gd2lkdGguXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHRhYmxlLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIHdpZHRoIHNob3VsZCBpbmNsdWRlIHRoZSBoZWFkZXJcblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGNvbmZpZ3VyYXRpb25cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKi9cblx0X3Nob3VsZEluY2x1ZGVIZWFkZXJJbkNvbHVtbndpZGhDYWxjdWxhdGlvbih0YWJsZTogQ29sdW1uV2lkdGhUaGlzLCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBjb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgIT09IHVuZGVmaW5lZCA/IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA6IHRhYmxlLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIERhdGFGaWVsZC5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBvVGhpcy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhIEZpZWxkXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBY3Rpb25UZXh0IERhdGFGaWVsZCdzIHRleHQgZnJvbSBidXR0b25cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAoIHRoZSB3aWR0aCBpcyB0cmVhdGVkIGFzIGEgcmVtIHZhbHVlKVxuXHQgKi9cblx0Z2V0Q29sdW1uV2lkdGhGb3JEYXRhRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRvVGhpczogQ29sdW1uV2lkdGhUaGlzLFxuXHRcdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGRhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGQgfCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPixcblx0XHRkYXRhRmllbGRBY3Rpb25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBudW1iZXIgfCBudWxsIHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBkYXRhVHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py4kVHlwZTtcblx0XHRsZXQgd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGlmIChcblx0XHRcdGRhdGFUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdGRhdGFUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdChkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHQhKGRhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KS5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cH1gKSlcblx0XHQpIHtcblx0XHRcdGxldCBuVG1wVGV4dFdpZHRoO1xuXHRcdFx0blRtcFRleHRXaWR0aCA9XG5cdFx0XHRcdFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoZGF0YUZpZWxkQWN0aW9uVGV4dCkgfHxcblx0XHRcdFx0U2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChkYXRhRmllbGQ/LkxhYmVsPy50b1N0cmluZygpKSB8fFxuXHRcdFx0XHRTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKChhbm5vdGF0aW9ucyBhcyB7IExhYmVsPzogc3RyaW5nIH0pPy5MYWJlbCk7IC8vIFJFVklFVyA6IFRoaXMgbWFrZXMgbm8gc2Vuc2UgOilcblxuXHRcdFx0Ly8gZ2V0IHdpZHRoIGZvciByYXRpbmcgb3IgcHJvZ3Jlc3MgYmFyIGRhdGFmaWVsZFxuXHRcdFx0Y29uc3QgblRtcFZpc3VhbGl6YXRpb25XaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdFx0XHR0aGlzLl9zaG91bGRJbmNsdWRlSGVhZGVySW5Db2x1bW53aWRoQ2FsY3VsYXRpb24ob1RoaXMsIGNvbHVtbilcblx0XHRcdCkucHJvcGVydHlXaWR0aDtcblxuXHRcdFx0aWYgKG5UbXBWaXN1YWxpemF0aW9uV2lkdGggPiBuVG1wVGV4dFdpZHRoKSB7XG5cdFx0XHRcdHdpZHRoID0gblRtcFZpc3VhbGl6YXRpb25XaWR0aDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGRhdGFGaWVsZEFjdGlvblRleHQgfHxcblx0XHRcdFx0KGFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0KGlzQW5ub3RhdGlvbk9mVHlwZShhbm5vdGF0aW9ucywgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB8fFxuXHRcdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlKGFubm90YXRpb25zLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pKSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBZGQgYWRkaXRpb25hbCAxLjggcmVtIHRvIGF2b2lkIHNob3dpbmcgZWxsaXBzaXMgaW4gc29tZSBjYXNlcy5cblx0XHRcdFx0blRtcFRleHRXaWR0aCArPSAxLjg7XG5cdFx0XHRcdHdpZHRoID0gblRtcFRleHRXaWR0aDtcblx0XHRcdH1cblx0XHRcdHdpZHRoID0gd2lkdGggPz8gdGhpcy5nZXRDb2x1bW5XaWR0aEZvckNoYXJ0KG9UaGlzLCBjb2x1bW4sIGRhdGFGaWVsZCwgblRtcFRleHRXaWR0aCwgbWljcm9DaGFydFRpdGxlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIENoYXJ0LlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGluc3RhbmNlIG9mIHRoZSBpbm5lciBtb2RlbCBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIGNvbHVtbiBEZWZpbmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4sIHdoaWNoIGlzIHRha2VuIHdpdGggcHJpb3JpdHkgaWYgbm90IG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eVxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGEgRmllbGRcblx0ICogQHBhcmFtIGNvbHVtbkxhYmVsV2lkdGggVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gbGFiZWwgb3IgYnV0dG9uIGxhYmVsXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0aXRsZSBhbmQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEByZXR1cm5zIC0gQ29sdW1uIHdpZHRoIGlmIGRlZmluZWQsIG90aGVyd2lzZSBudWxsICh0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9yQ2hhcnQoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0Y29sdW1uTGFiZWxXaWR0aDogbnVtYmVyLFxuXHRcdG1pY3JvQ2hhcnRUaXRsZT86IE1pY3JvQ2hhcnRJbmZvXG5cdCk6IG51bWJlciB8IG51bGwge1xuXHRcdGxldCBjaGFydFNpemUsXG5cdFx0XHR3aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdFx0aWYgKChkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPikuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGg/LmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKSkge1xuXHRcdFx0c3dpdGNoICh0aGlzLmdldENoYXJ0U2l6ZShvVGhpcywgY29sdW1uKSkge1xuXHRcdFx0XHRjYXNlIFwiWFNcIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA0LjQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNC42O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTVwiOlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDUuNTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkxcIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA2Ljk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNS4zO1xuXHRcdFx0fVxuXHRcdFx0Y29sdW1uTGFiZWxXaWR0aCArPSAxLjg7XG5cdFx0XHRpZiAoIXRoaXMuZ2V0U2hvd09ubHlDaGFydChvVGhpcywgY29sdW1uKSAmJiAobWljcm9DaGFydFRpdGxlPy50aXRsZS5sZW5ndGggfHwgbWljcm9DaGFydFRpdGxlPy5kZXNjcmlwdGlvbi5sZW5ndGgpKSB7XG5cdFx0XHRcdGNvbnN0IHRtcFRleHQgPVxuXHRcdFx0XHRcdG1pY3JvQ2hhcnRUaXRsZS50aXRsZS5sZW5ndGggPiBtaWNyb0NoYXJ0VGl0bGUuZGVzY3JpcHRpb24ubGVuZ3RoID8gbWljcm9DaGFydFRpdGxlLnRpdGxlIDogbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uO1xuXHRcdFx0XHRjb25zdCB0aXRsZVNpemUgPSBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHRtcFRleHQpICsgNztcblx0XHRcdFx0Y29uc3QgdG1wV2lkdGggPSB0aXRsZVNpemUgPiBjb2x1bW5MYWJlbFdpZHRoID8gdGl0bGVTaXplIDogY29sdW1uTGFiZWxXaWR0aDtcblx0XHRcdFx0d2lkdGggPSB0bXBXaWR0aDtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uTGFiZWxXaWR0aCA+IGNoYXJ0U2l6ZSkge1xuXHRcdFx0XHR3aWR0aCA9IGNvbHVtbkxhYmVsV2lkdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aWR0aCA9IGNoYXJ0U2l6ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGFkZCBhIG1hcmdpbiBjbGFzcyBhdCB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIHNWaXN1YWxpemF0aW9uXG5cdCAqIEBwYXJhbSBpc0xhc3RGaWVsZCBJbmRpY2F0ZXMgaWYgdGhlIGZpZWxkIGlzIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBmaWVsZCBncm91cFxuXHQgKiBAcmV0dXJucyBBZGp1c3RpbmcgdGhlIG1hcmdpblxuXHQgKi9cblx0Z2V0TWFyZ2luQ2xhc3M6IGZ1bmN0aW9uIChzVmlzdWFsaXphdGlvbjogc3RyaW5nLCBpc0xhc3RGaWVsZDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0bGV0IHNDbGFzcyA9IFwiXCI7XG5cdFx0aWYgKGlzTGFzdEZpZWxkKSB7XG5cdFx0XHQvL0lmIHJhdGluZyBpbmRpY2F0b3IgaXMgbGFzdCBlbGVtZW50IGluIGZpZWxkZ3JvdXAsIHRoZW4gdGhlIDAuNXJlbSBtYXJnaW4gYWRkZWQgYnkgc2FwTVJJIGNsYXNzIG9mIGludGVyYWN0aXZlIHJhdGluZyBpbmRpY2F0b3Igb24gdG9wIGFuZCBib3R0b20gbXVzdCBiZSBudWxsaWZpZWQuXG5cdFx0XHRpZiAoc1Zpc3VhbGl6YXRpb24gPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0XHRzQ2xhc3MgPSBcInNhcFVpTm9NYXJnaW5Cb3R0b20gc2FwVWlOb01hcmdpblRvcFwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc1Zpc3VhbGl6YXRpb24gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdC8vSWYgcmF0aW5nIGluZGljYXRvciBpcyBOT1QgdGhlIGxhc3QgZWxlbWVudCBpbiBmaWVsZGdyb3VwLCB0aGVuIHRvIG1haW50YWluIHRoZSAwLjVyZW0gc3BhY2luZyBiZXR3ZWVuIGNvZ2V0TWFyZ2luQ2xhc3NudHJvbHMgKGFzIHBlciBVWCBzcGVjKSxcblx0XHRcdC8vb25seSB0aGUgdG9wIG1hcmdpbiBhZGRlZCBieSBzYXBNUkkgY2xhc3Mgb2YgaW50ZXJhY3RpdmUgcmF0aW5nIGluZGljYXRvciBtdXN0IGJlIG51bGxpZmllZC5cblxuXHRcdFx0c0NsYXNzID0gXCJzYXBVaU5vTWFyZ2luVG9wXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDbGFzcyA9IFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCI7XG5cdFx0fVxuXHRcdHJldHVybiBzQ2xhc3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgVkJveCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gY29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGluIFZCb3hcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyBIaWRkZW4gZXhwcmVzc2lvbiBjb250YWluZWQgaW4gRmllbGRHcm91cFxuXHQgKiBAcGFyYW0gZmllbGRHcm91cCBEYXRhIGZpZWxkIGNvbnRhaW5pbmcgdGhlIFZCb3hcblx0ICogQHJldHVybnMgVmlzaWJpbGl0eSBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXRWQm94VmlzaWJpbGl0eTogZnVuY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb246IEFycmF5PERhdGFGaWVsZEZvckFubm90YXRpb24gJiBIaWRkZW4+LFxuXHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0ZmllbGRHcm91cDogRmllbGRHcm91cCAmIEhpZGRlblxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IGFsbFN0YXRpYyA9IHRydWU7XG5cdFx0Y29uc3QgaGlkZGVuUGF0aHMgPSBbXTtcblxuXHRcdGlmIChmaWVsZEdyb3VwW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0pIHtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgY29sbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvblZhbHVlID0gZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF07XG5cdFx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSB1bmRlZmluZWQgfHwgaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKGZhbHNlKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblBhdGhzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZS4kUGF0aCkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKHBhdGhJbk1vZGVsKGhpZGRlbkFubm90YXRpb25WYWx1ZS4kUGF0aCkpO1xuXHRcdFx0XHRhbGxTdGF0aWMgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyBEeW5hbWljIGV4cHJlc3Npb24gZm91bmQgaW4gYSBmaWVsZFxuXHRcdFx0XHRyZXR1cm4gZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGhhc0FueVBhdGhFeHByZXNzaW9ucyA9IGNvbnN0YW50KGhpZGRlblBhdGhzLmxlbmd0aCA+IDAgJiYgYWxsU3RhdGljICE9PSB0cnVlKTtcblx0XHRjb25zdCBoYXNBbGxIaWRkZW5TdGF0aWNFeHByZXNzaW9ucyA9IGNvbnN0YW50KGhpZGRlblBhdGhzLmxlbmd0aCA+IDAgJiYgIWhpZGRlblBhdGhzLmluY2x1ZGVzKGZhbHNlKSAmJiBhbGxTdGF0aWMpO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRoYXNBbnlQYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChoaWRkZW5QYXRocywgVGFibGVGb3JtYXR0ZXIuZ2V0VkJveFZpc2liaWxpdHkpLFxuXHRcdFx0XHRpZkVsc2UoaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMsIGNvbnN0YW50KGZhbHNlKSwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgc3RhYmxlIElEIG9mIGEgdGFibGUgZWxlbWVudCAoY29sdW1uIG9yIEZpZWxkR3JvdXAgbGFiZWwpLlxuXHQgKiBAcGFyYW0gdGFibGVJZCBDdXJyZW50IG9iamVjdCBJRFxuXHQgKiBAcGFyYW0gZWxlbWVudElkIEVsZW1lbnQgSWQgb3Igc3VmZml4XG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGRhdGFGaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgc3RhYmxlIElEIGZvciBhIGdpdmVuIGNvbHVtblxuXHQgKi9cblx0Z2V0RWxlbWVudFN0YWJsZUlkOiBmdW5jdGlvbiAoXG5cdFx0dGFibGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGVsZW1lbnRJZDogc3RyaW5nLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRhYmxlSWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGxldCBkYXRhRmllbGRQYXJ0OiBzdHJpbmcgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gZGF0YUZpZWxkLlRhcmdldC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gZGF0YUZpZWxkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGRhdGFGaWVsZFBhcnQgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LnBhdGggPz8gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmF0ZShbdGFibGVJZCwgZWxlbWVudElkLCBkYXRhRmllbGRQYXJ0XSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHN0YWJsZSBJRCBvZiB0aGUgY29sdW1uLlxuXHQgKiBAcGFyYW0gaWQgQ3VycmVudCBvYmplY3QgSURcblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBzdGFibGUgSUQgZm9yIGEgZ2l2ZW4gY29sdW1uXG5cdCAqL1xuXHRnZXRDb2x1bW5TdGFibGVJZDogZnVuY3Rpb24gKGlkOiBzdHJpbmcsIGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBUYWJsZUhlbHBlci5nZXRFbGVtZW50U3RhYmxlSWQoaWQsIFwiQ1wiLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fSxcblxuXHRnZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZDogZnVuY3Rpb24gKFxuXHRcdGlkOiBzdHJpbmcsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPlxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBUYWJsZUhlbHBlci5nZXRFbGVtZW50U3RhYmxlSWQoaWQsIFwiRkdMYWJlbFwiLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlICdwcmVzcycgZXZlbnQgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YW1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQgVGhlIGlkIG9mIHRoZSBNREMgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFZhbHVlIG9mIHRoZSBEYXRhUG9pbnRcblx0ICogQHBhcmFtIGVudGl0eVNldE5hbWUgTmFtZSBvZiB0aGUgRW50aXR5U2V0XG5cdCAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgT3BlcmF0aW9uQXZhaWxhYmxlTWFwIGFzIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqIEBwYXJhbSBhY3Rpb25PYmplY3Rcblx0ICogQHBhcmFtIGlzTmF2aWdhYmxlIEFjdGlvbiBlaXRoZXIgdHJpZ2dlcnMgbmF2aWdhdGlvbiBvciBub3Rcblx0ICogQHBhcmFtIGVuYWJsZUF1dG9TY3JvbGwgQWN0aW9uIGVpdGhlciB0cmlnZ2VycyBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbXMgaW4gdGhlIHJlbGF0ZWQgdGFibGUgb3Igbm90XG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gRnVuY3Rpb24gbmFtZSB0byBwcmVmaWxsIGRpYWxvZyBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHBhcmFtIGRpc2FibGVTdHJpY3RIYW5kbGluZyBEaXNhYmxlIHN0cmljdCBoYW5kbGluZyBmb3IgdGhpcyBzcGVjaWZpYyBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0cHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbjogZnVuY3Rpb24gKFxuXHRcdHRhYmxlUHJvcGVydGllczoge1xuXHRcdFx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRjb250ZW50SWQ6IHN0cmluZztcblx0XHR9LFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGVudGl0eVNldE5hbWU6IHN0cmluZyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyxcblx0XHRhY3Rpb25PYmplY3Q/OiBNZXRhTW9kZWxBY3Rpb24gfCBNZXRhTW9kZWxBY3Rpb25bXSB8IHN0cmluZyxcblx0XHRpc05hdmlnYWJsZSA9IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZyxcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW4sXG5cdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhblxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0dGFyZ2V0RW50aXR5VHlwZU5hbWUgPSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRzdGF0aWNBY3Rpb24gPVxuXHRcdFx0XHR0eXBlb2YgYWN0aW9uT2JqZWN0ICE9PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCh0aGlzLl9pc1N0YXRpY0FjdGlvbihhY3Rpb25PYmplY3QsIHNBY3Rpb25OYW1lKSB8fFxuXHRcdFx0XHRcdHRoaXMuX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUoc0FjdGlvbk5hbWUudG9TdHJpbmcoKSwgdGFyZ2V0RW50aXR5VHlwZU5hbWUpKSxcblx0XHRcdGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiLFxuXHRcdFx0bm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0XHRjb250ZXh0TWVudVBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIixcblx0XHRcdGNvbnRleHQgPSBwYXRoSW5Nb2RlbChgJHtjb250ZXh0TWVudVBhdGh9c2VsZWN0ZWRDb250ZXh0c2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXJhbXMgPSB7XG5cdFx0XHRcdGNvbnRleHRzOiAhc3RhdGljQWN0aW9uID8gY29udGV4dCA6IG51bGwsXG5cdFx0XHRcdGJTdGF0aWNBY3Rpb246IHN0YXRpY0FjdGlvbiA/IHN0YXRpY0FjdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZW50aXR5U2V0TmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzOiAhc3RhdGljQWN0aW9uXG5cdFx0XHRcdFx0PyBwYXRoSW5Nb2RlbChgZHluYW1pY0FjdGlvbnMvJHtkYXRhRmllbGQuQWN0aW9ufS8ke2FwcGxpY2FibGVQcm9wZXJ0eX0vYCwgXCJpbnRlcm5hbFwiKVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzOiAhc3RhdGljQWN0aW9uXG5cdFx0XHRcdFx0PyBwYXRoSW5Nb2RlbChgZHluYW1pY0FjdGlvbnMvJHtkYXRhRmllbGQuQWN0aW9ufS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX0vYCwgXCJpbnRlcm5hbFwiKVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzTmF2aWdhYmxlLFxuXHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBlbmFibGVBdXRvU2Nyb2xsLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBkYXRhRmllbGQ/Lkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCIgPyBcIkNoYW5nZVNldFwiIDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRjb250cm9sSWQ6IHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogb3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IGRpc2FibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0fTtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm4oXCJBUEkub25BY3Rpb25QcmVzc1wiLCBbcmVmKFwiJGV2ZW50XCIpLCByZWYoXCIkY29udHJvbGxlclwiKSwgZGF0YUZpZWxkLkFjdGlvbiwgcGFyYW1zXSkpO1xuXHRcdC8vcmV0dXJuIEFjdGlvbkhlbHBlci5nZXRQcmVzc0V2ZW50RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKHRhYmxlLmlkISwgZGF0YUZpZWxkLCBwYXJhbXMsIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBhY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBpc0JvdW5kIElzQm91bmQgZm9yIEFjdGlvblxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBlbmFibGVPblNlbGVjdCBEZWZpbmUgdGhlIGVuYWJsaW5nIG9mIHRoZSBhY3Rpb24gKHNpbmdsZSBvciBtdWx0aXNlbGVjdClcblx0ICogQHBhcmFtIGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgYW5ub3RhdGlvbiB0YXJnZXRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcGFyYW0gaXNDb3B5XG5cdCAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cblx0ICovXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdGFjdGlvbk5hbWU6IHN0cmluZyB8IFN0cmluZyxcblx0XHRpc0JvdW5kOiBib29sZWFuLFxuXHRcdGFjdGlvbk9iamVjdD86IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgc3RyaW5nLFxuXHRcdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nLFxuXHRcdGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW4sXG5cdFx0aXNDb3B5PzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoIWFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlKSByZXR1cm4gZmFsc2U7XG5cblx0XHRjb25zdCBpc1N0YXRpY0FjdGlvbiA9IHRoaXMuX2lzU3RhdGljQWN0aW9uKGFjdGlvbk9iamVjdCwgYWN0aW9uTmFtZSk7XG5cblx0XHQvLyBDaGVjayBmb3IgYWN0aW9uIG92ZXJsb2FkIG9uIGEgZGlmZmVyZW50IEVudGl0eSB0eXBlLlxuXHRcdC8vIElmIHllcywgdGFibGUgcm93IHNlbGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgYWN0aW9uLlxuXHRcdGlmICh0aGlzLl9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSwgYW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0Ly8gQWN0aW9uIG92ZXJsb2FkIGRlZmluZWQgb24gZGlmZmVyZW50IGVudGl0eSB0eXBlXG5cdFx0XHRjb25zdCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVEZWZpbml0aW9uICYmIEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRpZiAob09wZXJhdGlvbkF2YWlsYWJsZU1hcD8uaGFzT3duUHJvcGVydHkoYWN0aW9uTmFtZSkpIHtcblx0XHRcdFx0Ly8gQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBkZWZpbmVkIGZvciB0aGUgYWN0aW9uLlxuXHRcdFx0XHQvLyBOZWVkIHRvIHJlZmVyIHRvIGludGVybmFsIG1vZGVsIGZvciBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbi5cblx0XHRcdFx0Ly8gcmV0dXJuIGNvbXBpbGVCaW5kaW5nKGJpbmRpbmdFeHByZXNzaW9uKFwiZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uTmFtZSArIFwiL2JFbmFibGVkXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gIWZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBgez0gXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWR9IH1gXG5cdFx0XHRcdFx0OiBgez0gXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX0gfWA7XG5cdFx0XHR9XG5cdFx0XHQvLyBDb25zaWRlciB0aGUgYWN0aW9uIGp1c3QgbGlrZSBhbnkgb3RoZXIgc3RhdGljIERhdGFGaWVsZEZvckFjdGlvbi5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoIWlzQm91bmQgfHwgaXNTdGF0aWNBY3Rpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBpc0NvcHlcblx0XHRcdD8gQWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KVxuXHRcdFx0OiBBY3Rpb25IZWxwZXIuZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24oZW5hYmxlT25TZWxlY3QgPz8gXCJtdWx0aXNlbGVjdFwiLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRsZXQgZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgYWN0aW9uID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBcXCR7aW50ZXJuYWw+ZHluYW1pY0FjdGlvbnMvJHthY3Rpb25OYW1lfS9iRW5hYmxlZH1gXG5cdFx0XHQ6IGBcXCR7aW50ZXJuYWw+ZHluYW1pY0FjdGlvbnMvJHthY3Rpb25OYW1lfS9iRW5hYmxlZEZvckNvbnRleHRNZW51fWA7XG5cdFx0ZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gPSBgJHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ICYmICR7YWN0aW9ufWA7XG5cblx0XHRyZXR1cm4gYHs9ICR7ZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb259fWA7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JJQk4gYWN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzLmNvbGxlY3Rpb24gIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdG8gYmUgdXNlZFxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGRcblx0ICogQHBhcmFtIHJlcXVpcmVzQ29udGV4dCBSZXF1aXJlc0NvbnRleHQgZm9yIElCTlxuXHQgKiBAcGFyYW0gaXNOYXZpZ2F0aW9uQXZhaWxhYmxlIERlZmluZSBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cblx0ICovXG5cdGlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlUHJvcGVydGllczoge1xuXHRcdFx0Y29sbGVjdGlvbjogQ29udGV4dDtcblx0XHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdH0sXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0cmVxdWlyZXNDb250ZXh0OiBib29sZWFuIHwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Qm9vbGVhbj4sXG5cdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlPzogYm9vbGVhbiB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHRcdGZvckNvbnRleHRNZW51PzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRsZXQgaXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aCA9IG51bGw7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSkpIHtcblx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggPSBpc05hdmlnYXRpb25BdmFpbGFibGUucGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZVByb3BlcnRpZXM/LnRhYmxlRGVmaW5pdGlvbj8uZW5hYmxlQW5hbHl0aWNzO1xuXG5cdFx0aWYgKCFyZXF1aXJlc0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uLmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uLmdldE1vZGVsKCk7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uQXZhaWxhYmxlID09PSBmYWxzZSAmJiAhaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJOYXZpZ2F0aW9uQXZhaWxhYmxlIGFzIGZhbHNlIGlzIGluY29ycmVjdCB1c2FnZVwiKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aCAmJlxuXHRcdFx0XHQhaXNBbmFseXRpY2FsVGFibGUgJiZcblx0XHRcdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkPy5OYXZpZ2F0aW9uQXZhaWxhYmxlKSAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldCArIFwiLyRQYXJ0bmVyXCIpID09PSBkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZS5wYXRoLnNwbGl0KFwiL1wiKVswXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBgez0gXFwkeyR7aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5pbmRleE9mKFwiL1wiKSArIDEsXG5cdFx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5sZW5ndGhcblx0XHRcdFx0KX19fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSBcIlwiLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0YWN0aW9uO1xuXG5cdFx0aWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gdHJ1ZSB8fCBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSAhKGZvckNvbnRleHRNZW51ID8/IGZhbHNlKVxuXHRcdFx0XHQ/IFwiJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIlxuXHRcdFx0XHQ6IFwiJXtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIjtcblx0XHR9IGVsc2UgaWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBmYWxzZSBpcyBpbmNvcnJlY3QgdXNhZ2VcIik7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9ICEoZm9yQ29udGV4dE1lbnUgPz8gZmFsc2UpXG5cdFx0XHRcdD8gXCIle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMVwiXG5cdFx0XHRcdDogXCIle2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMVwiO1xuXHRcdFx0YWN0aW9uID0gIShmb3JDb250ZXh0TWVudSA/PyBmYWxzZSlcblx0XHRcdFx0PyBgXFwke2ludGVybmFsPmlibi8ke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH0tJHtkYXRhRmllbGQuQWN0aW9ufS9iRW5hYmxlZH1gXG5cdFx0XHRcdDogYFxcJHtpbnRlcm5hbD5pYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX1gO1xuXHRcdFx0ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgKyBcIiAmJiBcIiArIGFjdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gYHs9ICR7ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb259fWA7XG5cdH0sXG5cblx0YnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHk6IGZ1bmN0aW9uICh0YWJsZTogVGFibGVCbG9jayk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKHRhYmxlLnJlYWRPbmx5ID09PSB0cnVlLCBhbmQoVUkuSXNJbmFjdGl2ZSwgdGFibGUuY3JlYXRpb25Nb2RlLm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHRhYmxlLmZpZWxkTW9kZSwgXCJub3dyYXBwZXJcIilcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuXG5cdCAqIEBwYXJhbSBkYXRhZmllbGQgRGF0YUZpZWxkXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb2xsZWN0aW9uIExpc3Qgb2YgaXRlbXMgaW5zaWRlIGEgZmllbGRncm91cCAoaWYgYW55KVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBsYWJlbCBuZWVkcyB0byBiZSB2aXNpYmxlIGVsc2UgZmFsc2UuXG5cdCAqL1xuXHRzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRkYXRhZmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPixcblx0XHRkYXRhRmllbGRDb2xsZWN0aW9uPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+W11cblx0KTogYm9vbGVhbiB7XG5cdFx0Ly8gSWYgSW5saW5lIGJ1dHRvbi9uYXZpZ2F0aW9uIGFjdGlvbiwgcmV0dXJuIGZhbHNlLCBlbHNlIHRydWU7XG5cdFx0aWYgKCFkYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRpZiAoZGF0YWZpZWxkLiRUeXBlPy5pbmNsdWRlcyhcIkRhdGFGaWVsZEZvckFjdGlvblwiKSAmJiBkYXRhZmllbGQuSW5saW5lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChkYXRhZmllbGQuJFR5cGU/LmluY2x1ZGVzKFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpICYmIGRhdGFmaWVsZC5JbmxpbmUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gRmllbGRncm91cCwgSWYgTk9UIGFsbCBkYXRhZmllbGQvZGF0YWZpZWxkRm9yQW5ub3RhdGlvbiBleGlzdHMgd2l0aCBoaWRkZW4sIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBkYXRhRmllbGRDb2xsZWN0aW9uLnNvbWUoZnVuY3Rpb24gKG9EQykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob0RDLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHwgb0RDLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdFx0XHQob0RDIGFzIHVua25vd24gYXMgSGlkZGVuKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdICE9PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHRleHQgZnJvbSB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpbnRvIHRoZSBjb2x1bW4uXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9iamVjdCBvZiB0aGUgTGluZUl0ZW1cblx0ICogQHBhcmFtIG9Db250ZXh0LmNvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgdGhlIExpbmVJdGVtXG5cdCAqIEByZXR1cm5zIFN0cmluZyBmcm9tIGxhYmVsIHJlZmVycmluZyB0byBhY3Rpb24gdGV4dFxuXHQgKi9cblx0Z2V0VGV4dE9uQWN0aW9uRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdG9Db250ZXh0OiB7IGNvbnRleHQ6IEJhc2VDb250ZXh0IH1cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG9EYXRhRmllbGQuTGFiZWw7XG5cdFx0fVxuXHRcdC8vIGZvciBGaWVsZEdyb3VwIGNvbnRhaW5pbmcgRGF0YUZpZWxkRm9yQW5ub3RhdGlvblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKS5pbmRleE9mKFwiQFwiICsgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkgPiAtMVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc1BhdGhEYXRhRmllbGRzID0gXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCI7XG5cdFx0XHRjb25zdCBhTXVsdGlwbGVMYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gb0NvbnRleHQuY29udGV4dC5nZXRPYmplY3Qoc1BhdGhEYXRhRmllbGRzKSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRleHQuY29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGhEYXRhRmllbGRzICsgaX0vJFR5cGVgKSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdFx0b0NvbnRleHQuY29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGhEYXRhRmllbGRzICsgaX0vJFR5cGVgKSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFNdWx0aXBsZUxhYmVscy5wdXNoKG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9L0xhYmVsYCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBhY3Rpb25zIGluc2lkZSBhIEZpZWxkIEdyb3VwIHNlbGVjdCB0aGUgbGFyZ2VzdCBBY3Rpb24gTGFiZWxcblx0XHRcdGlmIChhTXVsdGlwbGVMYWJlbHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gYU11bHRpcGxlTGFiZWxzLnJlZHVjZShmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5sZW5ndGggPiBiLmxlbmd0aCA/IGEgOiBiO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhTXVsdGlwbGVMYWJlbHMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogYU11bHRpcGxlTGFiZWxzLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5nczogZnVuY3Rpb24gKG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsIG9Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IFRhYmxlQ29sdW1uU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuXHRcdGlmIChvVGhpcy50YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLnNldHRpbmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldENoYXJ0U2l6ZTogZnVuY3Rpb24gKG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsIG9Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5ncyhvVGhpcywgb0NvbHVtbik7XG5cdFx0aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLm1pY3JvQ2hhcnRTaXplKSB7XG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MubWljcm9DaGFydFNpemU7XG5cdFx0fVxuXHRcdHJldHVybiBcIlhTXCI7XG5cdH0sXG5cdGdldFNob3dPbmx5Q2hhcnQ6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzKG9UaGlzLCBvQ29sdW1uKTtcblx0XHRpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3Muc2hvd01pY3JvQ2hhcnRMYWJlbCkge1xuXHRcdFx0cmV0dXJuICFzZXR0aW5ncy5zaG93TWljcm9DaGFydExhYmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRnZXREZWxlZ2F0ZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZVZpc3VhbGl6YXRpb24sIGlzQUxQOiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcsIGZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCBkZWxlZ2F0ZToge1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0cGF5bG9hZD86XG5cdFx0XHRcdHwgeyBjb2xsZWN0aW9uTmFtZT86IHN0cmluZzsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW47IGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbj86IHsgbGVhZkxldmVsOiBib29sZWFuIH0gfVxuXHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogc3RyaW5nO1xuXHRcdFx0XHRcdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXHRcdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllczogYm9vbGVhbjtcblx0XHRcdFx0XHRcdGNyZWF0ZUluUGxhY2U/OiBib29sZWFuO1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25Db25maWd1cmF0aW9uPzogeyBsZWFmTGV2ZWw6IGJvb2xlYW4gfTtcblx0XHRcdFx0ICB9O1xuXHRcdH07XG5cdFx0aWYgKGlzQUxQKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IFRyZWVUYWJsZSBpbiBBTFBcblx0XHRcdGlmICh0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVHJlZVRhYmxlIG5vdCBzdXBwb3J0ZWQgaW4gQW5hbHl0aWNhbCBMaXN0UGFnZVwiKTtcblx0XHRcdH1cblx0XHRcdGRlbGVnYXRlID0ge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL0FMUFRhYmxlRGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25OYW1lOiBlbnRpdHlOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpZiAodGFibGUuZW5hYmxlQW5hbHl0aWNzICYmIGZpbHRlck9uQWN0aXZlRW50aXRpZXMpIHtcblx0XHRcdFx0ZGVsZWdhdGUucGF5bG9hZCEuZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdGlmICghdGFibGUuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQSBoaWVyYXJjaHkgcXVhbGlmaWVyIGlzIG1hbmRhdG9yeSB3aXRoIGEgVHJlZVRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZWdhdGUgPSB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVHJlZVRhYmxlRGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogdGFibGUuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIsXG5cdFx0XHRcdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsOiB0YWJsZS5hbm5vdGF0aW9uLmluaXRpYWxFeHBhbnNpb25MZXZlbCxcblx0XHRcdFx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzLFxuXHRcdFx0XHRcdGNyZWF0ZUluUGxhY2U6IHRhYmxlLmNvbnRyb2wuY3JlYXRlSW5QbGFjZSA9PT0gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCJcblx0XHRcdH07XG5cdFx0XHRpZiAodGFibGUuZW5hYmxlQW5hbHl0aWNzICYmIGZpbHRlck9uQWN0aXZlRW50aXRpZXMpIHtcblx0XHRcdFx0ZGVsZWdhdGUucGF5bG9hZCA9IHtcblx0XHRcdFx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSAmJiB0YWJsZS5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsID09PSB0cnVlKSB7XG5cdFx0XHRkZWxlZ2F0ZS5wYXlsb2FkID0geyAuLi5kZWxlZ2F0ZS5wYXlsb2FkLCAuLi57IGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbjogeyBsZWFmTGV2ZWw6IHRydWUgfSB9IH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGRlbGVnYXRlKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIG9GYXN0Q3JlYXRpb25Sb3dcblx0ICogQHBhcmFtIHNQYXRoXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcGFyYW0gb01vZGVsXG5cdCAqIEBwYXJhbSBvRmluYWxVSVN0YXRlXG5cdCAqL1xuXHRlbmFibGVGYXN0Q3JlYXRpb25Sb3c6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvRmFzdENyZWF0aW9uUm93OiBDcmVhdGlvblJvdyB8IHVuZGVmaW5lZCxcblx0XHRzUGF0aDogc3RyaW5nLFxuXHRcdG9Db250ZXh0OiB2NENvbnRleHQsXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9GaW5hbFVJU3RhdGU6IFByb21pc2U8dW5rbm93bj5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgb0ZpbmFsVUlTdGF0ZTtcblx0XHRcdFx0Ly8gSWYgYSBkcmFmdCBpcyBkaXNjYXJkZWQgd2hpbGUgYSBtZXNzYWdlIHN0cmlwIGZpbHRlciBpcyBhY3RpdmUgb24gdGhlIHRhYmxlIHRoZXJlIGlzIGEgdGFibGUgcmViaW5kIGNhdXNlZCBieSB0aGUgRGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRcdC8vIFRvIHByZXZlbnQgYSBuZXcgY3JlYXRpb24gcm93IGJpbmRpbmcgYmVpbmcgY3JlYXRlZCBhdCB0aGF0IG1vbWVudCB3ZSBjaGVjayBpZiB0aGUgY29udGV4dCBpcyBhbHJlYWR5IGRlbGV0ZWRcblx0XHRcdFx0aWYgKENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob0Zhc3RDcmVhdGlvblJvdykgJiYgIW9Db250ZXh0LmlzRGVsZXRlZCgpKSB7XG5cdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KHNQYXRoLCBvQ29udGV4dCwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFdmFsdWF0ZXMsIGlmIGFjdGlvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHRhYmxlIGNvbnRleHQgbWVudS5cblx0ICogU2hvdyBhY3Rpb24gb25seSBmb3IgYm91bmQgYWN0aW9ucywgd2hlbiByZXF1aXJlc1NlbGVjdGlvbiBpcyBzZXQgZm9yIGN1c3RvbSBhY3Rpb25zIG9yIHdoZW4gY29udGV4dCBpcyByZXF1aXJlZCBmb3IgSUJOIGFjdGlvbnMuXG5cdCAqIEBwYXJhbSBhY3Rpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSwgaWYgYWN0aW9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gY29udGV4dCBtZW51LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51OiBmdW5jdGlvbiAoXG5cdFx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0XHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gKGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb25cblx0XHRcdFx0XHR8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOiB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5pc0JvdW5kID09PSB0cnVlICYmXG5cdFx0XHRcdFx0IWFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbiAmJlxuXHRcdFx0XHRcdGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlID09PSBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWU7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbihUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oVGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5REE7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxXQUFXLEdBQUc7SUFDbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsZUFBZSxFQUFFLFNBQUFBLENBQVVDLFlBQXNFLEVBQUVDLFVBQWtCLEVBQVc7TUFDL0gsSUFBSUMsTUFBNEM7TUFDaEQsSUFBSUYsWUFBWSxFQUFFO1FBQ2pCLElBQUlHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixZQUFZLENBQUMsRUFBRTtVQUNoQyxNQUFNSyxVQUFVLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ0wsVUFBVSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQzNFLElBQUlGLFVBQVUsRUFBRTtZQUNmSCxNQUFNLEdBQUdGLFlBQVksQ0FBQ1EsSUFBSSxDQUFDLFVBQVVDLE9BQXdCLEVBQUU7Y0FDOUQsT0FBT0EsT0FBTyxDQUFDQyxRQUFRLElBQUlELE9BQU8sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxLQUFLLEtBQUtQLFVBQVU7WUFDdEUsQ0FBQyxDQUFDO1VBQ0gsQ0FBQyxNQUFNO1lBQ047WUFDQTtZQUNBSCxNQUFNLEdBQUdGLFlBQVksQ0FBQyxDQUFDLENBQUM7VUFDekI7UUFDRCxDQUFDLE1BQU07VUFDTkUsTUFBTSxHQUFHRixZQUFZO1FBQ3RCO01BQ0Q7TUFFQSxPQUFPLENBQUMsQ0FBQ0UsTUFBTSxJQUFJLE9BQU9BLE1BQU0sS0FBSyxRQUFRLElBQUlBLE1BQU0sQ0FBQ1EsUUFBUSxJQUFJLENBQUMsQ0FBQ1IsTUFBTSxDQUFDUyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNFLGFB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
@@ -508,6 +508,7 @@ const TableHelper = {
508
508
  * @param enableAutoScroll Action either triggers scrolling to the newly created items in the related table or not
509
509
  * @param defaultValuesExtensionFunction Function name to prefill dialog parameters
510
510
  * @param forContextMenu Indicates if the action appears in the context menu. If false, the action appears in the table toolbar
511
+ * @param disableStrictHandling Disable strict handling for this specific action
511
512
  * @returns The binding expression
512
513
  */
513
514
  pressEventDataFieldForActionButton: function (
@@ -522,7 +523,8 @@ const TableHelper = {
522
523
  isNavigable = false,
523
524
  enableAutoScroll?: boolean,
524
525
  defaultValuesExtensionFunction?: string,
525
- forContextMenu?: boolean
526
+ forContextMenu?: boolean,
527
+ disableStrictHandling?: boolean
526
528
  ): CompiledBindingToolkitExpression {
527
529
  if (!dataField) return undefined;
528
530
  const sActionName = dataField.Action,
@@ -551,7 +553,8 @@ const TableHelper = {
551
553
  invocationGrouping: dataField?.InvocationGrouping === "UI.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated",
552
554
  controlId: tableProperties.contentId,
553
555
  operationAvailableMap: operationAvailableMap,
554
- label: dataField.Label
556
+ label: dataField.Label,
557
+ disableStrictHandling: disableStrictHandling
555
558
  };
556
559
  return compileExpression(fn("API.onActionPress", [ref("$event"), ref("$controller"), dataField.Action, params]));
557
560
  //return ActionHelper.getPressEventDataFieldForActionButton(table.id!, dataField, params, operationAvailableMap);