@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
@@ -49,6 +49,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
49
49
  }), _dec9 = property({
50
50
  type: "boolean"
51
51
  }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
52
+ /**
53
+ * Timer to ensure that if the button groups are not added we restart the process.
54
+ */
55
+
52
56
  function RichTextEditorBlock(properties, others) {
53
57
  var _this;
54
58
  properties._isInEditMode = compileExpression(UI.IsEditable);
@@ -134,10 +138,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
134
138
  return [];
135
139
  };
136
140
  _this.getEditContent = () => {
137
- if (_this._editContent) {
138
- // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
139
- _this._editContent.destroy();
140
- }
141
+ _this._cleanupPreviousRTE();
141
142
  _this._editContent = _jsx(RichTextEditor, {
142
143
  id: _this.createId("_rte"),
143
144
  value: _this.value,
@@ -161,6 +162,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
161
162
  buttonGroups: _this.buttonGroups.length > 0 ? [] : undefined
162
163
  });
163
164
  _this._editContent.attachReady(_this.addButtonGroups, _this);
165
+ // Attach a timer to ensure that the button groups are added after the editor is ready
166
+ clearTimeout(_this._buttonGroupsTimer);
167
+ _this._buttonGroupsTimer = setTimeout(() => {
168
+ _this.createContentDebounced();
169
+ }, 2000);
164
170
  return _this._editContent;
165
171
  };
166
172
  return _this;
@@ -196,17 +202,36 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
196
202
  * Buttons groups need to be added when the RTE is ready, otherwise some of them are not available.
197
203
  */
198
204
  _proto.addButtonGroups = function addButtonGroups() {
205
+ clearTimeout(this._buttonGroupsTimer);
199
206
  const lateButtonGroups = this.getButtonGroups().reverse();
200
207
  // They also somehow need to be added in reverse because they also get added in the first place :D
201
208
  for (const lateButtonGroup of lateButtonGroups) {
202
209
  this._editContent?.addButtonGroup(lateButtonGroup);
203
210
  }
204
211
  this._editContent?.detachReady(this.addButtonGroups, this);
212
+ }
213
+
214
+ /**
215
+ * Method that cleans up the previous rich text editor instance.
216
+ * This is needed because the RichTextEditor control does not always destroy the TinyMCE instance,
217
+ * which can lead to issues when switching between edit and display modes.
218
+ */;
219
+ _proto._cleanupPreviousRTE = function _cleanupPreviousRTE() {
220
+ if (this._editContent) {
221
+ // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
222
+ this._editContent.destroy();
223
+ // Destroy the TinyMCE instance as well
224
+ // This is needed because the RichTextEditor control does not always destroy the TinyMCE instance
225
+ }
226
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
227
+ // @ts-ignore
228
+ window.tinymce?.get(this.createId("_rte") + "-textarea")?.destroy();
205
229
  };
206
230
  _proto.getDisplayContent = function getDisplayContent() {
207
231
  if (this._displayContent) {
208
232
  this._displayContent.destroy();
209
233
  }
234
+ this._cleanupPreviousRTE();
210
235
  this._displayContent = _jsx(FormattedText, {
211
236
  htmlText: this.value
212
237
  });
@@ -274,4 +299,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
274
299
  _exports = RichTextEditorBlock;
275
300
  return _exports;
276
301
  }, false);
