@sapui5/sap.fe.macros 1.138.0 → 1.140.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 (240) 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 +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -1,3 +1,4 @@
1
+ import type { Property } from "@sap-ux/vocabularies-types";
1
2
  import Log from "sap/base/Log";
2
3
  import type { EnhanceWithUI5 } from "sap/fe/base/ClassSupport";
3
4
  import { aggregation, association, defineUI5Class, implementInterface, property, type PropertiesOf } from "sap/fe/base/ClassSupport";
@@ -25,6 +26,7 @@ import {
25
26
  resolveTokenValue,
26
27
  unresolvedResult
27
28
  } from "sap/fe/macros/ai/EasyFilterDataFetcher";
29
+ import type FilterBar from "sap/fe/macros/controls/FilterBar";
28
30
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
29
31
  import DraftEditState from "sap/fe/macros/filterBar/DraftEditState";
30
32
  import type FilterBarAPI from "sap/fe/macros/filterBar/FilterBarAPI";
@@ -34,7 +36,6 @@ import type ManagedObject from "sap/ui/base/ManagedObject";
34
36
  import type { $ControlSettings } from "sap/ui/core/Control";
35
37
  import UI5Element from "sap/ui/core/Element";
36
38
  import type { ConditionObject } from "sap/ui/mdc/condition/Condition";
37
- import type FilterBar from "sap/ui/mdc/FilterBar";
38
39
  import FilterOperator from "sap/ui/model/FilterOperator";
39
40
  import JSONModel from "sap/ui/model/json/JSONModel";
40
41
  import Date1 from "sap/ui/model/odata/type/Date";
@@ -42,14 +43,13 @@ import DateTimeOffset from "sap/ui/model/odata/type/DateTimeOffset";
42
43
  import type ODataType from "sap/ui/model/odata/type/ODataType";
43
44
  import TimeOfDay from "sap/ui/model/odata/type/TimeOfDay";
44
45
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
45
- import type { CodeListEntry } from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
46
+ import type { CodeList } from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
46
47
 
47
48
  type EasyFilterBarState = {};
48
- type FieldMetadata = EasyFilterPropertyMetadata & { path: string };
49
+ type FieldMetadata = EasyFilterPropertyMetadata & { maxLength?: number };
49
50
 
50
51
  /**
51
52
  * Delivery for beta release for the easy filter feature.
52
- * @experimental
53
53
  */
54
54
  @defineUI5Class("sap.fe.macros.EasyFilterBar")
55
55
  export default class EasyFilterBar extends BuildingBlock implements IViewStateContributor<EasyFilterBarState> {
@@ -71,8 +71,6 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
71
71
  @aggregation({ type: "sap.fe.controls.easyFilter.EasyFilterBarContainer" })
72
72
  content?: EnhanceWithUI5<EasyFilterBarContainer>;
73
73
 
74
- _fetchedCodeList!: Record<string, unknown>;
75
-
76
74
  private filterBarMetadata!: FieldMetadata[];
77
75
 
78
76
  private easyFilterPath?: string;
@@ -105,26 +103,23 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
105
103
  const selectOptionsNames = oNavParameters.selectionVariant.getSelectOptionsPropertyNames();
106
104
  this.filterBarMetadata.forEach((field) => {
107
105
  if (selectOptionsNames.includes(field.name)) {
108
- field.defaultValue = oNavParameters.selectionVariant!.getSelectOption(field.name)?.map((option) => {
106
+ field.defaultValue = oNavParameters.selectionVariant!.getSelectOption(field.name)?.reduce((acc, option) => {
109
107
  if (option.Sign === "I") {
110
- if (option.Option === "BT") {
111
- return {
112
- operator: FilterOperator.BT,
113
- selectedValues: [{ value1: option.Low, value2: option.High }]
114
- };
108
+ if (option.Option === FilterOperator.BT || option.Option === FilterOperator.NB) {
109
+ if (option.High !== null && option.High !== undefined) {
110
+ acc.push({ operator: option.Option, selectedValues: [option.Low, option.High] });
111
+ }
115
112
  } else {
116
- return {
117
- operator: option.Option,
113
+ acc.push({
114
+ operator: option.Option as Exclude<FilterOperator, FilterOperator.BT | FilterOperator.NB>,
118
115
  selectedValues: [option.Low]
119
- };
116
+ });
120
117
  }
121
118
  } else {
122
- return {
123
- operator: FilterOperator.NE,
124
- selectedValues: [option.Low]
125
- };
119
+ acc.push({ operator: FilterOperator.NE, selectedValues: [option.Low] });
126
120
  }
127
- }) as TokenSelectedValuesDefinition[];
121
+ return acc;
122
+ }, [] as TokenSelectedValuesDefinition[]);
128
123
  }
129
124
  });
130
125
  this.content?.resetState(false);
@@ -145,116 +140,124 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
145
140
  }
146
141
 
147
142
  onMetadataAvailable(): void {
148
- this._fetchedCodeList ??= {};
149
143
  this.filterBarMetadata = this.prepareFilterBarMetadata();
150
144
  this.recommendedQueries = this.getAppComponent()?.getManifestEntry("sap.fe")?.macros?.easyFilter?.recommendedQueries ?? [];
151
145
  this.content = this.createContent() as EnhanceWithUI5<EasyFilterBarContainer>;
152
146
  this.content.filterBarMetadata = this.filterBarMetadata;
153
147
  }
154
148
 
149
+ private getUnitForFilterField(field: FilterField, allFilterFields: FilterField[]): string | undefined {
150
+ const propertyObject = field.getTarget();
151
+ const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
152
+ const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
153
+ return allFilterFields.find((f) => f.getTarget() === unitProperty)?.annotationPath;
154
+ }
155
+
156
+ private getDefaultValueForFilterField(
157
+ field: FilterField,
158
+ startupParameters: Record<string, unknown>
159
+ ): TokenSelectedValuesDefinition[] | undefined {
160
+ let defaultValue: TokenSelectedValuesDefinition[] | undefined;
161
+ if (startupParameters.hasOwnProperty(field.name)) {
162
+ defaultValue = [
163
+ {
164
+ operator: FilterOperator.EQ,
165
+ selectedValues: startupParameters[field.name] as TokenSelectedValuesDefinition["selectedValues"]
166
+ }
167
+ ];
168
+ } else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
169
+ defaultValue = [
170
+ {
171
+ operator: FilterOperator.EQ,
172
+ selectedValues: startupParameters[field.name.substring(2)] as TokenSelectedValuesDefinition["selectedValues"]
173
+ }
174
+ ];
175
+ }
176
+ return defaultValue;
177
+ }
178
+
179
+ private getEditStateFilterMetadata(metaModel: ODataMetaModel): FieldMetadata {
180
+ // Assemble the code list for the editing status filter values:
181
+ const props = new JSONModel({
182
+ isDraftCollaborative: ModelHelper.isCollaborationDraftSupported(metaModel)
183
+ }).createBindingContext("/");
184
+
185
+ const editingStatusCodeList = DraftEditState.getEditStatesContext(props)
186
+ .getObject("/")
187
+ .map((state: { id: string; display: string }) => ({ value: state.id, description: state.display }));
188
+
189
+ return {
190
+ name: "$editState",
191
+ label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
192
+ dataType: "Edm.String",
193
+ filterable: true,
194
+ codeList: editingStatusCodeList,
195
+ type: "MenuWithSingleSelect"
196
+ };
197
+ }
198
+
199
+ private getTokenType(prop: Property): TokenType {
200
+ if (hasValueHelpWithFixedValues(prop)) {
201
+ return "MenuWithCheckBox";
202
+ }
203
+ switch (prop.type) {
204
+ case "Edm.Date":
205
+ return "Calendar";
206
+ case "Edm.TimeOfDay":
207
+ return "Time";
208
+ default:
209
+ return "ValueHelp";
210
+ }
211
+ }
212
+
155
213
  prepareFilterBarMetadata(): FieldMetadata[] {
156
214
  const owner = this._getOwner()!;
157
215
  const definitionForPage = owner.preprocessorContext?.getDefinitionForPage();
158
- let filterBarDef;
159
- if (definitionForPage) {
160
- filterBarDef = definitionForPage.getFilterBarDefinition({});
161
216
 
162
- const metaModel = owner.preprocessorContext?.models.metaModel as ODataMetaModel;
217
+ if (!definitionForPage) {
218
+ return [];
219
+ }
163
220
 
164
- const getType = (edmType: string, codeList: unknown): TokenType => {
165
- if (codeList) {
166
- return "MenuWithCheckBox";
167
- }
168
- switch (edmType) {
169
- case "Edm.Date":
170
- return "Calendar";
171
- case "Edm.TimeOfDay":
172
- return "Time";
173
- default:
174
- return "ValueHelp";
175
- }
176
- };
177
- const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
178
-
179
- const filterFields = filterBarDef.getFilterFields();
180
- const result = filterFields.map((field: FilterField): FieldMetadata => {
181
- // Exclude hidden filter fields. It is not possible to set a value for hidden filters, and users would not understand anyway as they cannot see these values.
182
- const propertyObject = field.getTarget();
183
- let codeList;
184
- const hasCodeList = hasValueHelpWithFixedValues(propertyObject);
185
- if (hasCodeList) {
186
- codeList = this._fetchedCodeList[field.name];
187
- if (!codeList) {
188
- codeList = async (): Promise<CodeListEntry[]> => this.getCodeListForProperty(field.name, field.annotationPath!);
189
- }
190
- }
221
+ const filterBarDef = definitionForPage.getFilterBarDefinition({});
222
+ const metaModel = owner.preprocessorContext?.models.metaModel as ODataMetaModel;
191
223
 
192
- // Check if the filter field's target property has a currency or a unit. If so, look for the corresponding filter field (the
193
- // annotation has to be a path for that) and set the 'unit' property.
194
- const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
195
- const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
196
- const unit = unitProperty ? filterFields.find((f) => f.getTarget() === unitProperty)?.name : undefined;
197
- let defaultValue;
198
- if (startupParameters.hasOwnProperty(field.name)) {
199
- defaultValue = [
200
- {
201
- operator: FilterOperator.EQ,
202
- selectedValues: startupParameters[field.name]
203
- }
204
- ];
205
- } else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
206
- defaultValue = [
207
- {
208
- operator: FilterOperator.EQ,
209
- selectedValues: startupParameters[field.name.substring(2)]
210
- }
211
- ];
212
- }
213
- return {
214
- name: field.name,
215
- path: field.annotationPath,
216
- label: field.label,
217
- dataType: propertyObject.type,
218
- required: field.required ?? false,
219
- defaultValue: defaultValue,
220
- filterable: true,
221
- sortable: !field.isParameter,
222
- codeList: codeList,
223
- type: getType(propertyObject.type, codeList),
224
- unit: unit
225
- } as FieldMetadata;
226
- });
224
+ const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
227
225
 
228
- // [Editing Status]
229
-
230
- if (ModelHelper.isMetaPathDraftSupported(definitionForPage.getMetaPath() as unknown as MetaPath<unknown>)) {
231
- // Assemble the code list for the editing status filter values:
232
- const props = new JSONModel({
233
- isDraftCollaborative: ModelHelper.isCollaborationDraftSupported(metaModel)
234
- }).createBindingContext("/");
235
-
236
- const editingStatusCodeList = DraftEditState.getEditStatesContext(props)
237
- .getObject("/")
238
- .map((state: { id: string; display: string }) => ({ value: state.id, description: state.display }));
239
-
240
- result.push({
241
- name: "$editState",
242
- path: "$editState",
243
- label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
244
- dataType: "Edm.String",
245
- required: false,
246
- filterable: true,
247
- sortable: false,
248
- codeList: editingStatusCodeList,
249
- type: "MenuWithCheckBox"
250
- });
226
+ const filterFields = filterBarDef.getFilterFields();
227
+ const nonHiddenFilterFields = filterFields.filter((field: FilterField) => {
228
+ return !field.getTarget()?.annotations?.UI?.HiddenFilter?.valueOf();
229
+ });
230
+
231
+ const result = nonHiddenFilterFields.map((field: FilterField): FieldMetadata => {
232
+ const propertyObject = field.getTarget();
233
+ let codeList: CodeList | (() => Promise<CodeList>) | undefined;
234
+ if (hasValueHelpWithFixedValues(propertyObject)) {
235
+ codeList = async (): Promise<CodeList> => this.getCodeListForProperty(field.annotationPath!);
251
236
  }
252
- return result;
237
+
238
+ return {
239
+ name: field.annotationPath!,
240
+ label: field.label,
241
+ dataType: propertyObject.type,
242
+ required: field.required ?? false,
243
+ defaultValue: this.getDefaultValueForFilterField(field, startupParameters),
244
+ filterable: true,
245
+ codeList: codeList,
246
+ type: this.getTokenType(propertyObject) as Exclude<TokenType, "ValueHelp">,
247
+ unit: this.getUnitForFilterField(field, filterFields),
248
+ maxLength: propertyObject.maxLength
249
+ };
250
+ });
251
+
252
+ // [Editing Status]
253
+ if (ModelHelper.isMetaPathDraftSupported(definitionForPage.getMetaPath() as unknown as MetaPath<unknown>)) {
254
+ result.push(this.getEditStateFilterMetadata(metaModel));
253
255
  }
254
- return [];
256
+
257
+ return result;
255
258
  }
256
259
 
257
- async getCodeListForProperty(key: string, propertyPath: string): Promise<CodeListEntry[]> {
260
+ async getCodeListForProperty(propertyPath: string): Promise<CodeList> {
258
261
  const defaultValueList = await this.getValueList(propertyPath);
259
262
 
260
263
  if (!defaultValueList) {
@@ -269,8 +272,7 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
269
272
  const data = await listBinding.requestContexts();
270
273
 
271
274
  const filterGroupValues = data.map(mapValueListToCodeList(defaultValueList));
272
- this._fetchedCodeList[key] = filterGroupValues;
273
- const codeListProperty = this.filterBarMetadata.find((field) => field.name === key);
275
+ const codeListProperty = this.filterBarMetadata.find((field) => field.name === propertyPath);
274
276
  if (codeListProperty) {
275
277
  codeListProperty.codeList = filterGroupValues;
276
278
  }
@@ -281,18 +283,32 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
281
283
  fieldName: string,
282
284
  values: TokenSelectedValuesDefinition[]
283
285
  ): Promise<ValueHelpSelectedValuesDefinition[]> {
286
+ let filteredValues = values;
284
287
  const field = this.filterBarMetadata.find(({ name }) => name === fieldName);
285
- if (field?.path) {
286
- const valueList = await this.getValueList(field.path);
288
+ if (field) {
289
+ const maxLength = field.maxLength;
290
+
291
+ if (maxLength !== undefined) {
292
+ filteredValues = values
293
+ .map((token) => {
294
+ const filtered = token.selectedValues.filter((val) => typeof val !== "string" || val.length <= maxLength);
295
+ return filtered.length > 0 ? { ...token, selectedValues: filtered } : undefined;
296
+ })
297
+ .filter(Boolean) as TokenSelectedValuesDefinition[];
298
+ if (filteredValues.length === 0) {
299
+ return [];
300
+ }
301
+ }
302
+ const valueList = await this.getValueList(field.name);
287
303
 
288
- if (valueList && ValueListHelper.isValueListSearchable(field.path, valueList)) {
289
- const resolvedTokenValues = await Promise.all(values.map(async (value) => resolveTokenValue(valueList, value)));
304
+ if (valueList && ValueListHelper.isValueListSearchable(field.name, valueList)) {
305
+ const resolvedTokenValues = await Promise.all(filteredValues.map(async (value) => resolveTokenValue(valueList, value)));
290
306
  return resolvedTokenValues.flat();
291
307
  }
292
308
  }
293
309
 
294
310
  // return original values converted to the expected format
295
- return unresolvedResult(values);
311
+ return unresolvedResult(filteredValues);
296
312
  }
297
313
 
298
314
  async getValueList(propertyPath: string): Promise<ValueListInfo | undefined> {
@@ -324,7 +340,7 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
324
340
  const field = this.filterBarMetadata.find((f) => f.name === token.key)!;
325
341
  for (const tokenKeySpecification of token.keySpecificSelectedValues) {
326
342
  const { operator, selectedValues } = tokenKeySpecification;
327
- await FilterUtils.addFilterValues(filterBarAPI.content, field.path, operator, selectedValues);
343
+ await FilterUtils.addFilterValues(filterBarAPI.content, field.name, operator, selectedValues);
328
344
  }
329
345
  }
330
346
  }
@@ -364,8 +380,8 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
364
380
  const field = this.filterBarMetadata.find((f) => f.name === key)!;
365
381
  const filterBar = UI5Element.getElementById(this.filterBar) as FilterBar;
366
382
  const filterBarAPI = filterBar.getParent() as FilterBarAPI;
367
- await filterBarAPI.showFilterField(field.path);
368
- return filterBarAPI.openValueHelpForFilterField(field.path);
383
+ await filterBarAPI.showFilterField(field.name);
384
+ return filterBarAPI.openValueHelpForFilterField(field.name);
369
385
  }
370
386
 
371
387
  onBeforeQueryProcessing(): void {
@@ -446,6 +462,6 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
446
462
  afterQueryProcessing={this.onAfterQueryProcessing.bind(this)}
447
463
  clearFilters={this.onClearFilters.bind(this)}
448
464
  />
449
- ) as EasyFilterBarContainer;
465
+ );
450
466
  }
451
467
  }
