@sapui5/sap.fe.macros 1.141.2 → 1.143.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 (257) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -5,7 +5,7 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/field/FieldRuntime", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/field/FieldStructure", "sap/fe/macros/internal/field/FieldStructureHelper", "sap/m/MessageToast", "sap/ui/core/LabelEnablement", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/model/json/JSONModel", "./MacroAPI", "./field/FieldRuntimeHelper", "./inlineEdit/InlineEdit"], function (Log, BindingToolkit, ClassSupport, CommonUtils, CollaborationCommon, StableIdHelper, DataModelPathHelper, FieldRuntime, FieldTemplating, FieldStructure, FieldStructureHelper, MessageToast, LabelEnablement, Messaging, Message, FieldEditMode, JSONModel, MacroAPI, FieldRuntimeHelper, InlineEdit) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _dec34, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29;
9
9
  var setUpField = FieldStructureHelper.setUpField;
10
10
  var getDataModelObjectPathForValue = FieldTemplating.getDataModelObjectPathForValue;
11
11
  var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
@@ -104,8 +104,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
104
104
  type: "boolean"
105
105
  }), _dec30 = property({
106
106
  type: "boolean"
107
- }), _dec31 = xmlEventHandler(), _dec32 = xmlEventHandler(), _dec33 = xmlEventHandler(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_MacroAPI) {
108
- function Field(props, others) {
107
+ }), _dec31 = property({
108
+ type: "boolean"
109
+ }), _dec32 = xmlEventHandler(), _dec33 = xmlEventHandler(), _dec34 = xmlEventHandler(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_MacroAPI) {
110
+ function Field(props, others, scope) {
109
111
  var _this;
110
112
  let combinedProps;
111
113
  if (props) {
@@ -116,9 +118,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
116
118
  };
117
119
  } else {
118
120
  combinedProps = {
119
- ...props,
120
- ...others
121
+ ...props
121
122
  };
123
+ scope = others;
122
124
  }
123
125
  const {
124
126
  _flexId,
@@ -145,7 +147,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
145
147
  }
146
148
  }
147
149
  }
148
- _this = _MacroAPI.call(this, combinedProps) || this;
150
+ _this = _MacroAPI.call(this, combinedProps, scope) || this;
149
151
  /**
150
152
  * An expression that allows you to control the editable state of the field.
151
153
  *
@@ -187,7 +189,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
187
189
  */
188
190
  _initializerDefineProperty(_this, "change", _descriptor7, _this);
189
191
  /**
190
- * An event containing details is triggered when the field get the focus.
192
+ * An event containing details is triggered when the field is focused.
191
193
  *
192
194
  */
193
195
  _initializerDefineProperty(_this, "focusin", _descriptor8, _this);
@@ -254,6 +256,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
254
256
  * Whether the associated value help requires validation or not.
255
257
  */
256
258
  _initializerDefineProperty(_this, "_requiresValidation", _descriptor28, _this);
259
+ /**
260
+ * Enables strict handling for actions. When true, warning responses from API calls during action execution
261
+ * should not be treated as errors and normal execution should continue.
262
+ */
263
+ _initializerDefineProperty(_this, "disableStrictHandling", _descriptor29, _this);
257
264
  return _this;
258
265
  }
259
266
  _inheritsLoose(Field, _MacroAPI);
@@ -438,6 +445,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
438
445
  const feController = FieldRuntimeHelper.getExtensionController(controller);
439
446
  feController._sideEffects.handleFieldGroupChange(_event);
440
447
  };
448
+ _proto.applySettings = function applySettings(mSettings, oScope) {
449
+ this._doNotCreateOnNullContext = true; // We don't want to create the field if there is no context
450
+ return _MacroAPI.prototype.applySettings.call(this, mSettings, oScope);
451
+ };
441
452
  _proto._setAriaLabelledBy = function _setAriaLabelledBy(content) {
442
453
  if (content && content.addAriaLabelledBy) {
443
454
  const ariaLabelledBy = this.ariaLabelledBy;
@@ -856,6 +867,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
856
867
  if (preparedProperties.collaborationEnabled) this.collaborationEnabled = preparedProperties.collaborationEnabled;
857
868
  if (preparedProperties.displayStyle === "File") preparedProperties.fileUploaderVisible = !this.readOnly && preparedProperties.editableExpression;
858
869
  preparedProperties.getTranslatedText = this.getTranslatedText.bind(this);
870
+ if (preparedProperties.ariaLabelledBy === undefined) {
871
+ preparedProperties.ariaLabelledBy = this.ariaLabelledBy;
872
+ }
859
873
  return preparedProperties;
860
874
  }
861
875
 
@@ -924,13 +938,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
924
938
  bIsNavigable = bIsNavigable === "false" ? false : true;
925
939
  const entities = oThis?.contextPath?.getPath().split("/");
926
940
  const entitySetName = entities[entities.length - 1];
941
+ const disableStrictHandling = this.disableStrictHandling;
927
942
  const oParams = {
928
943
  contexts: ev.getSource().getBindingContext(),
929
944
  invocationGrouping: sInvocationGrouping,
930
945
  model: ev.getSource().getModel(),
931
946
  label: oDataField.Label,
932
947
  isNavigable: bIsNavigable,
933
- entitySetName: entitySetName
948
+ entitySetName: entitySetName,
949
+ disableStrictHandling: disableStrictHandling
934
950
  };
935
951
  controller.editFlow.invokeAction(oDataField.Action, oParams);
936
952
  };
@@ -942,8 +958,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
942
958
  FieldRuntimeHelper.onDataFieldWithNavigationPath(ev.getSource(), controller, preparedProperties.convertedMetaPath.Target.value);
943
959
  };
944
960
  }
945
- preparedProperties.eventHandlers.showCollaborationEditUser = this.onShowCollaborationEditUser.bind(this);
946
- preparedProperties.valueHelpId = FieldStructure.getPossibleValueHelpTemplateId(preparedProperties, this.getPageController(), this.getMetaModel());
961
+ if (preparedProperties.editMode !== "Display") {
962
+ preparedProperties.valueHelpId = FieldStructure.getPossibleValueHelpTemplateId(preparedProperties, this.getPageController(), this.getMetaModel());
963
+ }
947
964
  this.content = FieldStructure.getFieldStructureTemplate(preparedProperties);
948
965
  } catch (e) {
949
966
  if (e instanceof Error) {
@@ -979,11 +996,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
979
996
  const controller = this.getPageController();
980
997
  controller.collaborativeDraft.handleContentFocusOut(ev);
981
998
  };
982
- _proto.onShowCollaborationEditUser = function onShowCollaborationEditUser(ev) {
983
- const source = ev.getSource();
984
- const view = this.getPageController().getView();
985
- FieldRuntimeHelper.showCollaborationEditUser(source, view);
986
- };
987
999
  _proto.getPropertyBag = function getPropertyBag() {
988
1000
  const settings = {};
989
1001
  const properties = this.getMetadata().getAllProperties();
@@ -1179,7 +1191,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
1179
1191
  initializer: function () {
1180
1192
  return false;
1181
1193
  }
1182
- }), _applyDecoratedDescriptor(_class2.prototype, "handleChange", [_dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "handleChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleLiveChange", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "handleLiveChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onValidateFieldGroup", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "onValidateFieldGroup"), _class2.prototype), _class2)) || _class) || _class);
1194
+ }), _descriptor29 = _applyDecoratedDescriptor(_class2.prototype, "disableStrictHandling", [_dec31], {
1195
+ configurable: true,
1196
+ enumerable: true,
1197
+ writable: true,
1198
+ initializer: null
1199
+ }), _applyDecoratedDescriptor(_class2.prototype, "handleChange", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "handleChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleLiveChange", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "handleLiveChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onValidateFieldGroup", [_dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "onValidateFieldGroup"), _class2.prototype), _class2)) || _class) || _class);
1183
1200
  return Field;
1184
1201
  }, false);