277
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSaWNoVGV4dEVkaXRvckJsb2NrIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJyZXF1aXJlZCIsIl9kZWMzIiwiaXNCaW5kaW5nSW5mbyIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiQnV0dG9uR3JvdXAiLCJfZGVjNiIsIlBsdWdpbkRlZmluaXRpb24iLCJfZGVjNyIsIl9kZWM4IiwiYmluZGFibGUiLCJfZGVjOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsIl9pc0luRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJIiwiSXNFZGl0YWJsZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiZ2V0UGx1Z2lucyIsInBsdWdpbnNBcnJheSIsImV4Y2x1ZGVEZWZhdWx0UGx1Z2lucyIsIm1hcCIsIm5hbWUiLCJwbHVnaW5zIiwibGVuZ3RoIiwicGx1Z2luIiwicHVzaCIsImdldEJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwIiwidmlzaWJsZSIsInByaW9yaXR5Iiwicm93IiwiY3VzdG9tVG9vbGJhclByaW9yaXR5IiwiYnV0dG9ucyIsInNwbGl0IiwiZ2V0RWRpdENvbnRlbnQiLCJfZWRpdENvbnRlbnQiLCJkZXN0cm95IiwiX2pzeCIsIlJpY2hUZXh0RWRpdG9yIiwiaWQiLCJjcmVhdGVJZCIsInZhbHVlIiwiY3VzdG9tVG9vbGJhciIsImVkaXRhYmxlIiwiZWRpdG9yVHlwZSIsInNob3dHcm91cEZvbnRTdHlsZSIsInNob3dHcm91cFRleHRBbGlnbiIsInNob3dHcm91cFN0cnVjdHVyZSIsInNob3dHcm91cEZvbnQiLCJzaG93R3JvdXBDbGlwYm9hcmQiLCJzaG93R3JvdXBJbnNlcnQiLCJzaG93R3JvdXBMaW5rIiwic2hvd0dyb3VwVW5kbyIsInNhbml0aXplVmFsdWUiLCJ3cmFwcGluZyIsIndpZHRoIiwidW5kZWZpbmVkIiwiYXR0YWNoUmVhZHkiLCJhZGRCdXR0b25Hcm91cHMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsIl9vd25lckNvbXBvbmVudCIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiY3JlYXRlQ29udGVudERlYm91bmNlZCIsIl9jb250ZW50VGltZXIiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZXhpdCIsIl9kaXNwbGF5Q29udGVudCIsInNldF9pc0luRWRpdE1vZGUiLCJpbkVkaXRNb2RlIiwic2V0UHJvcGVydHkiLCJzZXRSZWFkT25seSIsInJlYWRPbmx5IiwibGF0ZUJ1dHRvbkdyb3VwcyIsInJldmVyc2UiLCJsYXRlQnV0dG9uR3JvdXAiLCJhZGRCdXR0b25Hcm91cCIsImRldGFjaFJlYWR5IiwiZ2V0RGlzcGxheUNvbnRlbnQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSaWNoVGV4dEVkaXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBCdXR0b25Hcm91cCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9yaWNodGV4dGVkaXRvci9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFBsdWdpbkRlZmluaXRpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvcmljaHRleHRlZGl0b3IvUGx1Z2luXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgUmljaFRleHRFZGl0b3IgZnJvbSBcInNhcC91aS9yaWNodGV4dGVkaXRvci9SaWNoVGV4dEVkaXRvclwiO1xuXG50eXBlIFBsdWdpbkRlZmluaXRpb25EYXRhID0ge1xuXHRuYW1lOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Hcm91cERhdGEgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0dmlzaWJsZTogYm9vbGVhbjtcblx0cHJpb3JpdHk/OiBudW1iZXI7XG5cdHJvdz86IG51bWJlcjtcblx0Y3VzdG9tVG9vbGJhclByaW9yaXR5PzogbnVtYmVyO1xuXHRidXR0b25zOiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdGhhdCBleHBvc2VzIHRoZSBSaWNoVGV4dEVkaXRvciBVSTUgY29udHJvbC5cbiAqXG4gKiBJdCdzIHVzZWQgdG8gZW50ZXIgZm9ybWF0dGVkIHRleHQsIGFuZCB1c2VzIHRoZSB0aGlyZC1wYXJ0eSBjb21wb25lbnQgY2FsbGVkIFRpbnlNQ0UuXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTcuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLlJpY2hUZXh0RWRpdG9yXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dEVkaXRvckJsb2NrIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxDb250cm9sPiB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgZWRpdG9yXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgZWRpdG9yLiBZb3UgY2FuIHVzZSB0aGlzIGF0dHJpYnV0ZSB0byBzZXQgYSBkZWZhdWx0IHZhbHVlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFueVwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdHZhbHVlPzogUHJvcGVydHlCaW5kaW5nSW5mbztcblxuXHQvKipcblx0ICogVXNlIHRoZSByZWFkT25seSBhdHRyaWJ1dGUgdG8gb3ZlcnJpZGUgdGhlIGVkaXQgZmxvdyBvZiB0aGUgcGFnZS5cblx0ICogQnkgc2V0dGluZyAncmVhZE9ubHknIHRvIHRydWUsIGEgRm9ybWF0dGVkVGV4dCB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRoZSBlZGl0b3IuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHJlYWRPbmx5OiBQcm9wZXJ0eUJpbmRpbmdJbmZvID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdpdGggdGhlICdidXR0b25Hcm91cHMnIGF0dHJpYnV0ZSB5b3UgY2FuIGN1c3RvbWl6ZSB0aGUgYnV0dG9ucyB0aGF0IGFyZSBkaXNwbGF5ZWQgb24gdGhlIHRvb2xiYXIgb2YgdGhlIGVkaXRvci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLnJpY2h0ZXh0ZWRpdG9yLkJ1dHRvbkdyb3VwXCIsIG11bHRpcGxlOiB0cnVlLCBkZWZhdWx0Q2xhc3M6IEJ1dHRvbkdyb3VwIH0pXG5cdGJ1dHRvbkdyb3VwczogQnV0dG9uR3JvdXBbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBXaXRoIHRoZSAncGx1Z2lucycgYXR0cmlidXRlIHlvdSBjYW4gY3VzdG9taXplIHRoZSBwbHVnaW5zIHRoYXQgd2lsbCBiZSBsb2FkZWQgYnkgdGhlIGVkaXRvci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLnJpY2h0ZXh0ZWRpdG9yLlBsdWdpblwiLCBtdWx0aXBsZTogdHJ1ZSwgZGVmYXVsdENsYXNzOiBQbHVnaW5EZWZpbml0aW9uIH0pXG5cdHBsdWdpbnM/OiBQbHVnaW5EZWZpbml0aW9uW107XG5cblx0LyoqXG5cdCAqIFdpdGggdGhlICdleGNsdWRlRGVmYXVsdFBsdWdpbnMnIHlvdSBjYW4gYXNrIHRvIHJlbW92ZSB0aGUgcGx1Z2lucyB0aGF0IHdpbGwgYmUgYWRkZWQgYnkgZGVmYXVsdFxuXHQgKiBUaGUgZGVmYXVsdCBwbHVnaW5zIGFyZSBcImVtb3RpY29uc1wiIFwiZGlyZWN0aW9uYWxpdHlcIiBcImltYWdlXCIgXCJ0YWJsZVwiIFwibGlua1wiIFwicG93ZXJwYXN0ZVwiLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRleGNsdWRlRGVmYXVsdFBsdWdpbnMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVXNlIHRoZSAncmVxdWlyZWQnIGF0dHJpYnV0ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZWRpdG9yIGlzIGZpbGxlZCB3aXRoIHNvbWUgdGV4dC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhbnlcIiwgYmluZGFibGU6IGZhbHNlIH0pXG5cdHJlcXVpcmVkOiBQcm9wZXJ0eUJpbmRpbmdJbmZvID0gZmFsc2U7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0X2lzSW5FZGl0TW9kZTogUHJvcGVydHlCaW5kaW5nSW5mbyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgX2Rpc3BsYXlDb250ZW50PzogRm9ybWF0dGVkVGV4dDtcblxuXHRwcml2YXRlIF9lZGl0Q29udGVudD86IFJpY2hUZXh0RWRpdG9yO1xuXG5cdHByaXZhdGUgX2NvbnRlbnRUaW1lcj86IG51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFJpY2hUZXh0RWRpdG9yQmxvY2s+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0cHJvcGVydGllcy5faXNJbkVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSk7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50KTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NvbnRlbnRUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2NvbnRlbnRUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMuX2NvbnRlbnRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0fSwgMjAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQ/LmRlc3Ryb3koKTtcblx0XHR0aGlzLl9lZGl0Q29udGVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IHJldHVybnMgdGhlIGJ1dHRvbiBjdXN0b21pemF0aW9ucyBmb3IgdGhlIGVkaXRvciB0b29sYmFyLlxuXHQgKiBCZWNhdXNlIGFsbCB2YWx1ZXMgY29tZSBhcyBzdHJpbmdzIGZyb20gWE1MLCBzb21lIHBhcnNpbmcgbmVlZHMgdG8gYmUgZG9uZSB0byBnZXQgYXR0cmlidXRlcyB3aXRoIHRoZSBjb3JyZWN0IHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBidXR0b24gZ3JvdXBzLlxuXHQgKi9cblx0Z2V0UGx1Z2lucyA9ICgpOiB7IHBsdWdpbnM/OiBQbHVnaW5EZWZpbml0aW9uRGF0YVtdIH0gPT4ge1xuXHRcdGxldCBwbHVnaW5zQXJyYXk6IFBsdWdpbkRlZmluaXRpb25EYXRhW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHRoaXMuZXhjbHVkZURlZmF1bHRQbHVnaW5zKSB7XG5cdFx0XHRwbHVnaW5zQXJyYXkgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGx1Z2luc0FycmF5ID0gW1wiZW1vdGljb25zXCIsIFwiZGlyZWN0aW9uYWxpdHlcIiwgXCJpbWFnZVwiLCBcInRhYmxlXCIsIFwibGlua1wiLCBcInBvd2VycGFzdGVcIl0ubWFwKChuYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZTogbmFtZSB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBsdWdpbnM/Lmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG5cdFx0XHRcdHBsdWdpbnNBcnJheS5wdXNoKHBsdWdpbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBsdWdpbnM6IHBsdWdpbnNBcnJheSB9O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBidXR0b24gY3VzdG9taXphdGlvbnMgZm9yIHRoZSBlZGl0b3IgdG9vbGJhci5cblx0ICogQmVjYXVzZSBhbGwgdmFsdWVzIGNvbWUgYXMgc3RyaW5ncyBmcm9tIFhNTCwgc29tZSBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgdG8gZ2V0IGF0dHJpYnV0ZXMgd2l0aCB0aGUgY29ycmVjdCB0eXBlLlxuXHQgKiBAcmV0dXJucyBUaGUgYnV0dG9uIGdyb3Vwcy5cblx0ICovXG5cdGdldEJ1dHRvbkdyb3VwcyA9ICgpOiBCdXR0b25Hcm91cERhdGFbXSA9PiB7XG5cdFx0aWYgKHRoaXMuYnV0dG9uR3JvdXBzICYmIHRoaXMuYnV0dG9uR3JvdXBzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLmJ1dHRvbkdyb3Vwcy5tYXAoKGJ1dHRvbkdyb3VwOiBCdXR0b25Hcm91cCkgPT4gKHtcblx0XHRcdFx0bmFtZTogYnV0dG9uR3JvdXAubmFtZSA/PyBcIlwiLFxuXHRcdFx0XHR2aXNpYmxlOiBidXR0b25Hcm91cC52aXNpYmxlID09PSBcInRydWVcIixcblx0XHRcdFx0cHJpb3JpdHk6IGJ1dHRvbkdyb3VwLnByaW9yaXR5LFxuXHRcdFx0XHRyb3c6IGJ1dHRvbkdyb3VwLnJvdyxcblx0XHRcdFx0Y3VzdG9tVG9vbGJhclByaW9yaXR5OiBidXR0b25Hcm91cC5jdXN0b21Ub29sYmFyUHJpb3JpdHksXG5cdFx0XHRcdGJ1dHRvbnM6IGJ1dHRvbkdyb3VwLmJ1dHRvbnM/LnNwbGl0KFwiLFwiKSB8fCBbXVxuXHRcdFx0fSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH07XG5cblx0c2V0X2lzSW5FZGl0TW9kZShpbkVkaXRNb2RlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0c3VwZXIuc2V0UHJvcGVydHkoXCJfaXNJbkVkaXRNb2RlXCIsIGluRWRpdE1vZGUpO1xuXHRcdHRoaXMuY3JlYXRlQ29udGVudERlYm91bmNlZCgpO1xuXHR9XG5cblx0c2V0UmVhZE9ubHkocmVhZE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRzdXBlci5zZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIsIHJlYWRPbmx5KTtcblx0XHR0aGlzLmNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTtcblx0fVxuXG5cdGdldEVkaXRDb250ZW50ID0gKCk6IFJpY2hUZXh0RWRpdG9yID0+IHtcblx0XHRpZiAodGhpcy5fZWRpdENvbnRlbnQpIHtcblx0XHRcdC8vIEl0J3MgYmV0dGVyIHRvIGRlc3Ryb3kgdGhlIHJpY2ggdGV4dCBlZGl0b3IgYXMgaW4gc29tZSBjYXNlIHdpdGggc2xvdyBtYWNoaW5lIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQgYW5kIGRpc3BsYXkgbWF5IGJyZWFrIGl0XG5cdFx0XHR0aGlzLl9lZGl0Q29udGVudC5kZXN0cm95KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZWRpdENvbnRlbnQgPSAoXG5cdFx0XHQ8UmljaFRleHRFZGl0b3Jcblx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJfcnRlXCIpfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZX1cblx0XHRcdFx0dmlzaWJsZT17dHJ1ZX1cblx0XHRcdFx0Y3VzdG9tVG9vbGJhcj17dHJ1ZX1cblx0XHRcdFx0ZWRpdGFibGU9e3RydWV9XG5cdFx0XHRcdGVkaXRvclR5cGU9XCJUaW55TUNFNlwiXG5cdFx0XHRcdHNob3dHcm91cEZvbnRTdHlsZT17dHJ1ZX1cblx0XHRcdFx0c2hvd0dyb3VwVGV4dEFsaWduPXt0cnVlfVxuXHRcdFx0XHRzaG93R3JvdXBTdHJ1Y3R1cmU9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEZvbnQ9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBDbGlwYm9hcmQ9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEluc2VydD17ZmFsc2V9XG5cdFx0XHRcdHNob3dHcm91cExpbms9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBVbmRvPXtmYWxzZX1cblx0XHRcdFx0c2FuaXRpemVWYWx1ZT17dHJ1ZX1cblx0XHRcdFx0d3JhcHBpbmc9e3RydWV9XG5cdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0cmVxdWlyZWQ9e3RoaXMucmVxdWlyZWR9XG5cdFx0XHRcdHsuLi50aGlzLmdldFBsdWdpbnMoKX1cblx0XHRcdFx0YnV0dG9uR3JvdXBzPXt0aGlzLmJ1dHRvbkdyb3Vwcy5sZW5ndGggPiAwID8gW10gOiB1bmRlZmluZWR9XG5cdFx0XHQvPlxuXHRcdCkgYXMgUmljaFRleHRFZGl0b3I7XG5cblx0XHR0aGlzLl9lZGl0Q29udGVudC5hdHRhY2hSZWFkeSh0aGlzLmFkZEJ1dHRvbkdyb3VwcywgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXMuX2VkaXRDb250ZW50O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBCdXR0b25zIGdyb3VwcyBuZWVkIHRvIGJlIGFkZGVkIHdoZW4gdGhlIFJURSBpcyByZWFkeSwgb3RoZXJ3aXNlIHNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZS5cblx0ICovXG5cdGFkZEJ1dHRvbkdyb3VwcygpOiB2b2lkIHtcblx0XHRjb25zdCBsYXRlQnV0dG9uR3JvdXBzID0gdGhpcy5nZXRCdXR0b25Hcm91cHMoKS5yZXZlcnNlKCk7XG5cdFx0Ly8gVGhleSBhbHNvIHNvbWVob3cgbmVlZCB0byBiZSBhZGRlZCBpbiByZXZlcnNlIGJlY2F1c2UgdGhleSBhbHNvIGdldCBhZGRlZCBpbiB0aGUgZmlyc3QgcGxhY2UgOkRcblx0XHRmb3IgKGNvbnN0IGxhdGVCdXR0b25Hcm91cCBvZiBsYXRlQnV0dG9uR3JvdXBzKSB7XG5cdFx0XHR0aGlzLl9lZGl0Q29udGVudD8uYWRkQnV0dG9uR3JvdXAobGF0ZUJ1dHRvbkdyb3VwKTtcblx0XHR9XG5cdFx0dGhpcy5fZWRpdENvbnRlbnQ/LmRldGFjaFJlYWR5KHRoaXMuYWRkQnV0dG9uR3JvdXBzLCB0aGlzKTtcblx0fVxuXG5cdGdldERpc3BsYXlDb250ZW50KCk6IEZvcm1hdHRlZFRleHQge1xuXHRcdGlmICh0aGlzLl9kaXNwbGF5Q29udGVudCkge1xuXHRcdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLl9kaXNwbGF5Q29udGVudCA9ICg8Rm9ybWF0dGVkVGV4dCBodG1sVGV4dD17dGhpcy52YWx1ZX0gLz4pIGFzIEZvcm1hdHRlZFRleHQ7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BsYXlDb250ZW50O1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBSaWNoVGV4dEVkaXRvciB8IEZvcm1hdHRlZFRleHQge1xuXHRcdGlmICh0aGlzLl9pc0luRWRpdE1vZGUgJiYgIXRoaXMucmVhZE9ubHkpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEVkaXRDb250ZW50KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldERpc3BsYXlDb250ZW50KCk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BLElBUXFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLDhCQUE4QixDQUFDLEVBQUFDLEtBQUEsR0FLN0NDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUTtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU81Q0gsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxLQUFLO0lBQUVHLGFBQWEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUTlDTCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FPN0JDLFdBQVcsQ0FBQztJQUFFTixJQUFJLEVBQUUsMENBQTBDO0lBQUVPLFFBQVEsRUFBRSxJQUFJO0lBQUVDLFlBQVksRUFBRUM7RUFBWSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU81R0osV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSxxQ0FBcUM7SUFBRU8sUUFBUSxFQUFFLElBQUk7SUFBRUMsWUFBWSxFQUFFRztFQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVE1R2IsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBYSxLQUFBLEdBTzdCZCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLEtBQUs7SUFBRWMsUUFBUSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHMUNoQixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFKLElBQUEsQ0FBQW9CLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQVM5QixTQUFBdkIsb0JBQVl3QixVQUFnRSxFQUFFQyxNQUF5QixFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUN4R0YsVUFBVSxDQUFDRyxhQUFhLEdBQUdDLGlCQUFpQixDQUFDQyxFQUFFLENBQUNDLFVBQVUsQ0FBQztNQUMzREosS0FBQSxHQUFBSCxjQUFBLENBQUFRLElBQUEsT0FBTVAsVUFBVSxFQUFFQyxNQUFNLENBQUM7TUE3RDFCO0FBQ0Q7QUFDQTtNQUZDTywwQkFBQSxDQUFBTixLQUFBLFFBQUFPLFdBQUEsRUFBQVAsS0FBQTtNQU1BO0FBQ0Q7QUFDQTtBQUNBO01BSENNLDBCQUFBLENBQUFOLEtBQUEsV0FBQVEsWUFBQSxFQUFBUixLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtNQUpDTSwwQkFBQSxDQUFBTixLQUFBLGNBQUFTLFlBQUEsRUFBQVQsS0FBQTtNQVFBO0FBQ0Q7QUFDQTtBQUNBO01BSENNLDBCQUFBLENBQUFOLEtBQUEsa0JBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQU9BO0FBQ0Q7QUFDQTtBQUNBO01BSENNLDBCQUFBLENBQUFOLEtBQUEsYUFBQVcsWUFBQSxFQUFBWCxLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtNQUpDTSwwQkFBQSxDQUFBTixLQUFBLDJCQUFBWSxZQUFBLEVBQUFaLEtBQUE7TUFRQTtBQUNEO0FBQ0E7QUFDQTtNQUhDTSwwQkFBQSxDQUFBTixLQUFBLGNBQUFhLFlBQUEsRUFBQWIsS0FBQTtNQUFBTSwwQkFBQSxDQUFBTixLQUFBLG1CQUFBYyxZQUFBLEVBQUFkLEtBQUE7TUF3Q0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtNQUpDQSxLQUFBLENBS0FlLFVBQVUsR0FBRyxNQUE0QztRQUN4RCxJQUFJQyxZQUFnRDtRQUNwRCxJQUFJaEIsS0FBQSxDQUFLaUIscUJBQXFCLEVBQUU7VUFDL0JELFlBQVksR0FBRyxFQUFFO1FBQ2xCLENBQUMsTUFBTTtVQUNOQSxZQUFZLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUNFLEdBQUcsQ0FBRUMsSUFBWSxJQUFLO1lBQzVHLE9BQU87Y0FBRUEsSUFBSSxFQUFFQTtZQUFLLENBQUM7VUFDdEIsQ0FBQyxDQUFDO1FBQ0g7UUFDQSxJQUFJbkIsS0FBQSxDQUFLb0IsT0FBTyxFQUFFQyxNQUFNLEVBQUU7VUFDekIsS0FBSyxNQUFNQyxNQUFNLElBQUl0QixLQUFBLENBQUtvQixPQUFPLEVBQUU7WUFDbENKLFlBQVksQ0FBQ08sSUFBSSxDQUFDRCxNQUFNLENBQUM7VUFDMUI7UUFDRDtRQUNBLE9BQU87VUFBRUYsT0FBTyxFQUFFSjtRQUFhLENBQUM7TUFDakMsQ0FBQztNQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ2hCLEtBQUEsQ0FLQXdCLGVBQWUsR0FBRyxNQUF5QjtRQUMxQyxJQUFJeEIsS0FBQSxDQUFLeUIsWUFBWSxJQUFJekIsS0FBQSxDQUFLeUIsWUFBWSxDQUFDSixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3RELE9BQU9yQixLQUFBLENBQUt5QixZQUFZLENBQUNQLEdBQUcsQ0FBRVEsV0FBd0IsS0FBTTtZQUMzRFAsSUFBSSxFQUFFTyxXQUFXLENBQUNQLElBQUksSUFBSSxFQUFFO1lBQzVCUSxPQUFPLEVBQUVELFdBQVcsQ0FBQ0MsT0FBTyxLQUFLLE1BQU07WUFDdkNDLFFBQVEsRUFBRUYsV0FBVyxDQUFDRSxRQUFRO1lBQzlCQyxHQUFHLEVBQUVILFdBQVcsQ0FBQ0csR0FBRztZQUNwQkMscUJBQXFCLEVBQUVKLFdBQVcsQ0FBQ0kscUJBQXFCO1lBQ3hEQyxPQUFPLEVBQUVMLFdBQVcsQ0FBQ0ssT0FBTyxFQUFFQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUk7VUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSjtRQUNBLE9BQU8sRUFBRTtNQUNWLENBQUM7TUFBQWhDLEtBQUEsQ0FZRGlDLGNBQWMsR0FBRyxNQUFzQjtRQUN0QyxJQUFJakMsS0FBQSxDQUFLa0MsWUFBWSxFQUFFO1VBQ3RCO1VBQ0FsQyxLQUFBLENBQUtrQyxZQUFZLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCO1FBRUFuQyxLQUFBLENBQUtrQyxZQUFZLEdBQ2hCRSxJQUFBLENBQUNDLGNBQWM7VUFDZEMsRUFBRSxFQUFFdEMsS0FBQSxDQUFLdUMsUUFBUSxDQUFDLE1BQU0sQ0FBRTtVQUMxQkMsS0FBSyxFQUFFeEMsS0FBQSxDQUFLd0MsS0FBTTtVQUNsQmIsT0FBTyxFQUFFLElBQUs7VUFDZGMsYUFBYSxFQUFFLElBQUs7VUFDcEJDLFFBQVEsRUFBRSxJQUFLO1VBQ2ZDLFVBQVUsRUFBQyxVQUFVO1VBQ3JCQyxrQkFBa0IsRUFBRSxJQUFLO1VBQ3pCQyxrQkFBa0IsRUFBRSxJQUFLO1VBQ3pCQyxrQkFBa0IsRUFBRSxJQUFLO1VBQ3pCQyxhQUFhLEVBQUUsS0FBTTtVQUNyQkMsa0JBQWtCLEVBQUUsSUFBSztVQUN6QkMsZUFBZSxFQUFFLEtBQU07VUFDdkJDLGFBQWEsRUFBRSxLQUFNO1VBQ3JCQyxhQUFhLEVBQUUsS0FBTTtVQUNyQkMsYUFBYSxFQUFFLElBQUs7VUFDcEJDLFFBQVEsRUFBRSxJQUFLO1VBQ2ZDLEtBQUssRUFBRSxNQUFPO1VBQ2QxRSxRQUFRLEVBQUVvQixLQUFBLENBQUtwQixRQUFTO1VBQUEsR0FDcEJvQixLQUFBLENBQUtlLFVBQVUsQ0FBQyxDQUFDO1VBQ3JCVSxZQUFZLEVBQUV6QixLQUFBLENBQUt5QixZQUFZLENBQUNKLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHa0M7UUFBVSxDQUM1RCxDQUNpQjtRQUVuQnZELEtBQUEsQ0FBS2tDLFlBQVksQ0FBQ3NCLFdBQVcsQ0FBQ3hELEtBQUEsQ0FBS3lELGVBQWUsRUFBQXpELEtBQU0sQ0FBQztRQUN6RCxPQUFPQSxLQUFBLENBQUtrQyxZQUFZO01BQ3pCLENBQUM7TUFBQSxPQUFBbEMsS0FBQTtJQXpHRDtJQUFDMEQsUUFBQSxHQUFBcEYsbUJBQUE7SUFBQXFGLGNBQUEsQ0FBQXJGLG1CQUFBLEVBQUF1QixjQUFBO0lBQUEsSUFBQStELE1BQUEsR0FBQXRGLG1CQUFBLENBQUF1RixTQUFBO0lBQUFELE1BQUEsQ0FFREUsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsZUFBa0MsRUFBUTtNQUM3RGxFLGNBQUEsQ0FBQWdFLFNBQUEsQ0FBTUMsbUJBQW1CLENBQUF6RCxJQUFBLE9BQUMwRCxlQUFlO01BQ3pDLElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUFBTCxNQUFBLENBRURNLHNCQUFzQixHQUF0QixTQUFBQSxzQkFBc0JBLENBQUEsRUFBUztNQUM5QixJQUFJLElBQUksQ0FBQ0MsYUFBYSxFQUFFO1FBQ3ZCQyxZQUFZLENBQUMsSUFBSSxDQUFDRCxhQUFhLENBQUM7TUFDakM7TUFDQSxJQUFJLENBQUNBLGFBQWEsR0FBR0UsVUFBVSxDQUFDLE1BQU07UUFDckMsSUFBSSxDQUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztNQUNwQyxDQUFDLEVBQUUsR0FBRyxDQUFzQjtJQUM3QixDQUFDO0lBQUFMLE1BQUEsQ0FFRFUsSUFBSSxHQUFKLFNBQUFBLElBQUlBLENBQUEsRUFBUztNQUNaLElBQUksQ0FBQ0MsZUFBZSxFQUFFcEMsT0FBTyxDQUFDLENBQUM7TUFDL0IsSUFBSSxDQUFDRCxZQUFZLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFBQXlCLE1BQUEsQ0EyQ0RZLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNDLFVBQW1CLEVBQVE7TUFDM0M1RSxjQUFBLENBQUFnRSxTQUFBLENBQU1hLFdBQVcsQ0FBQXJFLElBQUEsT0FBQyxlQUFlLEVBQUVvRSxVQUFVO01BQzdDLElBQUksQ0FBQ1Asc0JBQXNCLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQUFOLE1BQUEsQ0FFRGUsV0FBVyxHQUFYLFNBQUFBLFdBQVdBLENBQUNDLFFBQWlCLEVBQVE7TUFDcEMvRSxjQUFBLENBQUFnRSxTQUFBLENBQU1hLFdBQVcsQ0FBQXJFLElBQUEsT0FBQyxVQUFVLEVBQUV1RSxRQUFRO01BQ3RDLElBQUksQ0FBQ1Ysc0JBQXNCLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBcUNEO0FBQ0Q7QUFDQTtJQUZDTixNQUFBLENBR0FILGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFBLEVBQVM7TUFDdkIsTUFBTW9CLGdCQUFnQixHQUFHLElBQUksQ0FBQ3JELGVBQWUsQ0FBQyxDQUFDLENBQUNzRCxPQUFPLENBQUMsQ0FBQztNQUN6RDtNQUNBLEtBQUssTUFBTUMsZUFBZSxJQUFJRixnQkFBZ0IsRUFBRTtRQUMvQyxJQUFJLENBQUMzQyxZQUFZLEVBQUU4QyxjQUFjLENBQUNELGVBQWUsQ0FBQztNQUNuRDtNQUNBLElBQUksQ0FBQzdDLFlBQVksRUFBRStDLFdBQVcsQ0FBQyxJQUFJLENBQUN4QixlQUFlLEVBQUUsSUFBSSxDQUFDO0lBQzNELENBQUM7SUFBQUcsTUFBQSxDQUVEc0IsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFrQjtNQUNsQyxJQUFJLElBQUksQ0FBQ1gsZUFBZSxFQUFFO1FBQ3pCLElBQUksQ0FBQ0EsZUFBZSxDQUFDcEMsT0FBTyxDQUFDLENBQUM7TUFDL0I7TUFDQSxJQUFJLENBQUNvQyxlQUFlLEdBQUluQyxJQUFBLENBQUMrQyxhQUFhO1FBQUNDLFFBQVEsRUFBRSxJQUFJLENBQUM1QztNQUFNLENBQUUsQ0FBbUI7TUFDakYsT0FBTyxJQUFJLENBQUMrQixlQUFlO0lBQzVCLENBQUM7SUFBQVgsTUFBQSxDQUVESyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUFtQztNQUMvQyxJQUFJLElBQUksQ0FBQ2hFLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQzJFLFFBQVEsRUFBRTtRQUN6QyxPQUFPLElBQUksQ0FBQzNDLGNBQWMsQ0FBQyxDQUFDO01BQzdCLENBQUMsTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDaUQsaUJBQWlCLENBQUMsQ0FBQztNQUNoQztJQUNELENBQUM7SUFBQSxPQUFBNUcsbUJBQUE7RUFBQSxFQXBNK0MrRyxhQUFhLEdBQUE5RSxXQUFBLEdBQUErRSx5QkFBQSxDQUFBMUYsT0FBQSxDQUFBaUUsU0FBQSxTQUFBcEYsS0FBQTtJQUFBOEcsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFsRixZQUFBLEdBQUE4RSx5QkFBQSxDQUFBMUYsT0FBQSxDQUFBaUUsU0FBQSxZQUFBaEYsS0FBQTtJQUFBMEcsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFqRixZQUFBLEdBQUE2RSx5QkFBQSxDQUFBMUYsT0FBQSxDQUFBaUUsU0FBQSxlQUFBOUUsS0FBQTtJQUFBd0csWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FvQjdCLEtBQUs7SUFBQTtFQUFBLElBQUFoRixZQUFBLEdBQUE0RSx5QkFBQSxDQUFBMUYsT0FBQSxDQUFBaUUsU0FBQSxtQkFBQTdFLEtBQUE7SUFBQXVHLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BT1AsRUFBRTtJQUFBO0VBQUEsSUFBQS9FLFlBQUEsR0FBQTJFLHlCQUFBLENBQUExRixPQUFBLENBQUFpRSxTQUFBLGNBQUF4RSxLQUFBO0lBQUFrRyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTlFLFlBQUEsR0FBQTBFLHlCQUFBLENBQUExRixPQUFBLENBQUFpRSxTQUFBLDRCQUFBdEUsS0FBQTtJQUFBZ0csWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FlUixLQUFLO0lBQUE7RUFBQSxJQUFBN0UsWUFBQSxHQUFBeUUseUJBQUEsQ0FBQTFGLE9BQUEsQ0FBQWlFLFNBQUEsZUFBQXJFLEtBQUE7SUFBQStGLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BT0csS0FBSztJQUFBO0VBQUEsSUFBQTVFLFlBQUEsR0FBQXdFLHlCQUFBLENBQUExRixPQUFBLENBQUFpRSxTQUFBLG9CQUFBbkUsS0FBQTtJQUFBNkYsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FHQSxLQUFLO0lBQUE7RUFBQSxJQUFBOUYsT0FBQSxNQUFBRCxNQUFBO0VBQUErRCxRQUFBLEdBQUFwRixtQkFBQTtFQUFBLE9BQUFvRixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
302
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSaWNoVGV4dEVkaXRvckJsb2NrIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJyZXF1aXJlZCIsIl9kZWMzIiwiaXNCaW5kaW5nSW5mbyIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiQnV0dG9uR3JvdXAiLCJfZGVjNiIsIlBsdWdpbkRlZmluaXRpb24iLCJfZGVjNyIsIl9kZWM4IiwiYmluZGFibGUiLCJfZGVjOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsIl9pc0luRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJIiwiSXNFZGl0YWJsZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiZ2V0UGx1Z2lucyIsInBsdWdpbnNBcnJheSIsImV4Y2x1ZGVEZWZhdWx0UGx1Z2lucyIsIm1hcCIsIm5hbWUiLCJwbHVnaW5zIiwibGVuZ3RoIiwicGx1Z2luIiwicHVzaCIsImdldEJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwIiwidmlzaWJsZSIsInByaW9yaXR5Iiwicm93IiwiY3VzdG9tVG9vbGJhclByaW9yaXR5IiwiYnV0dG9ucyIsInNwbGl0IiwiZ2V0RWRpdENvbnRlbnQiLCJfY2xlYW51cFByZXZpb3VzUlRFIiwiX2VkaXRDb250ZW50IiwiX2pzeCIsIlJpY2hUZXh0RWRpdG9yIiwiaWQiLCJjcmVhdGVJZCIsInZhbHVlIiwiY3VzdG9tVG9vbGJhciIsImVkaXRhYmxlIiwiZWRpdG9yVHlwZSIsInNob3dHcm91cEZvbnRTdHlsZSIsInNob3dHcm91cFRleHRBbGlnbiIsInNob3dHcm91cFN0cnVjdHVyZSIsInNob3dHcm91cEZvbnQiLCJzaG93R3JvdXBDbGlwYm9hcmQiLCJzaG93R3JvdXBJbnNlcnQiLCJzaG93R3JvdXBMaW5rIiwic2hvd0dyb3VwVW5kbyIsInNhbml0aXplVmFsdWUiLCJ3cmFwcGluZyIsIndpZHRoIiwidW5kZWZpbmVkIiwiYXR0YWNoUmVhZHkiLCJhZGRCdXR0b25Hcm91cHMiLCJjbGVhclRpbWVvdXQiLCJfYnV0dG9uR3JvdXBzVGltZXIiLCJzZXRUaW1lb3V0IiwiY3JlYXRlQ29udGVudERlYm91bmNlZCIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX293bmVyQ29tcG9uZW50IiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJfY29udGVudFRpbWVyIiwiZXhpdCIsIl9kaXNwbGF5Q29udGVudCIsImRlc3Ryb3kiLCJzZXRfaXNJbkVkaXRNb2RlIiwiaW5FZGl0TW9kZSIsInNldFByb3BlcnR5Iiwic2V0UmVhZE9ubHkiLCJyZWFkT25seSIsImxhdGVCdXR0b25Hcm91cHMiLCJyZXZlcnNlIiwibGF0ZUJ1dHRvbkdyb3VwIiwiYWRkQnV0dG9uR3JvdXAiLCJkZXRhY2hSZWFkeSIsIndpbmRvdyIsInRpbnltY2UiLCJnZXQiLCJnZXREaXNwbGF5Q29udGVudCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJpY2hUZXh0RWRpdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uR3JvdXAgZnJvbSBcInNhcC9mZS9tYWNyb3MvcmljaHRleHRlZGl0b3IvQnV0dG9uR3JvdXBcIjtcbmltcG9ydCBQbHVnaW5EZWZpbml0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL3JpY2h0ZXh0ZWRpdG9yL1BsdWdpblwiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCBSaWNoVGV4dEVkaXRvciBmcm9tIFwic2FwL3VpL3JpY2h0ZXh0ZWRpdG9yL1JpY2hUZXh0RWRpdG9yXCI7XG5cbnR5cGUgUGx1Z2luRGVmaW5pdGlvbkRhdGEgPSB7XG5cdG5hbWU6IHN0cmluZztcbn07XG50eXBlIEJ1dHRvbkdyb3VwRGF0YSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR2aXNpYmxlOiBib29sZWFuO1xuXHRwcmlvcml0eT86IG51bWJlcjtcblx0cm93PzogbnVtYmVyO1xuXHRjdXN0b21Ub29sYmFyUHJpb3JpdHk/OiBudW1iZXI7XG5cdGJ1dHRvbnM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayB0aGF0IGV4cG9zZXMgdGhlIFJpY2hUZXh0RWRpdG9yIFVJNSBjb250cm9sLlxuICpcbiAqIEl0J3MgdXNlZCB0byBlbnRlciBmb3JtYXR0ZWQgdGV4dCwgYW5kIHVzZXMgdGhlIHRoaXJkLXBhcnR5IGNvbXBvbmVudCBjYWxsZWQgVGlueU1DRS5cbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjExNy4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuUmljaFRleHRFZGl0b3JcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJpY2hUZXh0RWRpdG9yQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPENvbnRyb2w+IHtcblx0LyoqXG5cdCAqIElEIG9mIHRoZSBlZGl0b3Jcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBlZGl0b3IuIFlvdSBjYW4gdXNlIHRoaXMgYXR0cmlidXRlIHRvIHNldCBhIGRlZmF1bHQgdmFsdWUuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYW55XCIsIGlzQmluZGluZ0luZm86IHRydWUgfSlcblx0dmFsdWU/OiBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdC8qKlxuXHQgKiBVc2UgdGhlIHJlYWRPbmx5IGF0dHJpYnV0ZSB0byBvdmVycmlkZSB0aGUgZWRpdCBmbG93IG9mIHRoZSBwYWdlLlxuXHQgKiBCeSBzZXR0aW5nICdyZWFkT25seScgdG8gdHJ1ZSwgYSBGb3JtYXR0ZWRUZXh0IHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQgb2YgdGhlIGVkaXRvci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cmVhZE9ubHk6IFByb3BlcnR5QmluZGluZ0luZm8gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2l0aCB0aGUgJ2J1dHRvbkdyb3VwcycgYXR0cmlidXRlIHlvdSBjYW4gY3VzdG9taXplIHRoZSBidXR0b25zIHRoYXQgYXJlIGRpc3BsYXllZCBvbiB0aGUgdG9vbGJhciBvZiB0aGUgZWRpdG9yLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MucmljaHRleHRlZGl0b3IuQnV0dG9uR3JvdXBcIiwgbXVsdGlwbGU6IHRydWUsIGRlZmF1bHRDbGFzczogQnV0dG9uR3JvdXAgfSlcblx0YnV0dG9uR3JvdXBzOiBCdXR0b25Hcm91cFtdID0gW107XG5cblx0LyoqXG5cdCAqIFdpdGggdGhlICdwbHVnaW5zJyBhdHRyaWJ1dGUgeW91IGNhbiBjdXN0b21pemUgdGhlIHBsdWdpbnMgdGhhdCB3aWxsIGJlIGxvYWRlZCBieSB0aGUgZWRpdG9yLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MucmljaHRleHRlZGl0b3IuUGx1Z2luXCIsIG11bHRpcGxlOiB0cnVlLCBkZWZhdWx0Q2xhc3M6IFBsdWdpbkRlZmluaXRpb24gfSlcblx0cGx1Z2lucz86IFBsdWdpbkRlZmluaXRpb25bXTtcblxuXHQvKipcblx0ICogV2l0aCB0aGUgJ2V4Y2x1ZGVEZWZhdWx0UGx1Z2lucycgeW91IGNhbiBhc2sgdG8gcmVtb3ZlIHRoZSBwbHVnaW5zIHRoYXQgd2lsbCBiZSBhZGRlZCBieSBkZWZhdWx0XG5cdCAqIFRoZSBkZWZhdWx0IHBsdWdpbnMgYXJlIFwiZW1vdGljb25zXCIgXCJkaXJlY3Rpb25hbGl0eVwiIFwiaW1hZ2VcIiBcInRhYmxlXCIgXCJsaW5rXCIgXCJwb3dlcnBhc3RlXCIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGV4Y2x1ZGVEZWZhdWx0UGx1Z2lucyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBVc2UgdGhlICdyZXF1aXJlZCcgYXR0cmlidXRlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBlZGl0b3IgaXMgZmlsbGVkIHdpdGggc29tZSB0ZXh0LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFueVwiLCBiaW5kYWJsZTogZmFsc2UgfSlcblx0cmVxdWlyZWQ6IFByb3BlcnR5QmluZGluZ0luZm8gPSBmYWxzZTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRfaXNJbkVkaXRNb2RlOiBQcm9wZXJ0eUJpbmRpbmdJbmZvID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfZGlzcGxheUNvbnRlbnQ/OiBGb3JtYXR0ZWRUZXh0O1xuXG5cdHByaXZhdGUgX2VkaXRDb250ZW50PzogUmljaFRleHRFZGl0b3I7XG5cblx0cHJpdmF0ZSBfY29udGVudFRpbWVyPzogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaW1lciB0byBlbnN1cmUgdGhhdCBpZiB0aGUgYnV0dG9uIGdyb3VwcyBhcmUgbm90IGFkZGVkIHdlIHJlc3RhcnQgdGhlIHByb2Nlc3MuXG5cdCAqL1xuXHRwcml2YXRlIF9idXR0b25Hcm91cHNUaW1lcj86IG51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFJpY2hUZXh0RWRpdG9yQmxvY2s+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0cHJvcGVydGllcy5faXNJbkVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSk7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50KTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NvbnRlbnRUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2NvbnRlbnRUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMuX2NvbnRlbnRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0fSwgMjAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQ/LmRlc3Ryb3koKTtcblx0XHR0aGlzLl9lZGl0Q29udGVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IHJldHVybnMgdGhlIGJ1dHRvbiBjdXN0b21pemF0aW9ucyBmb3IgdGhlIGVkaXRvciB0b29sYmFyLlxuXHQgKiBCZWNhdXNlIGFsbCB2YWx1ZXMgY29tZSBhcyBzdHJpbmdzIGZyb20gWE1MLCBzb21lIHBhcnNpbmcgbmVlZHMgdG8gYmUgZG9uZSB0byBnZXQgYXR0cmlidXRlcyB3aXRoIHRoZSBjb3JyZWN0IHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBidXR0b24gZ3JvdXBzLlxuXHQgKi9cblx0Z2V0UGx1Z2lucyA9ICgpOiB7IHBsdWdpbnM/OiBQbHVnaW5EZWZpbml0aW9uRGF0YVtdIH0gPT4ge1xuXHRcdGxldCBwbHVnaW5zQXJyYXk6IFBsdWdpbkRlZmluaXRpb25EYXRhW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHRoaXMuZXhjbHVkZURlZmF1bHRQbHVnaW5zKSB7XG5cdFx0XHRwbHVnaW5zQXJyYXkgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGx1Z2luc0FycmF5ID0gW1wiZW1vdGljb25zXCIsIFwiZGlyZWN0aW9uYWxpdHlcIiwgXCJpbWFnZVwiLCBcInRhYmxlXCIsIFwibGlua1wiLCBcInBvd2VycGFzdGVcIl0ubWFwKChuYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZTogbmFtZSB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBsdWdpbnM/Lmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG5cdFx0XHRcdHBsdWdpbnNBcnJheS5wdXNoKHBsdWdpbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBsdWdpbnM6IHBsdWdpbnNBcnJheSB9O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBidXR0b24gY3VzdG9taXphdGlvbnMgZm9yIHRoZSBlZGl0b3IgdG9vbGJhci5cblx0ICogQmVjYXVzZSBhbGwgdmFsdWVzIGNvbWUgYXMgc3RyaW5ncyBmcm9tIFhNTCwgc29tZSBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgdG8gZ2V0IGF0dHJpYnV0ZXMgd2l0aCB0aGUgY29ycmVjdCB0eXBlLlxuXHQgKiBAcmV0dXJucyBUaGUgYnV0dG9uIGdyb3Vwcy5cblx0ICovXG5cdGdldEJ1dHRvbkdyb3VwcyA9ICgpOiBCdXR0b25Hcm91cERhdGFbXSA9PiB7XG5cdFx0aWYgKHRoaXMuYnV0dG9uR3JvdXBzICYmIHRoaXMuYnV0dG9uR3JvdXBzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLmJ1dHRvbkdyb3Vwcy5tYXAoKGJ1dHRvbkdyb3VwOiBCdXR0b25Hcm91cCkgPT4gKHtcblx0XHRcdFx0bmFtZTogYnV0dG9uR3JvdXAubmFtZSA/PyBcIlwiLFxuXHRcdFx0XHR2aXNpYmxlOiBidXR0b25Hcm91cC52aXNpYmxlID09PSBcInRydWVcIixcblx0XHRcdFx0cHJpb3JpdHk6IGJ1dHRvbkdyb3VwLnByaW9yaXR5LFxuXHRcdFx0XHRyb3c6IGJ1dHRvbkdyb3VwLnJvdyxcblx0XHRcdFx0Y3VzdG9tVG9vbGJhclByaW9yaXR5OiBidXR0b25Hcm91cC5jdXN0b21Ub29sYmFyUHJpb3JpdHksXG5cdFx0XHRcdGJ1dHRvbnM6IGJ1dHRvbkdyb3VwLmJ1dHRvbnM/LnNwbGl0KFwiLFwiKSB8fCBbXVxuXHRcdFx0fSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH07XG5cblx0c2V0X2lzSW5FZGl0TW9kZShpbkVkaXRNb2RlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0c3VwZXIuc2V0UHJvcGVydHkoXCJfaXNJbkVkaXRNb2RlXCIsIGluRWRpdE1vZGUpO1xuXHRcdHRoaXMuY3JlYXRlQ29udGVudERlYm91bmNlZCgpO1xuXHR9XG5cblx0c2V0UmVhZE9ubHkocmVhZE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRzdXBlci5zZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIsIHJlYWRPbmx5KTtcblx0XHR0aGlzLmNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTtcblx0fVxuXG5cdGdldEVkaXRDb250ZW50ID0gKCk6IFJpY2hUZXh0RWRpdG9yID0+IHtcblx0XHR0aGlzLl9jbGVhbnVwUHJldmlvdXNSVEUoKTtcblxuXHRcdHRoaXMuX2VkaXRDb250ZW50ID0gKFxuXHRcdFx0PFJpY2hUZXh0RWRpdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwiX3J0ZVwiKX1cblx0XHRcdFx0dmFsdWU9e3RoaXMudmFsdWV9XG5cdFx0XHRcdHZpc2libGU9e3RydWV9XG5cdFx0XHRcdGN1c3RvbVRvb2xiYXI9e3RydWV9XG5cdFx0XHRcdGVkaXRhYmxlPXt0cnVlfVxuXHRcdFx0XHRlZGl0b3JUeXBlPVwiVGlueU1DRTZcIlxuXHRcdFx0XHRzaG93R3JvdXBGb250U3R5bGU9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cFRleHRBbGlnbj17dHJ1ZX1cblx0XHRcdFx0c2hvd0dyb3VwU3RydWN0dXJlPXt0cnVlfVxuXHRcdFx0XHRzaG93R3JvdXBGb250PXtmYWxzZX1cblx0XHRcdFx0c2hvd0dyb3VwQ2xpcGJvYXJkPXt0cnVlfVxuXHRcdFx0XHRzaG93R3JvdXBJbnNlcnQ9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBMaW5rPXtmYWxzZX1cblx0XHRcdFx0c2hvd0dyb3VwVW5kbz17ZmFsc2V9XG5cdFx0XHRcdHNhbml0aXplVmFsdWU9e3RydWV9XG5cdFx0XHRcdHdyYXBwaW5nPXt0cnVlfVxuXHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdHJlcXVpcmVkPXt0aGlzLnJlcXVpcmVkfVxuXHRcdFx0XHR7Li4udGhpcy5nZXRQbHVnaW5zKCl9XG5cdFx0XHRcdGJ1dHRvbkdyb3Vwcz17dGhpcy5idXR0b25Hcm91cHMubGVuZ3RoID4gMCA/IFtdIDogdW5kZWZpbmVkfVxuXHRcdFx0Lz5cblx0XHQpIGFzIFJpY2hUZXh0RWRpdG9yO1xuXG5cdFx0dGhpcy5fZWRpdENvbnRlbnQuYXR0YWNoUmVhZHkodGhpcy5hZGRCdXR0b25Hcm91cHMsIHRoaXMpO1xuXHRcdC8vIEF0dGFjaCBhIHRpbWVyIHRvIGVuc3VyZSB0aGF0IHRoZSBidXR0b24gZ3JvdXBzIGFyZSBhZGRlZCBhZnRlciB0aGUgZWRpdG9yIGlzIHJlYWR5XG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2J1dHRvbkdyb3Vwc1RpbWVyKTtcblx0XHR0aGlzLl9idXR0b25Hcm91cHNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5jcmVhdGVDb250ZW50RGVib3VuY2VkKCk7XG5cdFx0fSwgMjAwMCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cdFx0cmV0dXJuIHRoaXMuX2VkaXRDb250ZW50O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBCdXR0b25zIGdyb3VwcyBuZWVkIHRvIGJlIGFkZGVkIHdoZW4gdGhlIFJURSBpcyByZWFkeSwgb3RoZXJ3aXNlIHNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZS5cblx0ICovXG5cdGFkZEJ1dHRvbkdyb3VwcygpOiB2b2lkIHtcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fYnV0dG9uR3JvdXBzVGltZXIpO1xuXHRcdGNvbnN0IGxhdGVCdXR0b25Hcm91cHMgPSB0aGlzLmdldEJ1dHRvbkdyb3VwcygpLnJldmVyc2UoKTtcblx0XHQvLyBUaGV5IGFsc28gc29tZWhvdyBuZWVkIHRvIGJlIGFkZGVkIGluIHJldmVyc2UgYmVjYXVzZSB0aGV5IGFsc28gZ2V0IGFkZGVkIGluIHRoZSBmaXJzdCBwbGFjZSA6RFxuXHRcdGZvciAoY29uc3QgbGF0ZUJ1dHRvbkdyb3VwIG9mIGxhdGVCdXR0b25Hcm91cHMpIHtcblx0XHRcdHRoaXMuX2VkaXRDb250ZW50Py5hZGRCdXR0b25Hcm91cChsYXRlQnV0dG9uR3JvdXApO1xuXHRcdH1cblx0XHR0aGlzLl9lZGl0Q29udGVudD8uZGV0YWNoUmVhZHkodGhpcy5hZGRCdXR0b25Hcm91cHMsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IGNsZWFucyB1cCB0aGUgcHJldmlvdXMgcmljaCB0ZXh0IGVkaXRvciBpbnN0YW5jZS5cblx0ICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgUmljaFRleHRFZGl0b3IgY29udHJvbCBkb2VzIG5vdCBhbHdheXMgZGVzdHJveSB0aGUgVGlueU1DRSBpbnN0YW5jZSxcblx0ICogd2hpY2ggY2FuIGxlYWQgdG8gaXNzdWVzIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdCBhbmQgZGlzcGxheSBtb2Rlcy5cblx0ICovXG5cdF9jbGVhbnVwUHJldmlvdXNSVEUoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2VkaXRDb250ZW50KSB7XG5cdFx0XHQvLyBJdCdzIGJldHRlciB0byBkZXN0cm95IHRoZSByaWNoIHRleHQgZWRpdG9yIGFzIGluIHNvbWUgY2FzZSB3aXRoIHNsb3cgbWFjaGluZSBzd2l0Y2hpbmcgYmV0d2VlbiBlZGl0IGFuZCBkaXNwbGF5IG1heSBicmVhayBpdFxuXHRcdFx0dGhpcy5fZWRpdENvbnRlbnQuZGVzdHJveSgpO1xuXHRcdFx0Ly8gRGVzdHJveSB0aGUgVGlueU1DRSBpbnN0YW5jZSBhcyB3ZWxsXG5cdFx0XHQvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBSaWNoVGV4dEVkaXRvciBjb250cm9sIGRvZXMgbm90IGFsd2F5cyBkZXN0cm95IHRoZSBUaW55TUNFIGluc3RhbmNlXG5cdFx0fVxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0d2luZG93LnRpbnltY2U/LmdldCh0aGlzLmNyZWF0ZUlkKFwiX3J0ZVwiKSArIFwiLXRleHRhcmVhXCIpPy5kZXN0cm95KCk7XG5cdH1cblxuXHRnZXREaXNwbGF5Q29udGVudCgpOiBGb3JtYXR0ZWRUZXh0IHtcblx0XHRpZiAodGhpcy5fZGlzcGxheUNvbnRlbnQpIHtcblx0XHRcdHRoaXMuX2Rpc3BsYXlDb250ZW50LmRlc3Ryb3koKTtcblx0XHR9XG5cblx0XHR0aGlzLl9jbGVhbnVwUHJldmlvdXNSVEUoKTtcblxuXHRcdHRoaXMuX2Rpc3BsYXlDb250ZW50ID0gKDxGb3JtYXR0ZWRUZXh0IGh0bWxUZXh0PXt0aGlzLnZhbHVlfSAvPikgYXMgRm9ybWF0dGVkVGV4dDtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGxheUNvbnRlbnQ7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IFJpY2hUZXh0RWRpdG9yIHwgRm9ybWF0dGVkVGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzSW5FZGl0TW9kZSAmJiAhdGhpcy5yZWFkT25seSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RWRpdENvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGlzcGxheUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQVlBO0VBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQSxJQVFxQkEsbUJBQW1CLElBQUFDLElBQUEsR0FEdkNDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFBQyxLQUFBLEdBSzdDQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRUMsUUFBUSxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FPNUNILFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsS0FBSztJQUFFRyxhQUFhLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVE5Q0wsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTzdCQyxXQUFXLENBQUM7SUFBRU4sSUFBSSxFQUFFLDBDQUEwQztJQUFFTyxRQUFRLEVBQUUsSUFBSTtJQUFFQyxZQUFZLEVBQUVDO0VBQVksQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FPNUdKLFdBQVcsQ0FBQztJQUFFTixJQUFJLEVBQUUscUNBQXFDO0lBQUVPLFFBQVEsRUFBRSxJQUFJO0lBQUVDLFlBQVksRUFBRUc7RUFBaUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRNUdiLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQWEsS0FBQSxHQU83QmQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxLQUFLO0lBQUVjLFFBQVEsRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzFDaEIsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFvQixNQUFB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
@@ -1,6 +1,7 @@
1
1
  import { compileExpression } from "sap/fe/base/BindingToolkit";