@@ -36,25 +36,29 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConve
36
36
  * @param keyProperty The key property of the value list.
37
37
  * @param operator The filter operator.
38
38
  * @param valueToMatch The value to match.
39
+ * @param looseMatch Whether to apply loose matching or not
39
40
  * @returns A promise that resolves to the selected values.
40
41
  */
41
42
  async function resolveValueUsingValueList(valueList, keyProperty, operator, valueToMatch) {
43
+ let looseMatch = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
42
44
  const model = valueList.valueListInfo.$model;
43
45
  const path = `/${valueList.valueListInfo.CollectionPath}`;
44
46
  const $select = generateSelectParameter(valueList);
45
- const $search = CommonUtils.normalizeSearchTerm(valueToMatch instanceof Date ? valueToMatch.toISOString() : valueToMatch.toString());
47
+ let $search = CommonUtils.normalizeSearchTerm(valueToMatch instanceof Date ? valueToMatch.toISOString() : valueToMatch.toString());
46
48
  const keyPropertyFilter = getKeyPropertyFilter(valueList, keyProperty, operator, valueToMatch);
47
49
 
48
50
  // Check if the query exceeds the maximum length of the key property
49
51
  const characterLimitOverflow = !$search || $search.length > (keyProperty.maxLength ?? $search.length);
50
-
52
+ if (!looseMatch) {
53
+ $search = `"${$search}"`; // Ensure the search term is treated as a phrase
54
+ }
51
55
  // If query exceeds the maximum length of the key property, we don't filter at all, as it would give no result anyway
52
56
  const [valueHelpKeyQuery, valueHelpSearchQuery] = await Promise.allSettled([!characterLimitOverflow ? model.bindList(path, undefined, undefined, keyPropertyFilter, {
53
57
  $select
54
58
  }).requestContexts(0, 1) : [],
55
59
  // $filter on the key property of the value list
56
60
  model.bindList(path, undefined, undefined, undefined, {
57
- $search: `"${$search}"`,
61
+ $search: $search,
58
62
  $select
59
63
  }).requestContexts() // $search on the value list
60
64
  ]);
@@ -162,9 +166,11 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConve
162
166
  * Resolves token-based filter values using a value list.
163
167
  * @param valueList The value list used for resolving values.
164
168
  * @param value The token-based filter values to resolve.
169
+ * @param looseMatch Whether to perform a loose match on the values.
165
170
  * @returns A promise that resolves to an array of resolved filter values.
166
171
  */
167
172
  async function resolveTokenValue(valueList, value) {
173
+ let looseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
168
174
  const {
169
175
  operator,
170
176
  selectedValues
@@ -181,7 +187,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConve
181
187
  return unresolvedResult([value]);
182
188
  }
183
189
  const resolvedOperator = operator === FilterOperator.BT || operator === FilterOperator.NB ? FilterOperator.EQ : operator; // BT/NB: Use EQ for resolving the lower/upper bounds
184
- const resolvedValues = await Promise.all(selectedValues.map(async selectedValue => resolveValueUsingValueList(valueList, keyProperty, resolvedOperator, selectedValue)));
190
+ const resolvedValues = await Promise.all(selectedValues.map(async selectedValue => resolveValueUsingValueList(valueList, keyProperty, resolvedOperator, selectedValue, looseMatch)));
185
191
  return operator === FilterOperator.BT || operator === FilterOperator.NB ? handleIntervals(operator, resolvedValues) : resolvedValues.flat();
186
192
  }
187
193
 
@@ -209,4 +215,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConve
209
215
  _exports.unresolvedResult = unresolvedResult;
210
216
  return _exports;
211
217
  }, false);