1185
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJtaXhpbiIsIklubGluZUVkaXQiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsIl9kZWM0IiwiYmluZFRvU3RhdGUiLCJfZGVjNSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsImFzc29jaWF0aW9uIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiYWdncmVnYXRpb24iLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJyZXF1aXJlZCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMzMiIsIl9kZWMzMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFjcm9BUEkiLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY29tYmluZWRQcm9wcyIsImlkIiwiX2ZsZXhJZCIsInZoSWRQcmVmaXgiLCJpZFByZWZpeCIsIl9hcGlJZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGUiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJmb2N1c0hhbmRsZXJzQXR0YWNoZWQiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldENvbGxhYm9yYXRpb25CaW5kaW5nIiwiZmllbGQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzIiwiY2hhbmdlRXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImlzVHJhbnNpZW50IiwidmFsdWVSZXNvbHZlZCIsImdldFBhcmFtZXRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWQiLCJmaWVsZFZhbGlkaXR5IiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJjdXN0b21WYWx1ZUJpbmRpbmciLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsIiwic2V0UHJvcGVydHkiLCJwYXRoIiwidXBkYXRlQmluZGluZ3MiLCJmZUNvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25Db250cm9sbGVyIiwidW5kZWZpbmVkIiwidGhlbiIsIm9Tb3VyY2UiLCJtUGFyYW1ldGVycyIsImZpcmVFdmVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJpc1ZhbGlkIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImNhdGNoIiwiTG9nIiwiZGVidWciLCJ2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50Iiwic2V0VGltZW91dCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkIiwiYkNvbGxhYm9yYXRpb25FbmFibGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkYXRhIiwiZ2V0QmluZGluZ0luZm8iLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJpbmRleE9mIiwibWFwIiwiZ2V0UGF0aCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkNoYW5nZSIsImNvbnRlbnQiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsImlzRGF0YVVwZGF0ZWQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInVwZGF0ZUNvbGxhYm9yYXRpb24iLCJoYW5kbGVMaXZlQ2hhbmdlIiwiX2V2ZW50Iiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJzb3VyY2VGaWVsZCIsInZpZXciLCJnZXRDb250cm9sbGVyIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsIl9zZXRBcmlhTGFiZWxsZWRCeSIsImFkZEFyaWFMYWJlbGxlZEJ5IiwiYXJpYUxhYmVsbGVkQnkiLCJhcmlhTGFiZWxsZWRCeXMiLCJnZXRBcmlhTGFiZWxsZWRCeSIsImdldENvbnRlbnQiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldElubmVyQ29udHJvbCIsImZpZWxkV3JhcHBlciIsImNvbnRyb2xzIiwiZ2V0Q29udGVudEVkaXQiLCJpbm5lckNvbnRyb2wiLCJsZW5ndGgiLCJnZXRJdGVtcyIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJlZGl0Q29udHJvbCIsIm5vdExvY2tDb250cm9scyIsImNhbkxvY2siLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmZvY3VzaW4iLCJldnQiLCJoYW5kbGVDb250ZW50Rm9jdXNJbiIsImdldENvbnRyb2xJbkZpZWxkV3JhcHBlciIsImNvbnRyb2wiLCJnZXRFZGl0TW9kZSIsImdldENvbnRlbnREaXNwbGF5IiwiaGFzUGVuZGluZ1VzZXJJbnB1dCIsInRhcmdldENvbnRyb2wiLCJnZXRMYWJlbENvbnRyb2xzIiwicmVmZXJlbmNpbmdMYWJlbHMiLCJfZ2V0TGFiZWxzRnJvbVJlZmVyZW5jaW5nTGFiZWxzIiwiX2dldExhYmVsc0ZvckZvcm1GaWVsZHMiLCJsYWJlbElkcyIsIkxhYmVsRW5hYmxlbWVudCIsImdldFJlZmVyZW5jaW5nTGFiZWxzIiwibGFiZWxDb250cm9scyIsImdldFZpZXciLCJmb3JFYWNoIiwibGFiZWxJZCIsImxhYmVsQ29udHJvbCIsImJ5SWQiLCJwdXNoIiwiZ2V0SWQiLCJnZXRQYXJlbnQiLCJnZXRMYWJlbENvbnRyb2wiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkIiwiZ2V0VGV4dCIsImdldFRpdGxlIiwiRXJyb3IiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJtYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJzZXRWYWx1ZSIsInNldFNlbGVjdGVkIiwic2V0VGV4dCIsImdldEVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsImVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc2FibGVkIiwibGluayIsInNldEVuYWJsZWQiLCJlbmFibGVkIiwiZWRpdE1vZGVUeXBlIiwiRWRpdGFibGUiLCJzZXRFZGl0TW9kZSIsInNldExpbmtFbmFibGVkIiwiYWRkTWVzc2FnZSIsInBhcmFtZXRlcnMiLCJtc2dNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRSZXNvbHZlZFBhdGgiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0YXJnZXQiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwiZGVzY3JpcHRpb24iLCJwZXJzaXN0ZW50IiwiYWRkTWVzc2FnZXMiLCJyZW1vdmVNZXNzYWdlIiwiYXJyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsInJlc3VsdCIsImZpbmQiLCJlIiwicmVtb3ZlTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwicHJlcGFyZWRQcm9wZXJ0aWVzIiwicHJlcGFyZVByb3BlcnRpZXMiLCJjcmVhdGVDb250ZW50IiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJpbnB1dEZpZWxkUHJvcGVydGllcyIsImdldFByb3BlcnR5QmFnIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJyZWFkT25seSIsImJpbmRTdGF0ZSIsInNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJvbkxpdmVDaGFuZ2UiLCJoYXNMaXN0ZW5lcnMiLCJwcmVwcm9jZXNzb3JDb250ZXh0Iiwib2RhdGFNZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJjb21wdXRlZENvbnRleHRQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRDb21wdXRlZENvbnRleHRQYXRoIiwiY29tcHV0ZWRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNQcm9wZXJ0eUluaXRpYWwiLCJ2aXNpYmxlIiwic2V0VXBGaWVsZCIsIm1vZGVscyIsInZpZXdEYXRhIiwiSlNPTk1vZGVsIiwiZ2V0Vmlld0RhdGEiLCJpbnRlcm5hbCIsImdldEFwcENvbXBvbmVudCIsImFwcENvbXBvbmVudCIsInNldE9yQmluZFByb3BlcnR5IiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwiaXNEeW5hbWljSW5zdGFudGlhdGlvbiIsImRpc3BsYXlTdHlsZSIsImZpbGVVcGxvYWRlclZpc2libGUiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJnZXRUcmFuc2xhdGVkVGV4dCIsImJpbmQiLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJjb21wdXRlZEVkaXRNb2RlIiwiZXZlbnRIYW5kbGVycyIsImNoYW5nZSIsImxpdmVDaGFuZ2UiLCJ2YWxpZGF0ZUZpZWxkR3JvdXAiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwib25IYW5kbGVUeXBlTWlzc21hdGNoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJvbkhhbmRsZUZpbGVTaXplRXhjZWVkIiwiaGFuZGxlVXBsb2FkQ29tcGxldGUiLCJldiIsImZpbGVGaWxlbmFtZUV4cHJlc3Npb24iLCJmaWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJ1cGxvYWRTdHJlYW0iLCJvblVwbG9hZFN0cmVhbSIsInJlbW92ZVN0cmVhbSIsImhhbmRsZU9wZW5VcGxvYWRlciIsIm9uSGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9uSGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbk9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJvbkxpbmtQcmVzc2VkIiwib25EYXRhRmllbGRXaXRoSUJOIiwib0RhdGFGaWVsZCIsImdldE9iamVjdCIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsIm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIiwib1RoaXMiLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiJEVudW1NZW1iZXIiLCJiSXNOYXZpZ2FibGUiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiZW50aXRpZXMiLCJzcGxpdCIsImVudGl0eVNldE5hbWUiLCJvUGFyYW1zIiwiY29udGV4dHMiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIkxhYmVsIiwiaXNOYXZpZ2FibGUiLCJpbnZva2VBY3Rpb24iLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwiRmllbGRSdW50aW1lIiwiZGlzcGxheUFnZ3JlZ2F0ZURldGFpbHMiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnZlcnRlZE1ldGFQYXRoIiwiJFR5cGUiLCJvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCIsIlRhcmdldCIsInNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJvblNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJ2YWx1ZUhlbHBJZCIsIkZpZWxkU3RydWN0dXJlIiwiZ2V0UG9zc2libGVWYWx1ZUhlbHBUZW1wbGF0ZUlkIiwiZ2V0RmllbGRTdHJ1Y3R1cmVUZW1wbGF0ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJwcmVzc0xpbmsiLCJoYW5kbGVDb250ZW50Rm9jdXNPdXQiLCJzZXR0aW5ncyIsInByb3BlcnRpZXMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiYWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwicHJvcGVydHlOYW1lIiwiY3VycmVudFByb3BlcnR5VmFsdWUiLCJhZ2dyZWdhdGlvbk5hbWUiLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkcmVuQXJyYXkiLCJtYW5hZ2VkT2JqZWN0IiwibUJpbmRpbmdJbmZvcyIsImdldElubGluZUVkaXRQcm9wZXJ0eSIsImdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCB0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250YWN0IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRhY3QvQ29udGFjdFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0J1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eVwiO1xuaW1wb3J0IHR5cGUgQ29uZGl0aW9uYWxXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgVGV4dExpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvVGV4dExpbmtcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIERhdGFQb2ludCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9EYXRhUG9pbnRcIjtcbmltcG9ydCAqIGFzIEZpZWxkU3RydWN0dXJlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCB7IHNldFVwRmllbGQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSBFeHBhbmRhYmxlVGV4dCBmcm9tIFwic2FwL20vRXhwYW5kYWJsZVRleHRcIjtcbmltcG9ydCB0eXBlIEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIElucHV0QmFzZSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0QmFzZSRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IHR5cGUgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGFiZWxFbmFibGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9MYWJlbEVuYWJsZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQsIGRlZmF1bHQgYXMgbWRjRmllbGQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyBWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCxcblx0RmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcIi4vTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEVtYWlsIGZyb20gXCIuL2NvbnRhY3QvRW1haWxcIjtcbmltcG9ydCB0eXBlIEZpbGVXcmFwcGVyIGZyb20gXCIuL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4vZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuaW1wb3J0IElubGluZUVkaXQgZnJvbSBcIi4vaW5saW5lRWRpdC9JbmxpbmVFZGl0XCI7XG5cbnR5cGUgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5ID0gQ29udHJvbCAmIHsgYWRkQXJpYUxhYmVsbGVkQnk/OiAoaWQ6IHN0cmluZykgPT4gdm9pZDsgZ2V0QXJpYUxhYmVsbGVkQnk6ICgpID0+IHN0cmluZ1tdIH07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgZmllbGQgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogVXN1YWxseSwgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24gaXMgZXhwZWN0ZWQsIGJ1dCB0aGUgZmllbGQgY2FuIGFsc28gYmUgdXNlZCB0byBkaXNwbGF5IGEgcHJvcGVydHkgZnJvbSB0aGUgZW50aXR5IHR5cGUuXG4gKiBXaGVuIGNyZWF0aW5nIGEgRmllbGQgYnVpbGRpbmcgYmxvY2ssIHlvdSBtdXN0IHByb3ZpZGUgYW4gSUQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgd29ya3MgY29ycmVjdGx5LlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RmllbGQgaWQ9XCJNeUZpZWxkXCIgbWV0YVBhdGg9XCJNeVByb3BlcnR5XCIgLyZndDtcbiAqIDwvcHJlPlxuICogPGEgaHJlZj1cIi9zYXB1aTUtc2RrLWludGVybmFsL3Rlc3QtcmVzb3VyY2VzL3NhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2J1aWxkaW5nQmxvY2tPdmVydmlld1wiIHRhcmdldD1cIl9ibGFua1wiID5PdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja3M8L2E+XG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5GaWVsZFxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIsIHtcblx0cmV0dXJuVHlwZXM6IFtcblx0XHRcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZvcm1FbGVtZW50V3JhcHBlclwiIC8qLCBub3Qgc3VyZSBpIHdhbnQgdG8gYWRkIHRob3NlIHlldCBcInNhcC5mZS5tYWNyb3MuRmllbGRcIiwgXCJzYXAubS5IQm94XCIsIFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5Db25kaXRpb25hbFdyYXBwZXJcIiwgXCJzYXAubS5CdXR0b25cIiovXG5cdF1cbn0pXG5AbWl4aW4oSW5saW5lRWRpdClcbmNsYXNzIEZpZWxkIGV4dGVuZHMgTWFjcm9BUEk8eyByZWFkT25seTogYm9vbGVhbjsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9PiB7XG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBlZGl0YWJsZSBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSBpZiB0aGUgcGFnZSBpcyBjdXJyZW50bHkgZWRpdGFibGUuXG5cdCAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdCBzZXQgYSBmaWVsZCB0byBlZGl0YWJsZSBpZiBpdCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFzIG5vdCBlZGl0YWJsZS5cblx0ICogQHByaXZhdGVcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGJpbmRUb1N0YXRlOiB0cnVlIH0pXG5cdHB1YmxpYyByZWFkb25seSByZWFkT25seSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBGaWVsZCBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgaWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uczogW10sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIlByb3BlcnR5XCJdXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogV3JhcCBmaWVsZFxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgd3JhcD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXVxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgY29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGNvbnRhaW5pbmcgZGV0YWlscyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGNoYW5nZSE6IEV2ZW50SGFuZGxlcjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWVsZCBnZXQgdGhlIGZvY3VzLlxuXHQgKlxuXHQgKi9cblx0QGV2ZW50KClcblx0Zm9jdXNpbiE6IEV2ZW50SGFuZGxlcjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgbGl2ZSBjaGFuZ2VkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRsaXZlQ2hhbmdlITogRXZlbnRIYW5kbGVyO1xuXG5cdEBhc3NvY2lhdGlvbih7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWRQcmVmaXg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFByZWZpeCBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIElEIG9mIHRoZSB2YWx1ZSBoZWxwIHVzZWQgZm9yIHRoZSBmaWVsZFxuXHQgKi9cblx0QGFzc29jaWF0aW9uKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyB2aElkUHJlZml4ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBhY3Rpb24gd2lsbCBuYXZpZ2F0ZSBhZnRlciBleGVjdXRpb25cblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IG5hdmlnYXRlQWZ0ZXJBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZEZvcm1hdE9wdGlvbnNcIiB9KVxuXHRwdWJsaWMgcmVhZG9ubHkgZm9ybWF0T3B0aW9ucz86IEZpZWxkRm9ybWF0T3B0aW9ucztcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cblx0cHVibGljIF9mbGV4SWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEVkaXQgTW9kZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHRoZSBlZGl0TW9kZSBpcyB1bmRlZmluZWQgdGhlbiB3ZSBjb21wdXRlIGl0IGJhc2VkIG9uIHRoZSBtZXRhZGF0YVxuXHQgKiBPdGhlcndpc2Ugd2UgdXNlIHRoZSB2YWx1ZSBwcm92aWRlZCBoZXJlLlxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInNhcC51aS5tZGMuZW51bXMuRmllbGRFZGl0TW9kZVwiXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBlZGl0TW9kZT86IEZpZWxkRWRpdE1vZGUgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHQvKipcblx0ICogT3B0aW9uIHRvIGFkZCBzZW1hbnRpYyBvYmplY3RzIGZvciBhIGZpZWxkLlxuXHQgKiBUaGlzIHBhcmFtZXRlciBvdmVyd3JpdGVzIHRoZSBzZW1hbnRpYyBvYmplY3RzIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9ucy5cblx0ICogVmFsaWQgb3B0aW9ucyBhcmUgZWl0aGVyIGEgc2luZ2xlIHNlbWFudGljIG9iamVjdCwgYSBzdHJpbmdpZmllZCBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3RzLFxuXHQgKiBhIGZvcm1hdHRlciBvciBhIHNpbmdsZSBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJuaW5nIGVpdGhlciBhIHNpbmdsZSBzZW1hbnRpYyBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc2VtYW50aWMgb2JqZWN0cy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgYmluZFRvU3RhdGU6IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNlbWFudGljT2JqZWN0ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gb3B0aW9uYWxseSBwcm92aWRlIGFuIGV4dGVybmFsIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBPRGF0YSBtb2RlbC5cblx0ICogSXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIGEgZmllbGQgd2l0aCB2YWx1ZSBoZWxwLCBhbmQgd2l0aG91dCBzdXBwb3J0IGZvciBjb21wbGV4IHZhbHVlIGhlbHAgKGN1cnJlbmN5IC8gdW5pdCkuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRiaW5kYWJsZTogdHJ1ZSxcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlLFxuXHRcdHJlcXVpcmVkOiBmYWxzZVxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZXh0ZXJuYWwgZGVzY3JpcHRpb24gdGhhdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IG1vZGVsIHRoYW4gdGhlIG9EYXRhIG1vZGVsLlxuXHQgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHZhbHVlIHByb3BlcnR5LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAudWkuY29yZS5UZXh0QWxpZ25cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdGV4dEFsaWduPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzQmluZGluZ0luZm86IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNob3dFcnJvck9iamVjdFN0YXR1cz86IG9iamVjdCB8IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgY29sbGFib3JhdGlvbkVuYWJsZWQ/OiBib29sZWFuOyAvLyBOZWVkIHRvIGJlIGNvbXB1dGVkIG9uIGRlbWFuZFxuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIG1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aD86IHN0cmluZzsgLy8gTmVlZCB0byBiZSBjb21wdXRlZCBvbiBkZW1hbmRcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdGN1c3RvbVZhbHVlQmluZGluZz86IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGlubGluZUVkaXRFbmFibGVkPyA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc0lubGluZUVkaXQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgZm9jdXNIYW5kbGVyc0F0dGFjaGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjb21wdXRlZE1ldGFQYXRoPzogQ29udGV4dDtcblxuXHRwcml2YXRlIGNvbXB1dGVkQ29udGV4dFBhdGg/OiBDb250ZXh0O1xuXG5cdHByaXZhdGUgb2RhdGFNZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdF9hcGlJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaGVscCByZXF1aXJlcyB2YWxpZGF0aW9uIG9yIG5vdC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9yZXF1aXJlc1ZhbGlkYXRpb24/OiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwcmVwcm9jZXNzb3JDb250ZXh0ITogWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluZGluZyB1c2VkIGZvciBjb2xsYWJvcmF0aW9uIG5vdGlmaWNhdGlvbnMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZ1xuXHQgKi9cblx0Z2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoZmllbGQ6IENvbnRyb2wpOiBPRGF0YUxpc3RCaW5kaW5nIHwgT0RhdGFDb250ZXh0QmluZGluZyB7XG5cdFx0bGV0IGJpbmRpbmcgPSAoZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQpLmdldEJpbmRpbmcoKTtcblxuXHRcdGlmICghYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0cyBkYXRhIGZyb20gYSBjaGFuZ2UgZXZlbnQgZm9yIHVzYWdlIGluIHRoZSBoYW5kbGVDaGFuZ2UgbWV0aG9kLlxuXHQgKiBAcGFyYW0gY2hhbmdlRXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgZGV0YWlsc1xuXHQgKi9cblx0cHJpdmF0ZSBleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHtcblx0XHRzb3VyY2U6IG1kY0ZpZWxkO1xuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRcdGlzVHJhbnNpZW50OiBib29sZWFuO1xuXHRcdHZhbHVlUmVzb2x2ZWQ6IFByb21pc2U8dm9pZD47XG5cdFx0dmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbjtcblx0XHRjdXN0b21WYWx1ZUJpbmRpbmc6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvIHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBzb3VyY2UgPSBjaGFuZ2VFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdC8vIElmIHRoZSBmaWVsZCBpcyBib3VuZCB0byBhIEpTT04gbW9kZWwsIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIHJldHVybnMgdW5kZWZpbmVkLlxuXHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIGNhbm5vdCBjYWxsIGlzVHJhbnNpZW50IG9uIGl0LiBEZWZhdWx0aW5nIHRvIGZhbHNlLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gc291cmNlICYmIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpZW50ID0gYmluZGluZ0NvbnRleHQgPyAoYmluZGluZ0NvbnRleHQgYXMgdW5rbm93biBhcyB7IGlzVHJhbnNpZW50OiBGdW5jdGlvbiB9KS5pc1RyYW5zaWVudCgpIDogZmFsc2U7XG5cdFx0Y29uc3QgdmFsdWVSZXNvbHZlZCA9IGNoYW5nZUV2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0Y29uc3QgdmFsaWQgPSBjaGFuZ2VFdmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKTtcblx0XHRjb25zdCBmaWVsZFZhbGlkaXR5ID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShjaGFuZ2VFdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXTtcblx0XHRjb25zdCBjdXN0b21WYWx1ZUJpbmRpbmcgPSB0aGlzPy5jdXN0b21WYWx1ZUJpbmRpbmc7XG5cblx0XHRyZXR1cm4geyBzb3VyY2UsIGNvbnRyb2xsZXIsIGlzVHJhbnNpZW50LCB2YWx1ZVJlc29sdmVkLCB2YWxpZCwgZmllbGRWYWxpZGl0eSwgY3VzdG9tVmFsdWVCaW5kaW5nIH07XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlQ2hhbmdlKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IHsgc291cmNlLCBjb250cm9sbGVyLCBpc1RyYW5zaWVudCwgdmFsdWVSZXNvbHZlZCwgdmFsaWQsIGZpZWxkVmFsaWRpdHksIGN1c3RvbVZhbHVlQmluZGluZyB9ID1cblx0XHRcdHRoaXMuZXh0cmFjdENoYW5nZUV2ZW50RGV0YWlscyhjaGFuZ2VFdmVudCk7XG5cblx0XHRpZiAoY3VzdG9tVmFsdWVCaW5kaW5nKSB7XG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cdFx0XHRjb25zdCB2YWx1ZU1vZGVsID0gc291cmNlPy5nZXRNb2RlbChjdXN0b21WYWx1ZUJpbmRpbmcubW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgQ2hlY2tCb3gkU2VsZWN0RXZlbnQpLmdldFBhcmFtZXRlcihcInNlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgSW5wdXRCYXNlJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHRcdHZhbHVlTW9kZWw/LnNldFByb3BlcnR5KGN1c3RvbVZhbHVlQmluZGluZy5wYXRoLCBuZXdWYWx1ZSk7XG5cdFx0XHR2YWx1ZU1vZGVsPy51cGRhdGVCaW5kaW5ncyh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIEZFIENvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgZXh0ZW5zaW9uQVBJIHRvIGFjY2VzcyBpbnRlcm5hbCBGRSBjb250cm9sbGVyc1xuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgPyBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEN1cnJlbnRseSB3ZSBoYXZlIHVuZGVmaW5lZCBhbmQgdHJ1ZS4uLiBhbmQgb3VyIGNyZWF0aW9uIHJvdyBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhpcy5cblx0XHQvLyBJIHdvdWxkIG1vdmUgdGhpcyBsb2dpYyB0byB0aGlzIHBsYWNlIGFzIGl0J3MgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBmaWVsZCBjb25zdW1lclxuXHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gVGhlIGV2ZW50IGlzIGdvbmUuIEZvciBub3cgd2UnbGwganVzdCByZWNyZWF0ZSBpdCBhZ2FpblxuXHRcdFx0XHQoY2hhbmdlRXZlbnQgYXMgeyBvU291cmNlPzogbWRjRmllbGQgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiB2YWxpZCA/PyB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXM/LmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IHRydWUgfSk7XG5cdFx0XHRcdGlmICghaXNUcmFuc2llbnQpIHtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIHNpZGUgZWZmZWN0cyB3aXRob3V0IHJlZ2lzdGVyaW5nIGRlZmVycmVkIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQgYmVmb3JlIHZhbHVlUmVzb2x2ZWQgaXMgcmVzb2x2ZWQuXG5cdFx0XHRcdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2UoY2hhbmdlRXZlbnQsICEhZmllbGRWYWxpZGl0eSwgdmFsdWVSZXNvbHZlZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmZldGNoUmVjb21tZW5kYXRpb25zKHNvdXJjZSwgY29udHJvbGxlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IG1kY0ZpZWxkIH0pLm9Tb3VyY2UgPSBzb3VyY2U7XG5cdFx0XHRcdChjaGFuZ2VFdmVudCBhcyB7IG1QYXJhbWV0ZXJzPzogeyB2YWxpZD86IGJvb2xlYW4gfSB9KS5tUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHR2YWxpZDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0TG9nLmRlYnVnKFwiUHJlcmVxdWlzaXRlcyBvbiBGaWVsZCBmb3IgdGhlIFNpZGVFZmZlY3RzIGFuZCBSZWNvbW1lbmRhdGlvbnMgaGF2ZSBiZWVuIHJlamVjdGVkXCIpO1xuXHRcdFx0XHQvLyBhcyB0aGUgVUkgbWlnaHQgbmVlZCB0byByZWFjdCBvbi4gV2UgY291bGQgcHJvdmlkZSBhIHBhcmFtZXRlciB0byBpbmZvcm0gaWYgdmFsaWRhdGlvblxuXHRcdFx0XHQvLyB3YXMgc3VjY2Vzc2Z1bD9cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgeyB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLCBpc1ZhbGlkOiB2YWxpZCA/PyBmYWxzZSB9KTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gRm9yIHRoZSBFZGl0RmxvdyBzeW5jaHJvbml6YXRpb24sIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgUEFUQ0ggcmVxdWVzdCB0byBiZSBzZW50IChvciBhbiBlcnJvciB0byBiZSBkZXRlY3RlZCksIG90aGVyd2lzZSB0aGVyZSBjb3VsZCBiZSBlLmcuIGFjdGlvbiBvciBzYXZlIGludm9rZWQgaW4gcGFyYWxsZWwgd2l0aCB0aGUgUEFUQ0ggcmVxdWVzdC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgd2l0aCBhIDAtdGltZW91dCwgdG8gYWxsb3cgZm9yIHRoZSAncGF0Y2hTZW50JyBldmVudCB0byBiZSBzZW50IGJ5IHRoZSBiaW5kaW5nICh0aGVuIHRoZSBpbnRlcm5hbCBlZGl0IGZsb3cgc3luY2hyb25pemF0aW9uIGtpY2tzIGluIHdpdGggRWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50KS5cblx0XHRjb25zdCB2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50ID0gdmFsdWVSZXNvbHZlZFxuXHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdGZlQ29udHJvbGxlcj8uZWRpdEZsb3cuc3luY1Rhc2sodmFsdWVSZXNvbHZlZEFuZFBhdGNoU2VudCk7XG5cblx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQsIGl0IG1lYW5zIHRoZSByZXF1ZXN0IHdvdWxkIGZhaWwgYW55d2F5IGFzIHRoZSByZWNvcmQgZG9lcyBub3QgZXhpc3QgaW4gcmVhbGl0eVxuXHRcdC8vIFNob3VsZCB0aGUgcmVxdWVzdCBiZSBtYWRlIGluIGZ1dHVyZSBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQ/XG5cdFx0aWYgKGlzVHJhbnNpZW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChjaGFuZ2VFdmVudCwgISFmaWVsZFZhbGlkaXR5LCB2YWx1ZVJlc29sdmVkKTtcblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBiQ29sbGFib3JhdGlvbkVuYWJsZWQgPSBjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKTtcblxuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoc291cmNlKTtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtcblx0XHRcdFx0Li4uKChzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSB8fCBzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJzZWxlY3RlZFwiKSk/LnBhcnRzIHx8IFtdKSxcblx0XHRcdFx0Li4uKHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8ucGFydHMgfHwgW10pXG5cdFx0XHRdXG5cdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcGFydD8ucGF0aCAhPT0gdW5kZWZpbmVkICYmIHBhcnQucGF0aC5pbmRleE9mKFwiQEBcIikgPCAwOyAvLyBSZW1vdmUgYmluZGluZyBwYXJ0cyB3aXRoIEBAIHRoYXQgbWFrZSBubyBzZW5zZSBmb3IgY29sbGFib3JhdGlvbiBtZXNzYWdlc1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQubWFwKGZ1bmN0aW9uIChwYXJ0OiB7IHBhdGg6IHN0cmluZyB9KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7cGFydC5wYXRofWA7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGcm9tIHRoaXMgcG9pbnQsIHdlIHdpbGwgYWx3YXlzIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgKFVOTE9DSyBvciBDSEFOR0UpLCBzbyB3ZSByZXRhaW5cblx0XHRcdC8vIGEgcG90ZW50aWFsIFVOTE9DSyB0aGF0IHdvdWxkIGJlIHNlbnQgaW4gaGFuZGxlRm9jdXNPdXQsIHRvIG1ha2Ugc3VyZSBpdCdzIHNlbnQgYWZ0ZXIgdGhlIENIQU5HRSBtZXNzYWdlXG5cdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmV0YWluQXN5bmNNZXNzYWdlcyhkYXRhKTtcblxuXHRcdFx0Y29uc3Qgc2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vIFRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyIC0tPiB3YWl0IHVudGlsIGl0J3Mgc2VudCB0byB0aGUgc2VydmVyIGJlZm9yZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzXG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsIGNvbnRlbnQ6IGRhdGEgfSk7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGlzRGF0YVVwZGF0ZWQgPSBiaW5kaW5nLmhhc1BlbmRpbmdDaGFuZ2VzKCk7XG5cdFx0XHRpZiAoaXNEYXRhVXBkYXRlZCkge1xuXHRcdFx0XHRzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cGRhdGVDb2xsYWJvcmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIWlzRGF0YVVwZGF0ZWQpIHtcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGlmIHRoZSBiaW5kaW5nIGhhcyBzb21lIHBlbmRpbmcgY2hhbmdlcywgc2luY2UgaXQgbWF5IGhhdmUgYmVlbiB1cGRhdGVkIG9uY2UgdGhlIEZpZWxkIHZhbHVlIGlzIHJlc29sdmVkXG5cdFx0XHRcdFx0aWYgKGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0c2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fCAoc291cmNlIGFzIENvbnRyb2wpLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVMaXZlQ2hhbmdlKF9ldmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25WYWxpZGF0ZUZpZWxkR3JvdXAoX2V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlRmllbGQgPSBfZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhzb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKTtcblx0XHRmZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoX2V2ZW50KTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogUHJvcGVydGllc09mPEZpZWxkLCBcImNoYW5nZVwiIHwgXCJsaXZlQ2hhbmdlXCIgfCBcImZvY3VzaW5cIj4sIG90aGVycz86IFByb3BlcnRpZXNPZjxGaWVsZD4pIHtcblx0XHRsZXQgY29tYmluZWRQcm9wcztcblxuXHRcdGlmIChwcm9wcykge1xuXHRcdFx0aWYgKHR5cGVvZiBwcm9wcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5vdGhlcnMsIGlkOiBwcm9wcyB9IGFzIFByb3BlcnRpZXNPZjxGaWVsZD47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5wcm9wcywgLi4ub3RoZXJzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgeyBfZmxleElkLCB2aElkUHJlZml4LCBpZFByZWZpeCwgaWQsIF9hcGlJZCB9ID0gY29tYmluZWRQcm9wcztcblxuXHRcdFx0aWYgKF9mbGV4SWQgJiYgIV9mbGV4SWQuaW5jbHVkZXMoXCItY29udGVudFwiKSkge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9hcGlJZCA9IF9mbGV4SWQ7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuX2ZsZXhJZCA9IGAke19mbGV4SWR9LWNvbnRlbnRgO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXZoSWRQcmVmaXgpIHtcblx0XHRcdFx0Ly9ubyB2aElkUHJlZml4IG1lYW5zIFwicHVibGljIHVzZSBjYXNlXCJcblx0XHRcdFx0Y29tYmluZWRQcm9wcy52aElkUHJlZml4ID0gXCJGaWVsZFZhbHVlSGVscFwiO1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9mbGV4SWQgPSBpZDtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5pZFByZWZpeCA9IGlkUHJlZml4IHx8IGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpZCkge1xuXHRcdFx0XHRpZiAoY29tYmluZWRQcm9wcy5fYXBpSWQpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gY29tYmluZWRQcm9wcy5fYXBpSWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaWRQcmVmaXgpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gZ2VuZXJhdGUoW2lkUHJlZml4LCBcIkZpZWxkXCJdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRzdXBlcihjb21iaW5lZFByb3BzKTtcblx0fVxuXG5cdF9zZXRBcmlhTGFiZWxsZWRCeShjb250ZW50PzogQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTogdm9pZCB7XG5cdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5hZGRBcmlhTGFiZWxsZWRCeSkge1xuXHRcdFx0Y29uc3QgYXJpYUxhYmVsbGVkQnkgPSB0aGlzLmFyaWFMYWJlbGxlZEJ5O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGlkIG9mIGFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRcdGNvbnN0IGFyaWFMYWJlbGxlZEJ5cyA9IGNvbnRlbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKSB8fCBbXTtcblx0XHRcdFx0aWYgKCFhcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoaWQpKSB7XG5cdFx0XHRcdFx0Y29udGVudC5hZGRBcmlhTGFiZWxsZWRCeShpZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENvbnRhY3QgY29udHJvbHMgc3VjaCBhcyBFbWFpbCBhbmQgQ29udGFjdFxuXHRcdFx0aWYgKChjb250ZW50IGFzIENvbnRyb2wpLmlzQShcInNhcC5mZS5tYWNyb3MuY29udGFjdC5Db250YWN0XCIpIHx8IChjb250ZW50IGFzIENvbnRyb2wpLmlzQShcInNhcC5mZS5tYWNyb3MuY29udGFjdC5FbWFpbFwiKSkge1xuXHRcdFx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSgoY29udGVudCBhcyB1bmtub3duIGFzIENvbnRhY3QgfCBFbWFpbCkuZ2V0Q29udGVudCgpIGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHQvLyBiZWZvcmUgY2FsbGluZyB0aGUgcmVuZGVyZXIgb2YgdGhlIEZpZWxkIHBhcmVudCBjb250cm9sIG1heSBoYXZlIHNldCBhcmlhTGFiZWxsZWRCeVxuXHRcdC8vIHdlIGVuc3VyZSBpdCBpcyBwYXNzZWQgdG8gaXRzIGlubmVyIGNvbnRyb2xzXG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SW5uZXJDb250cm9sKHNvdXJjZTogQ29udHJvbCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzb3VyY2U/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFzb3VyY2U/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsZVdyYXBwZXJcIikpIHtcblx0XHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHNvdXJjZSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+O1xuXHRcdFx0Y29uc3QgY29udHJvbHMgPSBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKSBhcyBDb250cm9sW107XG5cdFx0XHRsZXQgaW5uZXJDb250cm9sO1xuXHRcdFx0aWYgKGNvbnRyb2xzLmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRcdGlubmVyQ29udHJvbCA9IGNvbnRyb2xzWzBdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlubmVyQ29udHJvbD8uaXNBKFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0XHRpbm5lckNvbnRyb2wgPSAoaW5uZXJDb250cm9sIGFzIEhCb3gpLmdldEl0ZW1zKClbMF07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaW5uZXJDb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWRpdENvbnRyb2wgPSB0aGlzLmdldElubmVyQ29udHJvbCh0aGlzLmNvbnRlbnQpO1xuXHRcdGNvbnN0IG5vdExvY2tDb250cm9scyA9IFtcInNhcC5tLkNoZWNrQm94XCJdO1xuXG5cdFx0Y29uc3QgY2FuTG9jayA9ICFub3RMb2NrQ29udHJvbHMuaW5jbHVkZXMoZWRpdENvbnRyb2w/LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID8/IFwiXCIpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmICF0aGlzLmZvY3VzSGFuZGxlcnNBdHRhY2hlZCAmJiBjYW5Mb2NrKSB7XG5cdFx0XHQvLyBUaGUgZXZlbnQgZGVsZWdhdGUgZG9lc24ndCB3b3JrIG9uIHRoZSBGaWVsZCwgd2UgbmVlZCB0byBwdXQgaXQgb24gaXRzIGNvbnRlbnQgKEZpZWxkV3JhcHBlcilcblx0XHRcdHRoaXMuY29udGVudD8uYWRkRXZlbnREZWxlZ2F0ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uZm9jdXNpbjogKGV2dDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNJbih0aGlzLCBldnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsZXJzQXR0YWNoZWQgPSB0cnVlOyAvLyBUbyBhdm9pZCBhdHRhY2hpbmcgZXZlbnRzIHR3aWNlXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZpcnN0IHZpc2libGUgY29udHJvbCBpbiB0aGUgRmllbGRXcmFwcGVyLlxuXHQgKiBAcGFyYW0gY29udHJvbCBGaWVsZFdyYXBwZXJcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IHZpc2libGUgY29udHJvbFxuXHQgKi9cblx0c3RhdGljIGdldENvbnRyb2xJbkZpZWxkV3JhcHBlcihjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFjb250cm9sPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBjb250cm9sIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj47XG5cdFx0XHRjb25zdCBjb250cm9scyA9IGZpZWxkV3JhcHBlci5nZXRFZGl0TW9kZSgpID09PSBcIkRpc3BsYXlcIiA/IFtmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKV0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPj0gMSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWVsZCBoYXMgc29tZSBNZGMgZmllbGQgd2l0aCBwZW5kaW5nIHVzZXIgaW5wdXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBwZW5kaW5nIHVzZXIgaW5wdXQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0aGFzUGVuZGluZ1VzZXJJbnB1dCgpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRDb250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRyZXR1cm4gISEodGFyZ2V0Q29udHJvbCAmJiB0YXJnZXRDb250cm9sLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIHRhcmdldENvbnRyb2wuaGFzUGVuZGluZ1VzZXJJbnB1dCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGRcblx0ICogd2hlbiBiZWluZyByZWZlcmVuY2VkIGJ5IHRoZSAnbGFiZWxGb3InIGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgb3Igd2hlbiBpbiBhIGZvcm0uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBjb250cm9sc1xuXHQgKi9cblx0Z2V0TGFiZWxDb250cm9scygpOiBMYWJlbFtdIHtcblx0XHRjb25zdCByZWZlcmVuY2luZ0xhYmVscyA9IHRoaXMuX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscygpO1xuXHRcdHJldHVybiByZWZlcmVuY2luZ0xhYmVscy5sZW5ndGggPiAwID8gcmVmZXJlbmNpbmdMYWJlbHMgOiB0aGlzLl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIHdoZW4gcmVmZXJlbmNlZCBieSBhIGxhYmVsLlxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwgY29udHJvbHNcblx0ICovXG5cdF9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMoKTogTGFiZWxbXSB7XG5cdFx0Y29uc3QgbGFiZWxJZHMgPSBMYWJlbEVuYWJsZW1lbnQuZ2V0UmVmZXJlbmNpbmdMYWJlbHModGhpcyk7XG5cdFx0Y29uc3QgbGFiZWxDb250cm9sczogTGFiZWxbXSA9IFtdO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdGxhYmVsSWRzLmZvckVhY2goKGxhYmVsSWQpID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsQ29udHJvbCA9IHZpZXcuYnlJZChsYWJlbElkKTtcblx0XHRcdGlmIChsYWJlbENvbnRyb2wpIHtcblx0XHRcdFx0bGFiZWxDb250cm9scy5wdXNoKGxhYmVsQ29udHJvbCBhcyBMYWJlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxhYmVsQ29udHJvbHM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIG9yIGNvbm5lY3RlZCBmaWVsZCB3aGVuIGluIGEgZm9ybS5cblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGNvbnRyb2xzXG5cdCAqL1xuXHRfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcygpOiBMYWJlbFtdIHtcblx0XHQvLyBpZiB0aGUgZmllbGQgaXMgbm90IGluIGEgZm9ybSwgd2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICghdGhpcy5nZXRJZCgpLmluY2x1ZGVzKFwiRm9ybUVsZW1lbnRcIikpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdC8vIHNlYXJjaCB0aGUgcGFyZW50cyBvZiB0aGUgY29udHJvbCB1bnRpbCB3ZSBmaW5kIGEgc2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XG5cdFx0Ly8gb3Igd2UgcmVhY2ggdGhlIHJvb3QgY29udHJvbFxuXHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IChjb250cm9sIGFzIE1hbmFnZWRPYmplY3QpPy5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2wgPyBbKGNvbnRyb2wgYXMgRm9ybUVsZW1lbnQpLmdldExhYmVsQ29udHJvbCgpIGFzIExhYmVsXSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgZmxvYXQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQ29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICghb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIG9Db250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRvQ29udHJvbCA9IChvQ29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRTZWxlY3RlZCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBSYXRpbmdJbmRpY2F0b3IpLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIExpbmspLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MYWJlbFwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgVGV4dCkuZ2V0VGV4dChmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEVuaGFuY2VXaXRoVUk1PFRleHRMaW5rPj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBPYmplY3RTdGF0dXMpLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIE9iamVjdElkZW50aWZpZXIpLmdldFRpdGxlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbC5nZXRWYWx1ZSgpOyAvLyBGaWVsZFdyYXBwZXJcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRyb2w/LmlzQTxEYXRhUG9pbnQ+KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIikgfHxcblx0XHRcdG9Db250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpIHx8XG5cdFx0XHRvQ29udHJvbD8uaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIilcblx0XHQpIHtcblx0XHRcdC8vIHRoaXMgaXMgYSBCQnY0IHVuZGVybmVhdGgsIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgQkJWNFxuXHRcdFx0cmV0dXJuIG9Db250cm9sLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImdldHRpbmcgdmFsdWUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRWYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IENvbnRyb2wge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gKGNvbnRyb2wgYXMgSEJveCkuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRTZWxlY3RlZCh2YWx1ZSBhcyBib29sZWFuKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8VGV4dD4oXCJzYXAubS5UZXh0XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFRleHQodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgXCJzZXR0aW5nIHZhbHVlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXG5cdFx0aWYgKGNvbnRyb2wgPT09IG51bGwgfHwgY29udHJvbCA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBjb2xsYWJvcmF0aW9uLWVuYWJsZWQgSEJveFxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2wuaXNBPEhCb3g+KFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgVkJveCB3cmFwcGVyXG5cdFx0aWYgKGNvbnRyb2wuaXNBPFZCb3g+KFwic2FwLm0uVkJveFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgcHJvcGVydHktYmFzZWQgY29udHJvbHMgdGhhdCB1c2UgXCJlbmFibGVkXCIgcHJvcGVydHlcblx0XHRpZiAoXG5cdFx0XHRjb250cm9sLmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIik7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIGNvbnRyb2xzIHRoYXQgYXJlIGFsd2F5cyBlbmFibGVkXG5cdFx0aWYgKFxuXHRcdFx0Y29udHJvbC5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxGb3JtRWxlbWVudFdyYXBwZXI+KFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxFeHBhbmRhYmxlVGV4dD4oXCJzYXAubS5FeHBhbmRhYmxlVGV4dFwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8dHlwZW9mIENvbmRpdGlvbmFsV3JhcHBlcj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkNvbmRpdGlvbmFsV3JhcHBlclwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8VGV4dExpbms+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5UZXh0TGlua1wiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIHNwZWNpYWwgcHJvcGVydHkgY2FzZXNcblx0XHRpZiAoY29udHJvbC5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpIHx8IGNvbnRyb2wuaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLmdldEVuYWJsZWQoKTtcblx0XHR9XG5cblx0XHRpZiAoY29udHJvbC5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImxpbmtFbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBNREMgRmllbGQgc3BlY2lhbCBjYXNlXG5cdFx0aWYgKGNvbnRyb2wuaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGVkaXRNb2RlID0gY29udHJvbC5nZXRFZGl0TW9kZSgpO1xuXHRcdFx0cmV0dXJuIGVkaXRNb2RlICE9PSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBGaWxlV3JhcHBlciBzcGVjaWFsIGNhc2Vcblx0XHRpZiAoY29udHJvbC5pc0E8RmlsZVdyYXBwZXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wubGluayA/IGNvbnRyb2wubGluay5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIikgOiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBIQm94IHdpdGggU2l0dWF0aW9uc0luZGljYXRvciBhdCBpdGVtWzFdXG5cdFx0aWYgKChjb250cm9sIGFzIEhCb3gpLmlzQT8uKFwic2FwLm0uSEJveFwiKSAmJiAoY29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzFdPy5pc0EoXCJzYXAuZmUubWFjcm9zLnNpdHVhdGlvbnMuU2l0dWF0aW9uc0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBlbmFibGVkXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2w/LmlzQTxIQm94PihcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdGNvbnRyb2wgPSBjb250cm9sLmdldEl0ZW1zKClbMF07XG5cdFx0fVxuXG5cdFx0Ly8gd2UgbmVlZCB0byBjYWxsIHRoZSBzZXRQcm9wZXJ0eSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzXG5cdFx0Ly8gb3RoZXJ3aXNlIHdlIGVuZCB1cCBpbiBhIG1heCBjYWxsIHN0YWNrIHNpemVcblx0XHRpZiAoY29udHJvbD8uaXNBPENoZWNrQm94PihcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImVuYWJsZWRcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPExpbms+KFwic2FwLm0uTGlua1wiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImFjdGl2ZVwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RJZGVudGlmaWVyPihcInNhcC5tLk9iamVjdElkZW50aWZpZXJcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwidGl0bGVBY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0Ly8gVGhlIG1kYyBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IFwiZW5hYmxlZFwiLCB0aGVyZWZvcmUgd2UgbWFwXG5cdFx0XHQvLyB0aGUgZW5hYmxlZCBwcm9wZXJ0eSB0byB0aGUgcmVzcGVjdGl2ZSBkaXNhYmxlZCBzZXR0aW5nIG9mIHRoZSBlZGl0IG1vZGVcblx0XHRcdC8vIHdpdGggdGhpcyBncmFjZWZ1bCBwYXR0ZXJuXG5cdFx0XHRsZXQgZWRpdE1vZGVUeXBlO1xuXHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0ZWRpdE1vZGVUeXBlID0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRNb2RlVHlwZSA9IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sLnNldEVkaXRNb2RlKGVkaXRNb2RlVHlwZSk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldExpbmtFbmFibGVkKGVuYWJsZWQpO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2w7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldEVuYWJsZWQoZW5hYmxlZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IFwic2V0RW5hYmxlZCBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBUaGUgcGFyYW1ldGVycyB0byBjcmVhdGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIFR5cGUgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMubWVzc2FnZSBNZXNzYWdlIHRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gTWVzc2FnZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wZXJzaXN0ZW50IFRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgcGVyc2lzdGVudFxuXHQgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkTWVzc2FnZShwYXJhbWV0ZXJzOiB7IHR5cGU/OiBNZXNzYWdlVHlwZTsgbWVzc2FnZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IHBlcnNpc3RlbnQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblxuXHRcdGxldCBwYXRoOyAvL3RhcmdldCBmb3Igb01lc3NhZ2Vcblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRwYXRoID0gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRCaW5kaW5nKFwic2VsZWN0ZWRcIik/LmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cGF0aCA9IChvQ29udHJvbCBhcyBJbnB1dEJhc2UpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UmVzb2x2ZWRQYXRoKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHBhdGggPSBvQ29udHJvbC5nZXRCaW5kaW5nKFwidmFsdWVcIikhLmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0dGFyZ2V0OiBwYXRoLFxuXHRcdFx0dHlwZTogcGFyYW1ldGVycy50eXBlLFxuXHRcdFx0bWVzc2FnZTogcGFyYW1ldGVycy5tZXNzYWdlLFxuXHRcdFx0cHJvY2Vzc29yOiBvQ29udHJvbD8uZ2V0TW9kZWwoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0cGVyc2lzdGVudDogcGFyYW1ldGVycy5wZXJzaXN0ZW50XG5cdFx0fSk7XG5cblx0XHRtc2dNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRyZXR1cm4gb01lc3NhZ2UuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlKGlkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IGFyciA9IG1zZ01hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGFyci5maW5kKChlOiBNZXNzYWdlKSA9PiBlPy5nZXRJZD8uKCkgPT09IGlkKTtcblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRtc2dNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlc3VsdCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0TWVzc2FnZU1hbmFnZXIoKTogTWVzc2FnaW5nIHtcblx0XHRyZXR1cm4gTWVzc2FnaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbk1ldGFkYXRhQXZhaWxhYmxlIGV2ZW50LlxuXHQgKi9cblx0b25NZXRhZGF0YUF2YWlsYWJsZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gdGhpcy5wcmVwYXJlUHJvcGVydGllcygpO1xuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcykge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZXMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbWV0YSBwYXRoIGFuZCBjb250ZXh0IHBhdGgsIHNldHMgdXAgdGhlIGlucHV0IGZpZWxkIHByb3BlcnRpZXMsXG5cdCAqIGFuZCBjYWxscyB0aGUgc2V0VXBGaWVsZCBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEFkZGl0aW9uYWxseSwgaXQgc2V0cyB0aGUgbWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIGFuZCBjb2xsYWJvcmF0aW9uRW5hYmxlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJlcGFyZWQgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLCBvciB1bmRlZmluZWQgaWYgdGhlIHByZXByb2Nlc3NvciBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUuXG5cdCAqL1xuXHRwcmVwYXJlUHJvcGVydGllcygpOiBGaWVsZEJsb2NrUHJvcGVydGllcyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gdGhpcy5nZXRNZXRhUGF0aE9iamVjdCh0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblxuXHRcdGlmICghbWV0YUNvbnRleHRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0Y29uc3QgaW5wdXRGaWVsZFByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5QmFnKCkgYXMgSW5wdXRGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5wdXRGaWVsZFByb3BlcnRpZXMsIFwidmFsdWVcIiwge1xuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEZpZWxkUHJvcGVydGllcywgXCJkZXNjcmlwdGlvblwiLCB7XG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5yZWFkT25seSA9IHRoaXMuYmluZFN0YXRlKFwicmVhZE9ubHlcIik7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgYSBiaW5kaW5nIGZvciB0aGUgcHJvcGVydHkgc2VtYW50aWNPYmplY3Qgd2Ugd2lsbCByZWx5IG9uIHRoZSBiaW5kaW5nIHRvIHRoZSBzdGF0ZSB0byBlbnN1cmVcblx0XHQvLyBiaW5kaW5nIG1hbmlwdWxhdGlvbiBpcyBwb3NzaWJsZVxuXHRcdGlmICh0aGlzLmdldEJpbmRpbmdJbmZvKFwic2VtYW50aWNPYmplY3RcIikpIHtcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnNlbWFudGljT2JqZWN0ID0gY29tcGlsZUV4cHJlc3Npb24odGhpcy5iaW5kU3RhdGUoXCJzZW1hbnRpY09iamVjdFwiKSk7XG5cdFx0fVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnZoSWRQcmVmaXggPSB0aGlzLnZoSWRQcmVmaXg7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuaWRQcmVmaXggPSB0aGlzLmlkUHJlZml4O1xuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLl9mbGV4SWQgPSB0aGlzLl9mbGV4SWQ7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMub25MaXZlQ2hhbmdlID0gdGhpcy5oYXNMaXN0ZW5lcnMoXCJsaXZlQ2hhbmdlXCIpID8gXCJTb21ldGhpbmdcIiA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dCA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0O1xuXHRcdHRoaXMub2RhdGFNZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aCA9IHRoaXMub2RhdGFNZXRhTW9kZWw/LmdldE1ldGFDb250ZXh0KHRoaXMuZ2V0Q29tcHV0ZWRDb250ZXh0UGF0aCh0aGlzLmNvbnRleHRQYXRoKSk7XG5cblx0XHR0aGlzLmNvbXB1dGVkTWV0YVBhdGggPSB0aGlzLm9kYXRhTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGguZ2V0UGF0aCgpKSBhcyBDb250ZXh0O1xuXG5cdFx0Ly8gU29tZSBjb2RlIHJlbHkgb24gdXMgY2hlY2tpbmcgaWYgdmlzaWJsZSBpcyBkZWZpbmVkIG9yIG5vdCwgdGhlIG9ubHkgd2F5IHRvIGRvIGl0IGlzIHRocm91Z2ggdGhlIGlzUHJvcGVydHlJbml0aWFsIG1ldGhvZFxuXHRcdGlmICh0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwidmlzaWJsZVwiKSkge1xuXHRcdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMudmlzaWJsZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvL2lmICh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQpIHtcblx0XHQvLyBJZiB0aGUgSUQgaXMgbm90IHNldCBieSB0aGUgY29uc3VtZXIsIHVzZSB0aGUgSUQgcHJvdmlkZWQgYnkgVUk1LlxuXHRcdC8vIChUaGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIHZhbHVlIGhlbHAgcmVsaWVzIG9uIGFsd2F5cyBoYXZpbmcgYW4gSUQuKVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLmlkID0gaW5wdXRGaWVsZFByb3BlcnRpZXMuaWQgPz8gdGhpcy5nZXRJZCgpO1xuXG5cdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gc2V0VXBGaWVsZChcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0e30gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy52aWV3RGF0YSBhcyBKU09OTW9kZWwpID8/IG5ldyBKU09OTW9kZWwodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGE/LigpID8/IHt9KSxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy5pbnRlcm5hbCBhcyBKU09OTW9kZWwpID8/IHRoaXMuX2dldE93bmVyKCkhLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHR0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/LmFwcENvbXBvbmVudCA/PyB0aGlzLl9nZXRPd25lcigpIS5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdHRoaXMuaXNQcm9wZXJ0eUluaXRpYWwoXCJyZWFkT25seVwiKSxcblx0XHRcdHRoaXMuY29tcHV0ZWRNZXRhUGF0aCxcblx0XHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImlubGluZUVkaXRFbmFibGVkXCIsIHByZXBhcmVkUHJvcGVydGllcy5pbmxpbmVFZGl0RW5hYmxlZCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImhhc0lubGluZUVkaXRcIiwgY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmhhc0lubGluZUVkaXQpKTtcblxuXHRcdHByZXBhcmVkUHJvcGVydGllcy5pc0R5bmFtaWNJbnN0YW50aWF0aW9uID0gdHJ1ZTtcblx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCkgdGhpcy5tYWluUHJvcGVydHlSZWxhdGl2ZVBhdGggPSBwcmVwYXJlZFByb3BlcnRpZXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoO1xuXHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgPSBwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5kaXNwbGF5U3R5bGUgPT09IFwiRmlsZVwiKVxuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVVcGxvYWRlclZpc2libGUgPSAhdGhpcy5yZWFkT25seSAmJiBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdGFibGVFeHByZXNzaW9uO1xuXHRcdHByZXBhcmVkUHJvcGVydGllcy5nZXRUcmFuc2xhdGVkVGV4dCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQuYmluZCh0aGlzKTtcblx0XHRyZXR1cm4gcHJlcGFyZWRQcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBwcmVwYXJlZCBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhbmQgcmV0dXJuIHRoZSBjb250ZW50IGNvbnRyb2wgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICogQHBhcmFtIHByZXBhcmVkUHJvcGVydGllcyBUaGUgcHJlcGFyZWQgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRjcmVhdGVDb250ZW50KHByZXBhcmVkUHJvcGVydGllczogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb250cm9sIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRcdC8vIFdlIGhhdmUgdG8gc2V0IChvciBiaW5kKSBzb21lIHByb3BlcnRpZXMgdG8gdGhlIEZpZWxkIHNvIHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGJ5IGNvbnN1bWVycy9VSTVcblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwicmVxdWlyZWRcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwiZWRpdGFibGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLmVkaXRhYmxlRXhwcmVzc2lvbik7XG5cblx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHByZXBhcmVkUHJvcGVydGllcy52aXNpYmxlKTtcblx0XHRcdGlmICh0eXBlb2YgcHJlcGFyZWRQcm9wZXJ0aWVzLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuY3VzdG9tVmFsdWVCaW5kaW5nID0gcHJlcGFyZWRQcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbXB1dGVkRWRpdE1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwiZWRpdE1vZGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLmVkaXRNb2RlID8/IGNvbXBpbGVFeHByZXNzaW9uKHByZXBhcmVkUHJvcGVydGllcy5jb21wdXRlZEVkaXRNb2RlKSk7XG5cdFx0XHR9XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5jaGFuZ2UgPSAoRmllbGQgYXMgdW5rbm93biBhcyB7IGhhbmRsZUNoYW5nZTogRXZlbnRIYW5kbGVyIH0pLmhhbmRsZUNoYW5nZTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmxpdmVDaGFuZ2UgPSAoRmllbGQgYXMgdW5rbm93biBhcyB7IGhhbmRsZUxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlciB9KS5oYW5kbGVMaXZlQ2hhbmdlO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwID0gKFxuXHRcdFx0XHRGaWVsZCBhcyB1bmtub3duIGFzIHsgb25WYWxpZGF0ZUZpZWxkR3JvdXA6IEV2ZW50SGFuZGxlciB9XG5cdFx0XHQpLm9uVmFsaWRhdGVGaWVsZEdyb3VwO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlVHlwZU1pc3NtYXRjaCA9IHRoaXMub25IYW5kbGVUeXBlTWlzc21hdGNoLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVGaWxlU2l6ZUV4Y2VlZCA9IHRoaXMub25IYW5kbGVGaWxlU2l6ZUV4Y2VlZC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlVXBsb2FkQ29tcGxldGUgPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZVVwbG9hZENvbXBsZXRlKFxuXHRcdFx0XHRcdGV2LFxuXHRcdFx0XHRcdHsgcGF0aDogcHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gfSxcblx0XHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXJcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy51cGxvYWRTdHJlYW0gPSB0aGlzLm9uVXBsb2FkU3RyZWFtLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5yZW1vdmVTdHJlYW0gPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLnJlbW92ZVN0cmVhbShcblx0XHRcdFx0XHRldiBhcyBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pixcblx0XHRcdFx0XHR7IHBhdGg6IHByZXBhcmVkUHJvcGVydGllcy5maWxlRmlsZW5hbWVFeHByZXNzaW9uIH0sXG5cdFx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlT3BlblVwbG9hZGVyID0gdGhpcy5vbkhhbmRsZU9wZW5VcGxvYWRlci5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlQ2xvc2VVcGxvYWRlciA9IHRoaXMub25IYW5kbGVDbG9zZVVwbG9hZGVyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vcGVuRXh0ZXJuYWxMaW5rID0gdGhpcy5vbk9wZW5FeHRlcm5hbExpbmsuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRm9jdXNPdXQgPSB0aGlzLm9uRm9jdXNPdXQuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkID0gdGhpcy5vbkxpbmtQcmVzc2VkLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhJQk4gPSAoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBwcmVwYXJlZFByb3BlcnRpZXMubWV0YVBhdGguZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IHN0cmluZztcblx0XHRcdFx0fSA9IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGV2LmdldFNvdXJjZSgpPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFGaWVsZC5NYXBwaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHRvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRldi5nZXRTb3VyY2UoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uID0gKGV2OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBvVGhpczogRmllbGRCbG9ja1Byb3BlcnRpZXMgPSBwcmVwYXJlZFByb3BlcnRpZXM7XG5cdFx0XHRcdGNvbnN0IG9EYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uPiA9IHByZXBhcmVkUHJvcGVydGllcy5tZXRhUGF0aC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIklzb2xhdGVkXCI7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0XHRcdChvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08T3BlcmF0aW9uR3JvdXBpbmdUeXBlPikuJEVudW1NZW1iZXIgPT09XG5cdFx0XHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJDaGFuZ2VTZXRcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgYklzTmF2aWdhYmxlID0gb1RoaXMubmF2aWdhdGVBZnRlckFjdGlvbiBhcyBib29sZWFuIHwgc3RyaW5nO1xuXHRcdFx0XHRiSXNOYXZpZ2FibGUgPSBiSXNOYXZpZ2FibGUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBlbnRpdGllczogQXJyYXk8c3RyaW5nPiA9IG9UaGlzPy5jb250ZXh0UGF0aD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZTogc3RyaW5nID0gZW50aXRpZXNbZW50aXRpZXMubGVuZ3RoIC0gMV07XG5cblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogZXYuZ2V0U291cmNlKCkuZ2V0QmluZGluZ0NvbnRleHQoKSEgYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBzSW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRcdG1vZGVsOiBldi5nZXRTb3VyY2UoKS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwsXG5cdFx0XHRcdFx0bGFiZWw6IG9EYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGJJc05hdmlnYWJsZSxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiBlbnRpdHlTZXROYW1lXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5pbnZva2VBY3Rpb24ob0RhdGFGaWVsZC5BY3Rpb24hLCBvUGFyYW1zKTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5kaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzID0gKGV2KTogdm9pZCA9PiB7XG5cdFx0XHRcdEZpZWxkUnVudGltZS5kaXNwbGF5QWdncmVnYXRlRGV0YWlscyhldiwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcmVwYXJlZFByb3BlcnRpZXMuZGF0YU1vZGVsUGF0aCkpO1xuXHRcdFx0fTtcblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29udmVydGVkTWV0YVBhdGguJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCIpIHtcblx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIub25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRldi5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHQocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkuVGFyZ2V0LnZhbHVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIgPSB0aGlzLm9uU2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlci5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLnZhbHVlSGVscElkID0gRmllbGRTdHJ1Y3R1cmUuZ2V0UG9zc2libGVWYWx1ZUhlbHBUZW1wbGF0ZUlkKFxuXHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMsXG5cdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSxcblx0XHRcdFx0dGhpcy5nZXRNZXRhTW9kZWwoKSFcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSBGaWVsZFN0cnVjdHVyZS5nZXRGaWVsZFN0cnVjdHVyZVRlbXBsYXRlKHByZXBhcmVkUHJvcGVydGllcykgYXMgdW5rbm93biBhcyBDb250cm9sO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coZS5tZXNzYWdlICsgXCIgaW4gY3JlYXRlQ29udGVudCBvZiBGaWVsZFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KFwiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudDtcblx0fVxuXG5cdG9uSGFuZGxlVHlwZU1pc3NtYXRjaChldjogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVUeXBlTWlzc21hdGNoKGV2KTtcblx0fVxuXG5cdG9uSGFuZGxlRmlsZVNpemVFeGNlZWQoZXY6IEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZUZpbGVTaXplRXhjZWVkKGV2KTtcblx0fVxuXG5cdG9uSGFuZGxlT3BlblVwbG9hZGVyKGV2OiBVSTVFdmVudDx7fSwgRmlsZVVwbG9hZGVyPik6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVPcGVuVXBsb2FkZXIoZXYpO1xuXHR9XG5cblx0b25VcGxvYWRTdHJlYW0oZXY6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci51cGxvYWRTdHJlYW0odGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLCBldik7XG5cdH1cblxuXHRvbkhhbmRsZUNsb3NlVXBsb2FkZXIoZXY6IFVJNUV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZUNsb3NlVXBsb2FkZXIoZXYpO1xuXHR9XG5cblx0b25PcGVuRXh0ZXJuYWxMaW5rKGV2OiBVSTVFdmVudDx7fSwgTGluaz4pOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIub3BlbkV4dGVybmFsTGluayhldik7XG5cdH1cblxuXHRvbkxpbmtQcmVzc2VkKGV2OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5wcmVzc0xpbmsoZXYpO1xuXHR9XG5cblx0b25Gb2N1c091dChldjogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuaGFuZGxlQ29udGVudEZvY3VzT3V0KGV2KTtcblx0fVxuXG5cdG9uU2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcihldjogVUk1RXZlbnQ8e30sIEF2YXRhcj4pOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldi5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKTtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuc2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcihzb3VyY2UsIHZpZXcpO1xuXHR9XG5cblx0Z2V0UHJvcGVydHlCYWcoKTogUHJvcGVydGllc09mPHRoaXM+IHtcblx0XHRjb25zdCBzZXR0aW5nczogUHJvcGVydGllc09mPHRoaXM+ID0ge30gYXMgUHJvcGVydGllc09mPHRoaXM+O1xuXHRcdGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWxsUHJvcGVydGllcygpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50UHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTtcblx0XHRcdHNldHRpbmdzW3Byb3BlcnR5TmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gY3VycmVudFByb3BlcnR5VmFsdWU7XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgYWdncmVnYXRpb25OYW1lIGluIGFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWdncmVnYXRpb25Db250ZW50KSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZHJlbkFycmF5ID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgbWFuYWdlZE9iamVjdCBvZiBhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAobWFuYWdlZE9iamVjdC5pc0E8QnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5XCIpKSB7XG5cdFx0XHRcdFx0XHRjaGlsZHJlbkFycmF5LnB1c2gobWFuYWdlZE9iamVjdC5nZXRQcm9wZXJ0eUJhZygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBjaGlsZHJlbkFycmF5O1xuXHRcdFx0fSBlbHNlIGlmIChhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0aW9uQ29udGVudC5pc0E8QnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5XCIpKSB7XG5cdFx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZ2V0UHJvcGVydHlCYWcoKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgaW4gKGFnZ3JlZ2F0aW9uQ29udGVudCBhcyBNYW5hZ2VkT2JqZWN0ICYgeyBtQmluZGluZ0luZm9zPzogUmVjb3JkPHN0cmluZywgeyBiaW5kaW5nPzogQmluZGluZyB9PiB9KVxuXHRcdFx0XHRcdFx0Lm1CaW5kaW5nSW5mb3MpIHtcblx0XHRcdFx0XHRcdHNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dW2JpbmRpbmddID0gYWdncmVnYXRpb25Db250ZW50LmdldEJpbmRpbmdJbmZvKGJpbmRpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5nZXRJZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSB0YXJnZXQgcHJvcGVydHkgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgdGFyZ2V0UHJvcGVydHkgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0SW5saW5lRWRpdFByb3BlcnR5KCk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRhTW9kZWxQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPihcblx0XHRcdHRoaXMubWV0YVBhdGgsXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0KTtcblx0XHRyZXR1cm4gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlKGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPilcblx0XHRcdD8udGFyZ2V0T2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIGZ1bGx5UXVhbGlmaWVkTmFtZSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBmdWxseVF1YWxpZmllZE5hbWUgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpPy5mdWxseVF1YWxpZmllZE5hbWU7XG5c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
1202
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJtaXhpbiIsIklubGluZUVkaXQiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsIl9kZWM0IiwiYmluZFRvU3RhdGUiLCJfZGVjNSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsImFzc29jaWF0aW9uIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiYWdncmVnYXRpb24iLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJyZXF1aXJlZCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsIl9kZWMzMiIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMzMyIsIl9kZWMzNCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFjcm9BUEkiLCJwcm9wcyIsIm90aGVycyIsInNjb3BlIiwiX3RoaXMiLCJjb21iaW5lZFByb3BzIiwiaWQiLCJfZmxleElkIiwidmhJZFByZWZpeCIsImlkUHJlZml4IiwiX2FwaUlkIiwiaW5jbHVkZXMiLCJnZW5lcmF0ZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJfZGVzY3JpcHRvcjE4IiwiX2Rlc2NyaXB0b3IxOSIsIl9kZXNjcmlwdG9yMjAiLCJfZGVzY3JpcHRvcjIxIiwiX2Rlc2NyaXB0b3IyMiIsIl9kZXNjcmlwdG9yMjMiLCJfZGVzY3JpcHRvcjI0IiwiX2Rlc2NyaXB0b3IyNSIsImZvY3VzSGFuZGxlcnNBdHRhY2hlZCIsIl9kZXNjcmlwdG9yMjYiLCJfZGVzY3JpcHRvcjI3IiwiX2Rlc2NyaXB0b3IyOCIsIl9kZXNjcmlwdG9yMjkiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldENvbGxhYm9yYXRpb25CaW5kaW5nIiwiZmllbGQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzIiwiY2hhbmdlRXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImlzVHJhbnNpZW50IiwidmFsdWVSZXNvbHZlZCIsImdldFBhcmFtZXRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWQiLCJmaWVsZFZhbGlkaXR5IiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJjdXN0b21WYWx1ZUJpbmRpbmciLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsIiwic2V0UHJvcGVydHkiLCJwYXRoIiwidXBkYXRlQmluZGluZ3MiLCJmZUNvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25Db250cm9sbGVyIiwidW5kZWZpbmVkIiwidGhlbiIsIm9Tb3VyY2UiLCJtUGFyYW1ldGVycyIsImZpcmVFdmVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJpc1ZhbGlkIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImNhdGNoIiwiTG9nIiwiZGVidWciLCJ2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50Iiwic2V0VGltZW91dCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkIiwiYkNvbGxhYm9yYXRpb25FbmFibGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkYXRhIiwiZ2V0QmluZGluZ0luZm8iLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJpbmRleE9mIiwibWFwIiwiZ2V0UGF0aCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkNoYW5nZSIsImNvbnRlbnQiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsImlzRGF0YVVwZGF0ZWQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInVwZGF0ZUNvbGxhYm9yYXRpb24iLCJoYW5kbGVMaXZlQ2hhbmdlIiwiX2V2ZW50Iiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJzb3VyY2VGaWVsZCIsInZpZXciLCJnZXRDb250cm9sbGVyIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsImFwcGx5U2V0dGluZ3MiLCJtU2V0dGluZ3MiLCJvU2NvcGUiLCJfZG9Ob3RDcmVhdGVPbk51bGxDb250ZXh0IiwiX3NldEFyaWFMYWJlbGxlZEJ5IiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJhcmlhTGFiZWxsZWRCeSIsImFyaWFMYWJlbGxlZEJ5cyIsImdldEFyaWFMYWJlbGxlZEJ5IiwiZ2V0Q29udGVudCIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZ2V0SW5uZXJDb250cm9sIiwiZmllbGRXcmFwcGVyIiwiY29udHJvbHMiLCJnZXRDb250ZW50RWRpdCIsImlubmVyQ29udHJvbCIsImxlbmd0aCIsImdldEl0ZW1zIiwib25BZnRlclJlbmRlcmluZyIsImVkaXRDb250cm9sIiwibm90TG9ja0NvbnRyb2xzIiwiY2FuTG9jayIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImNvbGxhYm9yYXRpb25FbmFibGVkIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9uZm9jdXNpbiIsImV2dCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwiZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyIiwiY29udHJvbCIsImdldEVkaXRNb2RlIiwiZ2V0Q29udGVudERpc3BsYXkiLCJoYXNQZW5kaW5nVXNlcklucHV0IiwidGFyZ2V0Q29udHJvbCIsImdldExhYmVsQ29udHJvbHMiLCJyZWZlcmVuY2luZ0xhYmVscyIsIl9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMiLCJfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcyIsImxhYmVsSWRzIiwiTGFiZWxFbmFibGVtZW50IiwiZ2V0UmVmZXJlbmNpbmdMYWJlbHMiLCJsYWJlbENvbnRyb2xzIiwiZ2V0VmlldyIsImZvckVhY2giLCJsYWJlbElkIiwibGFiZWxDb250cm9sIiwiYnlJZCIsInB1c2giLCJnZXRJZCIsImdldFBhcmVudCIsImdldExhYmVsQ29udHJvbCIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWQiLCJnZXRUZXh0IiwiZ2V0VGl0bGUiLCJFcnJvciIsImdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsIm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsInNldFZhbHVlIiwic2V0U2VsZWN0ZWQiLCJzZXRUZXh0IiwiZ2V0RW5hYmxlZCIsImdldFByb3BlcnR5IiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJsaW5rIiwic2V0RW5hYmxlZCIsImVuYWJsZWQiLCJlZGl0TW9kZVR5cGUiLCJFZGl0YWJsZSIsInNldEVkaXRNb2RlIiwic2V0TGlua0VuYWJsZWQiLCJhZGRNZXNzYWdlIiwicGFyYW1ldGVycyIsIm1zZ01hbmFnZXIiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldFJlc29sdmVkUGF0aCIsIm9NZXNzYWdlIiwiTWVzc2FnZSIsInRhcmdldCIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJkZXNjcmlwdGlvbiIsInBlcnNpc3RlbnQiLCJhZGRNZXNzYWdlcyIsInJlbW92ZU1lc3NhZ2UiLCJhcnIiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwicmVzdWx0IiwiZmluZCIsImUiLCJyZW1vdmVNZXNzYWdlcyIsIk1lc3NhZ2luZyIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJwcmVwYXJlZFByb3BlcnRpZXMiLCJwcmVwYXJlUHJvcGVydGllcyIsImNyZWF0ZUNvbnRlbnQiLCJtZXRhQ29udGV4dFBhdGgiLCJnZXRNZXRhUGF0aE9iamVjdCIsIm1ldGFQYXRoIiwiY29udGV4dFBhdGgiLCJvd25lciIsIl9nZXRPd25lciIsImlucHV0RmllbGRQcm9wZXJ0aWVzIiwiZ2V0UHJvcGVydHlCYWciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInJlYWRPbmx5IiwiYmluZFN0YXRlIiwic2VtYW50aWNPYmplY3QiLCJjb21waWxlRXhwcmVzc2lvbiIsIm9uTGl2ZUNoYW5nZSIsImhhc0xpc3RlbmVycyIsInByZXByb2Nlc3NvckNvbnRleHQiLCJvZGF0YU1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbXB1dGVkQ29udGV4dFBhdGgiLCJnZXRNZXRhQ29udGV4dCIsImdldENvbXB1dGVkQ29udGV4dFBhdGgiLCJjb21wdXRlZE1ldGFQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc1Byb3BlcnR5SW5pdGlhbCIsInZpc2libGUiLCJzZXRVcEZpZWxkIiwibW9kZWxzIiwidmlld0RhdGEiLCJKU09OTW9kZWwiLCJnZXRWaWV3RGF0YSIsImludGVybmFsIiwiZ2V0QXBwQ29tcG9uZW50IiwiYXBwQ29tcG9uZW50Iiwic2V0T3JCaW5kUHJvcGVydHkiLCJpbmxpbmVFZGl0RW5hYmxlZCIsImhhc0lubGluZUVkaXQiLCJpc0R5bmFtaWNJbnN0YW50aWF0aW9uIiwiZGlzcGxheVN0eWxlIiwiZmlsZVVwbG9hZGVyVmlzaWJsZSIsImVkaXRhYmxlRXhwcmVzc2lvbiIsImdldFRyYW5zbGF0ZWRUZXh0IiwiYmluZCIsInJlcXVpcmVkRXhwcmVzc2lvbiIsImNvbXB1dGVkRWRpdE1vZGUiLCJldmVudEhhbmRsZXJzIiwiY2hhbmdlIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJvbkhhbmRsZVR5cGVNaXNzbWF0Y2giLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsIm9uSGFuZGxlRmlsZVNpemVFeGNlZWQiLCJoYW5kbGVVcGxvYWRDb21wbGV0ZSIsImV2IiwiZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiIsImZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCIsInVwbG9hZFN0cmVhbSIsIm9uVXBsb2FkU3RyZWFtIiwicmVtb3ZlU3RyZWFtIiwiaGFuZGxlT3BlblVwbG9hZGVyIiwib25IYW5kbGVPcGVuVXBsb2FkZXIiLCJoYW5kbGVDbG9zZVVwbG9hZGVyIiwib25IYW5kbGVDbG9zZVVwbG9hZGVyIiwib3BlbkV4dGVybmFsTGluayIsIm9uT3BlbkV4dGVybmFsTGluayIsIm9uRm9jdXNPdXQiLCJsaW5rUHJlc3NlZCIsIm9uTGlua1ByZXNzZWQiLCJvbkRhdGFGaWVsZFdpdGhJQk4iLCJvRGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwibU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiTWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJuYXZpZ2F0ZSIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwib25EYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvVGhpcyIsInNJbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCIkRW51bU1lbWJlciIsImJJc05hdmlnYWJsZSIsIm5hdmlnYXRlQWZ0ZXJBY3Rpb24iLCJlbnRpdGllcyIsInNwbGl0IiwiZW50aXR5U2V0TmFtZSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsIm9QYXJhbXMiLCJjb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwiTGFiZWwiLCJpc05hdmlnYWJsZSIsImludm9rZUFjdGlvbiIsImRpc3BsYXlBZ2dyZWdhdGlvbkRldGFpbHMiLCJGaWVsZFJ1bnRpbWUiLCJkaXNwbGF5QWdncmVnYXRlRGV0YWlscyIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJkYXRhTW9kZWxQYXRoIiwiY29udmVydGVkTWV0YVBhdGgiLCIkVHlwZSIsIm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoIiwiVGFyZ2V0IiwidmFsdWVIZWxwSWQiLCJGaWVsZFN0cnVjdHVyZSIsImdldFBvc3NpYmxlVmFsdWVIZWxwVGVtcGxhdGVJZCIsImdldEZpZWxkU3RydWN0dXJlVGVtcGxhdGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicHJlc3NMaW5rIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0Iiwic2V0dGluZ3MiLCJwcm9wZXJ0aWVzIiwiZ2V0QWxsUHJvcGVydGllcyIsImFnZ3JlZ2F0aW9ucyIsImdldEFsbEFnZ3JlZ2F0aW9ucyIsInByb3BlcnR5TmFtZSIsImN1cnJlbnRQcm9wZXJ0eVZhbHVlIiwiYWdncmVnYXRpb25OYW1lIiwiYWdncmVnYXRpb25Db250ZW50IiwiZ2V0QWdncmVnYXRpb24iLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZHJlbkFycmF5IiwibWFuYWdlZE9iamVjdCIsIm1CaW5kaW5nSW5mb3MiLCJnZXRJbmxpbmVFZGl0UHJvcGVydHkiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZSIsInRhcmdldE9iamVjdCIsImdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSwgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIG1peGluLCBwcm9wZXJ0eSwgeG1sRXZlbnRIYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFhNTFByZXByb2Nlc3NvckNvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0Zvcm1FbGVtZW50V3JhcHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGFjdCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250YWN0L0NvbnRhY3RcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIjtcbmltcG9ydCB0eXBlIENvbmRpdGlvbmFsV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9Db25kaXRpb25hbFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIFRleHRMaW5rIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1RleHRMaW5rXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZVwiO1xuaW1wb3J0IHsgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSBEYXRhUG9pbnQgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvRGF0YVBvaW50XCI7XG5pbXBvcnQgKiBhcyBGaWVsZFN0cnVjdHVyZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZVwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcywgSW5wdXRGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgeyBzZXRVcEZpZWxkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50LCBDaGVja0JveCRTZWxlY3RFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIEV4cGFuZGFibGVUZXh0IGZyb20gXCJzYXAvbS9FeHBhbmRhYmxlVGV4dFwiO1xuaW1wb3J0IHR5cGUgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRCYXNlJENoYW5nZUV2ZW50LCBJbnB1dEJhc2UkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIE9iamVjdElkZW50aWZpZXIgZnJvbSBcInNhcC9tL09iamVjdElkZW50aWZpZXJcIjtcbmltcG9ydCB0eXBlIE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5cbmltcG9ydCB0eXBlIFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuXG5pbXBvcnQgdHlwZSBSYXRpbmdJbmRpY2F0b3IgZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBSYXRpbmdJbmRpY2F0b3IkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGFiZWxFbmFibGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9MYWJlbEVuYWJsZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQsIEZpZWxkJENoYW5nZUV2ZW50UGFyYW1ldGVycywgZGVmYXVsdCBhcyBtZGNGaWVsZCB9IGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIFY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRW1haWwgZnJvbSBcIi4vY29udGFjdC9FbWFpbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4vY29udHJvbHMvRmlsZVdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4vZmllbGQvRmllbGRSdW50aW1lSGVscGVyXCI7XG5pbXBvcnQgSW5saW5lRWRpdCBmcm9tIFwiLi9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcblxudHlwZSBDb250cm9sV2l0aEFjY2Vzc2liaWxpdHkgPSBDb250cm9sICYgeyBhZGRBcmlhTGFiZWxsZWRCeT86IChpZDogc3RyaW5nKSA9PiB2b2lkOyBnZXRBcmlhTGFiZWxsZWRCeTogKCkgPT4gc3RyaW5nW10gfTtcbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgZmllbGQgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogVXN1YWxseSwgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24gaXMgZXhwZWN0ZWQsIGJ1dCB0aGUgZmllbGQgY2FuIGFsc28gYmUgdXNlZCB0byBkaXNwbGF5IGEgcHJvcGVydHkgZnJvbSB0aGUgZW50aXR5IHR5cGUuXG4gKiBXaGVuIGNyZWF0aW5nIGEgRmllbGQgYnVpbGRpbmcgYmxvY2ssIHlvdSBtdXN0IHByb3ZpZGUgYW4gSUQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgd29ya3MgY29ycmVjdGx5LlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RmllbGQgaWQ9XCJNeUZpZWxkXCIgbWV0YVBhdGg9XCJNeVByb3BlcnR5XCIgLyZndDtcbiAqIDwvcHJlPlxuICogPGEgaHJlZj1cIi9zYXB1aTUtc2RrLWludGVybmFsL3Rlc3QtcmVzb3VyY2VzL3NhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2J1aWxkaW5nQmxvY2tPdmVydmlld1wiIHRhcmdldD1cIl9ibGFua1wiID5PdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja3M8L2E+XG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5GaWVsZFxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIsIHtcblx0cmV0dXJuVHlwZXM6IFtcblx0XHRcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZvcm1FbGVtZW50V3JhcHBlclwiIC8qLCBub3Qgc3VyZSBpIHdhbnQgdG8gYWRkIHRob3NlIHlldCBcInNhcC5mZS5tYWNyb3MuRmllbGRcIiwgXCJzYXAubS5IQm94XCIsIFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5Db25kaXRpb25hbFdyYXBwZXJcIiwgXCJzYXAubS5CdXR0b25cIiovXG5cdF1cbn0pXG5AbWl4aW4oSW5saW5lRWRpdClcbmNsYXNzIEZpZWxkIGV4dGVuZHMgTWFjcm9BUEk8eyByZWFkT25seTogYm9vbGVhbjsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9PiB7XG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBlZGl0YWJsZSBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSBpZiB0aGUgcGFnZSBpcyBjdXJyZW50bHkgZWRpdGFibGUuXG5cdCAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdCBzZXQgYSBmaWVsZCB0byBlZGl0YWJsZSBpZiBpdCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFzIG5vdCBlZGl0YWJsZS5cblx0ICogQHByaXZhdGVcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGJpbmRUb1N0YXRlOiB0cnVlIH0pXG5cdHB1YmxpYyByZWFkb25seSByZWFkT25seSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBGaWVsZCBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgaWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uczogW10sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIlByb3BlcnR5XCJdXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogV3JhcCBmaWVsZFxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgd3JhcD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXVxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgY29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGNvbnRhaW5pbmcgZGV0YWlscyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGNoYW5nZSE6IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkOyBpc1ZhbGlkOiBib29sZWFuIH0sIEZpZWxkPj47XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGNvbnRhaW5pbmcgZGV0YWlscyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZmllbGQgaXMgZm9jdXNlZC5cblx0ICpcblx0ICovXG5cdEBldmVudCgpXG5cdGZvY3VzaW4hOiBFdmVudEhhbmRsZXI7XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGNvbnRhaW5pbmcgZGV0YWlscyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIGxpdmUgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0bGl2ZUNoYW5nZSE6IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7fSwgRmllbGQ+PjtcblxuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGlkUHJlZml4Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcmVmaXggYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBJRCBvZiB0aGUgdmFsdWUgaGVscCB1c2VkIGZvciB0aGUgZmllbGRcblx0ICovXG5cdEBhc3NvY2lhdGlvbih7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgdmhJZFByZWZpeCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYWN0aW9uIHdpbGwgbmF2aWdhdGUgYWZ0ZXIgZXhlY3V0aW9uXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBuYXZpZ2F0ZUFmdGVyQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSBjb25maWd1cmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRGb3JtYXRPcHRpb25zXCIgfSlcblx0cHVibGljIHJlYWRvbmx5IGZvcm1hdE9wdGlvbnM/OiBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5cdHB1YmxpYyBfZmxleElkPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBFZGl0IE1vZGUgb2YgdGhlIGZpZWxkLlxuXHQgKlxuXHQgKiBJZiB0aGUgZWRpdE1vZGUgaXMgdW5kZWZpbmVkIHRoZW4gd2UgY29tcHV0ZSBpdCBiYXNlZCBvbiB0aGUgbWV0YWRhdGFcblx0ICogT3RoZXJ3aXNlIHdlIHVzZSB0aGUgdmFsdWUgcHJvdmlkZWQgaGVyZS5cblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAudWkubWRjLmVudW1zLkZpZWxkRWRpdE1vZGVcIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgZWRpdE1vZGU/OiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0LyoqXG5cdCAqIE9wdGlvbiB0byBhZGQgc2VtYW50aWMgb2JqZWN0cyBmb3IgYSBmaWVsZC5cblx0ICogVGhpcyBwYXJhbWV0ZXIgb3ZlcndyaXRlcyB0aGUgc2VtYW50aWMgb2JqZWN0cyBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnMuXG5cdCAqIFZhbGlkIG9wdGlvbnMgYXJlIGVpdGhlciBhIHNpbmdsZSBzZW1hbnRpYyBvYmplY3QsIGEgc3RyaW5naWZpZWQgYXJyYXkgb2Ygc2VtYW50aWMgb2JqZWN0cyxcblx0ICogYSBmb3JtYXR0ZXIgb3IgYSBzaW5nbGUgYmluZGluZyBleHByZXNzaW9uIHJldHVybmluZyBlaXRoZXIgYSBzaW5nbGUgc2VtYW50aWMgb2JqZWN0IG9yIGFuIGFycmF5IG9mIHNlbWFudGljIG9iamVjdHMuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGJpbmRUb1N0YXRlOiB0cnVlIH0pXG5cdHB1YmxpYyByZWFkb25seSBzZW1hbnRpY09iamVjdCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBpcyB1c2VkIHRvIG9wdGlvbmFsbHkgcHJvdmlkZSBhbiBleHRlcm5hbCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgbW9kZWwgdGhhbiB0aGUgT0RhdGEgbW9kZWwuXG5cdCAqIEl0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBhIGZpZWxkIHdpdGggdmFsdWUgaGVscCwgYW5kIHdpdGhvdXQgc3VwcG9ydCBmb3IgY29tcGxleCB2YWx1ZSBoZWxwIChjdXJyZW5jeSAvIHVuaXQpLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gb3B0aW9uYWxseSBwcm92aWRlIGFuIGV4dGVybmFsIGRlc2NyaXB0aW9uIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBvRGF0YSBtb2RlbC5cblx0ICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB2YWx1ZSBwcm9wZXJ0eS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGJpbmRhYmxlOiB0cnVlLFxuXHRcdGlzQmluZGluZ0luZm86IHRydWUsXG5cdFx0cmVxdWlyZWQ6IGZhbHNlXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic2FwLnVpLmNvcmUuVGV4dEFsaWduXCJcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IHRleHRBbGlnbj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdHB1YmxpYyByZWFkb25seSBzaG93RXJyb3JPYmplY3RTdGF0dXM/OiBvYmplY3QgfCBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIGNvbGxhYm9yYXRpb25FbmFibGVkPzogYm9vbGVhbjsgLy8gTmVlZCB0byBiZSBjb21wdXRlZCBvbiBkZW1hbmRcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBtYWluUHJvcGVydHlSZWxhdGl2ZVBhdGg/OiBzdHJpbmc7IC8vIE5lZWQgdG8gYmUgY29tcHV0ZWQgb24gZGVtYW5kXG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJvYmplY3RcIiwgaXNCaW5kaW5nSW5mbzogdHJ1ZSB9KVxuXHRjdXN0b21WYWx1ZUJpbmRpbmc/OiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHwgUHJvcGVydHlCaW5kaW5nSW5mbztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRpbmxpbmVFZGl0RW5hYmxlZD8gPSBmYWxzZTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRoYXNJbmxpbmVFZGl0PzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGZvY3VzSGFuZGxlcnNBdHRhY2hlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgY29tcHV0ZWRNZXRhUGF0aD86IENvbnRleHQ7XG5cblx0cHJpdmF0ZSBjb21wdXRlZENvbnRleHRQYXRoPzogQ29udGV4dDtcblxuXHRwcml2YXRlIG9kYXRhTWV0YU1vZGVsITogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRfYXBpSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBhc3NvY2lhdGVkIHZhbHVlIGhlbHAgcmVxdWlyZXMgdmFsaWRhdGlvbiBvciBub3QuXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRfcmVxdWlyZXNWYWxpZGF0aW9uPzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHN0cmljdCBoYW5kbGluZyBmb3IgYWN0aW9ucy4gV2hlbiB0cnVlLCB3YXJuaW5nIHJlc3BvbnNlcyBmcm9tIEFQSSBjYWxscyBkdXJpbmcgYWN0aW9uIGV4ZWN1dGlvblxuXHQgKiBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgZXJyb3JzIGFuZCBub3JtYWwgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZS5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHB1YmxpYyByZWFkb25seSBkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgcHJlcHJvY2Vzc29yQ29udGV4dCE6IFhNTFByZXByb2Nlc3NvckNvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGJpbmRpbmcgdXNlZCBmb3IgY29sbGFib3JhdGlvbiBub3RpZmljYXRpb25zLlxuXHQgKiBAcGFyYW0gZmllbGRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmdcblx0ICovXG5cdGdldENvbGxhYm9yYXRpb25CaW5kaW5nKGZpZWxkOiBDb250cm9sKTogT0RhdGFMaXN0QmluZGluZyB8IE9EYXRhQ29udGV4dEJpbmRpbmcge1xuXHRcdGxldCBiaW5kaW5nID0gKGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0KS5nZXRCaW5kaW5nKCk7XG5cblx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWVsZCk7XG5cdFx0XHRiaW5kaW5nID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRCaW5kaW5nKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJpbmRpbmc7XG5cdH1cblxuXHQvKipcblx0ICogRXh0cmFjdHMgZGF0YSBmcm9tIGEgY2hhbmdlIGV2ZW50IGZvciB1c2FnZSBpbiB0aGUgaGFuZGxlQ2hhbmdlIG1ldGhvZC5cblx0ICogQHBhcmFtIGNoYW5nZUV2ZW50IFRoZSBjaGFuZ2UgZXZlbnQgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIGRldGFpbHNcblx0ICovXG5cdHByaXZhdGUgZXh0cmFjdENoYW5nZUV2ZW50RGV0YWlscyhcblx0XHRjaGFuZ2VFdmVudDogVUk1RXZlbnQ8XG5cdFx0XHRDaGVja0JveCRTZWxlY3RFdmVudFBhcmFtZXRlcnMgJlxuXHRcdFx0XHRJbnB1dEJhc2UkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzICZcblx0XHRcdFx0RmllbGQkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzICZcblx0XHRcdFx0UmF0aW5nSW5kaWNhdG9yJENoYW5nZUV2ZW50UGFyYW1ldGVycyxcblx0XHRcdENoZWNrQm94IHwgSW5wdXRCYXNlIHwgbWRjRmllbGQgfCBSYXRpbmdJbmRpY2F0b3Jcblx0XHQ+XG5cdCk6IHtcblx0XHRzb3VyY2U6IENoZWNrQm94IHwgSW5wdXRCYXNlIHwgbWRjRmllbGQgfCBSYXRpbmdJbmRpY2F0b3I7XG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXI7XG5cdFx0aXNUcmFuc2llbnQ6IGJvb2xlYW47XG5cdFx0dmFsdWVSZXNvbHZlZDogUHJvbWlzZTx2b2lkPjtcblx0XHR2YWxpZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuO1xuXHRcdGN1c3RvbVZhbHVlQmluZGluZzogYm9vbGVhbiB8IHN0cmluZyB8IG51bWJlciB8IFByb3BlcnR5QmluZGluZ0luZm8gfCB1bmRlZmluZWQ7XG5cdH0ge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGNoYW5nZUV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0Ly8gSWYgdGhlIGZpZWxkIGlzIGJvdW5kIHRvIGEgSlNPTiBtb2RlbCwgc291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkgcmV0dXJucyB1bmRlZmluZWQuXG5cdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2UgY2Fubm90IGNhbGwgaXNUcmFuc2llbnQgb24gaXQuIERlZmF1bHRpbmcgdG8gZmFsc2UuXG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBzb3VyY2UgJiYgc291cmNlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgaXNUcmFuc2llbnQgPSBiaW5kaW5nQ29udGV4dCA/IChiaW5kaW5nQ29udGV4dCBhcyB1bmtub3duIGFzIHsgaXNUcmFuc2llbnQ6IEZ1bmN0aW9uIH0pLmlzVHJhbnNpZW50KCkgOiBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZVJlc29sdmVkID0gY2hhbmdlRXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKSB8fCBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRjb25zdCB2YWxpZCA9IGNoYW5nZUV2ZW50LmdldFBhcmFtZXRlcihcInZhbGlkXCIpO1xuXHRcdGNvbnN0IGZpZWxkVmFsaWRpdHkgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKGNoYW5nZUV2ZW50KS5zdGF0ZVtcInZhbGlkaXR5XCJdO1xuXHRcdGNvbnN0IGN1c3RvbVZhbHVlQmluZGluZyA9IHRoaXM/LmN1c3RvbVZhbHVlQmluZGluZztcblxuXHRcdHJldHVybiB7IHNvdXJjZSwgY29udHJvbGxlciwgaXNUcmFuc2llbnQsIHZhbHVlUmVzb2x2ZWQsIHZhbGlkLCBmaWVsZFZhbGlkaXR5LCBjdXN0b21WYWx1ZUJpbmRpbmcgfTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVDaGFuZ2UoXG5cdFx0Y2hhbmdlRXZlbnQ6IFVJNUV2ZW50PFxuXHRcdFx0Q2hlY2tCb3gkU2VsZWN0RXZlbnRQYXJhbWV0ZXJzICZcblx0XHRcdFx0SW5wdXRCYXNlJENoYW5nZUV2ZW50UGFyYW1ldGVycyAmXG5cdFx0XHRcdEZpZWxkJENoYW5nZUV2ZW50UGFyYW1ldGVycyAmXG5cdFx0XHRcdFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudFBhcmFtZXRlcnMsXG5cdFx0XHRDaGVja0JveCB8IElucHV0QmFzZSB8IG1kY0ZpZWxkIHwgUmF0aW5nSW5kaWNhdG9yXG5cdFx0PlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7IHNvdXJjZSwgY29udHJvbGxlciwgaXNUcmFuc2llbnQsIHZhbHVlUmVzb2x2ZWQsIHZhbGlkLCBmaWVsZFZhbGlkaXR5LCBjdXN0b21WYWx1ZUJpbmRpbmcgfSA9XG5cdFx0XHR0aGlzLmV4dHJhY3RDaGFuZ2VFdmVudERldGFpbHMoY2hhbmdlRXZlbnQpO1xuXG5cdFx0aWYgKGN1c3RvbVZhbHVlQmluZGluZykge1xuXHRcdFx0bGV0IG5ld1ZhbHVlO1xuXHRcdFx0Y29uc3QgdmFsdWVNb2RlbCA9IHNvdXJjZT8uZ2V0TW9kZWwoY3VzdG9tVmFsdWVCaW5kaW5nLm1vZGVsKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc291cmNlLmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRcdG5ld1ZhbHVlID0gKGNoYW5nZUV2ZW50IGFzIENoZWNrQm94JFNlbGVjdEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1ZhbHVlID0gKGNoYW5nZUV2ZW50IGFzIElucHV0QmFzZSRDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIik7XG5cdFx0XHR9XG5cdFx0XHR2YWx1ZU1vZGVsPy5zZXRQcm9wZXJ0eShjdXN0b21WYWx1ZUJpbmRpbmcucGF0aCwgbmV3VmFsdWUpO1xuXHRcdFx0dmFsdWVNb2RlbD8udXBkYXRlQmluZGluZ3ModHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHRoZSBGRSBDb250cm9sbGVyIGluc3RlYWQgb2YgdGhlIGV4dGVuc2lvbkFQSSB0byBhY2Nlc3MgaW50ZXJuYWwgRkUgY29udHJvbGxlcnNcblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyID8gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcikgOiB1bmRlZmluZWQ7XG5cblx0XHQvLyBDdXJyZW50bHkgd2UgaGF2ZSB1bmRlZmluZWQgYW5kIHRydWUuLi4gYW5kIG91ciBjcmVhdGlvbiByb3cgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoaXMuXG5cdFx0Ly8gSSB3b3VsZCBtb3ZlIHRoaXMgbG9naWMgdG8gdGhpcyBwbGFjZSBhcyBpdCdzIGhhcmQgdG8gdW5kZXJzdGFuZCBmb3IgZmllbGQgY29uc3VtZXJcblx0XHR2YWx1ZVJlc29sdmVkXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IENvbnRyb2wgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiB2YWxpZCA/PyB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXM/LmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IHRydWUgfSk7XG5cdFx0XHRcdGlmICghaXNUcmFuc2llbnQpIHtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIHNpZGUgZWZmZWN0cyB3aXRob3V0IHJlZ2lzdGVyaW5nIGRlZmVycmVkIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQgYmVmb3JlIHZhbHVlUmVzb2x2ZWQgaXMgcmVzb2x2ZWQuXG5cdFx0XHRcdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2UoY2hhbmdlRXZlbnQsICEhZmllbGRWYWxpZGl0eSwgdmFsdWVSZXNvbHZlZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmZldGNoUmVjb21tZW5kYXRpb25zKHNvdXJjZSwgY29udHJvbGxlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IENvbnRyb2wgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRMb2cuZGVidWcoXCJQcmVyZXF1aXNpdGVzIG9uIEZpZWxkIGZvciB0aGUgU2lkZUVmZmVjdHMgYW5kIFJlY29tbWVuZGF0aW9ucyBoYXZlIGJlZW4gcmVqZWN0ZWRcIik7XG5cdFx0XHRcdC8vIGFzIHRoZSBVSSBtaWdodCBuZWVkIHRvIHJlYWN0IG9uLiBXZSBjb3VsZCBwcm92aWRlIGEgcGFyYW1ldGVyIHRvIGluZm9ybSBpZiB2YWxpZGF0aW9uXG5cdFx0XHRcdC8vIHdhcyBzdWNjZXNzZnVsP1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IGZhbHNlIH0pO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBGb3IgdGhlIEVkaXRGbG93IHN5bmNocm9uaXphdGlvbiwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgY29ycmVzcG9uZGluZyBQQVRDSCByZXF1ZXN0IHRvIGJlIHNlbnQgKG9yIGFuIGVycm9yIHRvIGJlIGRldGVjdGVkKSwgb3RoZXJ3aXNlIHRoZXJlIGNvdWxkIGJlIGUuZy4gYWN0aW9uIG9yIHNhdmUgaW52b2tlZCBpbiBwYXJhbGxlbCB3aXRoIHRoZSBQQVRDSCByZXF1ZXN0LlxuXHRcdC8vIFRoaXMgaXMgZG9uZSB3aXRoIGEgMC10aW1lb3V0LCB0byBhbGxvdyBmb3IgdGhlICdwYXRjaFNlbnQnIGV2ZW50IHRvIGJlIHNlbnQgYnkgdGhlIGJpbmRpbmcgKHRoZW4gdGhlIGludGVybmFsIGVkaXQgZmxvdyBzeW5jaHJvbml6YXRpb24ga2lja3MgaW4gd2l0aCBFZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQpLlxuXHRcdGNvbnN0IHZhbHVlUmVzb2x2ZWRBbmRQYXRjaFNlbnQgPSB2YWx1ZVJlc29sdmVkXG5cdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0ZmVDb250cm9sbGVyPy5lZGl0Rmxvdy5zeW5jVGFzayh2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50KTtcblxuXHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIHRyYW5zaWVudCwgaXQgbWVhbnMgdGhlIHJlcXVlc3Qgd291bGQgZmFpbCBhbnl3YXkgYXMgdGhlIHJlY29yZCBkb2VzIG5vdCBleGlzdCBpbiByZWFsaXR5XG5cdFx0Ly8gU2hvdWxkIHRoZSByZXF1ZXN0IGJlIG1hZGUgaW4gZnV0dXJlIGlmIHRoZSBjb250ZXh0IGlzIHRyYW5zaWVudD9cblx0XHRpZiAoaXNUcmFuc2llbnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmZUNvbnRyb2xsZXI/Ll9zaWRlRWZmZWN0cy5wcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkKGNoYW5nZUV2ZW50LCAhIWZpZWxkVmFsaWRpdHksIHZhbHVlUmVzb2x2ZWQpO1xuXHRcdC8vIENvbGxhYm9yYXRpb24gRHJhZnQgQWN0aXZpdHkgU3luY1xuXHRcdGNvbnN0IGJDb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpO1xuXG5cdFx0aWYgKGJDb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBmaWVsZFZhbGlkaXR5KSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5nZXRDb2xsYWJvcmF0aW9uQmluZGluZyhzb3VyY2UpO1xuXG5cdFx0XHRjb25zdCBkYXRhID0gW1xuXHRcdFx0XHQuLi4oKHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpIHx8IHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcInNlbGVjdGVkXCIpKT8ucGFydHMgfHwgW10pLFxuXHRcdFx0XHQuLi4oc291cmNlLmdldEJpbmRpbmdJbmZvKFwiYWRkaXRpb25hbFZhbHVlXCIpPy5wYXJ0cyB8fCBbXSlcblx0XHRcdF1cblx0XHRcdFx0LmZpbHRlcigocGFydCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBwYXJ0Py5wYXRoICE9PSB1bmRlZmluZWQgJiYgcGFydC5wYXRoLmluZGV4T2YoXCJAQFwiKSA8IDA7IC8vIFJlbW92ZSBiaW5kaW5nIHBhcnRzIHdpdGggQEAgdGhhdCBtYWtlIG5vIHNlbnNlIGZvciBjb2xsYWJvcmF0aW9uIG1lc3NhZ2VzXG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5tYXAoZnVuY3Rpb24gKHBhcnQ6IHsgcGF0aDogc3RyaW5nIH0pIHtcblx0XHRcdFx0XHRyZXR1cm4gYCR7c291cmNlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHtwYXJ0LnBhdGh9YDtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZyb20gdGhpcyBwb2ludCwgd2Ugd2lsbCBhbHdheXMgc2VuZCBhIGNvbGxhYm9yYXRpb24gbWVzc2FnZSAoVU5MT0NLIG9yIENIQU5HRSksIHNvIHdlIHJldGFpblxuXHRcdFx0Ly8gYSBwb3RlbnRpYWwgVU5MT0NLIHRoYXQgd291bGQgYmUgc2VudCBpbiBoYW5kbGVGb2N1c091dCwgdG8gbWFrZSBzdXJlIGl0J3Mgc2VudCBhZnRlciB0aGUgQ0hBTkdFIG1lc3NhZ2Vcblx0XHRcdGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5yZXRhaW5Bc3luY01lc3NhZ2VzKGRhdGEpO1xuXG5cdFx0XHRjb25zdCBzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0Ly8gVGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYnkgdGhlIHVzZXIgLS0+IHdhaXQgdW50aWwgaXQncyBzZW50IHRvIHRoZSBzZXJ2ZXIgYmVmb3JlIHNlbmRpbmcgYSBub3RpZmljYXRpb24gdG8gb3RoZXIgdXNlcnNcblx0XHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJwYXRjaENvbXBsZXRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNoYW5nZSwgY29udGVudDogZGF0YSB9KTtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmVsZWFzZUFzeW5jTWVzc2FnZXMoZGF0YSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgaXNEYXRhVXBkYXRlZCA9IGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKTtcblx0XHRcdGlmIChpc0RhdGFVcGRhdGVkKSB7XG5cdFx0XHRcdHNlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZXNBZnRlclBhdGNoQ29tcGxldGVkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVwZGF0ZUNvbGxhYm9yYXRpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghaXNEYXRhVXBkYXRlZCkge1xuXHRcdFx0XHRcdC8vIFdlIG5lZWQgdG8gY2hlY2sgYWdhaW4gaWYgdGhlIGJpbmRpbmcgaGFzIHNvbWUgcGVuZGluZyBjaGFuZ2VzLCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgb25jZSB0aGUgRmllbGQgdmFsdWUgaXMgcmVzb2x2ZWRcblx0XHRcdFx0XHRpZiAoYmluZGluZy5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmVsZWFzZUFzeW5jTWVzc2FnZXMoZGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHNvdXJjZS5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpIHx8IChzb3VyY2UgYXMgQ29udHJvbCkuaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0dmFsdWVSZXNvbHZlZFxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdHVwZGF0ZUNvbGxhYm9yYXRpb24oKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZUxpdmVDaGFuZ2UoX2V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblZhbGlkYXRlRmllbGRHcm91cChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2VGaWVsZCA9IF9ldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHNvdXJjZUZpZWxkKSxcblx0XHRcdGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRFeHRlbnNpb25Db250cm9sbGVyKGNvbnRyb2xsZXIpO1xuXHRcdGZlQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShfZXZlbnQpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvcHM/OiBQcm9wZXJ0aWVzT2Y8RmllbGQsIFwiY2hhbmdlXCIgfCBcImxpdmVDaGFuZ2VcIiB8IFwiZm9jdXNpblwiPixcblx0XHRvdGhlcnM/OiBQcm9wZXJ0aWVzT2Y8RmllbGQsIFwiY2hhbmdlXCIgfCBcImxpdmVDaGFuZ2VcIiB8IFwiZm9jdXNpblwiPixcblx0XHRzY29wZT86IG5ldmVyXG5cdCkge1xuXHRcdGxldCBjb21iaW5lZFByb3BzO1xuXG5cdFx0aWYgKHByb3BzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHByb3BzID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMgPSB7IC4uLm90aGVycywgaWQ6IHByb3BzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMgPSB7IC4uLnByb3BzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdFx0c2NvcGUgPSBvdGhlcnMgYXMgbmV2ZXI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHsgX2ZsZXhJZCwgdmhJZFByZWZpeCwgaWRQcmVmaXgsIGlkLCBfYXBpSWQgfSA9IGNvbWJpbmVkUHJvcHM7XG5cblx0XHRcdGlmIChfZmxleElkICYmICFfZmxleElkLmluY2x1ZGVzKFwiLWNvbnRlbnRcIikpIHtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5fYXBpSWQgPSBfZmxleElkO1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9mbGV4SWQgPSBgJHtfZmxleElkfS1jb250ZW50YDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCF2aElkUHJlZml4KSB7XG5cdFx0XHRcdC8vbm8gdmhJZFByZWZpeCBtZWFucyBcInB1YmxpYyB1c2UgY2FzZVwiXG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5fZmxleElkID0gaWQ7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuaWRQcmVmaXggPSBpZFByZWZpeCB8fCBpZDtcblx0XHRcdH1cblx0XHRcdGlmICghaWQpIHtcblx0XHRcdFx0aWYgKGNvbWJpbmVkUHJvcHMuX2FwaUlkKSB7XG5cdFx0XHRcdFx0Y29tYmluZWRQcm9wcy5pZCA9IGNvbWJpbmVkUHJvcHMuX2FwaUlkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlkUHJlZml4KSB7XG5cdFx0XHRcdFx0Y29tYmluZWRQcm9wcy5pZCA9IGdlbmVyYXRlKFtpZFByZWZpeCwgXCJGaWVsZFwiXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0c3VwZXIoY29tYmluZWRQcm9wcywgc2NvcGUpO1xuXHR9XG5cblx0b3ZlcnJpZGUgYXBwbHlTZXR0aW5ncyhtU2V0dGluZ3M6IFByb3BlcnRpZXNPZjxGaWVsZCwgXCJjaGFuZ2VcIiB8IFwibGl2ZUNoYW5nZVwiIHwgXCJmb2N1c2luXCI+LCBvU2NvcGU/OiBvYmplY3QpOiB0aGlzIHtcblx0XHR0aGlzLl9kb05vdENyZWF0ZU9uTnVsbENvbnRleHQgPSB0cnVlOyAvLyBXZSBkb24ndCB3YW50IHRvIGNyZWF0ZSB0aGUgZmllbGQgaWYgdGhlcmUgaXMgbm8gY29udGV4dFxuXHRcdHJldHVybiBzdXBlci5hcHBseVNldHRpbmdzKG1TZXR0aW5ncywgb1Njb3BlKTtcblx0fVxuXG5cdF9zZXRBcmlhTGFiZWxsZWRCeShjb250ZW50PzogQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTogdm9pZCB7XG5cdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5hZGRBcmlhTGFiZWxsZWRCeSkge1xuXHRcdFx0Y29uc3QgYXJpYUxhYmVsbGVkQnkgPSB0aGlzLmFyaWFMYWJlbGxlZEJ5O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGlkIG9mIGFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRcdGNvbnN0IGFyaWFMYWJlbGxlZEJ5cyA9IGNvbnRlbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKSB8fCBbXTtcblx0XHRcdFx0aWYgKCFhcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoaWQpKSB7XG5cdFx0XHRcdFx0Y29udGVudC5hZGRBcmlhTGFiZWxsZWRCeShpZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENvbnRhY3QgY29udHJvbHMgc3VjaCBhcyBFbWFpbCBhbmQgQ29udGFjdFxuXHRcdFx0aWYgKChjb250ZW50IGFzIENvbnRyb2wpLmlzQShcInNhcC5mZS5tYWNyb3MuY29udGFjdC5Db250YWN0XCIpIHx8IChjb250ZW50IGFzIENvbnRyb2wpLmlzQShcInNhcC5mZS5tYWNyb3MuY29udGFjdC5FbWFpbFwiKSkge1xuXHRcdFx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSgoY29udGVudCBhcyB1bmtub3duIGFzIENvbnRhY3QgfCBFbWFpbCkuZ2V0Q29udGVudCgpIGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHQvLyBiZWZvcmUgY2FsbGluZyB0aGUgcmVuZGVyZXIgb2YgdGhlIEZpZWxkIHBhcmVudCBjb250cm9sIG1heSBoYXZlIHNldCBhcmlhTGFiZWxsZWRCeVxuXHRcdC8vIHdlIGVuc3VyZSBpdCBpcyBwYXNzZWQgdG8gaXRzIGlubmVyIGNvbnRyb2xzXG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SW5uZXJDb250cm9sKHNvdXJjZTogQ29udHJvbCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzb3VyY2U/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFzb3VyY2U/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsZVdyYXBwZXJcIikpIHtcblx0XHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHNvdXJjZSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+O1xuXHRcdFx0Y29uc3QgY29udHJvbHMgPSBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKSBhcyBDb250cm9sW107XG5cdFx0XHRsZXQgaW5uZXJDb250cm9sO1xuXHRcdFx0aWYgKGNvbnRyb2xzLmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRcdGlubmVyQ29udHJvbCA9IGNvbnRyb2xzWzBdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlubmVyQ29udHJvbD8uaXNBKFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0XHRpbm5lckNvbnRyb2wgPSAoaW5uZXJDb250cm9sIGFzIEhCb3gpLmdldEl0ZW1zKClbMF07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaW5uZXJDb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWRpdENvbnRyb2wgPSB0aGlzLmdldElubmVyQ29udHJvbCh0aGlzLmNvbnRlbnQpO1xuXHRcdGNvbnN0IG5vdExvY2tDb250cm9scyA9IFtcInNhcC5tLkNoZWNrQm94XCJdO1xuXG5cdFx0Y29uc3QgY2FuTG9jayA9ICFub3RMb2NrQ29udHJvbHMuaW5jbHVkZXMoZWRpdENvbnRyb2w/LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID8/IFwiXCIpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmICF0aGlzLmZvY3VzSGFuZGxlcnNBdHRhY2hlZCAmJiBjYW5Mb2NrKSB7XG5cdFx0XHQvLyBUaGUgZXZlbnQgZGVsZWdhdGUgZG9lc24ndCB3b3JrIG9uIHRoZSBGaWVsZCwgd2UgbmVlZCB0byBwdXQgaXQgb24gaXRzIGNvbnRlbnQgKEZpZWxkV3JhcHBlcilcblx0XHRcdHRoaXMuY29udGVudD8uYWRkRXZlbnREZWxlZ2F0ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uZm9jdXNpbjogKGV2dDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNJbih0aGlzLCBldnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsZXJzQXR0YWNoZWQgPSB0cnVlOyAvLyBUbyBhdm9pZCBhdHRhY2hpbmcgZXZlbnRzIHR3aWNlXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZpcnN0IHZpc2libGUgY29udHJvbCBpbiB0aGUgRmllbGRXcmFwcGVyLlxuXHQgKiBAcGFyYW0gY29udHJvbCBGaWVsZFdyYXBwZXJcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IHZpc2libGUgY29udHJvbFxuXHQgKi9cblx0c3RhdGljIGdldENvbnRyb2xJbkZpZWxkV3JhcHBlcihjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFjb250cm9sPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBjb250cm9sIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj47XG5cdFx0XHRjb25zdCBjb250cm9scyA9IGZpZWxkV3JhcHBlci5nZXRFZGl0TW9kZSgpID09PSBcIkRpc3BsYXlcIiA/IFtmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKV0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPj0gMSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWVsZCBoYXMgc29tZSBNZGMgZmllbGQgd2l0aCBwZW5kaW5nIHVzZXIgaW5wdXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBwZW5kaW5nIHVzZXIgaW5wdXQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0aGFzUGVuZGluZ1VzZXJJbnB1dCgpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRDb250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRyZXR1cm4gISEodGFyZ2V0Q29udHJvbCAmJiB0YXJnZXRDb250cm9sLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIHRhcmdldENvbnRyb2wuaGFzUGVuZGluZ1VzZXJJbnB1dCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGRcblx0ICogd2hlbiBiZWluZyByZWZlcmVuY2VkIGJ5IHRoZSAnbGFiZWxGb3InIGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgb3Igd2hlbiBpbiBhIGZvcm0uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBjb250cm9sc1xuXHQgKi9cblx0Z2V0TGFiZWxDb250cm9scygpOiBMYWJlbFtdIHtcblx0XHRjb25zdCByZWZlcmVuY2luZ0xhYmVscyA9IHRoaXMuX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscygpO1xuXHRcdHJldHVybiByZWZlcmVuY2luZ0xhYmVscy5sZW5ndGggPiAwID8gcmVmZXJlbmNpbmdMYWJlbHMgOiB0aGlzLl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIHdoZW4gcmVmZXJlbmNlZCBieSBhIGxhYmVsLlxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwgY29udHJvbHNcblx0ICovXG5cdF9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMoKTogTGFiZWxbXSB7XG5cdFx0Y29uc3QgbGFiZWxJZHMgPSBMYWJlbEVuYWJsZW1lbnQuZ2V0UmVmZXJlbmNpbmdMYWJlbHModGhpcyk7XG5cdFx0Y29uc3QgbGFiZWxDb250cm9sczogTGFiZWxbXSA9IFtdO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdGxhYmVsSWRzLmZvckVhY2goKGxhYmVsSWQpID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsQ29udHJvbCA9IHZpZXcuYnlJZChsYWJlbElkKTtcblx0XHRcdGlmIChsYWJlbENvbnRyb2wpIHtcblx0XHRcdFx0bGFiZWxDb250cm9scy5wdXNoKGxhYmVsQ29udHJvbCBhcyBMYWJlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxhYmVsQ29udHJvbHM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIG9yIGNvbm5lY3RlZCBmaWVsZCB3aGVuIGluIGEgZm9ybS5cblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGNvbnRyb2xzXG5cdCAqL1xuXHRfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcygpOiBMYWJlbFtdIHtcblx0XHQvLyBpZiB0aGUgZmllbGQgaXMgbm90IGluIGEgZm9ybSwgd2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICghdGhpcy5nZXRJZCgpLmluY2x1ZGVzKFwiRm9ybUVsZW1lbnRcIikpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdC8vIHNlYXJjaCB0aGUgcGFyZW50cyBvZiB0aGUgY29udHJvbCB1bnRpbCB3ZSBmaW5kIGEgc2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XG5cdFx0Ly8gb3Igd2UgcmVhY2ggdGhlIHJvb3QgY29udHJvbFxuXHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IChjb250cm9sIGFzIE1hbmFnZWRPYmplY3QpPy5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2wgPyBbKGNvbnRyb2wgYXMgRm9ybUVsZW1lbnQpLmdldExhYmVsQ29udHJvbCgpIGFzIExhYmVsXSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgZmxvYXQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQ29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICghb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIG9Db250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRvQ29udHJvbCA9IChvQ29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRTZWxlY3RlZCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBSYXRpbmdJbmRpY2F0b3IpLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIExpbmspLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MYWJlbFwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgVGV4dCkuZ2V0VGV4dChmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEVuaGFuY2VXaXRoVUk1PFRleHRMaW5rPj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBPYmplY3RTdGF0dXMpLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIE9iamVjdElkZW50aWZpZXIpLmdldFRpdGxlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbC5nZXRWYWx1ZSgpOyAvLyBGaWVsZFdyYXBwZXJcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRyb2w/LmlzQTxEYXRhUG9pbnQ+KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIikgfHxcblx0XHRcdG9Db250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpIHx8XG5cdFx0XHRvQ29udHJvbD8uaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIilcblx0XHQpIHtcblx0XHRcdC8vIHRoaXMgaXMgYSBCQnY0IHVuZGVybmVhdGgsIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgQkJWNFxuXHRcdFx0cmV0dXJuIG9Db250cm9sLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImdldHRpbmcgdmFsdWUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRWYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IENvbnRyb2wge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gKGNvbnRyb2wgYXMgSEJveCkuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRTZWxlY3RlZCh2YWx1ZSBhcyBib29sZWFuKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8VGV4dD4oXCJzYXAubS5UZXh0XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFRleHQodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgXCJzZXR0aW5nIHZhbHVlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXG5cdFx0aWYgKGNvbnRyb2wgPT09IG51bGwgfHwgY29udHJvbCA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBjb2xsYWJvcmF0aW9uLWVuYWJsZWQgSEJveFxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2wuaXNBPEhCb3g+KFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgVkJveCB3cmFwcGVyXG5cdFx0aWYgKGNvbnRyb2wuaXNBPFZCb3g+KFwic2FwLm0uVkJveFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgcHJvcGVydHktYmFzZWQgY29udHJvbHMgdGhhdCB1c2UgXCJlbmFibGVkXCIgcHJvcGVydHlcblx0XHRpZiAoXG5cdFx0XHRjb250cm9sLmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIik7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIGNvbnRyb2xzIHRoYXQgYXJlIGFsd2F5cyBlbmFibGVkXG5cdFx0aWYgKFxuXHRcdFx0Y29udHJvbC5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxGb3JtRWxlbWVudFdyYXBwZXI+KFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxFeHBhbmRhYmxlVGV4dD4oXCJzYXAubS5FeHBhbmRhYmxlVGV4dFwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8dHlwZW9mIENvbmRpdGlvbmFsV3JhcHBlcj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkNvbmRpdGlvbmFsV3JhcHBlclwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8VGV4dExpbms+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5UZXh0TGlua1wiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIHNwZWNpYWwgcHJvcGVydHkgY2FzZXNcblx0XHRpZiAoY29udHJvbC5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpIHx8IGNvbnRyb2wuaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLmdldEVuYWJsZWQoKTtcblx0XHR9XG5cblx0XHRpZiAoY29udHJvbC5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImxpbmtFbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBNREMgRmllbGQgc3BlY2lhbCBjYXNlXG5cdFx0aWYgKGNvbnRyb2wuaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGVkaXRNb2RlID0gY29udHJvbC5nZXRFZGl0TW9kZSgpO1xuXHRcdFx0cmV0dXJuIGVkaXRNb2RlICE9PSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBGaWxlV3JhcHBlciBzcGVjaWFsIGNhc2Vcblx0XHRpZiAoY29udHJvbC5pc0E8RmlsZVdyYXBwZXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wubGluayA/IGNvbnRyb2wubGluay5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIikgOiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBIQm94IHdpdGggU2l0dWF0aW9uc0luZGljYXRvciBhdCBpdGVtWzFdXG5cdFx0aWYgKChjb250cm9sIGFzIEhCb3gpLmlzQT8uKFwic2FwLm0uSEJveFwiKSAmJiAoY29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzFdPy5pc0EoXCJzYXAuZmUubWFjcm9zLnNpdHVhdGlvbnMuU2l0dWF0aW9uc0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBlbmFibGVkXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2w/LmlzQTxIQm94PihcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdGNvbnRyb2wgPSBjb250cm9sLmdldEl0ZW1zKClbMF07XG5cdFx0fVxuXG5cdFx0Ly8gd2UgbmVlZCB0byBjYWxsIHRoZSBzZXRQcm9wZXJ0eSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzXG5cdFx0Ly8gb3RoZXJ3aXNlIHdlIGVuZCB1cCBpbiBhIG1heCBjYWxsIHN0YWNrIHNpemVcblx0XHRpZiAoY29udHJvbD8uaXNBPENoZWNrQm94PihcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImVuYWJsZWRcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPExpbms+KFwic2FwLm0uTGlua1wiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImFjdGl2ZVwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RJZGVudGlmaWVyPihcInNhcC5tLk9iamVjdElkZW50aWZpZXJcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwidGl0bGVBY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0Ly8gVGhlIG1kYyBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IFwiZW5hYmxlZFwiLCB0aGVyZWZvcmUgd2UgbWFwXG5cdFx0XHQvLyB0aGUgZW5hYmxlZCBwcm9wZXJ0eSB0byB0aGUgcmVzcGVjdGl2ZSBkaXNhYmxlZCBzZXR0aW5nIG9mIHRoZSBlZGl0IG1vZGVcblx0XHRcdC8vIHdpdGggdGhpcyBncmFjZWZ1bCBwYXR0ZXJuXG5cdFx0XHRsZXQgZWRpdE1vZGVUeXBlO1xuXHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0ZWRpdE1vZGVUeXBlID0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRNb2RlVHlwZSA9IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sLnNldEVkaXRNb2RlKGVkaXRNb2RlVHlwZSk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldExpbmtFbmFibGVkKGVuYWJsZWQpO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2w7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldEVuYWJsZWQoZW5hYmxlZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IFwic2V0RW5hYmxlZCBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBUaGUgcGFyYW1ldGVycyB0byBjcmVhdGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIFR5cGUgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMubWVzc2FnZSBNZXNzYWdlIHRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gTWVzc2FnZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wZXJzaXN0ZW50IFRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgcGVyc2lzdGVudFxuXHQgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkTWVzc2FnZShwYXJhbWV0ZXJzOiB7IHR5cGU/OiBNZXNzYWdlVHlwZTsgbWVzc2FnZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IHBlcnNpc3RlbnQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblxuXHRcdGxldCBwYXRoOyAvL3RhcmdldCBmb3Igb01lc3NhZ2Vcblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRwYXRoID0gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRCaW5kaW5nKFwic2VsZWN0ZWRcIik/LmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cGF0aCA9IChvQ29udHJvbCBhcyBJbnB1dEJhc2UpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UmVzb2x2ZWRQYXRoKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHBhdGggPSBvQ29udHJvbC5nZXRCaW5kaW5nKFwidmFsdWVcIikhLmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0dGFyZ2V0OiBwYXRoLFxuXHRcdFx0dHlwZTogcGFyYW1ldGVycy50eXBlLFxuXHRcdFx0bWVzc2FnZTogcGFyYW1ldGVycy5tZXNzYWdlLFxuXHRcdFx0cHJvY2Vzc29yOiBvQ29udHJvbD8uZ2V0TW9kZWwoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0cGVyc2lzdGVudDogcGFyYW1ldGVycy5wZXJzaXN0ZW50XG5cdFx0fSk7XG5cblx0XHRtc2dNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRyZXR1cm4gb01lc3NhZ2UuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlKGlkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IGFyciA9IG1zZ01hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGFyci5maW5kKChlOiBNZXNzYWdlKSA9PiBlPy5nZXRJZD8uKCkgPT09IGlkKTtcblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRtc2dNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlc3VsdCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0TWVzc2FnZU1hbmFnZXIoKTogTWVzc2FnaW5nIHtcblx0XHRyZXR1cm4gTWVzc2FnaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbk1ldGFkYXRhQXZhaWxhYmxlIGV2ZW50LlxuXHQgKi9cblx0b25NZXRhZGF0YUF2YWlsYWJsZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gdGhpcy5wcmVwYXJlUHJvcGVydGllcygpO1xuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcykge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZXMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbWV0YSBwYXRoIGFuZCBjb250ZXh0IHBhdGgsIHNldHMgdXAgdGhlIGlucHV0IGZpZWxkIHByb3BlcnRpZXMsXG5cdCAqIGFuZCBjYWxscyB0aGUgc2V0VXBGaWVsZCBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEFkZGl0aW9uYWxseSwgaXQgc2V0cyB0aGUgbWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIGFuZCBjb2xsYWJvcmF0aW9uRW5hYmxlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJlcGFyZWQgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLCBvciB1bmRlZmluZWQgaWYgdGhlIHByZXByb2Nlc3NvciBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUuXG5cdCAqL1xuXHRwcmVwYXJlUHJvcGVydGllcygpOiBGaWVsZEJsb2NrUHJvcGVydGllcyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gdGhpcy5nZXRNZXRhUGF0aE9iamVjdCh0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblxuXHRcdGlmICghbWV0YUNvbnRleHRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0Y29uc3QgaW5wdXRGaWVsZFByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5QmFnKCkgYXMgSW5wdXRGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5wdXRGaWVsZFByb3BlcnRpZXMsIFwidmFsdWVcIiwge1xuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEZpZWxkUHJvcGVydGllcywgXCJkZXNjcmlwdGlvblwiLCB7XG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5yZWFkT25seSA9IHRoaXMuYmluZFN0YXRlKFwicmVhZE9ubHlcIik7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgYSBiaW5kaW5nIGZvciB0aGUgcHJvcGVydHkgc2VtYW50aWNPYmplY3Qgd2Ugd2lsbCByZWx5IG9uIHRoZSBiaW5kaW5nIHRvIHRoZSBzdGF0ZSB0byBlbnN1cmVcblx0XHQvLyBiaW5kaW5nIG1hbmlwdWxhdGlvbiBpcyBwb3NzaWJsZVxuXHRcdGlmICh0aGlzLmdldEJpbmRpbmdJbmZvKFwic2VtYW50aWNPYmplY3RcIikpIHtcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnNlbWFudGljT2JqZWN0ID0gY29tcGlsZUV4cHJlc3Npb24odGhpcy5iaW5kU3RhdGUoXCJzZW1hbnRpY09iamVjdFwiKSk7XG5cdFx0fVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnZoSWRQcmVmaXggPSB0aGlzLnZoSWRQcmVmaXg7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuaWRQcmVmaXggPSB0aGlzLmlkUHJlZml4O1xuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLl9mbGV4SWQgPSB0aGlzLl9mbGV4SWQ7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMub25MaXZlQ2hhbmdlID0gdGhpcy5oYXNMaXN0ZW5lcnMoXCJsaXZlQ2hhbmdlXCIpID8gXCJTb21ldGhpbmdcIiA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dCA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0O1xuXHRcdHRoaXMub2RhdGFNZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aCA9IHRoaXMub2RhdGFNZXRhTW9kZWw/LmdldE1ldGFDb250ZXh0KHRoaXMuZ2V0Q29tcHV0ZWRDb250ZXh0UGF0aCh0aGlzLmNvbnRleHRQYXRoKSk7XG5cblx0XHR0aGlzLmNvbXB1dGVkTWV0YVBhdGggPSB0aGlzLm9kYXRhTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGguZ2V0UGF0aCgpKSBhcyBDb250ZXh0O1xuXG5cdFx0Ly8gU29tZSBjb2RlIHJlbHkgb24gdXMgY2hlY2tpbmcgaWYgdmlzaWJsZSBpcyBkZWZpbmVkIG9yIG5vdCwgdGhlIG9ubHkgd2F5IHRvIGRvIGl0IGlzIHRocm91Z2ggdGhlIGlzUHJvcGVydHlJbml0aWFsIG1ldGhvZFxuXHRcdGlmICh0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwidmlzaWJsZVwiKSkge1xuXHRcdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMudmlzaWJsZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvL2lmICh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQpIHtcblx0XHQvLyBJZiB0aGUgSUQgaXMgbm90IHNldCBieSB0aGUgY29uc3VtZXIsIHVzZSB0aGUgSUQgcHJvdmlkZWQgYnkgVUk1LlxuXHRcdC8vIChUaGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIHZhbHVlIGhlbHAgcmVsaWVzIG9uIGFsd2F5cyBoYXZpbmcgYW4gSUQuKVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLmlkID0gaW5wdXRGaWVsZFByb3BlcnRpZXMuaWQgPz8gdGhpcy5nZXRJZCgpO1xuXG5cdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gc2V0VXBGaWVsZChcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0e30gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy52aWV3RGF0YSBhcyBKU09OTW9kZWwpID8/IG5ldyBKU09OTW9kZWwodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGE/LigpID8/IHt9KSxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy5pbnRlcm5hbCBhcyBKU09OTW9kZWwpID8/IHRoaXMuX2dldE93bmVyKCkhLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHR0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/LmFwcENvbXBvbmVudCA/PyB0aGlzLl9nZXRPd25lcigpIS5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdHRoaXMuaXNQcm9wZXJ0eUluaXRpYWwoXCJyZWFkT25seVwiKSxcblx0XHRcdHRoaXMuY29tcHV0ZWRNZXRhUGF0aCxcblx0XHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImlubGluZUVkaXRFbmFibGVkXCIsIHByZXBhcmVkUHJvcGVydGllcy5pbmxpbmVFZGl0RW5hYmxlZCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImhhc0lubGluZUVkaXRcIiwgY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmhhc0lubGluZUVkaXQpKTtcblxuXHRcdHByZXBhcmVkUHJvcGVydGllcy5pc0R5bmFtaWNJbnN0YW50aWF0aW9uID0gdHJ1ZTtcblx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCkgdGhpcy5tYWluUHJvcGVydHlSZWxhdGl2ZVBhdGggPSBwcmVwYXJlZFByb3BlcnRpZXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoO1xuXHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgPSBwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5kaXNwbGF5U3R5bGUgPT09IFwiRmlsZVwiKVxuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVVcGxvYWRlclZpc2libGUgPSAhdGhpcy5yZWFkT25seSAmJiBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdGFibGVFeHByZXNzaW9uO1xuXHRcdHByZXBhcmVkUHJvcGVydGllcy5nZXRUcmFuc2xhdGVkVGV4dCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQuYmluZCh0aGlzKTtcblx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmFyaWFMYWJlbGxlZEJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5hcmlhTGFiZWxsZWRCeSA9IHRoaXMuYXJpYUxhYmVsbGVkQnk7XG5cdFx0fVxuXHRcdHJldHVybiBwcmVwYXJlZFByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY29udGVudCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHByZXBhcmVkIHByb3BlcnRpZXMgdG8gY3JlYXRlIGFuZCByZXR1cm4gdGhlIGNvbnRlbnQgY29udHJvbCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKiBAcGFyYW0gcHJlcGFyZWRQcm9wZXJ0aWVzIFRoZSBwcmVwYXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRlbnQgY29udHJvbC5cblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IENvbnRyb2wge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0Ly8gV2UgaGF2ZSB0byBzZXQgKG9yIGJpbmQpIHNvbWUgcHJvcGVydGllcyB0byB0aGUgRmllbGQgc28gdGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgY29uc3VtZXJzL1VJNVxuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJyZXF1aXJlZFwiLCBwcmVwYXJlZFByb3BlcnRpZXMucmVxdWlyZWRFeHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJlZGl0YWJsZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdGFibGVFeHByZXNzaW9uKTtcblxuXHRcdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcInZpc2libGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLnZpc2libGUpO1xuXHRcdFx0aWYgKHR5cGVvZiBwcmVwYXJlZFByb3BlcnRpZXMudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5jdXN0b21WYWx1ZUJpbmRpbmcgPSBwcmVwYXJlZFByb3BlcnRpZXMudmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29tcHV0ZWRFZGl0TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJlZGl0TW9kZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdE1vZGUgPz8gY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbXB1dGVkRWRpdE1vZGUpKTtcblx0XHRcdH1cblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmNoYW5nZSA9IChGaWVsZCBhcyB1bmtub3duIGFzIHsgaGFuZGxlQ2hhbmdlOiBFdmVudEhhbmRsZXIgfSkuaGFuZGxlQ2hhbmdlO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZSA9IChGaWVsZCBhcyB1bmtub3duIGFzIHsgaGFuZGxlTGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyIH0pLmhhbmRsZUxpdmVDaGFuZ2U7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgPSAoXG5cdFx0XHRcdEZpZWxkIGFzIHVua25vd24gYXMgeyBvblZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyIH1cblx0XHRcdCkub25WYWxpZGF0ZUZpZWxkR3JvdXA7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVUeXBlTWlzc21hdGNoID0gdGhpcy5vbkhhbmRsZVR5cGVNaXNzbWF0Y2guYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZUZpbGVTaXplRXhjZWVkID0gdGhpcy5vbkhhbmRsZUZpbGVTaXplRXhjZWVkLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVVcGxvYWRDb21wbGV0ZSA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlVXBsb2FkQ29tcGxldGUoXG5cdFx0XHRcdFx0ZXYsXG5cdFx0XHRcdFx0eyBwYXRoOiBwcmVwYXJlZFByb3BlcnRpZXMuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiB9LFxuXHRcdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udHJvbGxlclxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnVwbG9hZFN0cmVhbSA9IHRoaXMub25VcGxvYWRTdHJlYW0uYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnJlbW92ZVN0cmVhbSA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIucmVtb3ZlU3RyZWFtKFxuXHRcdFx0XHRcdGV2IGFzIEZpZWxkJENoYW5nZUV2ZW50ICYgVUk1RXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdFx0XHRcdHsgcGF0aDogcHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gfSxcblx0XHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXJcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVPcGVuVXBsb2FkZXIgPSB0aGlzLm9uSGFuZGxlT3BlblVwbG9hZGVyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVDbG9zZVVwbG9hZGVyID0gdGhpcy5vbkhhbmRsZUNsb3NlVXBsb2FkZXIuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9wZW5FeHRlcm5hbExpbmsgPSB0aGlzLm9uT3BlbkV4dGVybmFsTGluay5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25Gb2N1c091dCA9IHRoaXMub25Gb2N1c091dC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWQgPSB0aGlzLm9uTGlua1ByZXNzZWQuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTiA9IChldjogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IHByZXBhcmVkUHJvcGVydGllcy5tZXRhUGF0aC5nZXRPYmplY3QoKTtcblx0XHRcdFx0aWYgKCFvRGF0YUZpZWxkKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHR9ID0ge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogZXYuZ2V0U291cmNlKCk/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YUZpZWxkLk1hcHBpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0b0RhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGV2LmdldFNvdXJjZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b24gPSAoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IG9UaGlzOiBGaWVsZEJsb2NrUHJvcGVydGllcyA9IHByZXBhcmVkUHJvcGVydGllcztcblx0XHRcdFx0Y29uc3Qgb0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ID0gcHJlcGFyZWRQcm9wZXJ0aWVzLm1ldGFQYXRoLmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgc0ludm9jYXRpb25Hcm91cGluZyA9IFwiSXNvbGF0ZWRcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxPcGVyYXRpb25Hcm91cGluZ1R5cGU+KS4kRW51bU1lbWJlciA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIkNoYW5nZVNldFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBiSXNOYXZpZ2FibGUgPSBvVGhpcy5uYXZpZ2F0ZUFmdGVyQWN0aW9uIGFzIGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0XHRcdGJJc05hdmlnYWJsZSA9IGJJc05hdmlnYWJsZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGVudGl0aWVzOiBBcnJheTxzdHJpbmc+ID0gb1RoaXM/LmNvbnRleHRQYXRoPy5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZVN0cmljdEhhbmRsaW5nID0gdGhpcy5kaXNhYmxlU3RyaWN0SGFuZGxpbmc7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0XHRcdFx0Y29udGV4dHM6IGV2LmdldFNvdXJjZSgpLmdldEJpbmRpbmdDb250ZXh0KCkhIGFzIE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogc0ludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0XHRtb2RlbDogZXYuZ2V0U291cmNlKCkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdGxhYmVsOiBvRGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBiSXNOYXZpZ2FibGUsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IGRpc2FibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKG9EYXRhRmllbGQuQWN0aW9uISwgb1BhcmFtcyk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWUuZGlzcGxheUFnZ3JlZ2F0ZURldGFpbHMoZXYsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJlcGFyZWRQcm9wZXJ0aWVzLmRhdGFNb2RlbFBhdGgpKTtcblx0XHRcdH07XG5cdFx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiKSB7XG5cdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoID0gKGV2KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0ZXYuZ2V0U291cmNlKCksXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0KHByZXBhcmVkUHJvcGVydGllcy5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpLlRhcmdldC52YWx1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmVkaXRNb2RlICE9PSBcIkRpc3BsYXlcIikge1xuXHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMudmFsdWVIZWxwSWQgPSBGaWVsZFN0cnVjdHVyZS5nZXRQb3NzaWJsZVZhbHVlSGVscFRlbXBsYXRlSWQoXG5cdFx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSxcblx0XHRcdFx0XHR0aGlzLmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5jb250ZW50ID0gRmllbGRTdHJ1Y3R1cmUuZ2V0RmllbGRTdHJ1Y3R1cmVUZW1wbGF0ZShwcmVwYXJlZFByb3BlcnRpZXMpIGFzIHVua25vd24gYXMgQ29udHJvbDtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGUubWVzc2FnZSArIFwiIGluIGNyZWF0ZUNvbnRlbnQgb2YgRmllbGRcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ7XG5cdH1cblxuXHRvbkhhbmRsZVR5cGVNaXNzbWF0Y2goZXY6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlVHlwZU1pc3NtYXRjaChldik7XG5cdH1cblxuXHRvbkhhbmRsZUZpbGVTaXplRXhjZWVkKGV2OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVGaWxlU2l6ZUV4Y2VlZChldik7XG5cdH1cblxuXHRvbkhhbmRsZU9wZW5VcGxvYWRlcihldjogVUk1RXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlT3BlblVwbG9hZGVyKGV2KTtcblx0fVxuXG5cdG9uVXBsb2FkU3RyZWFtKGV2OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIudXBsb2FkU3RyZWFtKHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSwgZXYpO1xuXHR9XG5cblx0b25IYW5kbGVDbG9zZVVwbG9hZGVyKGV2OiBVSTVFdmVudDx7fSwgRmlsZVVwbG9hZGVyPik6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVDbG9zZVVwbG9hZGVyKGV2KTtcblx0fVxuXG5cdG9uT3BlbkV4dGVybmFsTGluayhldjogVUk1RXZlbnQ8e30sIExpbms+KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLm9wZW5FeHRlcm5hbExpbmsoZXYpO1xuXHR9XG5cblx0b25MaW5rUHJlc3NlZChldjogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIucHJlc3NMaW5rKGV2KTtcblx0fVxuXG5cdG9uRm9jdXNPdXQoZXY6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LmhhbmRsZUNvbnRlbnRGb2N1c091dChldik7XG5cdH1cblxuXHRnZXRQcm9wZXJ0eUJhZygpOiBQcm9wZXJ0aWVzT2Y8dGhpcz4ge1xuXHRcdGNvbnN0IHNldHRpbmdzOiBQcm9wZXJ0aWVzT2Y8dGhpcz4gPSB7fSBhcyBQcm9wZXJ0aWVzT2Y8dGhpcz47XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25zID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRQcm9wZXJ0eVZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0c2V0dGluZ3NbcHJvcGVydHlOYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBjdXJyZW50UHJvcGVydHlWYWx1ZTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGlvbk5hbWUgaW4gYWdncmVnYXRpb25zKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSk7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhZ2dyZWdhdGlvbkNvbnRlbnQpKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuQXJyYXkgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBtYW5hZ2VkT2JqZWN0IG9mIGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRcdGlmIChtYW5hZ2VkT2JqZWN0LmlzQTxCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHk+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIikpIHtcblx0XHRcdFx0XHRcdGNoaWxkcmVuQXJyYXkucHVzaChtYW5hZ2VkT2JqZWN0LmdldFByb3BlcnR5QmFnKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGNoaWxkcmVuQXJyYXk7XG5cdFx0XHR9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25Db250ZW50LmlzQTxCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHk+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5nZXRQcm9wZXJ0eUJhZygpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYmluZGluZyBpbiAoYWdncmVnYXRpb25Db250ZW50IGFzIE1hbmFnZWRPYmplY3QgJiB7IG1CaW5kaW5nSW5mb3M/OiBSZWNvcmQ8c3RyaW5nLCB7IGJpbmRpbmc/OiBCaW5kaW5nIH0+IH0pXG5cdFx0XHRcdFx0XHQubUJpbmRpbmdJbmZvcykge1xuXHRcdFx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl1bYmluZGluZ10gPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZ2V0QmluZGluZ0luZm8oYmluZGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gYWdncmVnYXRpb25Db250ZW50LmdldElkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNldHRpbmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIHRhcmdldCBwcm9wZXJ0eSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSB0YXJnZXRQcm9wZXJ0eSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqL1xuXHRnZXRJbmxpbmVFZGl0UHJvcGVydHkoKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGFNb2RlbFBhdGggPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+KFxuXHRcdFx0dGhpcy5tZXRhUGF0aCxcblx0XHRcdHRoaXMuY29udGV4dFBhdGhcblx0XHQpO1xuXHRcdHJldHVybiBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+KVxuXHRcdFx0Py50YXJnZXRPYmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZnVsbHlRdWFsaWZpZWROYW1lIG9mIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICogQHJldHVybnMgVGhlIGZ1bGx5UXVhbGlmaWVkTmFtZSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqL1xuXHRnZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SW5saW5lRWRpdFByb3BlcnR5KCk/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWRBLElBcUJNQSxLQUFLLElBQUFDLElBQUEsR0FOVkMsY0FBYyxDQUFDLHFCQUFxQixFQUFFO0lBQ3RDQyxXQUFXLEVBQUUsQ0FDWix5Q0FBeUMsQ0FBQztFQUU1QyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNEQyxLQUFLLENBQUNDLFVBQVUsQ0FBQyxFQUFBQyxLQUFBLEdBVWhCQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FTN0JGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFRSxXQUFXLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1oREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBTzVCTCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEssbUJBQW1CLEVBQUUsRUFBRTtJQUN2QkMsYUFBYSxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsVUFBVTtFQUN6RixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1EUixRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFRLEtBQUEsR0FRRFQsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxRQUFRO0lBQ2RNLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQjtFQUM3RSxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQU9EQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBT1BELEtBQUssQ0FBQyxDQUFDLEVBQUFFLE1BQUEsR0FPUEYsS0FBSyxDQUFDLENBQUMsRUFBQUcsTUFBQSxHQUdQQyxXQUFXLENBQUM7SUFDWmQsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFlLE1BQUEsR0FNREQsV0FBVyxDQUFDO0lBQ1pkLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBZ0IsTUFBQSxHQU1EakIsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBaUIsTUFBQSxHQU9EQyxXQUFXLENBQUM7SUFBRWxCLElBQUksRUFBRTtFQUF5QyxDQUFDLENBQUMsRUFBQW1CLE1BQUEsR0FHL0RMLFdBQVcsQ0FBQztJQUFFZCxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQW9CLE1BQUEsR0FVL0JyQixRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFxQixNQUFBLEdBVUR0QixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRUUsV0FBVyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFvQixNQUFBLEdBUS9DdkIsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxRQUFRO0lBQ2R1QixRQUFRLEVBQUUsSUFBSTtJQUNkQyxhQUFhLEVBQUUsSUFBSTtJQUNuQkMsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0FRRDNCLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkdUIsUUFBUSxFQUFFLElBQUk7SUFDZEMsYUFBYSxFQUFFLElBQUk7SUFDbkJDLFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBRSxNQUFBLEdBR0Q1QixRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUE0QixNQUFBLEdBR0Q3QixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRXdCLGFBQWEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBSyxNQUFBLEdBR2pEOUIsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBOEIsTUFBQSxHQUc1Qi9CLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQStCLE1BQUEsR0FHNUJoQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRXdCLGFBQWEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBUSxNQUFBLEdBR2pEakMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBaUMsTUFBQSxHQUc3QmxDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQWtDLE1BQUEsR0FXN0JuQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFtQyxNQUFBLEdBRzVCcEMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBb0MsTUFBQSxHQU03QnJDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQXFDLE1BQUEsR0FPN0J0QyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFzQyxNQUFBLEdBeUQ3QkMsZUFBZSxDQUFDLENBQUMsRUFBQUMsTUFBQSxHQThJakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFFLE1BQUEsR0FLakJGLGVBQWUsQ0FBQyxDQUFDLEVBQUEvQyxJQUFBLENBQUFrRCxNQUFBLEdBQUEvQyxLQUFBLENBQUErQyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLFNBQUE7SUFVbEIsU0FBQXJELE1BQ0NzRCxLQUFnRSxFQUNoRUMsTUFBaUUsRUFDakVDLEtBQWEsRUFDWjtNQUFBLElBQUFDLEtBQUE7TUFDRCxJQUFJQyxhQUFhO01BRWpCLElBQUlKLEtBQUssRUFBRTtRQUNWLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUM5QkksYUFBYSxHQUFHO1lBQUUsR0FBR0gsTUFBTTtZQUFFSSxFQUFFLEVBQUVMO1VBQU0sQ0FBd0I7UUFDaEUsQ0FBQyxNQUFNO1VBQ05JLGFBQWEsR0FBRztZQUFFLEdBQUdKO1VBQU0sQ0FBd0I7VUFDbkRFLEtBQUssR0FBR0QsTUFBZTtRQUN4QjtRQUVBLE1BQU07VUFBRUssT0FBTztVQUFFQyxVQUFVO1VBQUVDLFFBQVE7VUFBRUgsRUFBRTtVQUFFSTtRQUFPLENBQUMsR0FBR0wsYUFBYTtRQUVuRSxJQUFJRSxPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDN0NOLGFBQWEsQ0FBQ0ssTUFBTSxHQUFHSCxPQUFPO1VBQzlCRixhQUFhLENBQUNFLE9BQU8sR0FBRyxHQUFHQSxPQUFPLFVBQVU7UUFDN0M7UUFFQSxJQUFJLENBQUNDLFVBQVUsRUFBRTtVQUNoQjtVQUNBSCxhQUFhLENBQUNHLFVBQVUsR0FBRyxnQkFBZ0I7VUFDM0NILGFBQWEsQ0FBQ0UsT0FBTyxHQUFHRCxFQUFFO1VBQzFCRCxhQUFhLENBQUNJLFFBQVEsR0FBR0EsUUFBUSxJQUFJSCxFQUFFO1FBQ3hDO1FBQ0EsSUFBSSxDQUFDQSxFQUFFLEVBQUU7VUFDUixJQUFJRCxhQUFhLENBQUNLLE1BQU0sRUFBRTtZQUN6QkwsYUFBYSxDQUFDQyxFQUFFLEdBQUdELGFBQWEsQ0FBQ0ssTUFBTTtVQUN4QyxDQUFDLE1BQU0sSUFBSUQsUUFBUSxFQUFFO1lBQ3BCSixhQUFhLENBQUNDLEVBQUUsR0FBR00sUUFBUSxDQUFDLENBQUNILFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztVQUNqRDtRQUNEO01BQ0Q7TUFDQUwsS0FBQSxHQUFBSixTQUFBLENBQUFhLElBQUEsT0FBTVIsYUFBYSxFQUFFRixLQUFLLENBQUM7TUFyYzVCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFQQ1csMEJBQUEsQ0FBQVYsS0FBQSxjQUFBVyxXQUFBLEVBQUFYLEtBQUE7TUFXQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFMQ1UsMEJBQUEsQ0FBQVYsS0FBQSxjQUFBWSxZQUFBLEVBQUFaLEtBQUE7TUFTQTtBQUNEO0FBQ0E7TUFGQ1UsMEJBQUEsQ0FBQVYsS0FBQSxRQUFBYSxZQUFBLEVBQUFiLEtBQUE7TUFNQTtBQUNEO0FBQ0E7QUFDQTtNQUhDVSwwQkFBQSxDQUFBVixLQUFBLGNBQUFjLFlBQUEsRUFBQWQsS0FBQTtNQVdBO0FBQ0Q7QUFDQTtNQUZDVSwwQkFBQSxDQUFBVixLQUFBLFVBQUFlLFlBQUEsRUFBQWYsS0FBQTtNQVFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ1UsMEJBQUEsQ0FBQVYsS0FBQSxpQkFBQWdCLFlBQUEsRUFBQWhCLEtBQUE7TUFXQTtBQUNEO0FBQ0E7QUFDQTtNQUhDVSwwQkFBQSxDQUFBVixLQUFBLFlBQUFpQixZQUFBLEVBQUFqQixLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7TUFIQ1UsMEJBQUEsQ0FBQVYsS0FBQSxhQUFBa0IsWUFBQSxFQUFBbEIsS0FBQTtNQU9BO0FBQ0Q7QUFDQTtBQUNBO01BSENVLDBCQUFBLENBQUFWLEtBQUEsZ0JBQUFtQixZQUFBLEVBQUFuQixLQUFBO01BQUFVLDBCQUFBLENBQUFWLEtBQUEsY0FBQW9CLGFBQUEsRUFBQXBCLEtBQUE7TUFZQTtBQUNEO0FBQ0E7TUFGQ1UsMEJBQUEsQ0FBQVYsS0FBQSxnQkFBQXFCLGFBQUEsRUFBQXJCLEtBQUE7TUFRQTtBQUNEO0FBQ0E7TUFGQ1UsMEJBQUEsQ0FBQVYsS0FBQSx5QkFBQXNCLGFBQUEsRUFBQXRCLEtBQUE7TUFRQTtBQUNEO0FBQ0E7QUFDQTtNQUhDVSwwQkFBQSxDQUFBVixLQUFBLG1CQUFBdUIsYUFBQSxFQUFBdkIsS0FBQTtNQUFBVSwwQkFBQSxDQUFBVixLQUFBLGFBQUF3QixhQUFBLEVBQUF4QixLQUFBO01BV0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BTENVLDBCQUFBLENBQUFWLEtBQUEsY0FBQXlCLGFBQUEsRUFBQXpCLEtBQUE7TUFXQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQU5DVSwwQkFBQSxDQUFBVixLQUFBLG9CQUFBMEIsYUFBQSxFQUFBMUIsS0FBQTtNQVVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ1UsMEJBQUEsQ0FBQVYsS0FBQSxXQUFBMkIsYUFBQSxFQUFBM0IsS0FBQTtNQWFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ1UsMEJBQUEsQ0FBQVYsS0FBQSxpQkFBQTRCLGFBQUEsRUFBQTVCLEtBQUE7TUFBQVUsMEJBQUEsQ0FBQVYsS0FBQSxlQUFBNkIsYUFBQSxFQUFBN0IsS0FBQTtNQUFBVSwwQkFBQSxDQUFBVixLQUFBLDJCQUFBOEIsYUFBQSxFQUFBOUIsS0FBQTtNQUFBVSwwQkFBQSxDQUFBVixLQUFBLDBCQUFBK0IsYUFBQSxFQUFBL0IsS0FBQTtNQXNCdUM7TUFBQVUsMEJBQUEsQ0FBQVYsS0FBQSw4QkFBQWdDLGFBQUEsRUFBQWhDLEtBQUE7TUFHRztNQUFBVSwwQkFBQSxDQUFBVixLQUFBLHdCQUFBaUMsYUFBQSxFQUFBakMsS0FBQTtNQUFBVSwwQkFBQSxDQUFBVixLQUFBLHVCQUFBa0MsYUFBQSxFQUFBbEMsS0FBQTtNQUFBVSwwQkFBQSxDQUFBVixLQUFBLG1CQUFBbUMsYUFBQSxFQUFBbkMsS0FBQTtNQUFBQSxLQUFBLENBV2xDb0MscUJBQXFCLEdBQUcsS0FBSztNQUFBMUIsMEJBQUEsQ0FBQVYsS0FBQSxZQUFBcUMsYUFBQSxFQUFBckMsS0FBQTtNQUFBVSwwQkFBQSxDQUFBVixLQUFBLGNBQUFzQyxhQUFBLEVBQUF0QyxLQUFBO01BY3JDO0FBQ0Q7QUFDQTtNQUZDVSwwQkFBQSxDQUFBVixLQUFBLHlCQUFBdUMsYUFBQSxFQUFBdkMsS0FBQTtNQU1BO0FBQ0Q7QUFDQTtBQUNBO01BSENVLDBCQUFBLENBQUFWLEtBQUEsMkJBQUF3QyxhQUFBLEVBQUF4QyxLQUFBO01BQUEsT0FBQUEsS0FBQTtJQStQQTtJQUFDeUMsY0FBQSxDQUFBbEcsS0FBQSxFQUFBcUQsU0FBQTtJQUFBLElBQUE4QyxNQUFBLEdBQUFuRyxLQUFBLENBQUFvRyxTQUFBO0lBdFBEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFKQ0QsTUFBQSxDQUtBRSx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFDQyxLQUFjLEVBQTBDO01BQy9FLElBQUlDLE9BQU8sR0FBSUQsS0FBSyxDQUFDRSxpQkFBaUIsQ0FBQyxDQUFDLENBQWVDLFVBQVUsQ0FBQyxDQUFDO01BRW5FLElBQUksQ0FBQ0YsT0FBTyxDQUFDRyxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtRQUMzRCxNQUFNQyxLQUFLLEdBQUdDLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDUCxLQUFLLENBQUM7UUFDOUNDLE9BQU8sR0FBR0ksS0FBSyxDQUFDSCxpQkFBaUIsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDO01BQ2pEO01BRUEsT0FBT0YsT0FBTztJQUNmOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBSixNQUFBLENBS1FXLHlCQUF5QixHQUFqQyxTQUFRQSx5QkFBeUJBLENBQ2hDQyxXQU1DLEVBU0E7TUFDRCxNQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ0UsU0FBUyxDQUFDLENBQUM7TUFDdEMsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztNQUMzQztNQUNBO01BQ0EsTUFBTUMsY0FBYyxHQUFHSixNQUFNLElBQUlBLE1BQU0sQ0FBQ1IsaUJBQWlCLENBQUMsQ0FBQztNQUMzRCxNQUFNYSxXQUFXLEdBQUdELGNBQWMsR0FBSUEsY0FBYyxDQUEwQ0MsV0FBVyxDQUFDLENBQUMsR0FBRyxLQUFLO01BQ25ILE1BQU1DLGFBQWEsR0FBR1AsV0FBVyxDQUFDUSxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUlDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7TUFDOUUsTUFBTUMsS0FBSyxHQUFHWCxXQUFXLENBQUNRLFlBQVksQ0FBQyxPQUFPLENBQUM7TUFDL0MsTUFBTUksYUFBYSxHQUFHQyxrQkFBa0IsQ0FBQ0MscUJBQXFCLENBQUNkLFdBQVcsQ0FBQyxDQUFDZSxLQUFLLENBQUMsVUFBVSxDQUFDO01BQzdGLE1BQU1DLGtCQUFrQixHQUFHLElBQUksRUFBRUEsa0JBQWtCO01BRW5ELE9BQU87UUFBRWYsTUFBTTtRQUFFRSxVQUFVO1FBQUVHLFdBQVc7UUFBRUMsYUFBYTtRQUFFSSxLQUFLO1FBQUVDLGFBQWE7UUFBRUk7TUFBbUIsQ0FBQztJQUNwRyxDQUFDO0lBQUE1QixNQUFBLENBR0Q2QixZQUFZLEdBRFosU0FDQUEsWUFBWUEsQ0FDWGpCLFdBTUMsRUFDTTtNQUNQLE1BQU07UUFBRUMsTUFBTTtRQUFFRSxVQUFVO1FBQUVHLFdBQVc7UUFBRUMsYUFBYTtRQUFFSSxLQUFLO1FBQUVDLGFBQWE7UUFBRUk7TUFBbUIsQ0FBQyxHQUNqRyxJQUFJLENBQUNqQix5QkFBeUIsQ0FBQ0MsV0FBVyxDQUFDO01BRTVDLElBQUlnQixrQkFBa0IsRUFBRTtRQUN2QixJQUFJRSxRQUFRO1FBQ1osTUFBTUMsVUFBVSxHQUFHbEIsTUFBTSxFQUFFbUIsUUFBUSxDQUFDSixrQkFBa0IsQ0FBQ0ssS0FBSyxDQUEwQjtRQUN0RixJQUFJcEIsTUFBTSxDQUFDTixHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtVQUNqQ3VCLFFBQVEsR0FBSWxCLFdBQVcsQ0FBMEJRLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDMUUsQ0FBQyxNQUFNO1VBQ05VLFFBQVEsR0FBSWxCLFdBQVcsQ0FBMkJRLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDeEU7UUFDQVcsVUFBVSxFQUFFRyxXQUFXLENBQUNOLGtCQUFrQixDQUFDTyxJQUFJLEVBQUVMLFFBQVEsQ0FBQztRQUMxREMsVUFBVSxFQUFFSyxjQUFjLENBQUMsSUFBSSxDQUFDO01BQ2pDOztNQUVBO01BQ0EsTUFBTUMsWUFBWSxHQUFHdEIsVUFBVSxHQUFHVSxrQkFBa0IsQ0FBQ2Esc0JBQXNCLENBQUN2QixVQUFVLENBQUMsR0FBR3dCLFNBQVM7O01BRW5HO01BQ0E7TUFDQXBCLGFBQWEsQ0FDWHFCLElBQUksQ0FBQyxNQUFNO1FBQ1g7UUFDQzVCLFdBQVcsQ0FBMkI2QixPQUFPLEdBQUc1QixNQUFNO1FBQ3RERCxXQUFXLENBQTJDOEIsV0FBVyxHQUFHO1VBQ3BFbkIsS0FBSyxFQUFFQSxLQUFLLElBQUk7UUFDakIsQ0FBQztRQUNELElBQUksRUFBRW9CLFNBQVMsQ0FBQyxRQUFRLEVBQUU7VUFBRUMsS0FBSyxFQUFFLElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUM7VUFBRUMsT0FBTyxFQUFFdkIsS0FBSyxJQUFJO1FBQUssQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQ0wsV0FBVyxFQUFFO1VBQ2pCO1VBQ0E7VUFDQW1CLFlBQVksRUFBRVUsWUFBWSxDQUFDQyxpQkFBaUIsQ0FBQ3BDLFdBQVcsRUFBRSxDQUFDLENBQUNZLGFBQWEsRUFBRUwsYUFBYSxFQUFFLElBQUksQ0FBQztRQUNoRztRQUNBO1FBQ0EsSUFBSUosVUFBVSxFQUFFO1VBQ2ZVLGtCQUFrQixDQUFDd0Isb0JBQW9CLENBQUNwQyxNQUFNLEVBQUVFLFVBQVUsQ0FBQztRQUM1RDtRQUNBO01BQ0QsQ0FBQyxDQUFDLENBQ0RtQyxLQUFLLENBQUMsTUFBTTtRQUNaO1FBQ0N0QyxXQUFXLENBQTJCNkIsT0FBTyxHQUFHNUIsTUFBTTtRQUN0REQsV0FBVyxDQUEyQzhCLFdBQVcsR0FBRztVQUNwRW5CLEtBQUssRUFBRTtRQUNSLENBQUM7UUFDRDRCLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLG1GQUFtRixDQUFDO1FBQzlGO1FBQ0E7UUFDQSxJQUFJLENBQUNULFNBQVMsQ0FBQyxRQUFRLEVBQUU7VUFBRUMsS0FBSyxFQUFFLElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUM7VUFBRUMsT0FBTyxFQUFFdkIsS0FBSyxJQUFJO1FBQU0sQ0FBQyxDQUFDO01BQzlFLENBQUMsQ0FBQzs7TUFFSDtNQUNBO01BQ0EsTUFBTThCLHlCQUF5QixHQUFHbEMsYUFBYSxDQUM3Q3FCLElBQUksQ0FBQyxZQUFZO1FBQ2pCLE9BQU8sSUFBSW5CLE9BQU8sQ0FBUUMsT0FBTyxJQUFLO1VBQ3JDZ0MsVUFBVSxDQUFDaEMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7TUFDSCxDQUFDLENBQUMsQ0FDRDRCLEtBQUssQ0FBQyxZQUFZO1FBQ2xCLE9BQU8sSUFBSTdCLE9BQU8sQ0FBUUMsT0FBTyxJQUFLO1VBQ3JDZ0MsVUFBVSxDQUFDaEMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7TUFDSGUsWUFBWSxFQUFFa0IsUUFBUSxDQUFDQyxRQUFRLENBQUNILHlCQUF5QixDQUFDOztNQUUxRDtNQUNBO01BQ0EsSUFBSW5DLFdBQVcsRUFBRTtRQUNoQjtNQUNEO01BRUFtQixZQUFZLEVBQUVVLFlBQVksQ0FBQ1Usa0NBQWtDLENBQUM3QyxXQUFXLEVBQUUsQ0FBQyxDQUFDWSxhQUFhLEVBQUVMLGFBQWEsQ0FBQztNQUMxRztNQUNBLE1BQU11QyxxQkFBcUIsR0FBRzNDLFVBQVUsRUFBRTRDLGtCQUFrQixDQUFDQyxXQUFXLENBQUMsQ0FBQztNQUUxRSxJQUFJRixxQkFBcUIsSUFBSWxDLGFBQWEsRUFBRTtRQUMzQyxNQUFNcEIsT0FBTyxHQUFHLElBQUksQ0FBQ0YsdUJBQXVCLENBQUNXLE1BQU0sQ0FBQztRQUVwRCxNQUFNZ0QsSUFBSSxHQUFHLENBQ1osSUFBSSxDQUFDaEQsTUFBTSxDQUFDaUQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJakQsTUFBTSxDQUFDaUQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQ3ZGLElBQUlsRCxNQUFNLENBQUNpRCxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUMxRCxDQUNDQyxNQUFNLENBQUVDLElBQUksSUFBSztVQUNqQixPQUFPQSxJQUFJLEVBQUU5QixJQUFJLEtBQUtJLFNBQVMsSUFBSTBCLElBQUksQ0FBQzlCLElBQUksQ0FBQytCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FDREMsR0FBRyxDQUFDLFVBQVVGLElBQXNCLEVBQUU7VUFDdEMsT0FBTyxHQUFHcEQsTUFBTSxDQUFDUixpQkFBaUIsQ0FBQyxDQUFDLEVBQUUrRCxPQUFPLENBQUMsQ0FBQyxJQUFJSCxJQUFJLENBQUM5QixJQUFJLEVBQUU7UUFDL0QsQ0FBQyxDQUFDOztRQUVIO1FBQ0E7UUFDQXBCLFVBQVUsRUFBRTRDLGtCQUFrQixDQUFDVSxtQkFBbUIsQ0FBQ1IsSUFBSSxDQUFDO1FBRXhELE1BQU1TLDRDQUE0QyxHQUFHQSxDQUFBLEtBQVk7VUFDaEU7VUFDQWxFLE9BQU8sQ0FBQ21FLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZO1lBQ3JEeEQsVUFBVSxFQUFFNEMsa0JBQWtCLENBQUNhLElBQUksQ0FBQztjQUFFQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQ0MsTUFBTTtjQUFFQyxPQUFPLEVBQUVmO1lBQUssQ0FBQyxDQUFDO1lBQy9FOUMsVUFBVSxFQUFFNEMsa0JBQWtCLENBQUNrQixvQkFBb0IsQ0FBQ2hCLElBQUksQ0FBQztVQUMxRCxDQUFDLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTWlCLGFBQWEsR0FBRzFFLE9BQU8sQ0FBQzJFLGlCQUFpQixDQUFDLENBQUM7UUFDakQsSUFBSUQsYUFBYSxFQUFFO1VBQ2xCUiw0Q0FBNEMsQ0FBQyxDQUFDO1FBQy9DO1FBRUEsTUFBTVUsbUJBQW1CLEdBQUdBLENBQUEsS0FBWTtVQUN2QyxJQUFJLENBQUNGLGFBQWEsRUFBRTtZQUNuQjtZQUNBLElBQUkxRSxPQUFPLENBQUMyRSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7Y0FDaENULDRDQUE0QyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxNQUFNO2NBQ052RCxVQUFVLEVBQUU0QyxrQkFBa0IsQ0FBQ2tCLG9CQUFvQixDQUFDaEIsSUFBSSxDQUFDO1lBQzFEO1VBQ0Q7UUFDRCxDQUFDO1FBQ0QsSUFBSWhELE1BQU0sQ0FBQ04sR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUtNLE1BQU0sQ0FBYU4sR0FBRyxDQUFDLDRCQUE0QixDQUFDLEVBQUU7VUFDNUZZLGFBQWEsQ0FDWHFCLElBQUksQ0FBQyxNQUFNO1lBQ1h3QyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3JCO1VBQ0QsQ0FBQyxDQUFDLENBQ0Q5QixLQUFLLENBQUMsTUFBTTtZQUNaOEIsbUJBQW1CLENBQUMsQ0FBQztVQUN0QixDQUFDLENBQUM7UUFDSixDQUFDLE1BQU07VUFDTkEsbUJBQW1CLENBQUMsQ0FBQztRQUN0QjtNQUNEO0lBQ0QsQ0FBQztJQUFBaEYsTUFBQSxDQUdEaUYsZ0JBQWdCLEdBRGhCLFNBQ0FBLGdCQUFnQkEsQ0FBQ0MsTUFBZ0IsRUFBUTtNQUN4QyxJQUFJLENBQUN2QyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFBQTNDLE1BQUEsQ0FHRG1GLG9CQUFvQixHQURwQixTQUNBQSxvQkFBb0JBLENBQUNELE1BQXVDLEVBQVE7TUFDbkUsTUFBTUUsV0FBVyxHQUFHRixNQUFNLENBQUNwRSxTQUFTLENBQUMsQ0FBQztRQUNyQ3VFLElBQUksR0FBRzVFLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDMEUsV0FBVyxDQUFDO1FBQzdDckUsVUFBVSxHQUFHc0UsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztNQUVsQyxNQUFNakQsWUFBWSxHQUFHWixrQkFBa0IsQ0FBQ2Esc0JBQXNCLENBQUN2QixVQUFVLENBQUM7TUFDMUVzQixZQUFZLENBQUNVLFlBQVksQ0FBQ3dDLHNCQUFzQixDQUFDTCxNQUFNLENBQUM7SUFDekQsQ0FBQztJQUFBbEYsTUFBQSxDQXlDUXdGLGFBQWEsR0FBdEIsU0FBU0EsYUFBYUEsQ0FBQ0MsU0FBbUUsRUFBRUMsTUFBZSxFQUFRO01BQ2xILElBQUksQ0FBQ0MseUJBQXlCLEdBQUcsSUFBSSxDQUFDLENBQUM7TUFDdkMsT0FBQXpJLFNBQUEsQ0FBQStDLFNBQUEsQ0FBYXVGLGFBQWEsQ0FBQXpILElBQUEsT0FBQzBILFNBQVMsRUFBRUMsTUFBTTtJQUM3QyxDQUFDO0lBQUExRixNQUFBLENBRUQ0RixrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFDaEIsT0FBa0MsRUFBUTtNQUM1RCxJQUFJQSxPQUFPLElBQUlBLE9BQU8sQ0FBQ2lCLGlCQUFpQixFQUFFO1FBQ3pDLE1BQU1DLGNBQWMsR0FBRyxJQUFJLENBQUNBLGNBQWM7UUFFMUMsS0FBSyxNQUFNdEksRUFBRSxJQUFJc0ksY0FBYyxFQUFFO1VBQ2hDLE1BQU1DLGVBQWUsR0FBR25CLE9BQU8sQ0FBQ29CLGlCQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFO1VBQ3pELElBQUksQ0FBQ0QsZUFBZSxDQUFDbEksUUFBUSxDQUFDTCxFQUFFLENBQUMsRUFBRTtZQUNsQ29ILE9BQU8sQ0FBQ2lCLGlCQUFpQixDQUFDckksRUFBRSxDQUFDO1VBQzlCO1FBQ0Q7UUFDQTtRQUNBLElBQUtvSCxPQUFPLENBQWFyRSxHQUFHLENBQUMsK0JBQStCLENBQUMsSUFBS3FFLE9BQU8sQ0FBYXJFLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1VBQ3pILElBQUksQ0FBQ3FGLGtCQUFrQixDQUFFaEIsT0FBTyxDQUFnQ3FCLFVBQVUsQ0FBQyxDQUF3QyxDQUFDO1FBQ3JIO01BQ0Q7SUFDRCxDQUFDO0lBQUFqRyxNQUFBLENBRURrRyxpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFBLEVBQVM7TUFDekI7TUFDQTtNQUNBLElBQUksQ0FBQ04sa0JBQWtCLENBQUMsSUFBSSxDQUFDaEIsT0FBOEMsQ0FBQztJQUM3RSxDQUFDO0lBQUE1RSxNQUFBLENBRU9tRyxlQUFlLEdBQXZCLFNBQVFBLGVBQWVBLENBQUN0RixNQUFlLEVBQXVCO01BQzdELElBQUlBLE1BQU0sRUFBRU4sR0FBRyxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQ00sTUFBTSxFQUFFTixHQUFHLENBQUMsb0NBQW9DLENBQUMsRUFBRTtRQUM3RyxNQUFNNkYsWUFBWSxHQUFHdkYsTUFBc0M7UUFDM0QsTUFBTXdGLFFBQVEsR0FBR0QsWUFBWSxDQUFDRSxjQUFjLENBQUMsQ0FBYztRQUMzRCxJQUFJQyxZQUFZO1FBQ2hCLElBQUlGLFFBQVEsQ0FBQ0csTUFBTSxJQUFJLENBQUMsRUFBRTtVQUN6QkQsWUFBWSxHQUFHRixRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNCO1FBQ0EsSUFBSUUsWUFBWSxFQUFFaEcsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO1VBQ3BDZ0csWUFBWSxHQUFJQSxZQUFZLENBQVVFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BEO1FBQ0EsT0FBT0YsWUFBWTtNQUNwQjtJQUNELENBQUM7SUFBQXZHLE1BQUEsQ0FFRDBHLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUEsRUFBUztNQUN4QixNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDUixlQUFlLENBQUMsSUFBSSxDQUFDdkIsT0FBTyxDQUFDO01BQ3RELE1BQU1nQyxlQUFlLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztNQUUxQyxNQUFNQyxPQUFPLEdBQUcsQ0FBQ0QsZUFBZSxDQUFDL0ksUUFBUSxDQUFDOEksV0FBVyxFQUFFRyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztNQUNyRixJQUFJLElBQUksQ0FBQ0Msb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUN0SCxxQkFBcUIsSUFBSW1ILE9BQU8sRUFBRTtRQUN4RTtRQUNBLElBQUksQ0FBQ2pDLE9BQU8sRUFBRXFDLGdCQUFnQixDQUM3QjtVQUNDQyxTQUFTLEVBQUdDLEdBQWUsSUFBSztZQUMvQixJQUFJLENBQUNuRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMyQyxrQkFBa0IsQ0FBQ3lELG9CQUFvQixDQUFDLElBQUksRUFBRUQsR0FBRyxDQUFDO1VBQzVFO1FBQ0QsQ0FBQyxFQUNELElBQ0QsQ0FBQztRQUVELElBQUksQ0FBQ3pILHFCQUFxQixHQUFHLElBQUksQ0FBQyxDQUFDO01BQ3BDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUE3RixLQUFBLENBS093Tix3QkFBd0IsR0FBL0IsU0FBT0Esd0JBQXdCQSxDQUFDQyxPQUE0QixFQUF1QjtNQUNsRixJQUFJQSxPQUFPLEVBQUUvRyxHQUFHLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDK0csT0FBTyxFQUFFL0csR0FBRyxDQUFDLG9DQUFvQyxDQUFDLEVBQUU7UUFDL0csTUFBTTZGLFlBQVksR0FBR2tCLE9BQXVDO1FBQzVELE1BQU1qQixRQUFRLEdBQUdELFlBQVksQ0FBQ21CLFdBQVcsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUNuQixZQUFZLENBQUNvQixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBR3BCLFlBQVksQ0FBQ0UsY0FBYyxDQUFDLENBQUM7UUFDOUgsSUFBSUQsUUFBUSxDQUFDRyxNQUFNLElBQUksQ0FBQyxFQUFFO1VBQ3pCLE9BQU9ILFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkI7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPaUIsT0FBTztNQUNmO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdEgsTUFBQSxDQUlBeUgsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQSxFQUFZO01BQzlCLE1BQU1DLGFBQWEsR0FBRzdOLEtBQUssQ0FBQ3dOLHdCQUF3QixDQUFDLElBQUksQ0FBQ3BCLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDdkUsT0FBTyxDQUFDLEVBQUV5QixhQUFhLElBQUlBLGFBQWEsQ0FBQ25ILEdBQUcsQ0FBVyxrQkFBa0IsQ0FBQyxJQUFJbUgsYUFBYSxDQUFDRCxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDbkg7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF6SCxNQUFBLENBS0EySCxnQkFBZ0IsR0FBaEIsU0FBQUEsZ0JBQWdCQSxDQUFBLEVBQVk7TUFDM0IsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQywrQkFBK0IsQ0FBQyxDQUFDO01BQ2hFLE9BQU9ELGlCQUFpQixDQUFDcEIsTUFBTSxHQUFHLENBQUMsR0FBR29CLGlCQUFpQixHQUFHLElBQUksQ0FBQ0UsdUJBQXVCLENBQUMsQ0FBQztJQUN6Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUE5SCxNQUFBLENBSUE2SCwrQkFBK0IsR0FBL0IsU0FBQUEsK0JBQStCQSxDQUFBLEVBQVk7TUFDMUMsTUFBTUUsUUFBUSxHQUFHQyxlQUFlLENBQUNDLG9CQUFvQixDQUFDLElBQUksQ0FBQztNQUMzRCxNQUFNQyxhQUFzQixHQUFHLEVBQUU7TUFDakMsTUFBTTdDLElBQUksR0FBRyxJQUFJLENBQUNyRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUNtSCxPQUFPLENBQUMsQ0FBQztNQUMvQ0osUUFBUSxDQUFDSyxPQUFPLENBQUVDLE9BQU8sSUFBSztRQUM3QixNQUFNQyxZQUFZLEdBQUdqRCxJQUFJLENBQUNrRCxJQUFJLENBQUNGLE9BQU8sQ0FBQztRQUN2QyxJQUFJQyxZQUFZLEVBQUU7VUFDakJKLGFBQWEsQ0FBQ00sSUFBSSxDQUFDRixZQUFxQixDQUFDO1FBQzFDO01BQ0QsQ0FBQyxDQUFDO01BQ0YsT0FBT0osYUFBYTtJQUNyQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFsSSxNQUFBLENBSUE4SCx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFBLEVBQVk7TUFDbEM7TUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDVyxLQUFLLENBQUMsQ0FBQyxDQUFDNUssUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzFDLE9BQU8sRUFBRTtNQUNWO01BQ0EsSUFBSXlKLE9BQU8sR0FBRyxJQUE0QjtNQUMxQztNQUNBO01BQ0EsT0FBT0EsT0FBTyxJQUFJLENBQUNBLE9BQU8sQ0FBQy9HLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO1FBQ2pFK0csT0FBTyxHQUFJQSxPQUFPLEVBQW9Cb0IsU0FBUyxDQUFDLENBQUM7TUFDbEQ7TUFDQSxPQUFPcEIsT0FBTyxHQUFHLENBQUVBLE9BQU8sQ0FBaUJxQixlQUFlLENBQUMsQ0FBQyxDQUFVLEdBQUcsRUFBRTtJQUM1RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTNJLE1BQUEsQ0FLQTZDLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFBLEVBQXlDO01BQ2hELElBQUkrRixRQUFRLEdBQUcvTyxLQUFLLENBQUN3Tix3QkFBd0IsQ0FBQyxJQUFJLENBQUN6QyxPQUFPLENBQUM7TUFDM0QsSUFBSSxDQUFDZ0UsUUFBUSxFQUFFO1FBQ2QsT0FBT3JHLFNBQVM7TUFDakI7TUFDQSxJQUFJLElBQUksQ0FBQ3lFLG9CQUFvQixJQUFJNEIsUUFBUSxFQUFFckksR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzdEcUksUUFBUSxHQUFJQSxRQUFRLENBQVVuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM1QztNQUNBLElBQUltQyxRQUFRLEVBQUVySSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUNwQyxPQUFRcUksUUFBUSxDQUFjQyxXQUFXLENBQUMsQ0FBQztNQUM1QyxDQUFDLE1BQU0sSUFBSUQsUUFBUSxFQUFFckksR0FBRyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7UUFDbEQsT0FBUXFJLFFBQVEsQ0FBcUIvRixRQUFRLENBQUMsQ0FBQztNQUNoRCxDQUFDLE1BQU0sSUFBSStGLFFBQVEsRUFBRXJJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQzVDLE9BQVFxSSxRQUFRLENBQWUvRixRQUFRLENBQUMsQ0FBQztNQUMxQyxDQUFDLE1BQU0sSUFBSStGLFFBQVEsRUFBRXJJLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUN2QyxPQUFRcUksUUFBUSxDQUFVRSxPQUFPLENBQUMsQ0FBQztNQUNwQyxDQUFDLE1BQU0sSUFBSUYsUUFBUSxFQUFFckksR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3hDLE9BQVFxSSxRQUFRLENBQVdFLE9BQU8sQ0FBQyxDQUFDO01BQ3JDLENBQUMsTUFBTSxJQUFJRixRQUFRLEVBQUVySSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDdkMsT0FBUXFJLFFBQVEsQ0FBVUUsT0FBTyxDQUFDLEtBQUssQ0FBQztNQUN6QyxDQUFDLE1BQU0sSUFBSUYsUUFBUSxFQUFFckksR0FBRyxDQUEyQixpQ0FBaUMsQ0FBQyxFQUFFO1FBQ3RGLE9BQU9xSSxRQUFRLENBQUNFLE9BQU8sQ0FBQyxDQUFDO01BQzFCLENBQUMsTUFBTSxJQUFJRixRQUFRLEVBQUVySSxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTtRQUMvQyxPQUFRcUksUUFBUSxDQUFrQkUsT0FBTyxDQUFDLENBQUM7TUFDNUMsQ0FBQyxNQUFNLElBQUlGLFFBQVEsRUFBRXJJLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1FBQ25ELE9BQVFxSSxRQUFRLENBQXNCRyxRQUFRLENBQUMsQ0FBQztNQUNqRCxDQUFDLE1BQU0sSUFBSUgsUUFBUSxFQUFFckksR0FBRyxDQUFXLGtCQUFrQixDQUFDLEVBQUU7UUFDdkQsT0FBT3FJLFFBQVEsQ0FBQy9GLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM3QixDQUFDLE1BQU0sSUFDTitGLFFBQVEsRUFBRXJJLEdBQUcsQ0FBWSxrQ0FBa0MsQ0FBQyxJQUM1RHFJLFFBQVEsRUFBRXJJLEdBQUcsQ0FBUSw2QkFBNkIsQ0FBQyxJQUNuRHFJLFFBQVEsRUFBRXJJLEdBQUcsQ0FBVSwrQkFBK0IsQ0FBQyxFQUN0RDtRQUNEO1FBQ0EsT0FBT3FJLFFBQVEsQ0FBQy9GLFFBQVEsQ0FBQyxDQUFDO01BQzNCLENBQUMsTUFBTTtRQUNOLE1BQU0sSUFBSW1HLEtBQUssQ0FBQyx1REFBdUQsQ0FBQztNQUN6RTtJQUNELENBQUM7SUFBQWhKLE1BQUEsQ0FFRGlKLDJCQUEyQixHQUEzQixTQUFBQSwyQkFBMkJBLENBQUEsRUFBdUI7TUFDakQsT0FBTyxJQUFJLENBQUNDLHdCQUF3QjtJQUNyQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBbEosTUFBQSxDQU1BbUosUUFBUSxHQUFSLFNBQUFBLFFBQVFBLENBQUN2RyxLQUF1QixFQUFXO01BQzFDLElBQUksQ0FBQyxJQUFJLENBQUNnQyxPQUFPLEVBQUU7UUFDbEIsT0FBTyxJQUFJLENBQUMxQyxXQUFXLENBQUMsT0FBTyxFQUFFVSxLQUFLLENBQUM7TUFDeEM7TUFDQSxJQUFJMEUsT0FBTyxHQUFHek4sS0FBSyxDQUFDd04sd0JBQXdCLENBQUMsSUFBSSxDQUFDekMsT0FBTyxDQUFDO01BQzFELElBQUksSUFBSSxDQUFDb0Msb0JBQW9CLElBQUlNLE9BQU8sRUFBRS9HLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM1RDtRQUNBK0csT0FBTyxHQUFJQSxPQUFPLENBQVViLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFDO01BQ0EsSUFBSWEsT0FBTyxFQUFFL0csR0FBRyxDQUFXLGdCQUFnQixDQUFDLEVBQUU7UUFDN0MrRyxPQUFPLENBQUM4QixXQUFXLENBQUN4RyxLQUFnQixDQUFDO01BQ3RDLENBQUMsTUFBTSxJQUFJMEUsT0FBTyxFQUFFL0csR0FBRyxDQUFZLGlCQUFpQixDQUFDLEVBQUU7UUFDdEQrRyxPQUFPLENBQUM2QixRQUFRLENBQUN2RyxLQUFlLENBQUM7TUFDbEMsQ0FBQyxNQUFNLElBQUkwRSxPQUFPLEVBQUUvRyxHQUFHLENBQU8sWUFBWSxDQUFDLEVBQUU7UUFDNUMrRyxPQUFPLENBQUMrQixPQUFPLENBQUN6RyxLQUFlLENBQUM7TUFDakMsQ0FBQyxNQUFNLElBQUkwRSxPQUFPLEVBQUUvRyxHQUFHLENBQVcsa0JBQWtCLENBQUMsRUFBRTtRQUN0RCtHLE9BQU8sQ0FBQzZCLFFBQVEsQ0FBQ3ZHLEtBQUssQ0FBQztNQUN4QixDQUFDLE1BQU07UUFDTixNQUFNLHVEQUF1RDtNQUM5RDtNQUNBLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBNUMsTUFBQSxDQUtBc0osVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUEsRUFBWTtNQUNyQixJQUFJaEMsT0FBTyxHQUFHek4sS0FBSyxDQUFDd04sd0JBQXdCLENBQUMsSUFBSSxDQUFDekMsT0FBTyxDQUFDO01BRTFELElBQUkwQyxPQUFPLEtBQUssSUFBSSxJQUFJQSxPQUFPLEtBQUsvRSxTQUFTLElBQUkrRSxPQUFPLEVBQUUvRyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDNUUsT0FBTyxJQUFJO01BQ1o7O01BRUE7TUFDQSxJQUFJLElBQUksQ0FBQ3lHLG9CQUFvQixJQUFJTSxPQUFPLENBQUMvRyxHQUFHLENBQU8sWUFBWSxDQUFDLEVBQUU7UUFDakUrRyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ2IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEM7O01BRUE7TUFDQSxJQUFJYSxPQUFPLENBQUMvRyxHQUFHLENBQU8sWUFBWSxDQUFDLEVBQUU7UUFDcEMrRyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ2IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEM7O01BRUE7TUFDQSxJQUNDYSxPQUFPLENBQUMvRyxHQUFHLENBQVcsZ0JBQWdCLENBQUMsSUFDdkMrRyxPQUFPLENBQUMvRyxHQUFHLENBQVksaUJBQWlCLENBQUMsSUFDekMrRyxPQUFPLENBQUMvRyxHQUFHLENBQU8sWUFBWSxDQUFDLElBQy9CK0csT0FBTyxDQUFDL0csR0FBRyxDQUFTLGNBQWMsQ0FBQyxFQUNsQztRQUNELE9BQU8rRyxPQUFPLENBQUNpQyxXQUFXLENBQUMsU0FBUyxDQUFDO01BQ3RDOztNQUVBO01BQ0EsSUFDQ2pDLE9BQU8sQ0FBQy9HLEdBQUcsQ0FBZSxvQkFBb0IsQ0FBQyxJQUMvQytHLE9BQU8sQ0FBQy9HLEdBQUcsQ0FBbUIsd0JBQXdCLENBQUMsSUFDdkQrRyxPQUFPLENBQUMvRyxHQUFHLENBQXFCLHlDQUF5QyxDQUFDLElBQzFFK0csT0FBTyxDQUFDL0csR0FBRyxDQUFpQixzQkFBc0IsQ0FBQyxJQUNuRCtHLE9BQU8sQ0FBQy9HLEdBQUcsQ0FBNEIsMkNBQTJDLENBQUMsSUFDbkYrRyxPQUFPLENBQUMvRyxHQUFHLENBQVcsaUNBQWlDLENBQUMsRUFDdkQ7UUFDRCxPQUFPLElBQUk7TUFDWjs7TUFFQTtNQUNBLElBQUkrRyxPQUFPLENBQUMvRyxHQUFHLENBQVksa0NBQWtDLENBQUMsSUFBSStHLE9BQU8sQ0FBQy9HLEdBQUcsQ0FBVSwrQkFBK0IsQ0FBQyxFQUFFO1FBQ3hILE9BQU8rRyxPQUFPLENBQUNnQyxVQUFVLENBQUMsQ0FBQztNQUM1QjtNQUVBLElBQUloQyxPQUFPLENBQUMvRyxHQUFHLENBQVEsNkJBQTZCLENBQUMsRUFBRTtRQUN0RCxPQUFPK0csT0FBTyxDQUFDaUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztNQUMxQzs7TUFFQTtNQUNBLElBQUlqQyxPQUFPLENBQUMvRyxHQUFHLENBQVcsa0JBQWtCLENBQUMsRUFBRTtRQUM5QyxNQUFNaUosUUFBUSxHQUFHbEMsT0FBTyxDQUFDQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPaUMsUUFBUSxLQUFLQyxhQUFhLENBQUNDLFFBQVE7TUFDM0M7O01BRUE7TUFDQSxJQUFJcEMsT0FBTyxDQUFDL0csR0FBRyxDQUFjLG9DQUFvQyxDQUFDLEVBQUU7UUFDbkUsT0FBTytHLE9BQU8sQ0FBQ3FDLElBQUksR0FBR3JDLE9BQU8sQ0FBQ3FDLElBQUksQ0FBQ0osV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUk7TUFDakU7O01BRUE7TUFDQSxJQUFLakMsT0FBTyxDQUFVL0csR0FBRyxHQUFHLFlBQVksQ0FBQyxJQUFLK0csT0FBTyxDQUFVYixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFbEcsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLEVBQUU7UUFDbEksT0FBTyxJQUFJO01BQ1o7TUFFQSxPQUFPLEtBQUs7SUFDYjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBUCxNQUFBLENBTUE0SixVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsT0FBZ0IsRUFBVztNQUNyQyxJQUFJdkMsT0FBTyxHQUFHek4sS0FBSyxDQUFDd04sd0JBQXdCLENBQUMsSUFBSSxDQUFDekMsT0FBTyxDQUFDO01BQzFELElBQUksSUFBSSxDQUFDb0Msb0JBQW9CLElBQUlNLE9BQU8sRUFBRS9HLEdBQUcsQ0FBTyxZQUFZLENBQUMsRUFBRTtRQUNsRTtRQUNBK0csT0FBTyxHQUFHQSxPQUFPLENBQUNiLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hDOztNQUVBO01BQ0E7TUFDQSxJQUFJYSxPQUFPLEVBQUUvRyxHQUFHLENBQVcsZ0JBQWdCLENBQUMsRUFBRTtRQUM3QyxPQUFPK0csT0FBTyxDQUFDcEYsV0FBVyxDQUFDLFNBQVMsRUFBRTJILE9BQU8sQ0FBQztNQUMvQyxDQUFDLE1BQU0sSUFBSXZDLE9BQU8sRUFBRS9HLEdBQUcsQ0FBWSxpQkFBaUIsQ0FBQyxFQUFFO1FBQ3RELE9BQU8rRyxPQUFPLENBQUNwRixXQUFXLENBQUMsU0FBUyxFQUFFMkgsT0FBTyxDQUFDO01BQy9DLENBQUMsTUFBTSxJQUFJdkMsT0FBTyxFQUFFL0csR0FBRyxDQUFPLFlBQVksQ0FBQyxFQUFFO1FBQzVDLE9BQU8rRyxPQUFPLENBQUNwRixXQUFXLENBQUMsU0FBUyxFQUFFMkgsT0FBTyxDQUFDO01BQy9DLENBQUMsTUFBTSxJQUFJdkMsT0FBTyxFQUFFL0csR0FBRyxDQUFTLGNBQWMsQ0FBQyxFQUFFO1FBQ2hELE9BQU8rRyxPQUFPLENBQUNwRixXQUFXLENBQUMsU0FBUyxFQUFFMkgsT0FBTyxDQUFDO01BQy9DLENBQUMsTUFBTSxJQUFJdkMsT0FBTyxFQUFFL0csR0FBRyxDQUFlLG9CQUFvQixDQUFDLEVBQUU7UUFDNUQsT0FBTytHLE9BQU8sQ0FBQ3BGLFdBQVcsQ0FBQyxRQUFRLEVBQUUySCxPQUFPLENBQUM7TUFDOUMsQ0FBQyxNQUFNLElBQUl2QyxPQUFPLEVBQUUvRyxHQUFHLENBQW1CLHdCQUF3QixDQUFDLEVBQUU7UUFDcEUsT0FBTytHLE9BQU8sQ0FBQ3BGLFdBQVcsQ0FBQyxhQUFhLEVBQUUySCxPQUFPLENBQUM7TUFDbkQsQ0FBQyxNQUFNLElBQUl2QyxPQUFPLEVBQUUvRyxHQUFHLENBQVcsa0JBQWtCLENBQUMsRUFBRTtRQUN0RDtRQUNBO1FBQ0E7UUFDQSxJQUFJdUosWUFBWTtRQUNoQixJQUFJRCxPQUFPLEVBQUU7VUFDWkMsWUFBWSxHQUFHTCxhQUFhLENBQUNNLFFBQVE7UUFDdEMsQ0FBQyxNQUFNO1VBQ05ELFlBQVksR0FBR0wsYUFBYSxDQUFDQyxRQUFRO1FBQ3RDO1FBQ0FwQyxPQUFPLENBQUMwQyxXQUFXLENBQUNGLFlBQVksQ0FBQztNQUNsQyxDQUFDLE1BQU0sSUFBSXhDLE9BQU8sRUFBRS9HLEdBQUcsQ0FBUSw2QkFBNkIsQ0FBQyxFQUFFO1FBQzlEK0csT0FBTyxDQUFDMkMsY0FBYyxDQUFDSixPQUFPLENBQUM7UUFDL0IsT0FBT3ZDLE9BQU87TUFDZixDQUFDLE1BQU0sSUFBSUEsT0FBTyxFQUFFL0csR0FBRyxDQUFZLGtDQUFrQyxDQUFDLEVBQUU7UUFDdkUrRyxPQUFPLENBQUNzQyxVQUFVLENBQUNDLE9BQU8sQ0FBQztNQUM1QixDQUFDLE1BQU07UUFDTixNQUFNLGtEQUFrRDtNQUN6RDtNQUNBLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQTdKLE1BQUEsQ0FVQWtLLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFnRyxFQUFVO01BQ3BILE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDM0MsTUFBTXpCLFFBQVEsR0FBRy9PLEtBQUssQ0FBQ3dOLHdCQUF3QixDQUFDLElBQUksQ0FBQ3pDLE9BQU8sQ0FBQztNQUU3RCxJQUFJekMsSUFBSSxDQUFDLENBQUM7TUFDVixJQUFJeUcsUUFBUSxFQUFFckksR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDcEM0QixJQUFJLEdBQUl5RyxRQUFRLENBQWN0SSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUVnSyxlQUFlLENBQUMsQ0FBQztNQUN4RSxDQUFDLE1BQU0sSUFBSTFCLFFBQVEsRUFBRXJJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQzVDNEIsSUFBSSxHQUFJeUcsUUFBUSxDQUFldEksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFZ0ssZUFBZSxDQUFDLENBQUM7TUFDdEUsQ0FBQyxNQUFNLElBQUkxQixRQUFRLEVBQUVySSxHQUFHLENBQVEsa0JBQWtCLENBQUMsRUFBRTtRQUNwRDRCLElBQUksR0FBR3lHLFFBQVEsQ0FBQ3RJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBRWdLLGVBQWUsQ0FBQyxDQUFDO01BQ3ZEO01BRUEsTUFBTUMsUUFBUSxHQUFHLElBQUlDLE9BQU8sQ0FBQztRQUM1QkMsTUFBTSxFQUFFdEksSUFBSTtRQUNaN0gsSUFBSSxFQUFFNlAsVUFBVSxDQUFDN1AsSUFBSTtRQUNyQm9RLE9BQU8sRUFBRVAsVUFBVSxDQUFDTyxPQUFPO1FBQzNCQyxTQUFTLEVBQUUvQixRQUFRLEVBQUU1RyxRQUFRLENBQUMsQ0FBQztRQUMvQjRJLFdBQVcsRUFBRVQsVUFBVSxDQUFDUyxXQUFXO1FBQ25DQyxVQUFVLEVBQUVWLFVBQVUsQ0FBQ1U7TUFDeEIsQ0FBQyxDQUFDO01BRUZULFVBQVUsQ0FBQ1UsV0FBVyxDQUFDUCxRQUFRLENBQUM7TUFDaEMsT0FBT0EsUUFBUSxDQUFDOUIsS0FBSyxDQUFDLENBQUM7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF6SSxNQUFBLENBS0ErSyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQ3ZOLEVBQVUsRUFBUTtNQUMvQixNQUFNNE0sVUFBVSxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztNQUMzQyxNQUFNVyxHQUFHLEdBQUdaLFVBQVUsQ0FBQ2EsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7TUFDbEQsTUFBTUMsTUFBTSxHQUFHSCxHQUFHLENBQUNJLElBQUksQ0FBRUMsQ0FBVSxJQUFLQSxDQUFDLEVBQUU1QyxLQUFLLEdBQUcsQ0FBQyxLQUFLakwsRUFBRSxDQUFDO01BQzVELElBQUkyTixNQUFNLEVBQUU7UUFDWGYsVUFBVSxDQUFDa0IsY0FBYyxDQUFDSCxNQUFNLENBQUM7TUFDbEM7SUFDRCxDQUFDO0lBQUFuTCxNQUFBLENBRURxSyxpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFBLEVBQWM7TUFDOUIsT0FBT2tCLFNBQVM7SUFDakI7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQXZMLE1BQUEsQ0FHQXdMLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUEsRUFBUztNQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDNUcsT0FBTyxFQUFFO1FBQ2xCLE1BQU02RyxrQkFBa0IsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7UUFDbkQsSUFBSUQsa0JBQWtCLEVBQUU7VUFDdkIsSUFBSSxDQUFDN0csT0FBTyxHQUFHLElBQUksQ0FBQytHLGFBQWEsQ0FBQ0Ysa0JBQWtCLENBQUM7UUFDdEQ7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBekwsTUFBQSxDQVFBMEwsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFxQztNQUNyRCxNQUFNRSxlQUFlLEdBQUcsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUNDLFFBQVEsRUFBRSxJQUFJLENBQUNDLFdBQVcsQ0FBQztNQUUvRSxJQUFJLENBQUNILGVBQWUsRUFBRTtRQUNyQixPQUFPckosU0FBUztNQUNqQjtNQUNBLE1BQU15SixLQUFLLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQztNQUM5QixNQUFNQyxvQkFBb0IsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUE4QjtNQUMvRUMsTUFBTSxDQUFDQyxjQUFjLENBQUNILG9CQUFvQixFQUFFLE9BQU8sRUFBRTtRQUNwREksR0FBRyxFQUFFQSxDQUFBLEtBQU07VUFDVixPQUFPLElBQUksQ0FBQzFKLEtBQUs7UUFDbEI7TUFDRCxDQUFDLENBQUM7TUFDRndKLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDSCxvQkFBb0IsRUFBRSxhQUFhLEVBQUU7UUFDMURJLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO1VBQ1YsT0FBTyxJQUFJLENBQUMxQixXQUFXO1FBQ3hCO01BQ0QsQ0FBQyxDQUFDO01BRUZzQixvQkFBb0IsQ0FBQ0ssUUFBUSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLFVBQVUsQ0FBQztNQUMxRDtNQUNBO01BQ0EsSUFBSSxJQUFJLENBQUMxSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUMxQ29JLG9CQUFvQixDQUFDTyxjQUFjLEdBQUdDLGlCQUFpQixDQUFDLElBQUksQ0FBQ0YsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7TUFDMUY7TUFDQU4sb0JBQW9CLENBQUN4TyxVQUFVLEdBQUcsSUFBSSxDQUFDQSxVQUFVO01BQ2pEd08sb0JBQW9CLENBQUN2TyxRQUFRLEdBQUcsSUFBSSxDQUFDQSxRQUFRO01BQzdDdU8sb0JBQW9CLENBQUN6TyxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPO01BQzNDeU8sb0JBQW9CLENBQUNTLFlBQVksR0FBRyxJQUFJLENBQUNDLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyxXQUFXLEdBQUdySyxTQUFTO01BRTdGLElBQUksQ0FBQ3NLLG1CQUFtQixHQUFHYixLQUFLLEVBQUVhLG1CQUFtQjtNQUNyRCxJQUFJLENBQUNDLGNBQWMsR0FBRyxJQUFJLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BQ3pDLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsSUFBSSxDQUFDRixjQUFjLEVBQUVHLGNBQWMsQ0FBQyxJQUFJLENBQUNDLHNCQUFzQixDQUFDLElBQUksQ0FBQ25CLFdBQVcsQ0FBQyxDQUFDO01BRTdHLElBQUksQ0FBQ29CLGdCQUFnQixHQUFHLElBQUksQ0FBQ0wsY0FBYyxFQUFFTSxvQkFBb0IsQ0FBQ3hCLGVBQWUsQ0FBQ3hILE9BQU8sQ0FBQyxDQUFDLENBQVk7O01BRXZHO01BQ0EsSUFBSSxJQUFJLENBQUNpSixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN0Q25CLG9CQUFvQixDQUFDb0IsT0FBTyxHQUFHL0ssU0FBUztNQUN6Qzs7TUFFQTtNQUNBO01BQ0E7TUFDQTJKLG9CQUFvQixDQUFDMU8sRUFBRSxHQUFHME8sb0JBQW9CLENBQUMxTyxFQUFFLElBQUksSUFBSSxDQUFDaUwsS0FBSyxDQUFDLENBQUM7TUFFakUsTUFBTWdELGtCQUFrQixHQUFHOEIsVUFBVSxDQUNwQ3JCLG9CQUFvQixFQUNwQixDQUFDLENBQUMsRUFDRCxJQUFJLENBQUNXLG1CQUFtQixFQUFFVyxNQUFNLENBQUNDLFFBQVEsSUFBa0IsSUFBSUMsU0FBUyxDQUFDLElBQUksQ0FBQ3pCLFNBQVMsQ0FBQyxDQUFDLEVBQUUwQixXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ2pILElBQUksQ0FBQ2QsbUJBQW1CLEVBQUVXLE1BQU0sQ0FBQ0ksUUFBUSxJQUFrQixJQUFJLENBQUMzQixTQUFTLENBQUMsQ0FBQyxDQUFFNEIsZUFBZSxDQUFDLENBQUMsQ0FBQzdMLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFDcEgsSUFBSSxDQUFDNkssbUJBQW1CLEVBQUVpQixZQUFZLElBQUksSUFBSSxDQUFDN0IsU0FBUyxDQUFDLENBQUMsQ0FBRTRCLGVBQWUsQ0FBQyxDQUFDLEVBQzdFLElBQUksQ0FBQ1IsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQ2xDLElBQUksQ0FBQ0YsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQ0gsbUJBQ04sQ0FBQztNQUNELElBQUksQ0FBQ2UsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUV0QyxrQkFBa0IsQ0FBQ3VDLGlCQUFpQixDQUFDO01BQ2pGLElBQUksQ0FBQ0QsaUJBQWlCLENBQUMsZUFBZSxFQUFFckIsaUJBQWlCLENBQUNqQixrQkFBa0IsQ0FBQ3dDLGFBQWEsQ0FBQyxDQUFDO01BRTVGeEMsa0JBQWtCLENBQUN5QyxzQkFBc0IsR0FBRyxJQUFJO01BQ2hELElBQUl6QyxrQkFBa0IsQ0FBQ3ZDLHdCQUF3QixFQUFFLElBQUksQ0FBQ0Esd0JBQXdCLEdBQUd1QyxrQkFBa0IsQ0FBQ3ZDLHdCQUF3QjtNQUM1SCxJQUFJdUMsa0JBQWtCLENBQUN6RSxvQkFBb0IsRUFBRSxJQUFJLENBQUNBLG9CQUFvQixHQUFHeUUsa0JBQWtCLENBQUN6RSxvQkFBb0I7TUFDaEgsSUFBSXlFLGtCQUFrQixDQUFDMEMsWUFBWSxLQUFLLE1BQU0sRUFDN0MxQyxrQkFBa0IsQ0FBQzJDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDN0IsUUFBUSxJQUFJZCxrQkFBa0IsQ0FBQzRDLGtCQUFrQjtNQUNqRzVDLGtCQUFrQixDQUFDNkMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztNQUN4RSxJQUFJOUMsa0JBQWtCLENBQUMzRixjQUFjLEtBQUt2RCxTQUFTLEVBQUU7UUFDcERrSixrQkFBa0IsQ0FBQzNGLGNBQWMsR0FBRyxJQUFJLENBQUNBLGNBQWM7TUFDeEQ7TUFDQSxPQUFPMkYsa0JBQWtCO0lBQzFCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXpMLE1BQUEsQ0FPQTJMLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFDRixrQkFBd0MsRUFBVztNQUNoRSxJQUFJO1FBQ0gsTUFBTTFLLFVBQVUsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7UUFDM0M7UUFDQSxJQUFJeUssa0JBQWtCLENBQUMxUCxRQUFRLEtBQUt3RyxTQUFTLEVBQUU7VUFDOUMsSUFBSSxDQUFDd0wsaUJBQWlCLENBQUMsVUFBVSxFQUFFdEMsa0JBQWtCLENBQUMrQyxrQkFBa0IsQ0FBQztRQUMxRTtRQUNBLElBQUksQ0FBQ1QsaUJBQWlCLENBQUMsVUFBVSxFQUFFdEMsa0JBQWtCLENBQUM0QyxrQkFBa0IsQ0FBQztRQUV6RSxJQUFJLENBQUNOLGlCQUFpQixDQUFDLFNBQVMsRUFBRXRDLGtCQUFrQixDQUFDNkIsT0FBTyxDQUFDO1FBQzdELElBQUksT0FBTzdCLGtCQUFrQixDQUFDN0ksS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUNqRCxJQUFJLENBQUNoQixrQkFBa0IsR0FBRzZKLGtCQUFrQixDQUFDN0ksS0FBSztRQUNuRDtRQUVBLElBQUk2SSxrQkFBa0IsQ0FBQ2dELGdCQUFnQixLQUFLbE0sU0FBUyxFQUFFO1VBQ3RELElBQUksQ0FBQ3dMLGlCQUFpQixDQUFDLFVBQVUsRUFBRXRDLGtCQUFrQixDQUFDakMsUUFBUSxJQUFJa0QsaUJBQWlCLENBQUNqQixrQkFBa0IsQ0FBQ2dELGdCQUFnQixDQUFDLENBQUM7UUFDMUg7UUFDQWhELGtCQUFrQixDQUFDaUQsYUFBYSxDQUFDQyxNQUFNLEdBQUk5VSxLQUFLLENBQStDZ0ksWUFBWTtRQUMzRzRKLGtCQUFrQixDQUFDaUQsYUFBYSxDQUFDRSxVQUFVLEdBQUkvVSxLQUFLLENBQW1Eb0wsZ0JBQWdCO1FBQ3ZId0csa0JBQWtCLENBQUNpRCxhQUFhLENBQUNHLGtCQUFrQixHQUNsRGhWLEtBQUssQ0FDSnNMLG9CQUFvQjtRQUN0QnNHLGtCQUFrQixDQUFDaUQsYUFBYSxDQUFDSSxtQkFBbUIsR0FBRyxJQUFJLENBQUNDLHFCQUFxQixDQUFDUixJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVGOUMsa0JBQWtCLENBQUNpRCxhQUFhLENBQUNNLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNWLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDOUY5QyxrQkFBa0IsQ0FBQ2lELGFBQWEsQ0FBQ1Esb0JBQW9CLEdBQUlDLEVBQUUsSUFBVztVQUNyRTFOLGtCQUFrQixDQUFDeU4sb0JBQW9CLENBQ3RDQyxFQUFFLEVBQ0Y7WUFBRWhOLElBQUksRUFBRXNKLGtCQUFrQixDQUFDMkQ7VUFBdUIsQ0FBQyxFQUNuRDNELGtCQUFrQixDQUFDNEQsd0JBQXdCLEVBQzNDdE8sVUFDRCxDQUFDO1FBQ0YsQ0FBQztRQUNEMEssa0JBQWtCLENBQUNpRCxhQUFhLENBQUNZLFlBQVksR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDOUU5QyxrQkFBa0IsQ0FBQ2lELGFBQWEsQ0FBQ2MsWUFBWSxHQUFJTCxFQUFFLElBQVc7VUFDN0QxTixrQkFBa0IsQ0FBQytOLFlBQVksQ0FDOUJMLEVBQUUsRUFDRjtZQUFFaE4sSUFBSSxFQUFFc0osa0JBQWtCLENBQUMyRDtVQUF1QixDQUFDLEVBQ25EM0Qsa0JBQWtCLENBQUM0RCx3QkFBd0IsRUFDM0N0TyxVQUNELENBQUM7UUFDRixDQUFDO1FBQ0QwSyxrQkFBa0IsQ0FBQ2lELGFBQWEsQ0FBQ2Usa0JBQWtCLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDMUY5QyxrQkFBa0IsQ0FBQ2lELGFBQWEsQ0FBQ2lCLG1CQUFtQixHQUFHLElBQUksQ0FBQ0MscUJBQXFCLENBQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVGOUMsa0JBQWtCLENBQUNpRCxhQUFhLENBQUNtQixnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLGtCQUFrQixDQUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0RjlDLGtCQUFrQixDQUFDaUQsYUFBYSxDQUFDcUIsVUFBVSxHQUFHLElBQUksQ0FBQ0EsVUFBVSxDQUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4RTlDLGtCQUFrQixDQUFDaUQsYUFBYSxDQUFDc0IsV0FBVyxHQUFHLElBQUksQ0FBQ0MsYUFBYSxDQUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1RTlDLGtCQUFrQixDQUFDaUQsYUFBYSxDQUFDd0Isa0JBQWtCLEdBQUlmLEVBQXFCLElBQVc7VUFDdEYsTUFBTWdCLFVBQVUsR0FBRzFFLGtCQUFrQixDQUFDSyxRQUFRLENBQUNzRSxTQUFTLENBQUMsQ0FBQztVQUMxRCxJQUFJLENBQUNELFVBQVUsRUFBRSxPQUFPNU4sU0FBUztVQUNqQyxNQUFNOE4scUJBTUwsR0FBRztZQUNIQyxrQkFBa0IsRUFBRW5CLEVBQUUsQ0FBQ3JPLFNBQVMsQ0FBQyxDQUFDLEVBQUVULGlCQUFpQixDQUFDO1VBQ3ZELENBQUM7VUFDRCxJQUFJOFAsVUFBVSxDQUFDSSxPQUFPLEVBQUU7WUFDdkJGLHFCQUFxQixDQUFDRyxxQkFBcUIsR0FBR0wsVUFBVSxDQUFDSSxPQUFPO1VBQ2pFO1VBQ0F4UCxVQUFVLENBQUMwUCxzQkFBc0IsQ0FBQ0MsUUFBUSxDQUN6Q1AsVUFBVSxDQUFDUSxjQUFjLEVBQ3pCUixVQUFVLENBQUNTLE1BQU0sRUFDakJQLHFCQUFxQixFQUNyQmxCLEVBQUUsQ0FBQ3JPLFNBQVMsQ0FBQyxDQUNkLENBQUM7UUFDRixDQUFDO1FBQ0QySyxrQkFBa0IsQ0FBQ2lELGFBQWEsQ0FBQ21DLHVCQUF1QixHQUFJMUIsRUFBcUIsSUFBVztVQUMzRixNQUFNMkIsS0FBMkIsR0FBR3JGLGtCQUFrQjtVQUN0RCxNQUFNMEUsVUFBNkMsR0FBRzFFLGtCQUFrQixDQUFDSyxRQUFRLENBQUNzRSxTQUFTLENBQUMsQ0FBQztVQUM3RixJQUFJVyxtQkFBbUIsR0FBRyxVQUFVO1VBQ3BDLElBQ0NaLFVBQVUsQ0FBQ2Esa0JBQWtCLElBQzVCYixVQUFVLENBQUNhLGtCQUFrQixDQUFxREMsV0FBVyxLQUM3Riw0REFBNEQsRUFDNUQ7WUFDREYsbUJBQW1CLEdBQUcsV0FBVztVQUNsQztVQUNBLElBQUlHLFlBQVksR0FBR0osS0FBSyxDQUFDSyxtQkFBdUM7VUFDaEVELFlBQVksR0FBR0EsWUFBWSxLQUFLLE9BQU8sR0FBRyxLQUFLLEdBQUcsSUFBSTtVQUV0RCxNQUFNRSxRQUF1QixHQUFHTixLQUFLLEVBQUUvRSxXQUFXLEVBQUUzSCxPQUFPLENBQUMsQ0FBQyxDQUFDaU4sS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUN4RSxNQUFNQyxhQUFxQixHQUFHRixRQUFRLENBQUNBLFFBQVEsQ0FBQzVLLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDM0QsTUFBTStLLHFCQUFxQixHQUFHLElBQUksQ0FBQ0EscUJBQXFCO1VBQ3hELE1BQU1DLE9BQU8sR0FBRztZQUNmQyxRQUFRLEVBQUV0QyxFQUFFLENBQUNyTyxTQUFTLENBQUMsQ0FBQyxDQUFDVCxpQkFBaUIsQ0FBQyxDQUFvQjtZQUMvRHFSLGtCQUFrQixFQUFFWCxtQkFBbUI7WUFDdkM5TyxLQUFLLEVBQUVrTixFQUFFLENBQUNyTyxTQUFTLENBQUMsQ0FBQyxDQUFDa0IsUUFBUSxDQUFDLENBQWU7WUFDOUMyUCxLQUFLLEVBQUV4QixVQUFVLENBQUN5QixLQUFLO1lBQ3ZCQyxXQUFXLEVBQUVYLFlBQVk7WUFDekJJLGFBQWEsRUFBRUEsYUFBYTtZQUM1QkMscUJBQXFCLEVBQUVBO1VBQ3hCLENBQUM7VUFFRHhRLFVBQVUsQ0FBQ3dDLFFBQVEsQ0FBQ3VPLFlBQVksQ0FBQzNCLFVBQVUsQ0FBQ1MsTUFBTSxFQUFHWSxPQUFPLENBQUM7UUFDOUQsQ0FBQztRQUNEL0Ysa0JBQWtCLENBQUNpRCxhQUFhLENBQUNxRCx5QkFBeUIsR0FBSTVDLEVBQUUsSUFBVztVQUMxRTZDLFlBQVksQ0FBQ0MsdUJBQXVCLENBQUM5QyxFQUFFLEVBQUUrQyxrQ0FBa0MsQ0FBQ3pHLGtCQUFrQixDQUFDMEcsYUFBYSxDQUFDLENBQUM7UUFDL0csQ0FBQztRQUNELElBQUkxRyxrQkFBa0IsQ0FBQzJHLGlCQUFpQixDQUFDQyxLQUFLLEtBQUssd0RBQXdELEVBQUU7VUFDNUc1RyxrQkFBa0IsQ0FBQ2lELGFBQWEsQ0FBQzRELDZCQUE2QixHQUFJbkQsRUFBRSxJQUFXO1lBQzlFMU4sa0JBQWtCLENBQUM2USw2QkFBNkIsQ0FDL0NuRCxFQUFFLENBQUNyTyxTQUFTLENBQUMsQ0FBQyxFQUNkQyxVQUFVLEVBQ1QwSyxrQkFBa0IsQ0FBQzJHLGlCQUFpQixDQUFpQ0csTUFBTSxDQUFDM1AsS0FDOUUsQ0FBQztVQUNGLENBQUM7UUFDRjtRQUNBLElBQUk2SSxrQkFBa0IsQ0FBQ2pDLFFBQVEsS0FBSyxTQUFTLEVBQUU7VUFDOUNpQyxrQkFBa0IsQ0FBQytHLFdBQVcsR0FBR0MsY0FBYyxDQUFDQyw4QkFBOEIsQ0FDN0VqSCxrQkFBa0IsRUFDbEIsSUFBSSxDQUFDekssaUJBQWlCLENBQUMsQ0FBQyxFQUN4QixJQUFJLENBQUMrTCxZQUFZLENBQUMsQ0FDbkIsQ0FBQztRQUNGO1FBQ0EsSUFBSSxDQUFDbkksT0FBTyxHQUFHNk4sY0FBYyxDQUFDRSx5QkFBeUIsQ0FBQ2xILGtCQUFrQixDQUF1QjtNQUNsRyxDQUFDLENBQUMsT0FBT0osQ0FBQyxFQUFFO1FBQ1gsSUFBSUEsQ0FBQyxZQUFZckMsS0FBSyxFQUFFO1VBQ3ZCNEosWUFBWSxDQUFDQyxJQUFJLENBQUN4SCxDQUFDLENBQUNYLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQztRQUM1RCxDQUFDLE1BQU07VUFDTmtJLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1FBQy9DO01BQ0Q7TUFDQSxPQUFPLElBQUksQ0FBQ2pPLE9BQU87SUFDcEIsQ0FBQztJQUFBNUUsTUFBQSxDQUVEK08scUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ0ksRUFBbUMsRUFBUTtNQUNoRTFOLGtCQUFrQixDQUFDcU4sbUJBQW1CLENBQUNLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQUFuUCxNQUFBLENBRURpUCxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFDRSxFQUFvQyxFQUFRO01BQ2xFMU4sa0JBQWtCLENBQUN1TixvQkFBb0IsQ0FBQ0csRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFBQW5QLE1BQUEsQ0FFRDBQLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUNQLEVBQThCLEVBQVE7TUFDMUQxTixrQkFBa0IsQ0FBQ2dPLGtCQUFrQixDQUFDTixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUFBblAsTUFBQSxDQUVEdVAsY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUNKLEVBQTRCLEVBQVE7TUFDbEQxTixrQkFBa0IsQ0FBQzZOLFlBQVksQ0FBQyxJQUFJLENBQUN0TyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVtTyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUFBblAsTUFBQSxDQUVENFAscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ1QsRUFBOEIsRUFBUTtNQUMzRDFOLGtCQUFrQixDQUFDa08sbUJBQW1CLENBQUNSLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQUFuUCxNQUFBLENBRUQ4UCxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFDWCxFQUFzQixFQUFRO01BQ2hEMU4sa0JBQWtCLENBQUNvTyxnQkFBZ0IsQ0FBQ1YsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFBQW5QLE1BQUEsQ0FFRGlRLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFDZCxFQUFxQixFQUFRO01BQzFDMU4sa0JBQWtCLENBQUNxUixTQUFTLENBQUMzRCxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUFBblAsTUFBQSxDQUVEK1AsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUNaLEVBQW1DLEVBQVE7TUFDckQsTUFBTXBPLFVBQVUsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDM0NELFVBQVUsQ0FBQzRDLGtCQUFrQixDQUFDb1AscUJBQXFCLENBQUM1RCxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUFBblAsTUFBQSxDQUVEbU0sY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUEsRUFBdUI7TUFDcEMsTUFBTTZHLFFBQTRCLEdBQUcsQ0FBQyxDQUF1QjtNQUM3RCxNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDbk0sV0FBVyxDQUFDLENBQUMsQ0FBQ29NLGdCQUFnQixDQUFDLENBQUM7TUFDeEQsTUFBTUMsWUFBWSxHQUFHLElBQUksQ0FBQ3JNLFdBQVcsQ0FBQyxDQUFDLENBQUNzTSxrQkFBa0IsQ0FBQyxDQUFDO01BQzVELEtBQUssTUFBTUMsWUFBWSxJQUFJSixVQUFVLEVBQUU7UUFDdEMsTUFBTUssb0JBQW9CLEdBQUcsSUFBSSxDQUFDL0osV0FBVyxDQUFDOEosWUFBWSxDQUFDO1FBQzNETCxRQUFRLENBQUNLLFlBQVksQ0FBNkIsR0FBR0Msb0JBQW9CO01BQzFFO01BQ0EsS0FBSyxNQUFNQyxlQUFlLElBQUlKLFlBQVksRUFBRTtRQUMzQyxNQUFNSyxrQkFBa0IsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQ0YsZUFBZSxDQUFDO1FBQy9ELElBQUlHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxrQkFBa0IsQ0FBQyxFQUFFO1VBQ3RDLE1BQU1JLGFBQWEsR0FBRyxFQUFFO1VBQ3hCLEtBQUssTUFBTUMsYUFBYSxJQUFJTCxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJSyxhQUFhLENBQUN0VCxHQUFHLENBQThCLG9EQUFvRCxDQUFDLEVBQUU7Y0FDekdxVCxhQUFhLENBQUNwTCxJQUFJLENBQUNxTCxhQUFhLENBQUMxSCxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ25EO1VBQ0Q7VUFDQTZHLFFBQVEsQ0FBQ08sZUFBZSxDQUE2QixHQUFHSyxhQUFhO1FBQ3RFLENBQUMsTUFBTSxJQUFJSixrQkFBa0IsRUFBRTtVQUM5QixJQUFJQSxrQkFBa0IsQ0FBQ2pULEdBQUcsQ0FBOEIsb0RBQW9ELENBQUMsRUFBRTtZQUM5R3lTLFFBQVEsQ0FBQ08sZUFBZSxDQUE2QixHQUFHQyxrQkFBa0IsQ0FBQ3JILGNBQWMsQ0FBQyxDQUFDO1lBQzNGLEtBQUssTUFBTS9MLE9BQU8sSUFBS29ULGtCQUFrQixDQUN2Q00sYUFBYSxFQUFFO2NBQ2hCZCxRQUFRLENBQUNPLGVBQWUsQ0FBNkIsQ0FBQ25ULE9BQU8sQ0FBQyxHQUFHb1Qsa0JBQWtCLENBQUMxUCxjQUFjLENBQUMxRCxPQUFPLENBQUM7WUFDNUc7VUFDRCxDQUFDLE1BQU07WUFDTjRTLFFBQVEsQ0FBQ08sZUFBZSxDQUE2QixHQUFHQyxrQkFBa0IsQ0FBQy9LLEtBQUssQ0FBQyxDQUFDO1VBQ25GO1FBQ0Q7TUFDRDtNQUNBLE9BQU91SyxRQUFRO0lBQ2hCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQWhULE1BQUEsQ0FJQStULHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUEsRUFBeUI7TUFDN0MsTUFBTTVCLGFBQWEsR0FBRyxJQUFJLENBQUM2Qiw2QkFBNkIsQ0FDdkQsSUFBSSxDQUFDbEksUUFBUSxFQUNiLElBQUksQ0FBQ0MsV0FDTixDQUFDO01BQ0QsT0FBT2tJLDhCQUE4QixDQUFDOUIsYUFBaUYsQ0FBQyxFQUNySCtCLFlBQVk7SUFDaEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBbFUsTUFBQSxDQUlBbVUseUJBQXlCLEdBQXpCLFNBQUFBLHlCQUF5QkEsQ0FBQSxFQUF1QjtNQUMvQyxPQUFPLElBQUksQ0FBQ0oscUJBQXFCLENBQUMsQ0FBQyxFQUFFSyxrQkFBa0I7SUFDeEQsQ0FBQztJQUFBLE9BQUF2YSxLQUFBO0VBQUEsRUFsb0NrQndhLFFBQVEsR0FBQXBXLFdBQUEsR0FBQXFXLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLGVBQUE3RixLQUFBO0lBQUFtYSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXhXLFlBQUEsR0FBQW9XLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLGVBQUExRixLQUFBO0lBQUFnYSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXZXLFlBQUEsR0FBQW1XLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLFNBQUF4RixLQUFBO0lBQUE4WixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXRXLFlBQUEsR0FBQWtXLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLGVBQUF2RixLQUFBO0lBQUE2WixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXJXLFlBQUEsR0FBQWlXLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLFdBQUFwRixLQUFBO0lBQUEwWixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXBXLFlBQUEsR0FBQWdXLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLGtCQUFBbkYsS0FBQTtJQUFBeVosWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFuVyxZQUFBLEdBQUErVix5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSxhQUFBbEYsS0FBQTtJQUFBd1osWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFsVyxZQUFBLEdBQUE4Vix5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSxjQUFBaEYsTUFBQTtJQUFBc1osWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFqVyxZQUFBLEdBQUE2Vix5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSxpQkFBQS9FLE1BQUE7SUFBQXFaLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBaFcsYUFBQSxHQUFBNFYseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsZUFBQTlFLE1BQUE7SUFBQW9aLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBL1YsYUFBQSxHQUFBMlYseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsaUJBQUE1RSxNQUFBO0lBQUFrWixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTlWLGFBQUEsR0FBQTBWLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLDBCQUFBM0UsTUFBQTtJQUFBaVosWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FpR29CLElBQUk7SUFBQTtFQUFBLElBQUE3VixhQUFBLEdBQUF5Vix5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSxvQkFBQTFFLE1BQUE7SUFBQWdaLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBNVYsYUFBQSxHQUFBd1YseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsY0FBQXhFLE1BQUE7SUFBQThZLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBM1YsYUFBQSxHQUFBdVYseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsZUFBQXZFLE1BQUE7SUFBQTZZLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBMVYsYUFBQSxHQUFBc1YseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEscUJBQUF0RSxNQUFBO0lBQUE0WSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXpWLGFBQUEsR0FBQXFWLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLFlBQUFyRSxNQUFBO0lBQUEyWSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXhWLGFBQUEsR0FBQW9WLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLGtCQUFBakUsTUFBQTtJQUFBdVksWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF2VixhQUFBLEdBQUFtVix5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSxnQkFBQWhFLE1BQUE7SUFBQXNZLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdFYsYUFBQSxHQUFBa1YseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsNEJBQUEvRCxNQUFBO0lBQUFxWSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXJWLGFBQUEsR0FBQWlWLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLDJCQUFBOUQsTUFBQTtJQUFBb1ksWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFwVixhQUFBLEdBQUFnVix5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSwrQkFBQTdELE1BQUE7SUFBQW1ZLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBblYsYUFBQSxHQUFBK1UseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEseUJBQUE1RCxNQUFBO0lBQUFrWSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWxWLGFBQUEsR0FBQThVLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLHdCQUFBM0QsTUFBQTtJQUFBaVksWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0E4RTlCLEtBQUs7SUFBQTtFQUFBLElBQUFqVixhQUFBLEdBQUE2VSx5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSxvQkFBQTFELE1BQUE7SUFBQWdZLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBL1UsYUFBQSxHQUFBMlUseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsYUFBQXpELE1BQUE7SUFBQStYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBOVUsYUFBQSxHQUFBMFUseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsZUFBQXhELE1BQUE7SUFBQThYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBN1UsYUFBQSxHQUFBeVUseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsMEJBQUF2RCxNQUFBO0lBQUE2WCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQXVCTSxLQUFLO0lBQUE7RUFBQSxJQUFBNVUsYUFBQSxHQUFBd1UseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsNEJBQUF0RCxNQUFBO0lBQUE0WCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQUoseUJBQUEsQ0FBQXJYLE9BQUEsQ0FBQWdELFNBQUEsbUJBQUFyRCxNQUFBLEdBQUF3UCxNQUFBLENBQUF1SSx3QkFBQSxDQUFBMVgsT0FBQSxDQUFBZ0QsU0FBQSxtQkFBQWhELE9BQUEsQ0FBQWdELFNBQUEsR0FBQXFVLHlCQUFBLENBQUFyWCxPQUFBLENBQUFnRCxTQUFBLHVCQUFBbkQsTUFBQSxHQUFBc1AsTUFBQSxDQUFBdUksd0JBQUEsQ0FBQTFYLE9BQUEsQ0FBQWdELFNBQUEsdUJBQUFoRCxPQUFBLENBQUFnRCxTQUFBLEdBQUFxVSx5QkFBQSxDQUFBclgsT0FBQSxDQUFBZ0QsU0FBQSwyQkFBQWxELE1BQUEsR0FBQXFQLE1BQUEsQ0FBQXVJLHdCQUFBLENBQUExWCxPQUFBLENBQUFnRCxTQUFBLDJCQUFBaEQsT0FBQSxDQUFBZ0QsU0FBQSxHQUFBaEQsT0FBQSxNQUFBRCxNQUFBLEtBQUFBLE1BQUE7RUFBQSxPQTg3QnZCbkQsS0FBSztBQUFBIiwiaWdub3JlTGlzdCI6W119