2
2
  import type { PropertiesOf } from "sap/fe/base/ClassSupport";
3
3
  import { aggregation, defineUI5Class, property } from "sap/fe/base/ClassSupport";
4
+ import type TemplateComponent from "sap/fe/core/TemplateComponent";
4
5
  import BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
5
6
  import { UI } from "sap/fe/core/helpers/BindingHelper";
6
7
  import ButtonGroup from "sap/fe/macros/richtexteditor/ButtonGroup";
@@ -10,7 +11,6 @@ import type { PropertyBindingInfo } from "sap/ui/base/ManagedObject";
10
11
  import type Control from "sap/ui/core/Control";
11
12
  import type { $ControlSettings } from "sap/ui/core/Control";
12
13
  // eslint-disable-next-line @typescript-eslint/no-restricted-imports
13
- import type TemplateComponent from "sap/fe/core/TemplateComponent";
14
14
  import RichTextEditor from "sap/ui/richtexteditor/RichTextEditor";
15
15
 
16
16
  type PluginDefinitionData = {
@@ -93,6 +93,11 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
93
93
 
94
94
  private _contentTimer?: number;
95
95
 
96
+ /**
97
+ * Timer to ensure that if the button groups are not added we restart the process.
98
+ */
99
+ private _buttonGroupsTimer?: number;
100
+
96
101
  constructor(properties: $ControlSettings & PropertiesOf<RichTextEditorBlock>, others?: $ControlSettings) {
97
102
  properties._isInEditMode = compileExpression(UI.IsEditable);
98
103
  super(properties, others);
@@ -169,10 +174,7 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
169
174
  }
170
175
 
171
176
  getEditContent = (): RichTextEditor => {
172
- if (this._editContent) {
173
- // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
174
- this._editContent.destroy();
175
- }
177
+ this._cleanupPreviousRTE();
176
178
 
177
179
  this._editContent = (
178
180
  <RichTextEditor
@@ -200,6 +202,11 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
200
202
  ) as RichTextEditor;
201
203
 
202
204
  this._editContent.attachReady(this.addButtonGroups, this);
205
+ // Attach a timer to ensure that the button groups are added after the editor is ready
206
+ clearTimeout(this._buttonGroupsTimer);
207
+ this._buttonGroupsTimer = setTimeout(() => {
208
+ this.createContentDebounced();
209
+ }, 2000) as unknown as number;
203
210
  return this._editContent;
204
211
  };
205
212
 
@@ -207,6 +214,7 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
207
214
  * Buttons groups need to be added when the RTE is ready, otherwise some of them are not available.
208
215
  */
209
216
  addButtonGroups(): void {
217
+ clearTimeout(this._buttonGroupsTimer);
210
218
  const lateButtonGroups = this.getButtonGroups().reverse();
211
219
  // They also somehow need to be added in reverse because they also get added in the first place :D
212
220
  for (const lateButtonGroup of lateButtonGroups) {
@@ -215,15 +223,35 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
215
223
  this._editContent?.detachReady(this.addButtonGroups, this);
216
224
  }
217
225
 
226
+ /**
227
+ * Method that cleans up the previous rich text editor instance.
228
+ * This is needed because the RichTextEditor control does not always destroy the TinyMCE instance,
229
+ * which can lead to issues when switching between edit and display modes.
230
+ */
231
+ _cleanupPreviousRTE(): void {
232
+ if (this._editContent) {
233
+ // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
234
+ this._editContent.destroy();
235
+ // Destroy the TinyMCE instance as well
236
+ // This is needed because the RichTextEditor control does not always destroy the TinyMCE instance
237
+ }
238
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
239
+ // @ts-ignore
240
+ window.tinymce?.get(this.createId("_rte") + "-textarea")?.destroy();
241
+ }
242
+
218
243
  getDisplayContent(): FormattedText {
219
244
  if (this._displayContent) {
220
245
  this._displayContent.destroy();
221
246
  }
247
+
248
+ this._cleanupPreviousRTE();
249
+
222
250
  this._displayContent = (<FormattedText htmlText={this.value} />) as FormattedText;
223
251
  return this._displayContent;
224
252
  }
225
253
 
226
- createContent(): RichTextEditor | FormattedText {
254
+ createContent(): RichTextEditor | FormattedText | undefined {
227
255
  if (this._isInEditMode && !this.readOnly) {
228
256
  return this.getEditContent();
229
257
  } else {