212
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRLZXlQcm9wZXJ0eUZpbHRlciIsInZhbHVlTGlzdCIsImtleVByb3BlcnR5Iiwib3BlcmF0b3IiLCJ2YWx1ZVRvTWF0Y2giLCJmaWx0ZXJWYWx1ZSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiSXNVcHBlckNhc2UiLCJ2YWx1ZU9mIiwidG9VcHBlckNhc2UiLCJGaWx0ZXIiLCJwYXRoIiwia2V5UGF0aCIsInZhbHVlMSIsInJlc29sdmVWYWx1ZVVzaW5nVmFsdWVMaXN0IiwibW9kZWwiLCJ2YWx1ZUxpc3RJbmZvIiwiJG1vZGVsIiwiQ29sbGVjdGlvblBhdGgiLCIkc2VsZWN0IiwiZ2VuZXJhdGVTZWxlY3RQYXJhbWV0ZXIiLCIkc2VhcmNoIiwiQ29tbW9uVXRpbHMiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwidG9TdHJpbmciLCJrZXlQcm9wZXJ0eUZpbHRlciIsImNoYXJhY3RlckxpbWl0T3ZlcmZsb3ciLCJsZW5ndGgiLCJtYXhMZW5ndGgiLCJ2YWx1ZUhlbHBLZXlRdWVyeSIsInZhbHVlSGVscFNlYXJjaFF1ZXJ5IiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJiaW5kTGlzdCIsInVuZGVmaW5lZCIsInJlcXVlc3RDb250ZXh0cyIsIm1hcFJlc3VsdCIsIm1hcFZhbHVlTGlzdFRvQ29kZUxpc3QiLCJzdGF0dXMiLCJ2YWx1ZSIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJzZWxlY3RlZFZhbHVlcyIsIm1hcCIsImRlc2NyaXB0aW9uIiwicmVzdWx0cyIsImZpbHRlcmVkUmVzdWx0cyIsImZpbHRlciIsInJlc3VsdCIsInRvTG93ZXJDYXNlIiwibm9NYXRjaCIsImVuc3VyZURlc2NyaXB0aW9uIiwiYXJndW1lbnRzIiwiY29udGV4dCIsImRhdGEiLCJnZXRPYmplY3QiLCJkZXNjcmlwdGlvblBhdGgiLCJfZXhwb3J0cyIsImluY2x1ZGVzIiwiam9pbiIsImhhbmRsZUludGVydmFscyIsInJlc29sdmVkVmFsdWVzIiwicmVzb2x2ZWRMb3dlckJvdW5kIiwicmVzb2x2ZWRVcHBlckJvdW5kIiwibG93ZXJCb3VuZCIsImxvd2VyQm91bmRUZXh0IiwidXBwZXJCb3VuZCIsInVwcGVyQm91bmRUZXh0IiwicHVzaCIsInJlc29sdmVUb2tlblZhbHVlIiwic2V0Q29udGludWVPbkVycm9yIiwidmFsdWVMaXN0TWV0YW1vZGVsIiwiY29udmVydFR5cGVzIiwiZ2V0TWV0YU1vZGVsIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJpc1Byb3BlcnR5IiwidW5yZXNvbHZlZFJlc3VsdCIsInJlc29sdmVkT3BlcmF0b3IiLCJCVCIsIk5CIiwiYWxsIiwic2VsZWN0ZWRWYWx1ZSIsImZsYXQiLCJ2YWx1ZXMiLCJfcmVmIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVyRGF0YUZldGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2RlTGlzdFR5cGUsXG5cdFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IHR5cGUgVmFsdWVMaXN0SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBDb2RlTGlzdEVudHJ5IH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuXG50eXBlIFNjYWxhck9wZXJhdG9yID0gRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj47XG50eXBlIFNjYWxhclZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IERhdGU7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZmlsdGVyIGZvciB0aGUga2V5IHByb3BlcnR5IG9mIGEgdmFsdWUgbGlzdC5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0ga2V5UHJvcGVydHkgVGhlIGtleSBwcm9wZXJ0eSBvZiB0aGUgdmFsdWUgbGlzdC5cbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgZmlsdGVyIG9wZXJhdG9yLlxuICogQHBhcmFtIHZhbHVlVG9NYXRjaCBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBBIGZpbHRlciBmb3IgdGhlIGtleSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5UHJvcGVydHlGaWx0ZXIoXG5cdHZhbHVlTGlzdDogVmFsdWVMaXN0SW5mbyxcblx0a2V5UHJvcGVydHk6IFByb3BlcnR5LFxuXHRvcGVyYXRvcjogU2NhbGFyT3BlcmF0b3IsXG5cdHZhbHVlVG9NYXRjaDogU2NhbGFyVmFsdWVcbik6IEZpbHRlciB7XG5cdGxldCBmaWx0ZXJWYWx1ZSA9IHZhbHVlVG9NYXRjaDtcblxuXHQvLyBJZiB0aGUga2V5IHByb3BlcnR5IGlzIGtub3duIHRvIGNvbnRhaW4gb25seSB1cHBlcmNhc2UgdmFsdWVzLCBjb252ZXJ0IHRoZSBmaWx0ZXIgdmFsdWUgdG8gdXBwZXJjYXNlIGFzIHdlbGxcblx0aWYgKHR5cGVvZiBmaWx0ZXJWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBrZXlQcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LklzVXBwZXJDYXNlPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRmaWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IEZpbHRlcih7IHBhdGg6IHZhbHVlTGlzdC5rZXlQYXRoLCBvcGVyYXRvciwgdmFsdWUxOiBmaWx0ZXJWYWx1ZSB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHNpbmdsZSBzY2FsYXIgdmFsdWUgdXNpbmcgYSB2YWx1ZSBsaXN0LlxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBrZXlQcm9wZXJ0eSBUaGUga2V5IHByb3BlcnR5IG9mIHRoZSB2YWx1ZSBsaXN0LlxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBmaWx0ZXIgb3BlcmF0b3IuXG4gKiBAcGFyYW0gdmFsdWVUb01hdGNoIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzZWxlY3RlZCB2YWx1ZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWYWx1ZVVzaW5nVmFsdWVMaXN0KFxuXHR2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8sXG5cdGtleVByb3BlcnR5OiBQcm9wZXJ0eSxcblx0b3BlcmF0b3I6IFNjYWxhck9wZXJhdG9yLFxuXHR2YWx1ZVRvTWF0Y2g6IFNjYWxhclZhbHVlXG4pOiBQcm9taXNlPFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbj4ge1xuXHRjb25zdCBtb2RlbCA9IHZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvLiRtb2RlbDtcblx0Y29uc3QgcGF0aCA9IGAvJHt2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gO1xuXHRjb25zdCAkc2VsZWN0ID0gZ2VuZXJhdGVTZWxlY3RQYXJhbWV0ZXIodmFsdWVMaXN0KTtcblx0Y29uc3QgJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0odmFsdWVUb01hdGNoIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlVG9NYXRjaC50b0lTT1N0cmluZygpIDogdmFsdWVUb01hdGNoLnRvU3RyaW5nKCkpO1xuXHRjb25zdCBrZXlQcm9wZXJ0eUZpbHRlciA9IGdldEtleVByb3BlcnR5RmlsdGVyKHZhbHVlTGlzdCwga2V5UHJvcGVydHksIG9wZXJhdG9yLCB2YWx1ZVRvTWF0Y2gpO1xuXG5cdC8vIENoZWNrIGlmIHRoZSBxdWVyeSBleGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUga2V5IHByb3BlcnR5XG5cdGNvbnN0IGNoYXJhY3RlckxpbWl0T3ZlcmZsb3cgPSAhJHNlYXJjaCB8fCAkc2VhcmNoLmxlbmd0aCA+IChrZXlQcm9wZXJ0eS5tYXhMZW5ndGggPz8gJHNlYXJjaC5sZW5ndGgpO1xuXG5cdC8vIElmIHF1ZXJ5IGV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBrZXkgcHJvcGVydHksIHdlIGRvbid0IGZpbHRlciBhdCBhbGwsIGFzIGl0IHdvdWxkIGdpdmUgbm8gcmVzdWx0IGFueXdheVxuXHRjb25zdCBbdmFsdWVIZWxwS2V5UXVlcnksIHZhbHVlSGVscFNlYXJjaFF1ZXJ5XSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG5cdFx0IWNoYXJhY3RlckxpbWl0T3ZlcmZsb3cgPyBtb2RlbC5iaW5kTGlzdChwYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwga2V5UHJvcGVydHlGaWx0ZXIsIHsgJHNlbGVjdCB9KS5yZXF1ZXN0Q29udGV4dHMoMCwgMSkgOiBbXSwgLy8gJGZpbHRlciBvbiB0aGUga2V5IHByb3BlcnR5IG9mIHRoZSB2YWx1ZSBsaXN0XG5cdFx0bW9kZWwuYmluZExpc3QocGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkc2VhcmNoOiBgXCIkeyRzZWFyY2h9XCJgLCAkc2VsZWN0IH0pLnJlcXVlc3RDb250ZXh0cygpIC8vICRzZWFyY2ggb24gdGhlIHZhbHVlIGxpc3Rcblx0XSk7XG5cblx0Y29uc3QgbWFwUmVzdWx0ID0gbWFwVmFsdWVMaXN0VG9Db2RlTGlzdCh2YWx1ZUxpc3QsIHRydWUpO1xuXG5cdGlmICh2YWx1ZUhlbHBLZXlRdWVyeS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgJiYgdmFsdWVIZWxwS2V5UXVlcnkudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdC8vIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiB0aGUga2V5IGNvbHVtbjpcblx0XHQvLyAtIElmIHRoZSBvcGVyYXRvciBpcyBFUTogVGhpcyBpbmRpY2F0ZXMgYW4gZXhhY3Qga2V5IG1hdGNoLCBzbyB0aGUgcmV0dXJuZWQgZGF0YSB3aWxsIGJlIHVzZWQuXG5cdFx0Ly8gLSBGb3Igb3RoZXIgb3BlcmF0b3JzOiBPbmUgb3IgbW9yZSBrZXlzIG1hdGNoIHRoZSB2YWx1ZSBiYXNlZCBvbiB0aGUgb3BlcmF0b3IsIHNvIHRoZSBvcmlnaW5hbCBjb25kaXRpb24gaXMgcHJlc2VydmVkLlxuXHRcdHJldHVybiBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuRVFcblx0XHRcdD8geyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IHZhbHVlSGVscEtleVF1ZXJ5LnZhbHVlLm1hcChtYXBSZXN1bHQpIH1cblx0XHRcdDogeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlOiB2YWx1ZVRvTWF0Y2gsIGRlc2NyaXB0aW9uOiB2YWx1ZVRvTWF0Y2ggfV0gfTtcblx0fVxuXG5cdGlmICh2YWx1ZUhlbHBTZWFyY2hRdWVyeS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgJiYgdmFsdWVIZWxwU2VhcmNoUXVlcnkudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdC8vIFRoZSBrZXkgcXVlcnkgZGlkIG5vdCByZXR1cm4gYW55IG1hdGNoZXMsIGJ1dCB0aGUgc2VhcmNoIHF1ZXJ5IGZvdW5kIHJlc3VsdHMuIFVzZSB0aGUgc2VhcmNoIHJlc3VsdHMgaW5zdGVhZC5cblxuXHRcdGxldCByZXN1bHRzID0gdmFsdWVIZWxwU2VhcmNoUXVlcnkudmFsdWUubWFwKG1hcFJlc3VsdCk7XG5cblx0XHRpZiAob3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkVRKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZFJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcihcblx0XHRcdFx0KHJlc3VsdCkgPT4gcmVzdWx0LmRlc2NyaXB0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWVUb01hdGNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuXHRcdFx0KTtcblx0XHRcdC8vIElmIHRoZSBzZWFyY2ggcXVlcnkgaXMgZm91bmQgb25jZS9tdWx0aXBsZSB0aW1lcyBpbiB0aGUgcmVzdWx0ICsgb3BlcmF0b3IgaXMgRVEsIHdlIG5lZWQgdG8gcmV0dXJuIG9ubHkgdGhvc2UgcmVzdWx0c1xuXHRcdFx0aWYgKGZpbHRlcmVkUmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlc3VsdHMgPSBmaWx0ZXJlZFJlc3VsdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvcGVyYXRvcixcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiByZXN1bHRzXG5cdFx0fTtcblx0fVxuXG5cdC8vIE5vIG1hdGNoZXMgd2VyZSBmb3VuZCBpbiBlaXRoZXIgcXVlcnk7IHRoZSBvcmlnaW5hbCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0cmV0dXJuIHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbeyB2YWx1ZTogdmFsdWVUb01hdGNoLCBkZXNjcmlwdGlvbjogdmFsdWVUb01hdGNoIH1dLCBub01hdGNoOiB0cnVlIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFwcGluZyBmdW5jdGlvbiBmb3IgbWFwcGluZyBhIHZhbHVlIGxpc3QgcXVlcnkgcmVzdWx0IHRvIGEgY29kZSBsaXN0LlxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYW5kIGRlc2NyaXB0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZW5zdXJlRGVzY3JpcHRpb24gV2hldGhlciB0byBlbnN1cmUgdGhhdCB0aGUgZGVzY3JpcHRpb24gaXMgYWx3YXlzIHJldHVybmVkLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IG1hcHMgYSBzaW5nbGUgdmFsdWUgbGlzdCBxdWVyeSByZXN1bHQgdG8gYSBjb2RlIGxpc3QgZW50cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0KHZhbHVlTGlzdDogVmFsdWVMaXN0SW5mbywgZW5zdXJlRGVzY3JpcHRpb246IHRydWUpOiAoY29udGV4dDogQ29udGV4dCkgPT4gQ29kZUxpc3RUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFZhbHVlTGlzdFRvQ29kZUxpc3QodmFsdWVMaXN0OiBWYWx1ZUxpc3RJbmZvLCBlbnN1cmVEZXNjcmlwdGlvbj86IGZhbHNlKTogKGNvbnRleHQ6IENvbnRleHQpID0+IENvZGVMaXN0RW50cnk7XG5leHBvcnQgZnVuY3Rpb24gbWFwVmFsdWVMaXN0VG9Db2RlTGlzdChcblx0dmFsdWVMaXN0OiBWYWx1ZUxpc3RJbmZvLFxuXHRlbnN1cmVEZXNjcmlwdGlvbiA9IGZhbHNlXG4pOiAoY29udGV4dDogQ29udGV4dCkgPT4gQ29kZUxpc3RFbnRyeSB8IENvZGVMaXN0VHlwZSB7XG5cdHJldHVybiAoY29udGV4dDogQ29udGV4dCk6IENvZGVMaXN0RW50cnkgPT4ge1xuXHRcdGNvbnN0IGRhdGEgPSBjb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IHZhbHVlID0gZGF0YVt2YWx1ZUxpc3Qua2V5UGF0aF07XG5cdFx0Y29uc3QgZGVzY3JpcHRpb24gPSB2YWx1ZUxpc3QuZGVzY3JpcHRpb25QYXRoID8gZGF0YVt2YWx1ZUxpc3QuZGVzY3JpcHRpb25QYXRoXSA6IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4geyB2YWx1ZSwgZGVzY3JpcHRpb246IGVuc3VyZURlc2NyaXB0aW9uID8gZGVzY3JpcHRpb24gPz8gdmFsdWUgOiBkZXNjcmlwdGlvbiB9O1xuXHR9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgJHNlbGVjdCBwYXJhbWV0ZXIgZm9yIGEgdmFsdWUgbGlzdCBxdWVyeS5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24uXG4gKiBAcmV0dXJucyBUaGUgJHNlbGVjdCBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcih2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8pOiBzdHJpbmcge1xuXHRyZXR1cm4gW3ZhbHVlTGlzdC5rZXlQYXRoLCB2YWx1ZUxpc3QuZGVzY3JpcHRpb25QYXRoXS5maWx0ZXIoKHBhdGgpID0+IHBhdGggJiYgIXBhdGguaW5jbHVkZXMoXCIvXCIpKS5qb2luKFwiLFwiKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJ2YWxzKFxuXHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQixcblx0cmVzb2x2ZWRWYWx1ZXM6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG4pOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB7XG5cdGNvbnN0IFtyZXNvbHZlZExvd2VyQm91bmQsIHJlc29sdmVkVXBwZXJCb3VuZF0gPSByZXNvbHZlZFZhbHVlcztcblxuXHRjb25zdCByZXN1bHQ6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdID0gW107XG5cdGZvciAoY29uc3QgeyB2YWx1ZTogbG93ZXJCb3VuZCwgZGVzY3JpcHRpb246IGxvd2VyQm91bmRUZXh0IH0gb2YgcmVzb2x2ZWRMb3dlckJvdW5kLnNlbGVjdGVkVmFsdWVzKSB7XG5cdFx0Zm9yIChjb25zdCB7IHZhbHVlOiB1cHBlckJvdW5kLCBkZXNjcmlwdGlvbjogdXBwZXJCb3VuZFRleHQgfSBvZiByZXNvbHZlZFVwcGVyQm91bmQuc2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0b3BlcmF0b3IsXG5cdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbXG5cdFx0XHRcdFx0eyB2YWx1ZTogbG93ZXJCb3VuZCwgZGVzY3JpcHRpb246IGxvd2VyQm91bmRUZXh0ID8/IGxvd2VyQm91bmQgfSxcblx0XHRcdFx0XHR7IHZhbHVlOiB1cHBlckJvdW5kLCBkZXNjcmlwdGlvbjogdXBwZXJCb3VuZFRleHQgPz8gdXBwZXJCb3VuZCB9XG5cdFx0XHRcdF1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRva2VuLWJhc2VkIGZpbHRlciB2YWx1ZXMgdXNpbmcgYSB2YWx1ZSBsaXN0LlxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWUgbGlzdCB1c2VkIGZvciByZXNvbHZpbmcgdmFsdWVzLlxuICogQHBhcmFtIHZhbHVlIFRoZSB0b2tlbi1iYXNlZCBmaWx0ZXIgdmFsdWVzIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiByZXNvbHZlZCBmaWx0ZXIgdmFsdWVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVRva2VuVmFsdWUoXG5cdHZhbHVlTGlzdDogVmFsdWVMaXN0SW5mbyxcblx0dmFsdWU6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uXG4pOiBQcm9taXNlPFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdPiB7XG5cdGNvbnN0IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzIH0gPSB2YWx1ZTtcblx0Y29uc3QgbW9kZWwgPSB2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby4kbW9kZWw7XG5cblx0Ly8gTWFrZSBzdXJlIGFsbCB2YWx1ZXMgYXJlIHJlc29sdmVkLCBldmVuIGlmIHNvbWUgcmVxdWVzdHMgZmFpbC4gSXQgY2FuIGhhcHBlbiB0aGF0IHRoZSBiYWNrZW5kIGNhbm5vdCBwcm9jZXNzIHRoZSAkZmlsdGVyIHF1ZXJpZXMgd2Vcblx0Ly8gcnVuIG9uIHRoZSB2YWx1ZSBsaXN0LCBidXQgd2Ugc3RpbGwgd2FudCB0byBnZXQgdGhlIGZhbGxiYWNrICRzZWFyY2ggcmVzdWx0cy5cblx0bW9kZWwuc2V0Q29udGludWVPbkVycm9yKFwiJGF1dG9cIik7XG5cblx0Y29uc3QgdmFsdWVMaXN0TWV0YW1vZGVsID0gY29udmVydFR5cGVzKG1vZGVsLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3Qga2V5UHJvcGVydHkgPSB2YWx1ZUxpc3RNZXRhbW9kZWwucmVzb2x2ZVBhdGgoYC8ke3ZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke3ZhbHVlTGlzdC5rZXlQYXRofWApPy50YXJnZXQ7XG5cblx0aWYgKCFpc1Byb3BlcnR5KGtleVByb3BlcnR5KSkge1xuXHRcdC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIC0gdGhlIGtleSBwcm9wZXJ0eSBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGUgdmFsdWUgbGlzdCBlbnRpdHlcblx0XHRyZXR1cm4gdW5yZXNvbHZlZFJlc3VsdChbdmFsdWVdKTtcblx0fVxuXG5cdGNvbnN0IHJlc29sdmVkT3BlcmF0b3IgPSBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CID8gRmlsdGVyT3BlcmF0b3IuRVEgOiBvcGVyYXRvcjsgLy8gQlQvTkI6IFVzZSBFUSBmb3IgcmVzb2x2aW5nIHRoZSBsb3dlci91cHBlciBib3VuZHNcblx0Y29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRzZWxlY3RlZFZhbHVlcy5tYXAoYXN5bmMgKHNlbGVjdGVkVmFsdWUpID0+IHJlc29sdmVWYWx1ZVVzaW5nVmFsdWVMaXN0KHZhbHVlTGlzdCwga2V5UHJvcGVydHksIHJlc29sdmVkT3BlcmF0b3IsIHNlbGVjdGVkVmFsdWUpKVxuXHQpO1xuXG5cdHJldHVybiBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CXG5cdFx0PyBoYW5kbGVJbnRlcnZhbHMob3BlcmF0b3IsIHJlc29sdmVkVmFsdWVzKVxuXHRcdDogcmVzb2x2ZWRWYWx1ZXMuZmxhdCgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHVucmVzb2x2ZWQgdmFsdWVzIGluIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgdGhlIEVhc3kgRmlsdGVyIEJhci5cbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBiZSByZXNvbHZlZC5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVucmVzb2x2ZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZXNvbHZlZFJlc3VsdCh2YWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB7XG5cdHJldHVybiB2YWx1ZXMubWFwKCh7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlcyB9KSA9PiAoe1xuXHRcdG9wZXJhdG9yLFxuXHRcdHNlbGVjdGVkVmFsdWVzOiBzZWxlY3RlZFZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyB2YWx1ZSwgZGVzY3JpcHRpb246IHZhbHVlIH0pKVxuXHR9KSkg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
218
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRLZXlQcm9wZXJ0eUZpbHRlciIsInZhbHVlTGlzdCIsImtleVByb3BlcnR5Iiwib3BlcmF0b3IiLCJ2YWx1ZVRvTWF0Y2giLCJmaWx0ZXJWYWx1ZSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiSXNVcHBlckNhc2UiLCJ2YWx1ZU9mIiwidG9VcHBlckNhc2UiLCJGaWx0ZXIiLCJwYXRoIiwia2V5UGF0aCIsInZhbHVlMSIsInJlc29sdmVWYWx1ZVVzaW5nVmFsdWVMaXN0IiwibG9vc2VNYXRjaCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1vZGVsIiwidmFsdWVMaXN0SW5mbyIsIiRtb2RlbCIsIkNvbGxlY3Rpb25QYXRoIiwiJHNlbGVjdCIsImdlbmVyYXRlU2VsZWN0UGFyYW1ldGVyIiwiJHNlYXJjaCIsIkNvbW1vblV0aWxzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInRvU3RyaW5nIiwia2V5UHJvcGVydHlGaWx0ZXIiLCJjaGFyYWN0ZXJMaW1pdE92ZXJmbG93IiwibWF4TGVuZ3RoIiwidmFsdWVIZWxwS2V5UXVlcnkiLCJ2YWx1ZUhlbHBTZWFyY2hRdWVyeSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiYmluZExpc3QiLCJyZXF1ZXN0Q29udGV4dHMiLCJtYXBSZXN1bHQiLCJtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0Iiwic3RhdHVzIiwidmFsdWUiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwic2VsZWN0ZWRWYWx1ZXMiLCJtYXAiLCJkZXNjcmlwdGlvbiIsInJlc3VsdHMiLCJmaWx0ZXJlZFJlc3VsdHMiLCJmaWx0ZXIiLCJyZXN1bHQiLCJ0b0xvd2VyQ2FzZSIsIm5vTWF0Y2giLCJlbnN1cmVEZXNjcmlwdGlvbiIsImNvbnRleHQiLCJkYXRhIiwiZ2V0T2JqZWN0IiwiZGVzY3JpcHRpb25QYXRoIiwiX2V4cG9ydHMiLCJpbmNsdWRlcyIsImpvaW4iLCJoYW5kbGVJbnRlcnZhbHMiLCJyZXNvbHZlZFZhbHVlcyIsInJlc29sdmVkTG93ZXJCb3VuZCIsInJlc29sdmVkVXBwZXJCb3VuZCIsImxvd2VyQm91bmQiLCJsb3dlckJvdW5kVGV4dCIsInVwcGVyQm91bmQiLCJ1cHBlckJvdW5kVGV4dCIsInB1c2giLCJyZXNvbHZlVG9rZW5WYWx1ZSIsInNldENvbnRpbnVlT25FcnJvciIsInZhbHVlTGlzdE1ldGFtb2RlbCIsImNvbnZlcnRUeXBlcyIsImdldE1ldGFNb2RlbCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiaXNQcm9wZXJ0eSIsInVucmVzb2x2ZWRSZXN1bHQiLCJyZXNvbHZlZE9wZXJhdG9yIiwiQlQiLCJOQiIsImFsbCIsInNlbGVjdGVkVmFsdWUiLCJmbGF0IiwidmFsdWVzIiwiX3JlZiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckRhdGFGZXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29kZUxpc3RUeXBlLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uXG59IGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3RFbnRyeSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblxudHlwZSBTY2FsYXJPcGVyYXRvciA9IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xudHlwZSBTY2FsYXJWYWx1ZSA9IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBEYXRlO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGZpbHRlciBmb3IgdGhlIGtleSBwcm9wZXJ0eSBvZiBhIHZhbHVlIGxpc3QuXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGtleVByb3BlcnR5IFRoZSBrZXkgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGxpc3QuXG4gKiBAcGFyYW0gb3BlcmF0b3IgVGhlIGZpbHRlciBvcGVyYXRvci5cbiAqIEBwYXJhbSB2YWx1ZVRvTWF0Y2ggVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMgQSBmaWx0ZXIgZm9yIHRoZSBrZXkgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEtleVByb3BlcnR5RmlsdGVyKFxuXHR2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8sXG5cdGtleVByb3BlcnR5OiBQcm9wZXJ0eSxcblx0b3BlcmF0b3I6IFNjYWxhck9wZXJhdG9yLFxuXHR2YWx1ZVRvTWF0Y2g6IFNjYWxhclZhbHVlXG4pOiBGaWx0ZXIge1xuXHRsZXQgZmlsdGVyVmFsdWUgPSB2YWx1ZVRvTWF0Y2g7XG5cblx0Ly8gSWYgdGhlIGtleSBwcm9wZXJ0eSBpcyBrbm93biB0byBjb250YWluIG9ubHkgdXBwZXJjYXNlIHZhbHVlcywgY29udmVydCB0aGUgZmlsdGVyIHZhbHVlIHRvIHVwcGVyY2FzZSBhcyB3ZWxsXG5cdGlmICh0eXBlb2YgZmlsdGVyVmFsdWUgPT09IFwic3RyaW5nXCIgJiYga2V5UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5Jc1VwcGVyQ2FzZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0ZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBGaWx0ZXIoeyBwYXRoOiB2YWx1ZUxpc3Qua2V5UGF0aCwgb3BlcmF0b3IsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBzaW5nbGUgc2NhbGFyIHZhbHVlIHVzaW5nIGEgdmFsdWUgbGlzdC5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0ga2V5UHJvcGVydHkgVGhlIGtleSBwcm9wZXJ0eSBvZiB0aGUgdmFsdWUgbGlzdC5cbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgZmlsdGVyIG9wZXJhdG9yLlxuICogQHBhcmFtIHZhbHVlVG9NYXRjaCBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcGFyYW0gbG9vc2VNYXRjaCBXaGV0aGVyIHRvIGFwcGx5IGxvb3NlIG1hdGNoaW5nIG9yIG5vdFxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNlbGVjdGVkIHZhbHVlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZhbHVlVXNpbmdWYWx1ZUxpc3QoXG5cdHZhbHVlTGlzdDogVmFsdWVMaXN0SW5mbyxcblx0a2V5UHJvcGVydHk6IFByb3BlcnR5LFxuXHRvcGVyYXRvcjogU2NhbGFyT3BlcmF0b3IsXG5cdHZhbHVlVG9NYXRjaDogU2NhbGFyVmFsdWUsXG5cdGxvb3NlTWF0Y2ggPSBmYWxzZVxuKTogUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb24+IHtcblx0Y29uc3QgbW9kZWwgPSB2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby4kbW9kZWw7XG5cdGNvbnN0IHBhdGggPSBgLyR7dmFsdWVMaXN0LnZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9YDtcblx0Y29uc3QgJHNlbGVjdCA9IGdlbmVyYXRlU2VsZWN0UGFyYW1ldGVyKHZhbHVlTGlzdCk7XG5cdGxldCAkc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybSh2YWx1ZVRvTWF0Y2ggaW5zdGFuY2VvZiBEYXRlID8gdmFsdWVUb01hdGNoLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVRvTWF0Y2gudG9TdHJpbmcoKSk7XG5cdGNvbnN0IGtleVByb3BlcnR5RmlsdGVyID0gZ2V0S2V5UHJvcGVydHlGaWx0ZXIodmFsdWVMaXN0LCBrZXlQcm9wZXJ0eSwgb3BlcmF0b3IsIHZhbHVlVG9NYXRjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgdGhlIHF1ZXJ5IGV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBrZXkgcHJvcGVydHlcblx0Y29uc3QgY2hhcmFjdGVyTGltaXRPdmVyZmxvdyA9ICEkc2VhcmNoIHx8ICRzZWFyY2gubGVuZ3RoID4gKGtleVByb3BlcnR5Lm1heExlbmd0aCA/PyAkc2VhcmNoLmxlbmd0aCk7XG5cblx0aWYgKCFsb29zZU1hdGNoKSB7XG5cdFx0JHNlYXJjaCA9IGBcIiR7JHNlYXJjaH1cImA7IC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRlcm0gaXMgdHJlYXRlZCBhcyBhIHBocmFzZVxuXHR9XG5cdC8vIElmIHF1ZXJ5IGV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBrZXkgcHJvcGVydHksIHdlIGRvbid0IGZpbHRlciBhdCBhbGwsIGFzIGl0IHdvdWxkIGdpdmUgbm8gcmVzdWx0IGFueXdheVxuXHRjb25zdCBbdmFsdWVIZWxwS2V5UXVlcnksIHZhbHVlSGVscFNlYXJjaFF1ZXJ5XSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG5cdFx0IWNoYXJhY3RlckxpbWl0T3ZlcmZsb3cgPyBtb2RlbC5iaW5kTGlzdChwYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwga2V5UHJvcGVydHlGaWx0ZXIsIHsgJHNlbGVjdCB9KS5yZXF1ZXN0Q29udGV4dHMoMCwgMSkgOiBbXSwgLy8gJGZpbHRlciBvbiB0aGUga2V5IHByb3BlcnR5IG9mIHRoZSB2YWx1ZSBsaXN0XG5cdFx0bW9kZWwuYmluZExpc3QocGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkc2VhcmNoOiAkc2VhcmNoLCAkc2VsZWN0IH0pLnJlcXVlc3RDb250ZXh0cygpIC8vICRzZWFyY2ggb24gdGhlIHZhbHVlIGxpc3Rcblx0XSk7XG5cblx0Y29uc3QgbWFwUmVzdWx0ID0gbWFwVmFsdWVMaXN0VG9Db2RlTGlzdCh2YWx1ZUxpc3QsIHRydWUpO1xuXG5cdGlmICh2YWx1ZUhlbHBLZXlRdWVyeS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgJiYgdmFsdWVIZWxwS2V5UXVlcnkudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdC8vIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiB0aGUga2V5IGNvbHVtbjpcblx0XHQvLyAtIElmIHRoZSBvcGVyYXRvciBpcyBFUTogVGhpcyBpbmRpY2F0ZXMgYW4gZXhhY3Qga2V5IG1hdGNoLCBzbyB0aGUgcmV0dXJuZWQgZGF0YSB3aWxsIGJlIHVzZWQuXG5cdFx0Ly8gLSBGb3Igb3RoZXIgb3BlcmF0b3JzOiBPbmUgb3IgbW9yZSBrZXlzIG1hdGNoIHRoZSB2YWx1ZSBiYXNlZCBvbiB0aGUgb3BlcmF0b3IsIHNvIHRoZSBvcmlnaW5hbCBjb25kaXRpb24gaXMgcHJlc2VydmVkLlxuXHRcdHJldHVybiBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuRVFcblx0XHRcdD8geyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IHZhbHVlSGVscEtleVF1ZXJ5LnZhbHVlLm1hcChtYXBSZXN1bHQpIH1cblx0XHRcdDogeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlOiB2YWx1ZVRvTWF0Y2gsIGRlc2NyaXB0aW9uOiB2YWx1ZVRvTWF0Y2ggfV0gfTtcblx0fVxuXG5cdGlmICh2YWx1ZUhlbHBTZWFyY2hRdWVyeS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgJiYgdmFsdWVIZWxwU2VhcmNoUXVlcnkudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdC8vIFRoZSBrZXkgcXVlcnkgZGlkIG5vdCByZXR1cm4gYW55IG1hdGNoZXMsIGJ1dCB0aGUgc2VhcmNoIHF1ZXJ5IGZvdW5kIHJlc3VsdHMuIFVzZSB0aGUgc2VhcmNoIHJlc3VsdHMgaW5zdGVhZC5cblxuXHRcdGxldCByZXN1bHRzID0gdmFsdWVIZWxwU2VhcmNoUXVlcnkudmFsdWUubWFwKG1hcFJlc3VsdCk7XG5cblx0XHRpZiAob3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkVRKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZFJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcihcblx0XHRcdFx0KHJlc3VsdCkgPT4gcmVzdWx0LmRlc2NyaXB0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWVUb01hdGNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuXHRcdFx0KTtcblx0XHRcdC8vIElmIHRoZSBzZWFyY2ggcXVlcnkgaXMgZm91bmQgb25jZS9tdWx0aXBsZSB0aW1lcyBpbiB0aGUgcmVzdWx0ICsgb3BlcmF0b3IgaXMgRVEsIHdlIG5lZWQgdG8gcmV0dXJuIG9ubHkgdGhvc2UgcmVzdWx0c1xuXHRcdFx0aWYgKGZpbHRlcmVkUmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlc3VsdHMgPSBmaWx0ZXJlZFJlc3VsdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvcGVyYXRvcixcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiByZXN1bHRzXG5cdFx0fTtcblx0fVxuXG5cdC8vIE5vIG1hdGNoZXMgd2VyZSBmb3VuZCBpbiBlaXRoZXIgcXVlcnk7IHRoZSBvcmlnaW5hbCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0cmV0dXJuIHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbeyB2YWx1ZTogdmFsdWVUb01hdGNoLCBkZXNjcmlwdGlvbjogdmFsdWVUb01hdGNoIH1dLCBub01hdGNoOiB0cnVlIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFwcGluZyBmdW5jdGlvbiBmb3IgbWFwcGluZyBhIHZhbHVlIGxpc3QgcXVlcnkgcmVzdWx0IHRvIGEgY29kZSBsaXN0LlxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYW5kIGRlc2NyaXB0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZW5zdXJlRGVzY3JpcHRpb24gV2hldGhlciB0byBlbnN1cmUgdGhhdCB0aGUgZGVzY3JpcHRpb24gaXMgYWx3YXlzIHJldHVybmVkLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IG1hcHMgYSBzaW5nbGUgdmFsdWUgbGlzdCBxdWVyeSByZXN1bHQgdG8gYSBjb2RlIGxpc3QgZW50cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0KHZhbHVlTGlzdDogVmFsdWVMaXN0SW5mbywgZW5zdXJlRGVzY3JpcHRpb246IHRydWUpOiAoY29udGV4dDogQ29udGV4dCkgPT4gQ29kZUxpc3RUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFZhbHVlTGlzdFRvQ29kZUxpc3QodmFsdWVMaXN0OiBWYWx1ZUxpc3RJbmZvLCBlbnN1cmVEZXNjcmlwdGlvbj86IGZhbHNlKTogKGNvbnRleHQ6IENvbnRleHQpID0+IENvZGVMaXN0RW50cnk7XG5leHBvcnQgZnVuY3Rpb24gbWFwVmFsdWVMaXN0VG9Db2RlTGlzdChcblx0dmFsdWVMaXN0OiBWYWx1ZUxpc3RJbmZvLFxuXHRlbnN1cmVEZXNjcmlwdGlvbiA9IGZhbHNlXG4pOiAoY29udGV4dDogQ29udGV4dCkgPT4gQ29kZUxpc3RFbnRyeSB8IENvZGVMaXN0VHlwZSB7XG5cdHJldHVybiAoY29udGV4dDogQ29udGV4dCk6IENvZGVMaXN0RW50cnkgPT4ge1xuXHRcdGNvbnN0IGRhdGEgPSBjb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IHZhbHVlID0gZGF0YVt2YWx1ZUxpc3Qua2V5UGF0aF07XG5cdFx0Y29uc3QgZGVzY3JpcHRpb24gPSB2YWx1ZUxpc3QuZGVzY3JpcHRpb25QYXRoID8gZGF0YVt2YWx1ZUxpc3QuZGVzY3JpcHRpb25QYXRoXSA6IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4geyB2YWx1ZSwgZGVzY3JpcHRpb246IGVuc3VyZURlc2NyaXB0aW9uID8gZGVzY3JpcHRpb24gPz8gdmFsdWUgOiBkZXNjcmlwdGlvbiB9O1xuXHR9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgJHNlbGVjdCBwYXJhbWV0ZXIgZm9yIGEgdmFsdWUgbGlzdCBxdWVyeS5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24uXG4gKiBAcmV0dXJucyBUaGUgJHNlbGVjdCBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcih2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8pOiBzdHJpbmcge1xuXHRyZXR1cm4gW3ZhbHVlTGlzdC5rZXlQYXRoLCB2YWx1ZUxpc3QuZGVzY3JpcHRpb25QYXRoXS5maWx0ZXIoKHBhdGgpID0+IHBhdGggJiYgIXBhdGguaW5jbHVkZXMoXCIvXCIpKS5qb2luKFwiLFwiKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJ2YWxzKFxuXHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQixcblx0cmVzb2x2ZWRWYWx1ZXM6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG4pOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB7XG5cdGNvbnN0IFtyZXNvbHZlZExvd2VyQm91bmQsIHJlc29sdmVkVXBwZXJCb3VuZF0gPSByZXNvbHZlZFZhbHVlcztcblxuXHRjb25zdCByZXN1bHQ6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdID0gW107XG5cdGZvciAoY29uc3QgeyB2YWx1ZTogbG93ZXJCb3VuZCwgZGVzY3JpcHRpb246IGxvd2VyQm91bmRUZXh0IH0gb2YgcmVzb2x2ZWRMb3dlckJvdW5kLnNlbGVjdGVkVmFsdWVzKSB7XG5cdFx0Zm9yIChjb25zdCB7IHZhbHVlOiB1cHBlckJvdW5kLCBkZXNjcmlwdGlvbjogdXBwZXJCb3VuZFRleHQgfSBvZiByZXNvbHZlZFVwcGVyQm91bmQuc2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0b3BlcmF0b3IsXG5cdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbXG5cdFx0XHRcdFx0eyB2YWx1ZTogbG93ZXJCb3VuZCwgZGVzY3JpcHRpb246IGxvd2VyQm91bmRUZXh0ID8/IGxvd2VyQm91bmQgfSxcblx0XHRcdFx0XHR7IHZhbHVlOiB1cHBlckJvdW5kLCBkZXNjcmlwdGlvbjogdXBwZXJCb3VuZFRleHQgPz8gdXBwZXJCb3VuZCB9XG5cdFx0XHRcdF1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRva2VuLWJhc2VkIGZpbHRlciB2YWx1ZXMgdXNpbmcgYSB2YWx1ZSBsaXN0LlxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWUgbGlzdCB1c2VkIGZvciByZXNvbHZpbmcgdmFsdWVzLlxuICogQHBhcmFtIHZhbHVlIFRoZSB0b2tlbi1iYXNlZCBmaWx0ZXIgdmFsdWVzIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gbG9vc2VNYXRjaCBXaGV0aGVyIHRvIHBlcmZvcm0gYSBsb29zZSBtYXRjaCBvbiB0aGUgdmFsdWVzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgcmVzb2x2ZWQgZmlsdGVyIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUb2tlblZhbHVlKFxuXHR2YWx1ZUxpc3Q6IFZhbHVlTGlzdEluZm8sXG5cdHZhbHVlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0bG9vc2VNYXRjaCA9IGZhbHNlXG4pOiBQcm9taXNlPFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdPiB7XG5cdGNvbnN0IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzIH0gPSB2YWx1ZTtcblx0Y29uc3QgbW9kZWwgPSB2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby4kbW9kZWw7XG5cblx0Ly8gTWFrZSBzdXJlIGFsbCB2YWx1ZXMgYXJlIHJlc29sdmVkLCBldmVuIGlmIHNvbWUgcmVxdWVzdHMgZmFpbC4gSXQgY2FuIGhhcHBlbiB0aGF0IHRoZSBiYWNrZW5kIGNhbm5vdCBwcm9jZXNzIHRoZSAkZmlsdGVyIHF1ZXJpZXMgd2Vcblx0Ly8gcnVuIG9uIHRoZSB2YWx1ZSBsaXN0LCBidXQgd2Ugc3RpbGwgd2FudCB0byBnZXQgdGhlIGZhbGxiYWNrICRzZWFyY2ggcmVzdWx0cy5cblx0bW9kZWwuc2V0Q29udGludWVPbkVycm9yKFwiJGF1dG9cIik7XG5cblx0Y29uc3QgdmFsdWVMaXN0TWV0YW1vZGVsID0gY29udmVydFR5cGVzKG1vZGVsLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3Qga2V5UHJvcGVydHkgPSB2YWx1ZUxpc3RNZXRhbW9kZWwucmVzb2x2ZVBhdGgoYC8ke3ZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke3ZhbHVlTGlzdC5rZXlQYXRofWApPy50YXJnZXQ7XG5cblx0aWYgKCFpc1Byb3BlcnR5KGtleVByb3BlcnR5KSkge1xuXHRcdC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIC0gdGhlIGtleSBwcm9wZXJ0eSBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGUgdmFsdWUgbGlzdCBlbnRpdHlcblx0XHRyZXR1cm4gdW5yZXNvbHZlZFJlc3VsdChbdmFsdWVdKTtcblx0fVxuXG5cdGNvbnN0IHJlc29sdmVkT3BlcmF0b3IgPSBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CID8gRmlsdGVyT3BlcmF0b3IuRVEgOiBvcGVyYXRvcjsgLy8gQlQvTkI6IFVzZSBFUSBmb3IgcmVzb2x2aW5nIHRoZSBsb3dlci91cHBlciBib3VuZHNcblx0Y29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRzZWxlY3RlZFZhbHVlcy5tYXAoYXN5bmMgKHNlbGVjdGVkVmFsdWUpID0+XG5cdFx0XHRyZXNvbHZlVmFsdWVVc2luZ1ZhbHVlTGlzdCh2YWx1ZUxpc3QsIGtleVByb3BlcnR5LCByZXNvbHZlZE9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlLCBsb29zZU1hdGNoKVxuXHRcdClcblx0KTtcblxuXHRyZXR1cm4gb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQlxuXHRcdD8gaGFuZGxlSW50ZXJ2YWxzKG9wZXJhdG9yLCByZXNvbHZlZFZhbHVlcylcblx0XHQ6IHJlc29sdmVkVmFsdWVzLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB1bnJlc29sdmVkIHZhbHVlcyBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBFYXN5IEZpbHRlciBCYXIuXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgcmVzb2x2ZWQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bnJlc29sdmVkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXN1bHQodmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKTogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10ge1xuXHRyZXR1cm4gdmFsdWVzLm1hcCgoeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXMgfSkgPT4gKHtcblx0XHRvcGVyYXRvcixcblx0XHRzZWxlY3RlZFZhbHVlczogc2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgdmFsdWUsIGRlc2NyaXB0aW9uOiB2YWx1ZSB9KSlcblx0fSkpIGFzIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSxvQkFBb0JBLENBQzVCQyxTQUF3QixFQUN4QkMsV0FBcUIsRUFDckJDLFFBQXdCLEVBQ3hCQyxZQUF5QixFQUNoQjtJQUNULElBQUlDLFdBQVcsR0FBR0QsWUFBWTs7SUFFOUI7SUFDQSxJQUFJLE9BQU9DLFdBQVcsS0FBSyxRQUFRLElBQUlILFdBQVcsQ0FBQ0ksV0FBVyxDQUFDQyxNQUFNLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7TUFDdkdKLFdBQVcsR0FBR0EsV0FBVyxDQUFDSyxXQUFXLENBQUMsQ0FBQztJQUN4QztJQUVBLE9BQU8sSUFBSUMsTUFBTSxDQUFDO01BQUVDLElBQUksRUFBRVgsU0FBUyxDQUFDWSxPQUFPO01BQUVWLFFBQVE7TUFBRVcsTUFBTSxFQUFFVDtJQUFZLENBQUMsQ0FBQztFQUM5RTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxlQUFlVSwwQkFBMEJBLENBQ3hDZCxTQUF3QixFQUN4QkMsV0FBcUIsRUFDckJDLFFBQXdCLEVBQ3hCQyxZQUF5QixFQUVvQjtJQUFBLElBRDdDWSxVQUFVLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFFbEIsTUFBTUcsS0FBSyxHQUFHbkIsU0FBUyxDQUFDb0IsYUFBYSxDQUFDQyxNQUFNO0lBQzVDLE1BQU1WLElBQUksR0FBRyxJQUFJWCxTQUFTLENBQUNvQixhQUFhLENBQUNFLGNBQWMsRUFBRTtJQUN6RCxNQUFNQyxPQUFPLEdBQUdDLHVCQUF1QixDQUFDeEIsU0FBUyxDQUFDO0lBQ2xELElBQUl5QixPQUFPLEdBQUdDLFdBQVcsQ0FBQ0MsbUJBQW1CLENBQUN4QixZQUFZLFlBQVl5QixJQUFJLEdBQUd6QixZQUFZLENBQUMwQixXQUFXLENBQUMsQ0FBQyxHQUFHMUIsWUFBWSxDQUFDMkIsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsSSxNQUFNQyxpQkFBaUIsR0FBR2hDLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxZQUFZLENBQUM7O0lBRTlGO0lBQ0EsTUFBTTZCLHNCQUFzQixHQUFHLENBQUNQLE9BQU8sSUFBSUEsT0FBTyxDQUFDUixNQUFNLElBQUloQixXQUFXLENBQUNnQyxTQUFTLElBQUlSLE9BQU8sQ0FBQ1IsTUFBTSxDQUFDO0lBRXJHLElBQUksQ0FBQ0YsVUFBVSxFQUFFO01BQ2hCVSxPQUFPLEdBQUcsSUFBSUEsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUMzQjtJQUNBO0lBQ0EsTUFBTSxDQUFDUyxpQkFBaUIsRUFBRUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNQyxPQUFPLENBQUNDLFVBQVUsQ0FBQyxDQUMxRSxDQUFDTCxzQkFBc0IsR0FBR2IsS0FBSyxDQUFDbUIsUUFBUSxDQUFDM0IsSUFBSSxFQUFFTyxTQUFTLEVBQUVBLFNBQVMsRUFBRWEsaUJBQWlCLEVBQUU7TUFBRVI7SUFBUSxDQUFDLENBQUMsQ0FBQ2dCLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtJQUFFO0lBQ2pJcEIsS0FBSyxDQUFDbUIsUUFBUSxDQUFDM0IsSUFBSSxFQUFFTyxTQUFTLEVBQUVBLFNBQVMsRUFBRUEsU0FBUyxFQUFFO01BQUVPLE9BQU8sRUFBRUEsT0FBTztNQUFFRjtJQUFRLENBQUMsQ0FBQyxDQUFDZ0IsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQ3ZHLENBQUM7SUFFRixNQUFNQyxTQUFTLEdBQUdDLHNCQUFzQixDQUFDekMsU0FBUyxFQUFFLElBQUksQ0FBQztJQUV6RCxJQUFJa0MsaUJBQWlCLENBQUNRLE1BQU0sS0FBSyxXQUFXLElBQUlSLGlCQUFpQixDQUFDUyxLQUFLLENBQUMxQixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ25GO01BQ0E7TUFDQTtNQUNBLE9BQU9mLFFBQVEsS0FBSzBDLGNBQWMsQ0FBQ0MsRUFBRSxHQUNsQztRQUFFM0MsUUFBUTtRQUFFNEMsY0FBYyxFQUFFWixpQkFBaUIsQ0FBQ1MsS0FBSyxDQUFDSSxHQUFHLENBQUNQLFNBQVM7TUFBRSxDQUFDLEdBQ3BFO1FBQUV0QyxRQUFRO1FBQUU0QyxjQUFjLEVBQUUsQ0FBQztVQUFFSCxLQUFLLEVBQUV4QyxZQUFZO1VBQUU2QyxXQUFXLEVBQUU3QztRQUFhLENBQUM7TUFBRSxDQUFDO0lBQ3RGO0lBRUEsSUFBSWdDLG9CQUFvQixDQUFDTyxNQUFNLEtBQUssV0FBVyxJQUFJUCxvQkFBb0IsQ0FBQ1EsS0FBSyxDQUFDMUIsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN6Rjs7TUFFQSxJQUFJZ0MsT0FBTyxHQUFHZCxvQkFBb0IsQ0FBQ1EsS0FBSyxDQUFDSSxHQUFHLENBQUNQLFNBQVMsQ0FBQztNQUV2RCxJQUFJdEMsUUFBUSxLQUFLMEMsY0FBYyxDQUFDQyxFQUFFLEVBQUU7UUFDbkMsTUFBTUssZUFBZSxHQUFHRCxPQUFPLENBQUNFLE1BQU0sQ0FDcENDLE1BQU0sSUFBS0EsTUFBTSxDQUFDSixXQUFXLENBQUNsQixRQUFRLENBQUMsQ0FBQyxDQUFDdUIsV0FBVyxDQUFDLENBQUMsS0FBS2xELFlBQVksQ0FBQzJCLFFBQVEsQ0FBQyxDQUFDLENBQUN1QixXQUFXLENBQUMsQ0FDakcsQ0FBQztRQUNEO1FBQ0EsSUFBSUgsZUFBZSxDQUFDakMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUMvQmdDLE9BQU8sR0FBR0MsZUFBZTtRQUMxQjtNQUNEO01BQ0EsT0FBTztRQUNOaEQsUUFBUTtRQUNSNEMsY0FBYyxFQUFFRztNQUNqQixDQUFDO0lBQ0Y7O0lBRUE7SUFDQSxPQUFPO01BQUUvQyxRQUFRO01BQUU0QyxjQUFjLEVBQUUsQ0FBQztRQUFFSCxLQUFLLEVBQUV4QyxZQUFZO1FBQUU2QyxXQUFXLEVBQUU3QztNQUFhLENBQUMsQ0FBQztNQUFFbUQsT0FBTyxFQUFFO0lBQUssQ0FBQztFQUN6Rzs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBR08sU0FBU2Isc0JBQXNCQSxDQUNyQ3pDLFNBQXdCLEVBRTZCO0lBQUEsSUFEckR1RCxpQkFBaUIsR0FBQXZDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFFekIsT0FBUXdDLE9BQWdCLElBQW9CO01BQzNDLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDRSxTQUFTLENBQUMsQ0FBQztNQUNoQyxNQUFNZixLQUFLLEdBQUdjLElBQUksQ0FBQ3pELFNBQVMsQ0FBQ1ksT0FBTyxDQUFDO01BQ3JDLE1BQU1vQyxXQUFXLEdBQUdoRCxTQUFTLENBQUMyRCxlQUFlLEdBQUdGLElBQUksQ0FBQ3pELFNBQVMsQ0FBQzJELGVBQWUsQ0FBQyxHQUFHekMsU0FBUztNQUMzRixPQUFPO1FBQUV5QixLQUFLO1FBQUVLLFdBQVcsRUFBRU8saUJBQWlCLEdBQUdQLFdBQVcsSUFBSUwsS0FBSyxHQUFHSztNQUFZLENBQUM7SUFDdEYsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQVksUUFBQSxDQUFBbkIsc0JBQUEsR0FBQUEsc0JBQUE7RUFLTyxTQUFTakIsdUJBQXVCQSxDQUFDeEIsU0FBd0IsRUFBVTtJQUN6RSxPQUFPLENBQUNBLFNBQVMsQ0FBQ1ksT0FBTyxFQUFFWixTQUFTLENBQUMyRCxlQUFlLENBQUMsQ0FBQ1IsTUFBTSxDQUFFeEMsSUFBSSxJQUFLQSxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDa0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDOUc7RUFBQ0YsUUFBQSxDQUFBcEMsdUJBQUEsR0FBQUEsdUJBQUE7RUFFRCxTQUFTdUMsZUFBZUEsQ0FDdkI3RCxRQUErQyxFQUMvQzhELGNBQW1ELEVBQ2I7SUFDdEMsTUFBTSxDQUFDQyxrQkFBa0IsRUFBRUMsa0JBQWtCLENBQUMsR0FBR0YsY0FBYztJQUUvRCxNQUFNWixNQUEyQyxHQUFHLEVBQUU7SUFDdEQsS0FBSyxNQUFNO01BQUVULEtBQUssRUFBRXdCLFVBQVU7TUFBRW5CLFdBQVcsRUFBRW9CO0lBQWUsQ0FBQyxJQUFJSCxrQkFBa0IsQ0FBQ25CLGNBQWMsRUFBRTtNQUNuRyxLQUFLLE1BQU07UUFBRUgsS0FBSyxFQUFFMEIsVUFBVTtRQUFFckIsV0FBVyxFQUFFc0I7TUFBZSxDQUFDLElBQUlKLGtCQUFrQixDQUFDcEIsY0FBYyxFQUFFO1FBQ25HTSxNQUFNLENBQUNtQixJQUFJLENBQUM7VUFDWHJFLFFBQVE7VUFDUjRDLGNBQWMsRUFBRSxDQUNmO1lBQUVILEtBQUssRUFBRXdCLFVBQVU7WUFBRW5CLFdBQVcsRUFBRW9CLGNBQWMsSUFBSUQ7VUFBVyxDQUFDLEVBQ2hFO1lBQUV4QixLQUFLLEVBQUUwQixVQUFVO1lBQUVyQixXQUFXLEVBQUVzQixjQUFjLElBQUlEO1VBQVcsQ0FBQztRQUVsRSxDQUFDLENBQUM7TUFDSDtJQUNEO0lBQ0EsT0FBT2pCLE1BQU07RUFDZDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLGVBQWVvQixpQkFBaUJBLENBQ3RDeEUsU0FBd0IsRUFDeEIyQyxLQUFvQyxFQUVXO0lBQUEsSUFEL0M1QixVQUFVLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFFbEIsTUFBTTtNQUFFZCxRQUFRO01BQUU0QztJQUFlLENBQUMsR0FBR0gsS0FBSztJQUMxQyxNQUFNeEIsS0FBSyxHQUFHbkIsU0FBUyxDQUFDb0IsYUFBYSxDQUFDQyxNQUFNOztJQUU1QztJQUNBO0lBQ0FGLEtBQUssQ0FBQ3NELGtCQUFrQixDQUFDLE9BQU8sQ0FBQztJQUVqQyxNQUFNQyxrQkFBa0IsR0FBR0MsWUFBWSxDQUFDeEQsS0FBSyxDQUFDeUQsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNM0UsV0FBVyxHQUFHeUUsa0JBQWtCLENBQUNHLFdBQVcsQ0FBQyxJQUFJN0UsU0FBUyxDQUFDb0IsYUFBYSxDQUFDRSxjQUFjLElBQUl0QixTQUFTLENBQUNZLE9BQU8sRUFBRSxDQUFDLEVBQUVrRSxNQUFNO0lBRTdILElBQUksQ0FBQ0MsVUFBVSxDQUFDOUUsV0FBVyxDQUFDLEVBQUU7TUFDN0I7TUFDQSxPQUFPK0UsZ0JBQWdCLENBQUMsQ0FBQ3JDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDO0lBRUEsTUFBTXNDLGdCQUFnQixHQUFHL0UsUUFBUSxLQUFLMEMsY0FBYyxDQUFDc0MsRUFBRSxJQUFJaEYsUUFBUSxLQUFLMEMsY0FBYyxDQUFDdUMsRUFBRSxHQUFHdkMsY0FBYyxDQUFDQyxFQUFFLEdBQUczQyxRQUFRLENBQUMsQ0FBQztJQUMxSCxNQUFNOEQsY0FBYyxHQUFHLE1BQU01QixPQUFPLENBQUNnRCxHQUFHLENBQ3ZDdEMsY0FBYyxDQUFDQyxHQUFHLENBQUMsTUFBT3NDLGFBQWEsSUFDdEN2RSwwQkFBMEIsQ0FBQ2QsU0FBUyxFQUFFQyxXQUFXLEVBQUVnRixnQkFBZ0IsRUFBRUksYUFBYSxFQUFFdEUsVUFBVSxDQUMvRixDQUNELENBQUM7SUFFRCxPQUFPYixRQUFRLEtBQUswQyxjQUFjLENBQUNzQyxFQUFFLElBQUloRixRQUFRLEtBQUswQyxjQUFjLENBQUN1QyxFQUFFLEdBQ3BFcEIsZUFBZSxDQUFDN0QsUUFBUSxFQUFFOEQsY0FBYyxDQUFDLEdBQ3pDQSxjQUFjLENBQUNzQixJQUFJLENBQUMsQ0FBQztFQUN6Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkExQixRQUFBLENBQUFZLGlCQUFBLEdBQUFBLGlCQUFBO0VBS08sU0FBU1EsZ0JBQWdCQSxDQUFDTyxNQUF1QyxFQUF1QztJQUM5RyxPQUFPQSxNQUFNLENBQUN4QyxHQUFHLENBQUN5QyxJQUFBO01BQUEsSUFBQztRQUFFdEYsUUFBUTtRQUFFNEM7TUFBZSxDQUFDLEdBQUEwQyxJQUFBO01BQUEsT0FBTTtRQUNwRHRGLFFBQVE7UUFDUjRDLGNBQWMsRUFBRUEsY0FBYyxDQUFDQyxHQUFHLENBQUVKLEtBQUssS0FBTTtVQUFFQSxLQUFLO1VBQUVLLFdBQVcsRUFBRUw7UUFBTSxDQUFDLENBQUM7TUFDOUUsQ0FBQztJQUFBLENBQUMsQ0FBQztFQUNKO0VBQUNpQixRQUFBLENBQUFvQixnQkFBQSxHQUFBQSxnQkFBQTtFQUFBLE9BQUFwQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -46,27 +46,32 @@ function getKeyPropertyFilter(
46
46
  * @param keyProperty The key property of the value list.
47
47
  * @param operator The filter operator.
48
48
  * @param valueToMatch The value to match.
49
+ * @param looseMatch Whether to apply loose matching or not
49
50
  * @returns A promise that resolves to the selected values.
50
51
  */
51
52
  async function resolveValueUsingValueList(
52
53
  valueList: ValueListInfo,
53
54
  keyProperty: Property,
54
55
  operator: ScalarOperator,
55
- valueToMatch: ScalarValue
56
+ valueToMatch: ScalarValue,
57
+ looseMatch = false
56
58
  ): Promise<ValueHelpSelectedValuesDefinition> {
57
59
  const model = valueList.valueListInfo.$model;
58
60
  const path = `/${valueList.valueListInfo.CollectionPath}`;
59
61
  const $select = generateSelectParameter(valueList);
60
- const $search = CommonUtils.normalizeSearchTerm(valueToMatch instanceof Date ? valueToMatch.toISOString() : valueToMatch.toString());
62
+ let $search = CommonUtils.normalizeSearchTerm(valueToMatch instanceof Date ? valueToMatch.toISOString() : valueToMatch.toString());
61
63
  const keyPropertyFilter = getKeyPropertyFilter(valueList, keyProperty, operator, valueToMatch);
62
64
 
63
65
  // Check if the query exceeds the maximum length of the key property
64
66
  const characterLimitOverflow = !$search || $search.length > (keyProperty.maxLength ?? $search.length);
65
67
 
68
+ if (!looseMatch) {
69
+ $search = `"${$search}"`; // Ensure the search term is treated as a phrase
70
+ }
66
71
  // If query exceeds the maximum length of the key property, we don't filter at all, as it would give no result anyway
67
72
  const [valueHelpKeyQuery, valueHelpSearchQuery] = await Promise.allSettled([
68
73
  !characterLimitOverflow ? model.bindList(path, undefined, undefined, keyPropertyFilter, { $select }).requestContexts(0, 1) : [], // $filter on the key property of the value list
69
- model.bindList(path, undefined, undefined, undefined, { $search: `"${$search}"`, $select }).requestContexts() // $search on the value list
74
+ model.bindList(path, undefined, undefined, undefined, { $search: $search, $select }).requestContexts() // $search on the value list
70
75
  ]);
71
76
 
72
77
  const mapResult = mapValueListToCodeList(valueList, true);
@@ -158,11 +163,13 @@ function handleIntervals(
158
163
  * Resolves token-based filter values using a value list.
159
164
  * @param valueList The value list used for resolving values.
160
165
  * @param value The token-based filter values to resolve.
166
+ * @param looseMatch Whether to perform a loose match on the values.
161
167
  * @returns A promise that resolves to an array of resolved filter values.
162
168
  */
163
169
  export async function resolveTokenValue(
164
170
  valueList: ValueListInfo,
165
- value: TokenSelectedValuesDefinition
171
+ value: TokenSelectedValuesDefinition,
172
+ looseMatch = false
166
173
  ): Promise<ValueHelpSelectedValuesDefinition[]> {
167
174
  const { operator, selectedValues } = value;
168
175
  const model = valueList.valueListInfo.$model;
@@ -181,7 +188,9 @@ export async function resolveTokenValue(
181
188
 
182
189
  const resolvedOperator = operator === FilterOperator.BT || operator === FilterOperator.NB ? FilterOperator.EQ : operator; // BT/NB: Use EQ for resolving the lower/upper bounds
183
190
  const resolvedValues = await Promise.all(
184
- selectedValues.map(async (selectedValue) => resolveValueUsingValueList(valueList, keyProperty, resolvedOperator, selectedValue))
191
+ selectedValues.map(async (selectedValue) =>
192
+ resolveValueUsingValueList(valueList, keyProperty, resolvedOperator, selectedValue, looseMatch)
193
+ )
185
194
  );
186
195
 
187
196
  return operator === FilterOperator.BT || operator === FilterOperator.NB
@@ -81,7 +81,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
81
81
  press: async () => {
82
82
  try {
83
83
  await environmentService.prepareFeature("SmartSummarize");
84
- const library = await __ui5_require_async("ux/eng/fioriai/reuse/library");
84
+ const library = await __ui5_require_async("ux/eng/fioriai/reuse/summary/SmartSummary");
85
85
  await library.summarize({
86
86
  view: CommonUtils.getTargetView(this)
87
87
  });
@@ -114,4 +114,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
114
114
  _exports = SummarizationButton;
115
115
  return _exports;
116
116
  }, false);
117
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdW1tYXJpemF0aW9uQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsInJlcXVpcmVkIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiZmVzclN0ZXBOYW1lIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsImdldE92ZXJmbG93VG9vbGJhckNvbmZpZyIsImNhbk92ZXJmbG93IiwiZW52aXJvbm1lbnRTZXJ2aWNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJidXR0b24iLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsIlNtYXJ0U3VtbWFyaXplIiwiX2pzeCIsIkJ1dHRvbiIsImlkIiwiY3JlYXRlSWQiLCJ0ZXh0IiwiaWNvbiIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsInByZXNzIiwicHJlcGFyZUZlYXR1cmUiLCJsaWJyYXJ5IiwiX191aTVfcmVxdWlyZV9hc3luYyIsInN1bW1hcml6ZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJlcnJvciIsIkxvZyIsInNldExheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSIsIkhpZ2giLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN1bW1hcml6YXRpb25CdXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5cbi8qKlxuICogU3VtbWFyaXphdGlvbiBidXR0b24gYnVpbGRpbmcgYmxvY2suXG4gKlxuICogSWYgdGhlIHN1bW1hcml6YXRpb24gZmVhdHVyZSBpcyBhdmFpbGFibGUsIHRoaXMgYnVpbGRpbmcgYmxvY2sgd2lsbCByZW5kZXIgYSBidXR0b24gdGhhdCB0cmlnZ2VycyB0aGUgc3VtbWFyaXphdGlvbiBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1hcml6YXRpb25CdXR0b24gZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrIHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC5tLklPdmVyZmxvd1Rvb2xiYXJDb250ZW50XCIpXG5cdF9faW1wbGVtZW50c19fc2FwX21fSU92ZXJmbG93VG9vbGJhckNvbnRlbnQgPSB0cnVlO1xuXHQvKipcblx0ICogVGhlIElEIG9mIHRoZSBidXR0b24uXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9KVxuXHRwdWJsaWMgaWQhOiBzdHJpbmc7XG5cblx0ZmVzclN0ZXBOYW1lID0gXCJmZTQ6c3VtOnN1bW1hcml6ZVwiO1xuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdH1cblxuXHRnZXRPdmVyZmxvd1Rvb2xiYXJDb25maWcoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2FuT3ZlcmZsb3c6IHRydWVcblx0XHR9O1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0bGV0IGJ1dHRvbjtcblx0XHRpZiAoZW52aXJvbm1lbnRTZXJ2aWNlPy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5TbWFydFN1bW1hcml6ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0YnV0dG9uID0gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJidXR0b25cIil9XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGVcIlxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+U1VNTUFSSVpFfVwiXG5cdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vYWlcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuR2hvc3R9XG5cdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGVudmlyb25tZW50U2VydmljZS5wcmVwYXJlRmVhdHVyZShcIlNtYXJ0U3VtbWFyaXplXCIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsaWJyYXJ5ID0gYXdhaXQgaW1wb3J0KFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvbGlicmFyeVwiKTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbGlicmFyeS5zdW1tYXJpemUoeyB2aWV3OiBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpIH0pO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiU3VtbWFyaXphdGlvbiBmYWlsZWRcIiwgZXJyb3IgYXMgRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD48L0J1dHRvbj5cblx0XHRcdCk7XG5cdFx0XHR0aGlzLnNldExheW91dERhdGEoPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e092ZXJmbG93VG9vbGJhclByaW9yaXR5LkhpZ2h9IC8+KTtcblx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShidXR0b24sIFwicHJlc3NcIiwgdGhpcy5mZXNyU3RlcE5hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYnV0dG9uO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQSxJQU1xQkEsbUJBQW1CLElBQUFDLElBQUEsR0FEdkNDLGNBQWMsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFBQyxLQUFBLEdBRXJEQyxrQkFB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
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdW1tYXJpemF0aW9uQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsInJlcXVpcmVkIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiZmVzclN0ZXBOYW1lIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsImdldE92ZXJmbG93VG9vbGJhckNvbmZpZyIsImNhbk92ZXJmbG93IiwiZW52aXJvbm1lbnRTZXJ2aWNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJidXR0b24iLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsIlNtYXJ0U3VtbWFyaXplIiwiX2pzeCIsIkJ1dHRvbiIsImlkIiwiY3JlYXRlSWQiLCJ0ZXh0IiwiaWNvbiIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsInByZXNzIiwicHJlcGFyZUZlYXR1cmUiLCJsaWJyYXJ5IiwiX191aTVfcmVxdWlyZV9hc3luYyIsInN1bW1hcml6ZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJlcnJvciIsIkxvZyIsInNldExheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSIsIkhpZ2giLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN1bW1hcml6YXRpb25CdXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5cbi8qKlxuICogU3VtbWFyaXphdGlvbiBidXR0b24gYnVpbGRpbmcgYmxvY2suXG4gKlxuICogSWYgdGhlIHN1bW1hcml6YXRpb24gZmVhdHVyZSBpcyBhdmFpbGFibGUsIHRoaXMgYnVpbGRpbmcgYmxvY2sgd2lsbCByZW5kZXIgYSBidXR0b24gdGhhdCB0cmlnZ2VycyB0aGUgc3VtbWFyaXphdGlvbiBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1hcml6YXRpb25CdXR0b24gZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrIHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC5tLklPdmVyZmxvd1Rvb2xiYXJDb250ZW50XCIpXG5cdF9faW1wbGVtZW50c19fc2FwX21fSU92ZXJmbG93VG9vbGJhckNvbnRlbnQgPSB0cnVlO1xuXHQvKipcblx0ICogVGhlIElEIG9mIHRoZSBidXR0b24uXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9KVxuXHRwdWJsaWMgaWQhOiBzdHJpbmc7XG5cblx0ZmVzclN0ZXBOYW1lID0gXCJmZTQ6c3VtOnN1bW1hcml6ZVwiO1xuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdH1cblxuXHRnZXRPdmVyZmxvd1Rvb2xiYXJDb25maWcoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2FuT3ZlcmZsb3c6IHRydWVcblx0XHR9O1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0bGV0IGJ1dHRvbjtcblx0XHRpZiAoZW52aXJvbm1lbnRTZXJ2aWNlPy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5TbWFydFN1bW1hcml6ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0YnV0dG9uID0gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJidXR0b25cIil9XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGVcIlxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+U1VNTUFSSVpFfVwiXG5cdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vYWlcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuR2hvc3R9XG5cdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGVudmlyb25tZW50U2VydmljZS5wcmVwYXJlRmVhdHVyZShcIlNtYXJ0U3VtbWFyaXplXCIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsaWJyYXJ5ID0gYXdhaXQgaW1wb3J0KFwidXgvZW5nL2Zpb3JpYWkvcmV1c2Uvc3VtbWFyeS9TbWFydFN1bW1hcnlcIik7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGxpYnJhcnkuc3VtbWFyaXplKHsgdmlldzogQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSB9KTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIlN1bW1hcml6YXRpb24gZmFpbGVkXCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ+PC9CdXR0b24+XG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5zZXRMYXlvdXREYXRhKDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eS5IaWdofSAvPik7XG5cdFx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoYnV0dG9uLCBcInByZXNzXCIsIHRoaXMuZmVzclN0ZXBOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ1dHRvbjtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNcUJBLG1CQUFtQixJQUFBQyxJQUFBLEdBRHZDQyxjQUFjLENBQUMsc0NBQXNDLENBQUMsRUFBQUMsS0FB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