@sapui5/sap.fe.core 1.121.2 → 1.123.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 (241) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -2
  5. package/src/sap/fe/core/CommonUtils.js +14 -171
  6. package/src/sap/fe/core/CommonUtils.ts +15 -221
  7. package/src/sap/fe/core/PageController.js +13 -1
  8. package/src/sap/fe/core/PageController.ts +16 -0
  9. package/src/sap/fe/core/TemplateComponent.js +6 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +8 -0
  11. package/src/sap/fe/core/UIProvider.js +23 -0
  12. package/src/sap/fe/core/UIProvider.ts +38 -0
  13. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
  17. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
  18. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
  21. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
  23. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
  24. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
  25. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
  26. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
  29. package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
  30. package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
  47. package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
  48. package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
  49. package/src/sap/fe/core/controllerextensions/Share.js +7 -7
  50. package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
  55. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
  56. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
  65. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
  66. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
  67. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
  68. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
  69. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
  70. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
  71. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
  72. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
  73. package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
  74. package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
  77. package/src/sap/fe/core/converters/ConverterContext.js +17 -9
  78. package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
  79. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
  85. package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
  86. package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
  87. package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
  88. package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
  89. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
  90. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
  91. package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
  92. package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
  93. package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
  94. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
  95. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
  96. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
  97. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
  98. package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
  99. package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
  100. package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
  101. package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
  102. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
  103. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
  104. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
  105. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
  106. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
  107. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
  108. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  109. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
  110. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  111. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
  112. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
  113. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
  114. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
  115. package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
  116. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
  117. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
  118. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  119. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
  120. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  121. package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
  122. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
  123. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
  124. package/src/sap/fe/core/converters/helpers/Key.js +2 -2
  125. package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
  126. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  127. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
  128. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
  129. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
  130. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
  132. package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
  133. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
  134. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
  135. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
  136. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  137. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
  138. package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
  139. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
  141. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
  142. package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
  143. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  144. package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
  145. package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
  146. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
  147. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
  150. package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
  151. package/src/sap/fe/core/fpm/manifest.json +1 -1
  152. package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
  153. package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
  154. package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
  155. package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
  156. package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
  157. package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
  158. package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
  159. package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
  160. package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
  161. package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
  162. package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
  163. package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
  166. package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
  167. package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
  168. package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
  169. package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
  170. package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
  171. package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
  172. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
  173. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
  174. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  175. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
  176. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
  177. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
  178. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
  180. package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
  181. package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
  182. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
  183. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
  184. package/src/sap/fe/core/library.js +1 -1
  185. package/src/sap/fe/core/messagebundle.properties +5 -2
  186. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  187. package/src/sap/fe/core/messagebundle_en.properties +267 -2
  188. package/src/sap/fe/core/messagebundle_sl.properties +1 -1
  189. package/src/sap/fe/core/operationsHelper.js +2 -1
  190. package/src/sap/fe/core/operationsHelper.ts +1 -0
  191. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
  192. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
  193. package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
  194. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
  195. package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
  196. package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
  197. package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
  198. package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
  199. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
  200. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
  201. package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
  202. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
  203. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
  204. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  205. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  206. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  207. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  208. package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
  209. package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
  210. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  211. package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
  212. package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
  213. package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
  214. package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
  215. package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
  216. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  217. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
  218. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  219. package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
  220. package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
  221. package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
  222. package/src/sap/fe/core/templating/FilterHelper.js +13 -10
  223. package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
  224. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  225. package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
  226. package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
  227. package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
  228. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  229. package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
  230. package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
  231. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
  232. package/src/sap/fe/core/templating/UIFormatters.js +23 -22
  233. package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
  234. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  235. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
  236. package/src/sap/fe/core/type/EDM.js +1 -1
  237. package/src/sap/fe/core/type/EDM.ts +2 -2
  238. package/src/sap/fe/core/type/Email.js +1 -1
  239. package/src/sap/fe/core/type/Email.ts +1 -1
  240. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  241. package/src/sap/fe/core/type/FiscalDate.ts +2 -2
@@ -7,6 +7,7 @@ import type {
7
7
  UpdateHidden
8
8
  } from "@sap-ux/vocabularies-types/vocabularies/UI";
9
9
  import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
10
+ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
10
11
  import type { AnnotationAction, BaseAction } from "sap/fe/core/converters/controls/Common/Action";
11
12
  import {
12
13
  ButtonType,
@@ -92,7 +93,7 @@ export const IMPORTANT_CRITICALITIES = [
92
93
  * @returns The binding expression for the 'visible' property of the Delete button.
93
94
  */
94
95
  export function getDeleteButtonVisibility(
95
- converterContext: ConverterContext,
96
+ converterContext: ConverterContext<PageContextPathTarget>,
96
97
  deleteHidden: DeleteHidden | undefined
97
98
  ): BindingToolkitExpression<boolean> {
98
99
  const dataModelObjectPath = converterContext.getDataModelObjectPath(),
@@ -131,7 +132,7 @@ export function getDeleteButtonVisibility(
131
132
  export function getDeleteButtonEnabled(
132
133
  isDeletable: PropertyAnnotationValue<Boolean> | undefined,
133
134
  isParentDeletable: BindingToolkitExpression<boolean>,
134
- converterContext: ConverterContext
135
+ converterContext: ConverterContext<PageContextPathTarget>
135
136
  ): BindingToolkitExpression<boolean> {
136
137
  const entitySet = converterContext.getEntitySet(),
137
138
  isDraftRoot = ModelHelper.isDraftRoot(entitySet);
@@ -159,9 +160,9 @@ export function getDeleteButtonEnabled(
159
160
  * @returns The binding expression for the 'visible' property of the Edit button.
160
161
  */
161
162
  export function getEditButtonVisibility(
162
- converterContext: ConverterContext,
163
+ converterContext: ConverterContext<PageContextPathTarget>,
163
164
  rootUpdateHidden: UpdateHidden | undefined,
164
- rootConverterContext: ConverterContext,
165
+ rootConverterContext: ConverterContext<PageContextPathTarget>,
165
166
  updateHidden?: UpdateHidden | undefined,
166
167
  viewLevel?: number | undefined
167
168
  ): BindingToolkitExpression<boolean> {
@@ -210,7 +211,7 @@ export function getEditButtonVisibility(
210
211
  }
211
212
 
212
213
  export function getHiddenExpression(
213
- converterContext: ConverterContext,
214
+ converterContext: ConverterContext<PageContextPathTarget>,
214
215
  updateHidden: UpdateHidden | undefined
215
216
  ): BindingToolkitExpression<boolean> {
216
217
  const dataModelObjectPath = converterContext.getDataModelObjectPath(),
@@ -231,8 +232,8 @@ export function getHiddenExpression(
231
232
  * @returns The binding expression for the 'enabled' property of the Edit button.
232
233
  */
233
234
  export function getEditButtonEnabled(
234
- converterContext: ConverterContext,
235
- updateRestrictions?: any,
235
+ converterContext: ConverterContext<PageContextPathTarget>,
236
+ updateRestrictions?: PropertyAnnotationValue<Boolean>,
236
237
  viewLevel?: number | undefined
237
238
  ): CompiledBindingToolkitExpression {
238
239
  const entitySet = converterContext.getEntitySet(),
@@ -269,10 +270,10 @@ export function getEditButtonEnabled(
269
270
  return "true";
270
271
  }
271
272
 
272
- export function getHeaderDefaultActions(converterContext: ConverterContext): BaseAction[] {
273
+ export function getHeaderDefaultActions(converterContext: ConverterContext<PageContextPathTarget>): BaseAction[] {
273
274
  const sContextPath = converterContext.getContextPath();
274
275
  const rootEntitySetPath = ModelHelper.getRootEntitySetPath(sContextPath);
275
- const rootConverterContext = converterContext.getConverterContextFor("/" + rootEntitySetPath);
276
+ const rootConverterContext = converterContext.getConverterContextFor<PageContextPathTarget>("/" + rootEntitySetPath);
276
277
  const entitySet = converterContext.getEntitySet(),
277
278
  entityType = converterContext.getEntityType(),
278
279
  rootEntitySet = rootConverterContext.getEntitySet(),
@@ -430,7 +431,7 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
430
431
  return headerActions;
431
432
  }
432
433
 
433
- export function getHiddenHeaderActions(converterContext: ConverterContext): BaseAction[] {
434
+ export function getHiddenHeaderActions(converterContext: ConverterContext<PageContextPathTarget>): BaseAction[] {
434
435
  const entityType = converterContext.getEntityType();
435
436
  const hiddenActions = (entityType.annotations?.UI?.Identification?.filter((identificationDataField) => {
436
437
  return identificationDataField?.annotations?.UI?.Hidden?.valueOf() === true;
@@ -443,7 +444,7 @@ export function getHiddenHeaderActions(converterContext: ConverterContext): Base
443
444
  });
444
445
  }
445
446
 
446
- export function getFooterDefaultActions(viewLevel: number, converterContext: ConverterContext): BaseAction[] {
447
+ export function getFooterDefaultActions(viewLevel: number, converterContext: ConverterContext<PageContextPathTarget>): BaseAction[] {
447
448
  const entitySet = converterContext.getEntitySet();
448
449
  const entityType = converterContext.getEntityType();
449
450
  const stickySessionSupported = ModelHelper.getStickySession(entitySet), //for sticky app
@@ -502,7 +503,10 @@ export function getFooterDefaultActions(viewLevel: number, converterContext: Con
502
503
  return footerActions;
503
504
  }
504
505
 
505
- function getDataFieldAnnotationAction(dataField: DataFieldForActionTypes, converterContext: ConverterContext): AnnotationAction {
506
+ function getDataFieldAnnotationAction(
507
+ dataField: DataFieldForActionTypes,
508
+ converterContext: ConverterContext<PageContextPathTarget>
509
+ ): AnnotationAction {
506
510
  const isVisibleExp = isVisible(dataField);
507
511
  return {
508
512
  type: ActionType.DataFieldForAction,
@@ -263,7 +263,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
263
263
  * @param converterContext The converted context
264
264
  * @param item The item configuration
265
265
  * @param isPrimary Is a primary presentation
266
- * @param viewSettings The settings of the view
267
266
  * @returns The ALP presentation definition
268
267
  */
269
268
  const getAlpPresentation = function (converterContext, item, isPrimary) {
@@ -641,6 +640,11 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
641
640
  const multiDimensionalGridIds = getMultiDimensionalGridIds(views);
642
641
  const targetControlIds = [...(hideFilterBar && !useHiddenFilterBar ? [] : [filterBarId]), ...(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), ...(multiViewControl ? [multiViewControl.id] : []), ...(multiDimensionalGridIds.variantManagementId ? [multiDimensionalGridIds.variantManagementId] : [])];
643
642
  const stickySubheaderProvider = multiViewControl && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? multiViewControl.id : undefined;
643
+
644
+ // Check if all tables on the main entity set are Tree tables. If that's the case, the draft editState filter shall not be shown
645
+ const onlyTreeTablesOnMainEntitySet = lrTableVisualizations.every(tableVisualization => {
646
+ return tableVisualization.control.type === "TreeTable" || tableVisualization.annotation.collection !== sContextPath;
647
+ });
644
648
  return {
645
649
  mainEntitySet: sContextPath,
646
650
  mainEntityType: `${sContextPath}/`,
@@ -656,7 +660,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
656
660
  propertyInfo: propertyInfoFields,
657
661
  selectionFields,
658
662
  hideBasicSearch,
659
- showClearButton
663
+ showClearButton,
664
+ disableDraftEditStateFilter: onlyTreeTablesOnMainEntitySet
660
665
  },
661
666
  views: views,
662
667
  filterBarId: hideFilterBar && !useHiddenFilterBar ? "" : filterBarId,
@@ -723,4 +728,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
723
728
  }
724
729
  return _exports;
725
730
  }, false);
726
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaWV3U2V0dGluZ3NUeXBlIiwiVmlld0RlZmluaXRpb25UeXBlIiwiaXNWaWV3U2V0dGluZ3NPZlR5cGUiLCJwb3RlbnRpYWxWaWV3U2V0dGluZ3MiLCJ0eXBlIiwiaXNWaWV3RGVmaW5pdGlvbk9mVHlwZSIsInBvdGVudGlhbFZpZXdEZWZpbml0aW9uIiwidmlld1R5cGUiLCJnZXRUYWJsZVZpc3VhbGl6YXRpb25zIiwidmlld3MiLCJ0YWJsZXMiLCJmb3JFYWNoIiwidmlldyIsIkN1c3RvbSIsInZpc3VhbGl6YXRpb25zIiwiQ29tYmluZWQiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNBTFAiLCJhbm5vdGF0aW9uUGF0aCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJlcnJvck1lc3NhZ2VGb3JBTFAiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJ1bmRlZmluZWQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsImFubm90YXRpb25zIiwiVUkiLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJjcmVhdGVBbHBWaWV3IiwicHJlc2VudGF0aW9ucyIsImRlZmF1bHRQYXRoIiwidmlld1NldHRpbmdzIiwiY3JlYXRlQWxwVmlzdWFsaXphdGlvbiIsInRhYmxlQ29udHJvbElkIiwiYW5ub3RhdGlvbiIsImlkIiwiY2hhcnRDb250cm9sSWQiLCJ2aXNpYmxlIiwiTXVsdGkiLCJjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyIsInRhYmxlSWQiLCJnZXRWaWV3Q29udHJvbCIsImJhc2VTZXR0aW5ncyIsInRpdGxlIiwiZ2V0Vmlld1RpdGxlIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCIsIlNpbmdsZVRhYmxlIiwiU2luZ2xlQ2hhcnQiLCJpc1ByaW1hcnkiLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJmaW5kIiwibXVsdGlEaW1lbnNpb25hbFZpc3VhbGl6YXRpb24iLCJNdWx0aURpbWVuc2lvbmFsR3JpZCIsIm1lc3NhZ2VJbmZvIiwiZ2V0QWxwUHJlc2VudGF0aW9uIiwiaXRlbSIsImlzTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbiIsImdldE11bHRpRGltZW5zaW9uYWxHcmlkVmlzdWFsaXphdGlvbiIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldEVudGl0eVR5cGUiLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwiY29uZmlndXJlTXVsdGlWaWV3cyIsImZpbHRlcnMiLCJjb250cm9sIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwia2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uIiwiZ2V0VGFibGVJRCIsImtleSIsImdldENoYXJ0SUQiLCJtdWx0aVZpZXdzIiwiZ2V0Q3VzdG9tVmlldyIsImxhYmVsIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImN1c3RvbVRhYklkIiwiZ2V0Q3VzdG9tVGFiSUQiLCJ2aXN1YWxpemF0aW9uVHlwZSIsInZpZXdBbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJUZXh0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNwbGl0IiwiZ2V0Vmlld1Zpc3VhbGl6YXRpb25QYXRoIiwiZ2V0VmlldyIsIm11bHRpVmlld1NldHRpbmdzIiwiYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiaXNNYWNyb09yTXVsdGlwbGVWaWV3IiwicHJpbWFyeSIsInNlY29uZGFyeSIsImdldFZpZXdzIiwibXVsdGlwbGVWaWV3Q29uZmlnIiwidmlld0NvbnZlcnRlckNvbmZpZ3MiLCJtYW5pZmVzdFdyYXBwZXIiLCJwYXRoIiwiaXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uIiwiaXNDdXN0b21WaWV3Q29uZmlndXJhdGlvbiIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJ0ZXJtIiwiY3JlYXRlQWxwVmlld1NldHRpbmdzIiwiRGVmYXVsdCIsIm1hcCIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJnZXRNdWx0aVZpZXdzQ29udHJvbCIsInZpZXdzRGVmaW5pdGlvbiIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwiZ2V0SWNvblRhYkJhcklEIiwidmlld0NvbmZpZ3MiLCJjaGFydCIsInRhYmxlIiwiZ2V0RGVmYXVsdENoYXJ0IiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJhY3Rpb25zIiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJsckNoYXJ0VmlzdWFsaXphdGlvbnMiLCJzaG93UGlubmFibGVUb2dnbGUiLCJzb21lIiwic2luZ2xlVGFibGVJZCIsInNpbmdsZUNoYXJ0SWQiLCJkeW5hbWljTGlzdFJlcG9ydElkIiwiZ2V0RHluYW1pY0xpc3RSZXBvcnRJRCIsImdldEZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzaG93Q2xlYXJCdXR0b24iLCJjb25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInVzZUhpZGRlbkZpbHRlckJhciIsImhpZGVGaWx0ZXJCYXIiLCJpc0ZpbHRlckJhckhpZGRlbiIsImxyRmlsdGVyUHJvcGVydGllcyIsImdldFNlbGVjdGlvbkZpZWxkcyIsInNlbGVjdGlvbkZpZWxkcyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInNQcm9wZXJ0eUluZm8iLCJoaWRlQmFzaWNTZWFyY2giLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJtdWx0aVZpZXdDb250cm9sIiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGVhZGVyQWN0aW9ucyIsInZpc3VhbGl6YXRpb25JZHMiLCJjb25jYXQiLCJtdWx0aURpbWVuc2lvbmFsR3JpZElkcyIsImdldE11bHRpRGltZW5zaW9uYWxHcmlkSWRzIiwidGFyZ2V0Q29udHJvbElkcyIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJzdGlja3lTdWJoZWFkZXJQcm92aWRlciIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsIm1haW5FbnRpdHlTZXQiLCJtYWluRW50aXR5VHlwZSIsIm11bHRpVmlld3NDb250cm9sIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsInRlbXBsYXRlVHlwZSIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiLCJncmlkVmlzdWFsaXphdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkLCBGaWx0ZXJGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2gsXG5cdGdldE1hbmlmZXN0RmlsdGVyRmllbGRzLFxuXHRnZXRTZWxlY3Rpb25GaWVsZHNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbWJpbmVkVmlld0RlZmF1bHRQYXRoLFxuXHRNdWx0aURpbWVuc2lvbmFsR3JpZFZpZXdDb25maWd1cmF0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUsIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIE11bHRpRGltZW5zaW9uYWxHcmlkVmlzdWFsaXphdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7XG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldE11bHRpRGltZW5zaW9uYWxHcmlkVmlzdWFsaXphdGlvbixcblx0Z2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNQcmVzZW50YXRpb25Db21wbGlhbnQsXG5cdGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50XG59IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgS1BJRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQge1xuXHRnZXRDaGFydElELFxuXHRnZXRDdXN0b21UYWJJRCxcblx0Z2V0RHluYW1pY0xpc3RSZXBvcnRJRCxcblx0Z2V0RmlsdGVyQmFySUQsXG5cdGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdGdldEljb25UYWJCYXJJRCxcblx0Z2V0VGFibGVJRFxufSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuXG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxuZW51bSBWaWV3U2V0dGluZ3NUeXBlIHtcblx0TXVsdGkgPSBcIk11bHRpXCIsXG5cdENvbWJpbmVkID0gXCJDb21iaW5lZFwiLFxuXHRDdXN0b20gPSBcIkN1c3RvbVwiLFxuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCJcbn1cblxudHlwZSBDb21iaW5lZFZpZXdTZXR0aW5ncyA9IHtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDtcblx0cHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gfCBbTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbl07XG5cdHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gfCBbTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbl07XG5cdGRlZmF1bHRQYXRoPzogQ29tYmluZWRWaWV3RGVmYXVsdFBhdGg7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQ7XG59O1xudHlwZSBDdXN0b21WaWV3U2V0dGluZ3MgPSB7XG5cdGtleT86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ3VzdG9tO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3MgPSB7XG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ7XG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblx0YW5ub3RhdGlvbj86IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBDaGFydDtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0a2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uPzogYm9vbGVhbjtcblx0a2V5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xuXHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLk11bHRpO1xufTtcbnR5cGUgRGVmYXVsdFZpZXdTZXR0aW5ncyA9IHtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDtcblx0YW5ub3RhdGlvbj86IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuRGVmYXVsdDtcbn07XG5cbnR5cGUgVmlld0NvbnZlcnRlclNldHRpbmdzID0gRGVmYXVsdFZpZXdTZXR0aW5ncyB8IENvbWJpbmVkVmlld1NldHRpbmdzIHwgTXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzIHwgQ3VzdG9tVmlld1NldHRpbmdzO1xuXG50eXBlIERlZmF1bHRTZW1hbnRpY0RhdGUgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG59O1xudHlwZSBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHNob3dUYWJDb3VudHM/OiBib29sZWFuO1xufTtcbnR5cGUgTHJWaXN1YWxpemF0aW9uVHlwZTxUPiA9IFQgZXh0ZW5kcyBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSA/IFRhYmxlVmlzdWFsaXphdGlvbiB8IHVuZGVmaW5lZCA6IENoYXJ0VmlzdWFsaXphdGlvbiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydERlZmluaXRpb24gPSB7XG5cdG1haW5FbnRpdHlTZXQ6IHN0cmluZztcblx0bWFpbkVudGl0eVR5cGU6IHN0cmluZzsgLy8gZW50aXR5VHlwZT4gYXQgdGhlIHN0YXJ0IG9mIExSIHRlbXBsYXRpbmdcblx0c2luZ2xlVGFibGVJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNpbmdsZUNoYXJ0SWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRtdWx0aURpbWVuc2lvbmFsR3JpZElkczogeyBpZD86IHN0cmluZzsgdmFyaWFudE1hbmFnZW1lbnRJZD86IHN0cmluZyB9O1xuXHRkeW5hbWljTGlzdFJlcG9ydElkOiBzdHJpbmc7XG5cdHN0aWNreVN1YmhlYWRlclByb3ZpZGVyPzogc3RyaW5nO1xuXHRtdWx0aVZpZXdzQ29udHJvbD86IE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbjsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93UGlubmFibGVUb2dnbGU/OiBib29sZWFuO1xuXHRmaWx0ZXJCYXI6IHtcblx0XHRwcm9wZXJ0eUluZm86IGFueTtcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107XG5cdFx0aGlkZUJhc2ljU2VhcmNoOiBib29sZWFuO1xuXHRcdHNob3dDbGVhckJ1dHRvbj86IGJvb2xlYW47XG5cdH07XG5cdHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXTtcblx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkO1xuXHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB8IHt9O1xuXHR9O1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZTtcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuO1xuXHRmaWx0ZXJJbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuXHRmaWx0ZXJMYXlvdXQ/OiBzdHJpbmc7XG5cdGtwaURlZmluaXRpb25zOiBLUElEZWZpbml0aW9uW107XG5cdGhpZGVGaWx0ZXJCYXI6IGJvb2xlYW47XG5cdHVzZUhpZGRlbkZpbHRlckJhcjogYm9vbGVhbjtcbn07XG50eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5lbnVtIFZpZXdEZWZpbml0aW9uVHlwZSB7XG5cdFNpbmdsZVRhYmxlID0gXCJTaW5nbGVUYWJsZVwiLFxuXHRTaW5nbGVDaGFydCA9IFwiU2luZ2xlQ2hhcnRcIixcblx0Q29tYmluZWQgPSBcIkNvbWJpbmVkXCIsXG5cdEN1c3RvbSA9IFwiQ3VzdG9tXCJcbn1cblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkO1xufTtcbmV4cG9ydCB0eXBlIEN1c3RvbVZpZXdEZWZpbml0aW9uID0ge1xuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0ZnJhZ21lbnQ6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRjdXN0b21UYWJJZDogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbTtcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdHRhYmxlQ29udHJvbElkPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZVRhYmxlO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZUNoYXJ0O1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2aWV3IHNldHRpbmdzIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGUuXG4gKlxuICogQHBhcmFtIHBvdGVudGlhbFZpZXdTZXR0aW5ncyBUaGUgdmlldyBzZXR0aW5nc1xuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgdG8gbWF0Y2hcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmlldyBzZXR0aW5ncyBtYXRjaGVzIHRoZSBwcm92aWRlZCB0eXBlXG4gKi9cbmNvbnN0IGlzVmlld1NldHRpbmdzT2ZUeXBlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBWaWV3Q29udmVydGVyU2V0dGluZ3M+KFxuXHRwb3RlbnRpYWxWaWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyxcblx0dHlwZTogVFtcInR5cGVcIl1cbik6IHBvdGVudGlhbFZpZXdTZXR0aW5ncyBpcyBUIHtcblx0cmV0dXJuIHBvdGVudGlhbFZpZXdTZXR0aW5ncy50eXBlID09PSB0eXBlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZpZXcgZGVmaW5pdGlvbiBtYXRjaGVzIHRoZSBwcm92aWRlZCB0eXBlLlxuICpcbiAqIEBwYXJhbSBwb3RlbnRpYWxWaWV3RGVmaW5pdGlvbiBUaGUgdmlldyBkZWZpbml0aW9uXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSB0byBtYXRjaFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2aWV3IGRlZmluaXRpb24gbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdHlwZVxuICovXG5jb25zdCBpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24+KFxuXHRwb3RlbnRpYWxWaWV3RGVmaW5pdGlvbjogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uLFxuXHR0eXBlOiBUW1widmlld1R5cGVcIl1cbik6IHBvdGVudGlhbFZpZXdEZWZpbml0aW9uIGlzIFQge1xuXHRyZXR1cm4gcG90ZW50aWFsVmlld0RlZmluaXRpb24udmlld1R5cGUgPT09IHR5cGU7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICpcbiAqIEBwYXJhbSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBUYWJsZVZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IHRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDdXN0b21WaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbSkpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpXG5cdFx0XHRcdD8gdmlldy5zZWNvbmRhcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogdmlldy5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0dGFibGVzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZXM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCBjaGFydHMuXG4gKlxuICogQHBhcmFtIHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IGNoYXJ0c1xuICovXG5mdW5jdGlvbiBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENoYXJ0VmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgY2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCFpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPEN1c3RvbVZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tKSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSBpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZClcblx0XHRcdFx0PyB2aWV3LnByaW1hcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogdmlldy5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0Y2hhcnRzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjaGFydHM7XG59XG5jb25zdCBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGlzQUxQXG4gKiBAcmV0dXJucyBBIGNvbXBsaWFudCBhbm5vdGF0aW9uIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0FMUDogYm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVycm9yTWVzc2FnZUZvckFMUCA9IFwiQUxQIGZsYXZvciBuZWVkcyBib3RoIGNoYXJ0IGFuZCB0YWJsZSB0byBsb2FkIHRoZSBhcHBsaWNhdGlvblwiO1xuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgU1BWIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKSkge1xuXHRcdFx0XHRpZiAoaXNBTFApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgaXNBTFApID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9IGVsc2UgaWYgKGlzQUxQKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBpc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH0gZWxzZSBpZiAoaXNBTFApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VGb3JBTFApO1xuXHRcdH1cblx0fVxuXHRpZiAoIWlzQUxQKSB7XG5cdFx0cmV0dXJuIGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHZpZXcgZm9yIHRoZSBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9ucyBUaGUgZGF0YSB2aXN1YWxpemF0aW9ucyB0byBjb25maWd1cmVcbiAqIEBwYXJhbSBkZWZhdWx0UGF0aCBUaGUgZGVmYXVsdCBwYXRoIG9mIHRoZSBwYWdlXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIEFMUCB2aWV3IGRlZmluaXRpb25cbiAqL1xuY29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uIChcblx0cHJlc2VudGF0aW9uczogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uW10sXG5cdGRlZmF1bHRQYXRoOiBDb21iaW5lZFZpZXdEZWZhdWx0UGF0aCB8IHVuZGVmaW5lZCxcblx0dmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3Ncbik6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbiA9IGNyZWF0ZUFscFZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb24gPSBjcmVhdGVBbHBWaXN1YWxpemF0aW9uKHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXSwgZmFsc2UpO1xuXHRpZiAocHJpbWFyeVZpc3VhbGl6YXRpb24gJiYgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbikge1xuXHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdHNlY29uZGFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHR0YWJsZUNvbnRyb2xJZDpcblx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXT8udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGVcblx0XHRcdFx0XHQ/IHNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNbMF0uYW5ub3RhdGlvbj8uaWRcblx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRjaGFydENvbnRyb2xJZDpcblx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNbMF0/LnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ID8gcHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNbMF0uaWQgOiBcIlwiLFxuXHRcdFx0ZGVmYXVsdFBhdGgsXG5cdFx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkLFxuXHRcdFx0dmlzaWJsZTogaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpID8gdmlld1NldHRpbmdzLnZpc2libGUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHRcdHJldHVybiB2aWV3O1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHZpc3VhbGl6YXRpb25zIGZvciBhIHNpbmdsZSB2aXN1YWxpemF0aW9uIHZpZXcuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uIFRoZSBwcmVzZW50YXRpb24gdG8gY29uZmlndXJlXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIEFMUCB2aXN1YWxpemF0aW9uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgY3JlYXRlU2luZ2xlVmlzdWFsaXphdGlvblZpZXcgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLFxuXHR2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1xuKTogU2luZ2xlVmlld0RlZmluaXRpb24ge1xuXHRjb25zdCB0YWJsZUlkID0gZ2V0Vmlld0NvbnRyb2wocHJlc2VudGF0aW9uLCBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSk/LmFubm90YXRpb24uaWQ7XG5cdGNvbnN0IGJhc2VTZXR0aW5ncyA9IHtcblx0XHRwcmVzZW50YXRpb24sXG5cdFx0dGl0bGU6IGdldFZpZXdUaXRsZShjb252ZXJ0ZXJDb250ZXh0LCB2aWV3U2V0dGluZ3MpLFxuXHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoOiBnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCh2aWV3U2V0dGluZ3MpLFxuXHRcdHZpc2libGU6IGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSA/IHZpZXdTZXR0aW5ncy52aXNpYmxlIDogdW5kZWZpbmVkXG5cdH07XG5cdGlmICh0YWJsZUlkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmJhc2VTZXR0aW5ncyxcblx0XHRcdC4uLntcblx0XHRcdFx0dGFibGVDb250cm9sSWQ6IHRhYmxlSWQsXG5cdFx0XHRcdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlVGFibGVcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiB7XG5cdFx0Li4uYmFzZVNldHRpbmdzLFxuXHRcdC4uLntcblx0XHRcdGNoYXJ0Q29udHJvbElkOiBnZXRWaWV3Q29udHJvbChwcmVzZW50YXRpb24sIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KT8uaWQsXG5cdFx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZUNoYXJ0XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB2aXN1YWxpemF0aW9ucyBmb3IgdGhlIGFuYWx5dGljYWwgbGlzdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiB0byBjb25maWd1cmVcbiAqIEBwYXJhbSBpc1ByaW1hcnkgSXMgYSBwcmltYXJ5IHByZXNlbnRhdGlvblxuICogQHJldHVybnMgVGhlIEFMUCB2aXN1YWxpemF0aW9uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgY3JlYXRlQWxwVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaXNQcmltYXJ5PzogYm9vbGVhbik6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRjb25zdCBkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKFxuXHRcdCh2aXN1YWxpemF0aW9uKTogdmlzdWFsaXphdGlvbiBpcyBUYWJsZVZpc3VhbGl6YXRpb24gfCBDaGFydFZpc3VhbGl6YXRpb24gPT5cblx0XHRcdCghIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB8fFxuXHRcdFx0KCFpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSlcblx0KTtcblx0Y29uc3QgbXVsdGlEaW1lbnNpb25hbFZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZmluZChcblx0XHQodmlzdWFsaXphdGlvbik6IHZpc3VhbGl6YXRpb24gaXMgTXVsdGlEaW1lbnNpb25hbEdyaWRWaXN1YWxpemF0aW9uID0+XG5cdFx0XHQhIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLk11bHRpRGltZW5zaW9uYWxHcmlkXG5cdCk7XG5cblx0aWYgKGRlZmF1bHRWaXN1YWxpemF0aW9uKSB7XG5cdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdH0gZWxzZSBpZiAobXVsdGlEaW1lbnNpb25hbFZpc3VhbGl6YXRpb24pIHtcblx0XHRwcmVzZW50YXRpb25DcmVhdGVkLnZpc3VhbGl6YXRpb25zID0gW211bHRpRGltZW5zaW9uYWxWaXN1YWxpemF0aW9uXTtcblx0fSBlbHNlIHtcblx0XHQvLyBUaGUgcHJpbWFyeSB2aXN1YWxpemF0aW9uIGNvdWxkIGFsc28gYmUgYSBNdWx0aURpbWVuc2lvbmFsR3JpZCwgYnV0IGFzIHRoaXMgZmVhdHVyZSBpcyBub3QgeWV0IHJlbGVhc2VkLCB3ZSBkbyBub3QgbWVudGlvbiBpdCBoZXJlXG5cdFx0Y29uc3QgbWVzc2FnZUluZm8gPSBpc1ByaW1hcnkgPyB7IHZpc3VhbGl6YXRpb246IFwiUHJpbWFyeVwiLCB0eXBlOiBcImNoYXJ0XCIgfSA6IHsgdmlzdWFsaXphdGlvbjogXCJTZWNvbmRhcnlcIiwgdHlwZTogXCJ0YWJsZVwiIH07XG5cdFx0dGhyb3cgbmV3IEVycm9yKGAke21lc3NhZ2VJbmZvLnZpc3VhbGl6YXRpb259IHZpc3VhbGl6YXRpb24gbmVlZHMgdmFsaWQgJHttZXNzYWdlSW5mby50eXBlfWApO1xuXHR9XG5cdHJldHVybiBwcmVzZW50YXRpb25DcmVhdGVkO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcmVzZW50YXRpb24gb2YgdGhlIGFuYWx5dGljYWwgbGlzdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gY29uZmlndXJhdGlvblxuICogQHBhcmFtIGlzUHJpbWFyeSBJcyBhIHByaW1hcnkgcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIEFMUCBwcmVzZW50YXRpb24gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRBbHBQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGl0ZW06IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IE11bHRpRGltZW5zaW9uYWxHcmlkVmlld0NvbmZpZ3VyYXRpb24sXG5cdGlzUHJpbWFyeTogYm9vbGVhblxuKTogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNNdWx0aURpbWVuc2lvbmFsR3JpZFZpZXdDb25maWd1cmF0aW9uKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIGdldE11bHRpRGltZW5zaW9uYWxHcmlkVmlzdWFsaXphdGlvbihpdGVtKTtcblx0fVxuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oaXRlbS5hbm5vdGF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uO1xuXHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdGlmIChhbm5vdGF0aW9uIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRyZXR1cm4gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0YW5ub3RhdGlvbiA/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIDogXCJcIixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR7XG5cdFx0XHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBBbm5vdGF0aW9uIFBhdGggZm9yIHRoZSAke2lzUHJpbWFyeSA/IFwicHJpbWFyeVwiIDogXCJzZWNvbmRhcnlcIn0gdmlzdWFsaXphdGlvbiBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0IGlzIG5vdCBmb3VuZGBcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIG11bHRpIHZpZXcgY29uZmlndXJhdGlvbiB3aXRoIGFkZGl0aW9uYWwga2V5cy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uIFRoZSBwcmVzZW50YXRpb24gdG8gY29uZmlndXJlXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICovXG5jb25zdCBjb25maWd1cmVNdWx0aVZpZXdzID0gZnVuY3Rpb24gKHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCB2aWV3U2V0dGluZ3M6IE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncyk6IHZvaWQge1xuXHQvLyBOZWVkIHRvIGxvb3Agb24gdGFibGUgaW50byB2aWV3cyBzaW5jZSBtdWx0aSB0YWJsZSBtb2RlIGdldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIChoaWRkZW4gZmlsdGVycyBvciBUYWJsZSBJZClcblx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucykge1xuXHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlOlxuXHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgfHwge307XG5cdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IGZpbHRlcnMuaGlkZGVuRmlsdGVycyB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0XHRpZiAoIXZpZXdTZXR0aW5ncy5rZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHQvLyBOZWVkIHRvIG92ZXJyaWRlIFRhYmxlIElkIHRvIG1hdGNoIHdpdGggVGFiIEtleSAoY3VycmVudGx5IG9ubHkgdGFibGUgaXMgbWFuYWdlZCBpbiBtdWx0aXBsZSB2aWV3IG1vZGUpXG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkID0gZ2V0VGFibGVJRCh2aWV3U2V0dGluZ3Mua2V5ID8/IFwiXCIsIFwiTGluZUl0ZW1cIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0OlxuXHRcdFx0XHR2aXN1YWxpemF0aW9uLmlkID0gZ2V0Q2hhcnRJRCh2aWV3U2V0dGluZ3Mua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb24ubXVsdGlWaWV3cyA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGN1c3RvbSB2aWV3IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBjdXN0b20gdmlldyBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldEN1c3RvbVZpZXcgPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBDdXN0b21WaWV3U2V0dGluZ3MpOiBDdXN0b21WaWV3RGVmaW5pdGlvbiB7XG5cdHJldHVybiB7XG5cdFx0dGl0bGU6IHZpZXdTZXR0aW5ncy5sYWJlbCxcblx0XHRmcmFnbWVudDogdmlld1NldHRpbmdzLnRlbXBsYXRlLFxuXHRcdHR5cGU6IHZpZXdTZXR0aW5ncy50eXBlLFxuXHRcdGN1c3RvbVRhYklkOiBnZXRDdXN0b21UYWJJRCh2aWV3U2V0dGluZ3Mua2V5ID8/IFwiXCIpLFxuXHRcdHZpc2libGU6IHZpZXdTZXR0aW5ncy52aXNpYmxlLFxuXHRcdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tXG5cdH07XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgY29udHJvbCBvZiB0aGUgdmlldy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uIFRoZSBwcmVzZW50YXRpb24gb2YgdGhlIHZpZXdcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgdmlzdWFsaXphdGlvbiB0byBmaW5kXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsaXphdGlvbiBpZiB0aGUgdHlwZSBtYXRjaGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IGdldFZpZXdDb250cm9sID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSB8IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0Pihcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdHZpc3VhbGl6YXRpb25UeXBlOiBUXG4pOiBMclZpc3VhbGl6YXRpb25UeXBlPFQ+IHtcblx0cmV0dXJuIHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IHZpc3VhbGl6YXRpb25UeXBlKSBhcyBMclZpc3VhbGl6YXRpb25UeXBlPFQ+O1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aXRsZSBvZiB0aGUgdmlldy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVkIGNvbnRleHRcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgdGl0bGVcbiAqL1xuY29uc3QgZ2V0Vmlld1RpdGxlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpKSB7XG5cdFx0Y29uc3Qgdmlld0Fubm90YXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uUGF0aCkuYW5ub3RhdGlvbjtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZpZXdBbm5vdGF0aW9uLlRleHQpKTtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBTZWxlY3Rpb25WYXJpYW50ICBvZiB0aGUgdmlldy5cbiAqXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIFNlbGVjdGlvblZhcmlhbnQgaWYgdGhlcmUgaXMgb25lLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IGdldFZpZXdTZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKHZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSkge1xuXHRcdHJldHVybiB2aWV3U2V0dGluZ3MuYW5ub3RhdGlvbiAmJlxuXHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSlcblx0XHRcdD8gYEAke3ZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQ/LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV19YFxuXHRcdFx0OiB2aWV3U2V0dGluZ3MuYW5ub3RhdGlvblBhdGg7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIG9mIHRoZSB2aWV3LlxuICpcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgU2VsZWN0aW9uVmFyaWFudCBpZiB0aGVyZSBpcyBvbmUsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuY29uc3QgZ2V0Vmlld1Zpc3VhbGl6YXRpb25QYXRoID0gZnVuY3Rpb24gKHZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzKTogc3RyaW5nIHtcblx0aWYgKCFpc1ZpZXdTZXR0aW5nc09mVHlwZTxDdXN0b21WaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5DdXN0b20pKSB7XG5cdFx0cmV0dXJuICFpc1ZpZXdTZXR0aW5nc09mVHlwZTxDb21iaW5lZFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkNvbWJpbmVkKSAmJiB2aWV3U2V0dGluZ3MuYW5ub3RhdGlvblxuXHRcdFx0PyB2aWV3U2V0dGluZ3MuY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHR2aWV3U2V0dGluZ3MuY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdCAgKVxuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IHJlcG9ydCB2aWV3IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSAgZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRWaWV3ID0gZnVuY3Rpb24gKHZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uIHtcblx0aWYgKCFpc1ZpZXdTZXR0aW5nc09mVHlwZTxDdXN0b21WaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5DdXN0b20pKSB7XG5cdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IHZpZXdTZXR0aW5ncy5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdGNvbnN0IG11bHRpVmlld1NldHRpbmdzID0gaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpXG5cdFx0XHQ/IHtcblx0XHRcdFx0XHRhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudDogdmlld1NldHRpbmdzLnNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0aXNNYWNyb09yTXVsdGlwbGVWaWV3OiB0cnVlXG5cdFx0XHQgIH1cblx0XHRcdDoge307XG5cblx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oZ2V0Vmlld1Zpc3VhbGl6YXRpb25QYXRoKHZpZXdTZXR0aW5ncyksIGNvbnZlcnRlckNvbnRleHQsIHtcblx0XHRcdC4uLnsgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogdHJ1ZSB9LFxuXHRcdFx0Li4ubXVsdGlWaWV3U2V0dGluZ3Ncblx0XHR9KTtcblxuXHRcdGlmIChcblx0XHRcdCFpc1ZpZXdTZXR0aW5nc09mVHlwZTxDb21iaW5lZFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkNvbWJpbmVkKSAmJlxuXHRcdFx0cHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmxlbmd0aCA9PT0gMiAmJlxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgdmlldyA9IGNyZWF0ZUFscFZpZXcoW3ByZXNlbnRhdGlvbl0sIFwiYm90aFwiLCB2aWV3U2V0dGluZ3MpO1xuXHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc1ZpZXdTZXR0aW5nc09mVHlwZTxDb21iaW5lZFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkNvbWJpbmVkKSkge1xuXHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IHZpZXdTZXR0aW5ncztcblx0XHRcdGlmIChwcmltYXJ5Py5sZW5ndGggJiYgc2Vjb25kYXJ5Py5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmlldyA9IGNyZWF0ZUFscFZpZXcoXG5cdFx0XHRcdFx0W2dldEFscFByZXNlbnRhdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBwcmltYXJ5WzBdLCB0cnVlKSwgZ2V0QWxwUHJlc2VudGF0aW9uKGNvbnZlcnRlckNvbnRleHQsIHNlY29uZGFyeVswXSwgZmFsc2UpXSxcblx0XHRcdFx0XHR2aWV3U2V0dGluZ3MuZGVmYXVsdFBhdGgsXG5cdFx0XHRcdFx0dmlld1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSkpIHtcblx0XHRcdGNvbmZpZ3VyZU11bHRpVmlld3MocHJlc2VudGF0aW9uLCB2aWV3U2V0dGluZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gY3JlYXRlU2luZ2xlVmlzdWFsaXphdGlvblZpZXcoY29udmVydGVyQ29udGV4dCwgcHJlc2VudGF0aW9uLCB2aWV3U2V0dGluZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRDdXN0b21WaWV3KHZpZXdTZXR0aW5ncyk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCByZXBvcnQgdmlldyBkZWZpbml0aW9ucy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVkIGNvbnRleHRcbiAqIEBwYXJhbSBtdWx0aXBsZVZpZXdDb25maWcgVGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gcmVsYXRlZCBvZiB0aGUgbXVsdGkgdmlld3NcbiAqIEByZXR1cm5zIFRoZSAgZGVmaW5pdGlvbnNcbiAqL1xuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG11bHRpcGxlVmlld0NvbmZpZzogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWRcbik6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdIHtcblx0bGV0IHZpZXdDb252ZXJ0ZXJDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobXVsdGlwbGVWaWV3Q29uZmlnKSB7XG5cdFx0bXVsdGlwbGVWaWV3Q29uZmlnLnBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmIChtYW5pZmVzdFdyYXBwZXIuaXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uKHBhdGgpKSB7XG5cdFx0XHRcdGlmIChtdWx0aXBsZVZpZXdDb25maWcucGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmlld3NcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJpbWFyeTogcGF0aC5wcmltYXJ5LFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5OiBwYXRoLnNlY29uZGFyeSxcblx0XHRcdFx0XHRcdGRlZmF1bHRQYXRoOiBwYXRoLmRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0V3JhcHBlci5pc0N1c3RvbVZpZXdDb25maWd1cmF0aW9uKHBhdGgpKSB7XG5cdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0bGFiZWw6IHBhdGgubGFiZWwsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHBhdGgudGVtcGxhdGUsXG5cdFx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5DdXN0b20sXG5cdFx0XHRcdFx0dmlzaWJsZTogcGF0aC52aXNpYmxlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgdmlld0NvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRwYXRoLmNvbnRleHRQYXRoIHx8IChwYXRoLmVudGl0eVNldCAmJiBgLyR7cGF0aC5lbnRpdHlTZXR9YCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGxldCBhbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb247XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0XHRcdFx0XHQ/IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIHZpZXdDb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHQ6IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDogdGFyZ2V0QW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25WYXJpYW50ID8gdGFyZ2V0QW5ub3RhdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBwYXRoLnZpc2libGUsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuTXVsdGlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBjcmVhdGVBbHBWaWV3U2V0dGluZ3MoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkRlZmF1bHRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbnZlcnRlckNvbmZpZ3MubWFwKCh2aWV3Q29udmVydGVyQ29uZmlnKSA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcbmNvbnN0IGdldE11bHRpVmlld3NDb250cm9sID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW11cbik6IE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0aWYgKHZpZXdzLmxlbmd0aCA+IDEgJiYgIWhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hvd1RhYkNvdW50czogdmlld3NEZWZpbml0aW9uID8gdmlld3NEZWZpbml0aW9uPy5zaG93Q291bnRzIHx8IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKSA6IHVuZGVmaW5lZCwgLy8gd2l0aCBtdWx0aSBFbnRpdHlTZXRzLCB0YWIgY291bnRzIGFyZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdFxuXHRcdFx0aWQ6IGdldEljb25UYWJCYXJJRCgpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBzZXR0aW5ncyByZWxhdGVkIHRvIGFuIEFMUCB2aWV3LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIHZpZXdDb25maWdzIFRoZSBjb25maWdzIG9mIHRoZSBvdGhlciBsaXN0IHJlcG9ydCB2aWV3c1xuICogQHJldHVybnMgVGhlIGNvbmZpZ3Mgb2YgdGhlIGxpc3QgcmVwb3J0IHZpZXdzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFscFZpZXdTZXR0aW5ncyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10pOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRsZXQgY2hhcnQsIHRhYmxlO1xuXHRpZiAoYW5ub3RhdGlvbikge1xuXHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0YW5ub3RhdGlvbjogYW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkRlZmF1bHRcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjaGFydCA9IGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlKTtcblx0XHR0YWJsZSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoY2hhcnQgJiYgdGFibGUpIHtcblx0XHRcdGNvbnN0IHByaW1hcnkgPSBbeyBhbm5vdGF0aW9uUGF0aDogXCJAXCIgKyBjaGFydC50ZXJtIH1dO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5ID0gW3sgYW5ub3RhdGlvblBhdGg6IFwiQFwiICsgdGFibGUudGVybSB9XTtcblx0XHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRwcmltYXJ5OiBwcmltYXJ5LFxuXHRcdFx0XHRzZWNvbmRhcnk6IHNlY29uZGFyeSxcblx0XHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiLFxuXHRcdFx0XHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkNvbWJpbmVkXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQUxQIGZsYXZvciBuZWVkcyBib3RoIGNoYXJ0IGFuZCB0YWJsZSB0byBsb2FkIHRoZSBhcHBsaWNhdGlvblwiKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb25maWdzO1xufVxuZnVuY3Rpb24gaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzPEJhc2VBY3Rpb24+KFtdLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpLmFjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBmaWx0ZXJCYXJJZCBvbiB0aGUgc2NlbmFyaW8gd2l0aCBtdWx0aSBlbnRpdHkgc2V0cy5cbiAqXG4gKiBAcGFyYW0gdmlld3MgVGhlIGRlZmluaXRpb24gb2YgdGhlIGxpc3QgcmVwb3J0IHZpZXdzXG4gKiBAcGFyYW0gZmlsdGVyQmFySWRcbiAqL1xuY29uc3QgY2hlY2tDaGFydEZpbHRlckJhcklkID0gZnVuY3Rpb24gKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSwgZmlsdGVyQmFySWQ6IHN0cmluZyk6IHZvaWQge1xuXHR2aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0IWlzVmlld0RlZmluaXRpb25PZlR5cGU8Q3VzdG9tVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5DdXN0b20pICYmXG5cdFx0XHQhaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpXG5cdFx0KSB7XG5cdFx0XHR2aWV3LnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgJiYgdmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgIT09IGZpbHRlckJhcklkKSB7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgPSBmaWx0ZXJCYXJJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgTGlzdFJlcG9ydERlZmluaXRpb24gZm9yIG11bHRpcGxlIGVudGl0eSBzZXRzIChtdWx0aXBsZSB0YWJsZSBtb2RlKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCBkZWZpbml0aW9uIGJhc2VkIG9uIGFubm90YXRpb24gKyBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IExpc3RSZXBvcnREZWZpbml0aW9uIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGlmICghc0NvbnRleHRQYXRoKSB7XG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbnRpdHlTZXQgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGlzc3VlIEknZCBzYXlcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkFuIEVudGl0eVNldCBpcyByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgYSBMaXN0UmVwb3J0LCBwbGVhc2UgYWRqdXN0IHlvdXIgYGVudGl0eVNldGAgcHJvcGVydHkgdG8gcG9pbnQgdG8gb25lLlwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb24gPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaGFzTXVsdGlwbGVFbnRpdHlTZXRzID0gbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpO1xuXHRjb25zdCB2aWV3cyA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBsckNoYXJ0VmlzdWFsaXphdGlvbnMgPSBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3Qgc2hvd1Bpbm5hYmxlVG9nZ2xlID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zLnNvbWUoKHRhYmxlKSA9PiB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpO1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCI7XG5cdGxldCBzaW5nbGVDaGFydElkID0gXCJcIjtcblx0Y29uc3QgZHluYW1pY0xpc3RSZXBvcnRJZCA9IGdldER5bmFtaWNMaXN0UmVwb3J0SUQoKTtcblx0Y29uc3QgZmlsdGVyQmFySWQgPSBnZXRGaWx0ZXJCYXJJRChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRChmaWx0ZXJCYXJJZCk7XG5cdGNvbnN0IGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZmlsdGVySW5pdGlhbExheW91dCA9IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8uaW5pdGlhbExheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IGZpbHRlckxheW91dCA9IGZiQ29uZmlnPy5sYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5sYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCB1c2VTZW1hbnRpY0RhdGVSYW5nZSA9IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSA6IHRydWU7XG5cdGNvbnN0IHNob3dDbGVhckJ1dHRvbiA9IGZiQ29uZmlnLnNob3dDbGVhckJ1dHRvbiAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcuc2hvd0NsZWFyQnV0dG9uIDogZmFsc2U7XG5cdGNvbnN0IGNvbmZpZyA9IGdldENvbnRlbnRBcmVhSWQodmlld3MpO1xuXHRpZiAoY29uZmlnKSB7XG5cdFx0c2luZ2xlQ2hhcnRJZCA9IGNvbmZpZy5jaGFydElkO1xuXHRcdHNpbmdsZVRhYmxlSWQgPSBjb25maWcudGFibGVJZDtcblx0fVxuXHRjb25zdCB1c2VIaWRkZW5GaWx0ZXJCYXIgPSBtYW5pZmVzdFdyYXBwZXIudXNlSGlkZGVuRmlsdGVyQmFyKCk7XG5cdC8vIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG5cdC8vIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cblx0Y29uc3QgaGlkZUZpbHRlckJhciA9IChtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSB8fCB1c2VIaWRkZW5GaWx0ZXJCYXIpICYmIHNpbmdsZUNoYXJ0SWQgPT09IFwiXCI7XG5cdGNvbnN0IGxyRmlsdGVyUHJvcGVydGllcyA9IGdldFNlbGVjdGlvbkZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0LCBsclRhYmxlVmlzdWFsaXphdGlvbnMpO1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBsckZpbHRlclByb3BlcnRpZXMuc2VsZWN0aW9uRmllbGRzO1xuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHMgPSBsckZpbHRlclByb3BlcnRpZXMuc1Byb3BlcnR5SW5mbztcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoKGxyVGFibGVWaXN1YWxpemF0aW9ucywgbHJDaGFydFZpc3VhbGl6YXRpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbXVsdGlWaWV3Q29udHJvbCA9IGdldE11bHRpVmlld3NDb250cm9sKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IG11bHRpVmlld0NvbnRyb2wgPyB1bmRlZmluZWQgOiBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IHVzZVNlbWFudGljRGF0ZVJhbmdlID8gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMoZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCkpIDoge307XG5cdC8vIFNvcnQgaGVhZGVyIGFjdGlvbnMgYWNjb3JkaW5nIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZXMgaW4gbWFuaWZlc3Rcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChoYXNNdWx0aXBsZUVudGl0eVNldHMpIHtcblx0XHRjaGVja0NoYXJ0RmlsdGVyQmFySWQodmlld3MsIGZpbHRlckJhcklkKTtcblx0fVxuXHRjb25zdCB2aXN1YWxpemF0aW9uSWRzID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zXG5cdFx0Lm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHR9KVxuXHRcdC5jb25jYXQoXG5cdFx0XHRsckNoYXJ0VmlzdWFsaXphdGlvbnMubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmlkO1xuXHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBtdWx0aURpbWVuc2lvbmFsR3JpZElkcyA9IGdldE11bHRpRGltZW5zaW9uYWxHcmlkSWRzKHZpZXdzKTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gW10gOiBbZmlsdGVyQmFySWRdKSxcblx0XHQuLi4obWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkgIT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdmlzdWFsaXphdGlvbklkcyA6IFtdKSxcblx0XHQuLi4obXVsdGlWaWV3Q29udHJvbCA/IFttdWx0aVZpZXdDb250cm9sLmlkXSA6IFtdKSxcblx0XHQuLi4obXVsdGlEaW1lbnNpb25hbEdyaWRJZHMudmFyaWFudE1hbmFnZW1lbnRJZCA/IFttdWx0aURpbWVuc2lvbmFsR3JpZElkcy52YXJpYW50TWFuYWdlbWVudElkXSA6IFtdKVxuXHRdO1xuXHRjb25zdCBzdGlja3lTdWJoZWFkZXJQcm92aWRlciA9XG5cdFx0bXVsdGlWaWV3Q29udHJvbCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBtdWx0aVZpZXdDb250cm9sLmlkIDogdW5kZWZpbmVkO1xuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogYCR7c0NvbnRleHRQYXRofS9gLFxuXHRcdG11bHRpVmlld3NDb250cm9sOiBtdWx0aVZpZXdDb250cm9sLFxuXHRcdHN0aWNreVN1YmhlYWRlclByb3ZpZGVyLFxuXHRcdHNpbmdsZVRhYmxlSWQsXG5cdFx0c2luZ2xlQ2hhcnRJZCxcblx0XHRtdWx0aURpbWVuc2lvbmFsR3JpZElkcyxcblx0XHRkeW5hbWljTGlzdFJlcG9ydElkLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRwcm9wZXJ0eUluZm86IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaCxcblx0XHRcdHNob3dDbGVhckJ1dHRvblxuXHRcdH0sXG5cdFx0dmlld3M6IHZpZXdzLFxuXHRcdGZpbHRlckJhcklkOiBoaWRlRmlsdGVyQmFyICYmICF1c2VIaWRkZW5GaWx0ZXJCYXIgPyBcIlwiIDogZmlsdGVyQmFySWQsXG5cdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBkZWZhdWx0U2VtYW50aWNEYXRlc1xuXHRcdH0sXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHtcblx0XHRcdGlkOiBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELFxuXHRcdFx0dGFyZ2V0Q29udHJvbElkczogdGFyZ2V0Q29udHJvbElkcy5qb2luKFwiLFwiKVxuXHRcdH0sXG5cdFx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0ZW1wbGF0ZVR5cGU6IG1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKSxcblx0XHR1c2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRmaWx0ZXJJbml0aWFsTGF5b3V0LFxuXHRcdGZpbHRlckxheW91dCxcblx0XHRrcGlEZWZpbml0aW9uczogZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0aGlkZUZpbHRlckJhcixcblx0XHR1c2VIaWRkZW5GaWx0ZXJCYXJcblx0fTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgY29udGVudCBhcmVhIGlkcyBvZiB0aGUgbGlzdCByZXBvcnQuXG4gKlxuICogQHBhcmFtIHZpZXdzIFRoZSBkZWZpbml0aW9ucyBvZiB0aGUgbGlzdCByZXBvcnQgdmlld3NcbiAqIEByZXR1cm5zIFRoZSBjb250ZW50IGFyZWEgaWRzXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNpbmdsZVRhYmxlSWQgPVxuXHRcdFx0dmlld3MuZmluZChcblx0XHRcdFx0KHZpZXcpOiB2aWV3IGlzIENvbWJpbmVkVmlld0RlZmluaXRpb24gfCBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0+XG5cdFx0XHRcdFx0KGlzVmlld0RlZmluaXRpb25PZlR5cGU8Q29tYmluZWRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkKSB8fFxuXHRcdFx0XHRcdFx0aXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlVGFibGUpKSAmJlxuXHRcdFx0XHRcdCEhdmlldy50YWJsZUNvbnRyb2xJZFxuXHRcdFx0KT8udGFibGVDb250cm9sSWQgPz8gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID1cblx0XHRcdHZpZXdzLmZpbmQoXG5cdFx0XHRcdCh2aWV3KTogdmlldyBpcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbiA9PlxuXHRcdFx0XHRcdChpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZCkgfHxcblx0XHRcdFx0XHRcdGlzVmlld0RlZmluaXRpb25PZlR5cGU8U2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZUNoYXJ0KSkgJiZcblx0XHRcdFx0XHQhIXZpZXcuY2hhcnRDb250cm9sSWRcblx0XHRcdCk/LmNoYXJ0Q29udHJvbElkID8/IFwiXCI7XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIElEcyBvZiB0aGUgc2luZ2xlIE11bHRpRGltZW5zaW9uYWxHcmlkIGluIHRoZSBsaXN0IHJlcG9ydCwgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB2aWV3c1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGdyaWQgSUQgYW5kIHRoZSBncmlkIHZhcmlhbnQgbWFuYWdlbWVudCBJRC5cbiAqL1xuZnVuY3Rpb24gZ2V0TXVsdGlEaW1lbnNpb25hbEdyaWRJZHModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogUGFydGlhbDx7IGlkOiBzdHJpbmc7IHZhcmlhbnRNYW5hZ2VtZW50SWQ6IHN0cmluZyB9PiB7XG5cdGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xuXHRcdGNvbnN0IGdyaWRWaXN1YWxpemF0aW9uID0gaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpXG5cdFx0XHQ/IHZpZXcucHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnM/LlswXVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGdyaWRWaXN1YWxpemF0aW9uPy50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5NdWx0aURpbWVuc2lvbmFsR3JpZCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6IGdyaWRWaXN1YWxpemF0aW9uLmlkLFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudElkOiBncmlkVmlzdWFsaXphdGlvbi52YXJpYW50TWFuYWdlbWVudElkXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdGlkOiB1bmRlZmluZWQsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnRJZDogdW5kZWZpbmVkXG5cdH07XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNERLQSxnQkFBZ0I7RUFBQSxXQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7RUFBQSxHQUFoQkEsZ0JBQWdCLEtBQWhCQSxnQkFBZ0I7RUFBQSxJQW9GaEJDLGtCQUFrQjtFQUFBLFdBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtFQUFBLEdBQWxCQSxrQkFBa0IsS0FBbEJBLGtCQUFrQjtFQStDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxVQUM1QkMscUJBQTRDLEVBQzVDQyxJQUFlLEVBQ2M7SUFDN0IsT0FBT0QscUJBQXFCLENBQUNDLElBQUksS0FBS0EsSUFBSTtFQUMzQyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsVUFDOUJDLHVCQUFpRCxFQUNqREYsSUFBbUIsRUFDWTtJQUMvQixPQUFPRSx1QkFBdUIsQ0FBQ0MsUUFBUSxLQUFLSCxJQUFJO0VBQ2pELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0ksc0JBQXNCLENBQUNDLEtBQWlDLEVB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
731
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaWV3U2V0dGluZ3NUeXBlIiwiVmlld0RlZmluaXRpb25UeXBlIiwiaXNWaWV3U2V0dGluZ3NPZlR5cGUiLCJwb3RlbnRpYWxWaWV3U2V0dGluZ3MiLCJ0eXBlIiwiaXNWaWV3RGVmaW5pdGlvbk9mVHlwZSIsInBvdGVudGlhbFZpZXdEZWZpbml0aW9uIiwidmlld1R5cGUiLCJnZXRUYWJsZVZpc3VhbGl6YXRpb25zIiwidmlld3MiLCJ0YWJsZXMiLCJmb3JFYWNoIiwidmlldyIsIkN1c3RvbSIsInZpc3VhbGl6YXRpb25zIiwiQ29tYmluZWQiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNBTFAiLCJhbm5vdGF0aW9uUGF0aCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJlcnJvck1lc3NhZ2VGb3JBTFAiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJ1bmRlZmluZWQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsImFubm90YXRpb25zIiwiVUkiLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJjcmVhdGVBbHBWaWV3IiwicHJlc2VudGF0aW9ucyIsImRlZmF1bHRQYXRoIiwidmlld1NldHRpbmdzIiwiY3JlYXRlQWxwVmlzdWFsaXphdGlvbiIsInRhYmxlQ29udHJvbElkIiwiYW5ub3RhdGlvbiIsImlkIiwiY2hhcnRDb250cm9sSWQiLCJ2aXNpYmxlIiwiTXVsdGkiLCJjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyIsInRhYmxlSWQiLCJnZXRWaWV3Q29udHJvbCIsImJhc2VTZXR0aW5ncyIsInRpdGxlIiwiZ2V0Vmlld1RpdGxlIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCIsIlNpbmdsZVRhYmxlIiwiU2luZ2xlQ2hhcnQiLCJpc1ByaW1hcnkiLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJmaW5kIiwibXVsdGlEaW1lbnNpb25hbFZpc3VhbGl6YXRpb24iLCJNdWx0aURpbWVuc2lvbmFsR3JpZCIsIm1lc3NhZ2VJbmZvIiwiZ2V0QWxwUHJlc2VudGF0aW9uIiwiaXRlbSIsImlzTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbiIsImdldE11bHRpRGltZW5zaW9uYWxHcmlkVmlzdWFsaXphdGlvbiIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldEVudGl0eVR5cGUiLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwiY29uZmlndXJlTXVsdGlWaWV3cyIsImZpbHRlcnMiLCJjb250cm9sIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwia2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uIiwiZ2V0VGFibGVJRCIsImtleSIsImdldENoYXJ0SUQiLCJtdWx0aVZpZXdzIiwiZ2V0Q3VzdG9tVmlldyIsImxhYmVsIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImN1c3RvbVRhYklkIiwiZ2V0Q3VzdG9tVGFiSUQiLCJ2aXN1YWxpemF0aW9uVHlwZSIsInZpZXdBbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJUZXh0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNwbGl0IiwiZ2V0Vmlld1Zpc3VhbGl6YXRpb25QYXRoIiwiZ2V0VmlldyIsIm11bHRpVmlld1NldHRpbmdzIiwiYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiaXNNYWNyb09yTXVsdGlwbGVWaWV3IiwicHJpbWFyeSIsInNlY29uZGFyeSIsImdldFZpZXdzIiwibXVsdGlwbGVWaWV3Q29uZmlnIiwidmlld0NvbnZlcnRlckNvbmZpZ3MiLCJtYW5pZmVzdFdyYXBwZXIiLCJwYXRoIiwiaXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uIiwiaXNDdXN0b21WaWV3Q29uZmlndXJhdGlvbiIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJ0ZXJtIiwiY3JlYXRlQWxwVmlld1NldHRpbmdzIiwiRGVmYXVsdCIsIm1hcCIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJnZXRNdWx0aVZpZXdzQ29udHJvbCIsInZpZXdzRGVmaW5pdGlvbiIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwiZ2V0SWNvblRhYkJhcklEIiwidmlld0NvbmZpZ3MiLCJjaGFydCIsInRhYmxlIiwiZ2V0RGVmYXVsdENoYXJ0IiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJhY3Rpb25zIiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJsckNoYXJ0VmlzdWFsaXphdGlvbnMiLCJzaG93UGlubmFibGVUb2dnbGUiLCJzb21lIiwic2luZ2xlVGFibGVJZCIsInNpbmdsZUNoYXJ0SWQiLCJkeW5hbWljTGlzdFJlcG9ydElkIiwiZ2V0RHluYW1pY0xpc3RSZXBvcnRJRCIsImdldEZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzaG93Q2xlYXJCdXR0b24iLCJjb25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInVzZUhpZGRlbkZpbHRlckJhciIsImhpZGVGaWx0ZXJCYXIiLCJpc0ZpbHRlckJhckhpZGRlbiIsImxyRmlsdGVyUHJvcGVydGllcyIsImdldFNlbGVjdGlvbkZpZWxkcyIsInNlbGVjdGlvbkZpZWxkcyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInNQcm9wZXJ0eUluZm8iLCJoaWRlQmFzaWNTZWFyY2giLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJtdWx0aVZpZXdDb250cm9sIiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGVhZGVyQWN0aW9ucyIsInZpc3VhbGl6YXRpb25JZHMiLCJjb25jYXQiLCJtdWx0aURpbWVuc2lvbmFsR3JpZElkcyIsImdldE11bHRpRGltZW5zaW9uYWxHcmlkSWRzIiwidGFyZ2V0Q29udHJvbElkcyIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJzdGlja3lTdWJoZWFkZXJQcm92aWRlciIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsIm9ubHlUcmVlVGFibGVzT25NYWluRW50aXR5U2V0IiwiZXZlcnkiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJjb2xsZWN0aW9uIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwibXVsdGlWaWV3c0NvbnRyb2wiLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm8iLCJkaXNhYmxlRHJhZnRFZGl0U3RhdGVGaWx0ZXIiLCJmaWx0ZXJDb25kaXRpb25zIiwidmFyaWFudE1hbmFnZW1lbnQiLCJqb2luIiwidGVtcGxhdGVUeXBlIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyIsImdyaWRWaXN1YWxpemF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQsIEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7XG5cdGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCxcblx0Z2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMsXG5cdGdldFNlbGVjdGlvbkZpZWxkc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29tYmluZWRWaWV3RGVmYXVsdFBhdGgsXG5cdERlZmF1bHRPcGVyYXRvcixcblx0TXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlLCBWYXJpYW50TWFuYWdlbWVudFR5cGUsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBNdWx0aURpbWVuc2lvbmFsR3JpZFZpc3VhbGl6YXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXRNdWx0aURpbWVuc2lvbmFsR3JpZFZpc3VhbGl6YXRpb24sXG5cdGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdGdldFNlbGVjdGlvblZhcmlhbnQsXG5cdGlzUHJlc2VudGF0aW9uQ29tcGxpYW50LFxuXHRpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudFxufSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEtQSURlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHsgZ2V0S1BJRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHtcblx0Z2V0Q2hhcnRJRCxcblx0Z2V0Q3VzdG9tVGFiSUQsXG5cdGdldER5bmFtaWNMaXN0UmVwb3J0SUQsXG5cdGdldEZpbHRlckJhcklELFxuXHRnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELFxuXHRnZXRJY29uVGFiQmFySUQsXG5cdGdldFRhYmxlSURcbn0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcblxudHlwZSBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRhcmdldENvbnRyb2xJZHM6IHN0cmluZztcbn07XG5cbmVudW0gVmlld1NldHRpbmdzVHlwZSB7XG5cdE11bHRpID0gXCJNdWx0aVwiLFxuXHRDb21iaW5lZCA9IFwiQ29tYmluZWRcIixcblx0Q3VzdG9tID0gXCJDdXN0b21cIixcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiXG59XG5cbnR5cGUgQ29tYmluZWRWaWV3U2V0dGluZ3MgPSB7XG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pjtcblx0cHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gfCBbTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbl07XG5cdHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gfCBbTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbl07XG5cdGRlZmF1bHRQYXRoPzogQ29tYmluZWRWaWV3RGVmYXVsdFBhdGg7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQ7XG59O1xudHlwZSBDdXN0b21WaWV3U2V0dGluZ3MgPSB7XG5cdGtleT86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ3VzdG9tO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3MgPSB7XG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pjtcblx0c2VsZWN0aW9uVmFyaWFudD86IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRhbm5vdGF0aW9uPzogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IENoYXJ0O1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24/OiBib29sZWFuO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuTXVsdGk7XG59O1xudHlwZSBEZWZhdWx0Vmlld1NldHRpbmdzID0ge1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD47XG5cdGFubm90YXRpb24/OiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkRlZmF1bHQ7XG59O1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IERlZmF1bHRWaWV3U2V0dGluZ3MgfCBDb21iaW5lZFZpZXdTZXR0aW5ncyB8IE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncyB8IEN1c3RvbVZpZXdTZXR0aW5ncztcblxudHlwZSBEZWZhdWx0U2VtYW50aWNEYXRlID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xufTtcbnR5cGUgTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRzaG93VGFiQ291bnRzPzogYm9vbGVhbjtcbn07XG50eXBlIExyVmlzdWFsaXphdGlvblR5cGU8VD4gPSBUIGV4dGVuZHMgVmlzdWFsaXphdGlvblR5cGUuVGFibGUgPyBUYWJsZVZpc3VhbGl6YXRpb24gfCB1bmRlZmluZWQgOiBDaGFydFZpc3VhbGl6YXRpb24gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0bXVsdGlEaW1lbnNpb25hbEdyaWRJZHM6IHsgaWQ/OiBzdHJpbmc7IHZhcmlhbnRNYW5hZ2VtZW50SWQ/OiBzdHJpbmcgfTtcblx0ZHluYW1pY0xpc3RSZXBvcnRJZDogc3RyaW5nO1xuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0bXVsdGlWaWV3c0NvbnRyb2w/OiBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb247IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBzdHJpbmc7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0XHRzaG93Q2xlYXJCdXR0b24/OiBib29sZWFuO1xuXHRcdGRpc2FibGVEcmFmdEVkaXRTdGF0ZUZpbHRlcjogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRTZW1hbnRpY0RhdGU+IHwge307XG5cdH07XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcblx0aGlkZUZpbHRlckJhcjogYm9vbGVhbjtcblx0dXNlSGlkZGVuRmlsdGVyQmFyOiBib29sZWFuO1xufTtcbnR5cGUgTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uID0gU2luZ2xlVmlld0RlZmluaXRpb24gfCBDdXN0b21WaWV3RGVmaW5pdGlvbiB8IENvbWJpbmVkVmlld0RlZmluaXRpb247XG5cbmVudW0gVmlld0RlZmluaXRpb25UeXBlIHtcblx0U2luZ2xlVGFibGUgPSBcIlNpbmdsZVRhYmxlXCIsXG5cdFNpbmdsZUNoYXJ0ID0gXCJTaW5nbGVDaGFydFwiLFxuXHRDb21iaW5lZCA9IFwiQ29tYmluZWRcIixcblx0Q3VzdG9tID0gXCJDdXN0b21cIlxufVxuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQ7XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZVZpZXdEZWZpbml0aW9uID0gU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiB8IFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb247XG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlVGFibGU7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0Y2hhcnRDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlQ2hhcnQ7XG59O1xuXG50eXBlIENvbnRlbnRBcmVhSUQgPSB7XG5cdGNoYXJ0SWQ6IHN0cmluZztcblx0dGFibGVJZDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZpZXcgc2V0dGluZ3MgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcG90ZW50aWFsVmlld1NldHRpbmdzIFRoZSB2aWV3IHNldHRpbmdzXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSB0byBtYXRjaFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2aWV3IHNldHRpbmdzIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGVcbiAqL1xuY29uc3QgaXNWaWV3U2V0dGluZ3NPZlR5cGUgPSBmdW5jdGlvbiA8VCBleHRlbmRzIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncz4oXG5cdHBvdGVudGlhbFZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzLFxuXHR0eXBlOiBUW1widHlwZVwiXVxuKTogcG90ZW50aWFsVmlld1NldHRpbmdzIGlzIFQge1xuXHRyZXR1cm4gcG90ZW50aWFsVmlld1NldHRpbmdzLnR5cGUgPT09IHR5cGU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldyBkZWZpbml0aW9uIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGUuXG4gKlxuICogQHBhcmFtIHBvdGVudGlhbFZpZXdEZWZpbml0aW9uIFRoZSB2aWV3IGRlZmluaXRpb25cbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIHRvIG1hdGNoXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZpZXcgZGVmaW5pdGlvbiBtYXRjaGVzIHRoZSBwcm92aWRlZCB0eXBlXG4gKi9cbmNvbnN0IGlzVmlld0RlZmluaXRpb25PZlR5cGUgPSBmdW5jdGlvbiA8VCBleHRlbmRzIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbj4oXG5cdHBvdGVudGlhbFZpZXdEZWZpbml0aW9uOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24sXG5cdHR5cGU6IFRbXCJ2aWV3VHlwZVwiXVxuKTogcG90ZW50aWFsVmlld0RlZmluaXRpb24gaXMgVCB7XG5cdHJldHVybiBwb3RlbnRpYWxWaWV3RGVmaW5pdGlvbi52aWV3VHlwZSA9PT0gdHlwZTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCFpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPEN1c3RvbVZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tKSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSBpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZClcblx0XHRcdFx0PyB2aWV3LnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiB2aWV3LnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpc3QgcmVwb3J0IGNoYXJ0cy5cbiAqXG4gKiBAcGFyYW0gdmlld3MgVGhlIGxpc3QgcmVwb3J0IHZpZXdzIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgY2hhcnRzXG4gKi9cbmZ1bmN0aW9uIGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ2hhcnRWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCBjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHtcblx0XHRpZiAoIWlzVmlld0RlZmluaXRpb25PZlR5cGU8Q3VzdG9tVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5DdXN0b20pKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9IGlzVmlld0RlZmluaXRpb25PZlR5cGU8Q29tYmluZWRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkKVxuXHRcdFx0XHQ/IHZpZXcucHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiB2aWV3LnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRPcGVyYXRvcltdIHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0T3BlcmF0b3JbXSB8IHVuZGVmaW5lZD4gPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGlzQUxQXG4gKiBAcmV0dXJucyBBIGNvbXBsaWFudCBhbm5vdGF0aW9uIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGlzQUxQOiBib29sZWFuXG4pOiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZXJyb3JNZXNzYWdlRm9yQUxQID0gXCJBTFAgZmxhdm9yIG5lZWRzIGJvdGggY2hhcnQgYW5kIHRhYmxlIHRvIGxvYWQgdGhlIGFwcGxpY2F0aW9uXCI7XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHRcdH1cblx0XHRcdGlmICghaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudCwgaXNBTFApKSB7XG5cdFx0XHRcdGlmIChpc0FMUCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VGb3JBTFApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBpc0FMUCkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH0gZWxzZSBpZiAoaXNBTFApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VGb3JBTFApO1xuXHRcdH1cblx0fVxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fSBlbHNlIGlmIChpc0FMUCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZUZvckFMUCk7XG5cdFx0fVxuXHR9XG5cdGlmICghaXNBTFApIHtcblx0XHRyZXR1cm4gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdmlldyBmb3IgdGhlIGFuYWx5dGljYWwgbGlzdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25zIFRoZSBkYXRhIHZpc3VhbGl6YXRpb25zIHRvIGNvbmZpZ3VyZVxuICogQHBhcmFtIGRlZmF1bHRQYXRoIFRoZSBkZWZhdWx0IHBhdGggb2YgdGhlIHBhZ2VcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgQUxQIHZpZXcgZGVmaW5pdGlvblxuICovXG5jb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24gKFxuXHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0ZGVmYXVsdFBhdGg6IENvbWJpbmVkVmlld0RlZmF1bHRQYXRoIHwgdW5kZWZpbmVkLFxuXHR2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1xuKTogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHByaW1hcnlWaXN1YWxpemF0aW9uID0gY3JlYXRlQWxwVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0Y29uc3Qgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbiA9IGNyZWF0ZUFscFZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1sxXSA/IHByZXNlbnRhdGlvbnNbMV0gOiBwcmVzZW50YXRpb25zWzBdLCBmYWxzZSk7XG5cdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdHByaW1hcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkOlxuXHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zWzBdPy50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZVxuXHRcdFx0XHRcdD8gc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXS5hbm5vdGF0aW9uPy5pZFxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdGNoYXJ0Q29udHJvbElkOlxuXHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXT8udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgPyBwcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXS5pZCA6IFwiXCIsXG5cdFx0XHRkZWZhdWx0UGF0aCxcblx0XHRcdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQsXG5cdFx0XHR2aXNpYmxlOiBpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSkgPyB2aWV3U2V0dGluZ3MudmlzaWJsZSA6IHVuZGVmaW5lZFxuXHRcdH07XG5cdFx0cmV0dXJuIHZpZXc7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdmlzdWFsaXphdGlvbnMgZm9yIGEgc2luZ2xlIHZpc3VhbGl6YXRpb24gdmlldy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVkIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiB0byBjb25maWd1cmVcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgQUxQIHZpc3VhbGl6YXRpb24gZGVmaW5pdGlvblxuICovXG5jb25zdCBjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbixcblx0dmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3Ncbik6IFNpbmdsZVZpZXdEZWZpbml0aW9uIHtcblx0Y29uc3QgdGFibGVJZCA9IGdldFZpZXdDb250cm9sKHByZXNlbnRhdGlvbiwgVmlzdWFsaXphdGlvblR5cGUuVGFibGUpPy5hbm5vdGF0aW9uLmlkO1xuXHRjb25zdCBiYXNlU2V0dGluZ3MgPSB7XG5cdFx0cHJlc2VudGF0aW9uLFxuXHRcdHRpdGxlOiBnZXRWaWV3VGl0bGUoY29udmVydGVyQ29udGV4dCwgdmlld1NldHRpbmdzKSxcblx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aDogZ2V0Vmlld1NlbGVjdGlvblZhcmlhbnQodmlld1NldHRpbmdzKSxcblx0XHR2aXNpYmxlOiBpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSkgPyB2aWV3U2V0dGluZ3MudmlzaWJsZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAodGFibGVJZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5iYXNlU2V0dGluZ3MsXG5cdFx0XHQuLi57XG5cdFx0XHRcdHRhYmxlQ29udHJvbElkOiB0YWJsZUlkLFxuXHRcdFx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZVRhYmxlXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdC4uLmJhc2VTZXR0aW5ncyxcblx0XHQuLi57XG5cdFx0XHRjaGFydENvbnRyb2xJZDogZ2V0Vmlld0NvbnRyb2wocHJlc2VudGF0aW9uLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCk/LmlkLFxuXHRcdFx0dmlld1R5cGU6IFZpZXdEZWZpbml0aW9uVHlwZS5TaW5nbGVDaGFydFxuXHRcdH1cblx0fTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdmlzdWFsaXphdGlvbnMgZm9yIHRoZSBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uIFRoZSBwcmVzZW50YXRpb24gdG8gY29uZmlndXJlXG4gKiBAcGFyYW0gaXNQcmltYXJ5IElzIGEgcHJpbWFyeSBwcmVzZW50YXRpb25cbiAqIEByZXR1cm5zIFRoZSBBTFAgdmlzdWFsaXphdGlvbiBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGNyZWF0ZUFscFZpc3VhbGl6YXRpb24gPSBmdW5jdGlvbiAocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24ge1xuXHRjb25zdCBwcmVzZW50YXRpb25DcmVhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgcHJlc2VudGF0aW9uKTtcblx0Y29uc3QgZGVmYXVsdFZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZmluZChcblx0XHQodmlzdWFsaXphdGlvbik6IHZpc3VhbGl6YXRpb24gaXMgVGFibGVWaXN1YWxpemF0aW9uIHwgQ2hhcnRWaXN1YWxpemF0aW9uID0+XG5cdFx0XHQoISFpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkgfHxcblx0XHRcdCghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpXG5cdCk7XG5cdGNvbnN0IG11bHRpRGltZW5zaW9uYWxWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZpbmQoXG5cdFx0KHZpc3VhbGl6YXRpb24pOiB2aXN1YWxpemF0aW9uIGlzIE11bHRpRGltZW5zaW9uYWxHcmlkVmlzdWFsaXphdGlvbiA9PlxuXHRcdFx0ISFpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5NdWx0aURpbWVuc2lvbmFsR3JpZFxuXHQpO1xuXG5cdGlmIChkZWZhdWx0VmlzdWFsaXphdGlvbikge1xuXHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHR9IGVsc2UgaWYgKG11bHRpRGltZW5zaW9uYWxWaXN1YWxpemF0aW9uKSB7XG5cdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFttdWx0aURpbWVuc2lvbmFsVmlzdWFsaXphdGlvbl07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVGhlIHByaW1hcnkgdmlzdWFsaXphdGlvbiBjb3VsZCBhbHNvIGJlIGEgTXVsdGlEaW1lbnNpb25hbEdyaWQsIGJ1dCBhcyB0aGlzIGZlYXR1cmUgaXMgbm90IHlldCByZWxlYXNlZCwgd2UgZG8gbm90IG1lbnRpb24gaXQgaGVyZVxuXHRcdGNvbnN0IG1lc3NhZ2VJbmZvID0gaXNQcmltYXJ5ID8geyB2aXN1YWxpemF0aW9uOiBcIlByaW1hcnlcIiwgdHlwZTogXCJjaGFydFwiIH0gOiB7IHZpc3VhbGl6YXRpb246IFwiU2Vjb25kYXJ5XCIsIHR5cGU6IFwidGFibGVcIiB9O1xuXHRcdHRocm93IG5ldyBFcnJvcihgJHttZXNzYWdlSW5mby52aXN1YWxpemF0aW9ufSB2aXN1YWxpemF0aW9uIG5lZWRzIHZhbGlkICR7bWVzc2FnZUluZm8udHlwZX1gKTtcblx0fVxuXHRyZXR1cm4gcHJlc2VudGF0aW9uQ3JlYXRlZDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJlc2VudGF0aW9uIG9mIHRoZSBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVkIGNvbnRleHRcbiAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBpc1ByaW1hcnkgSXMgYSBwcmltYXJ5IHByZXNlbnRhdGlvblxuICogQHJldHVybnMgVGhlIEFMUCBwcmVzZW50YXRpb24gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRBbHBQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uIHwgTXVsdGlEaW1lbnNpb25hbEdyaWRWaWV3Q29uZmlndXJhdGlvbixcblx0aXNQcmltYXJ5OiBib29sZWFuXG4pOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24ge1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc011bHRpRGltZW5zaW9uYWxHcmlkVmlld0NvbmZpZ3VyYXRpb24oaXRlbSkpIHtcblx0XHRyZXR1cm4gZ2V0TXVsdGlEaW1lbnNpb25hbEdyaWRWaXN1YWxpemF0aW9uKGl0ZW0pO1xuXHR9XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb247XG5cdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRjb25zdCBhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0aWYgKGFubm90YXRpb24gfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdHJldHVybiBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRhbm5vdGF0aW9uID8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgOiBcIlwiLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHtcblx0XHRcdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEFubm90YXRpb24gUGF0aCBmb3IgdGhlICR7aXNQcmltYXJ5ID8gXCJwcmltYXJ5XCIgOiBcInNlY29uZGFyeVwifSB2aXN1YWxpemF0aW9uIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kYFxuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgbXVsdGkgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYWRkaXRpb25hbCBrZXlzLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiB0byBjb25maWd1cmVcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKi9cbmNvbnN0IGNvbmZpZ3VyZU11bHRpVmlld3MgPSBmdW5jdGlvbiAocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIHZpZXdTZXR0aW5nczogTXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzKTogdm9pZCB7XG5cdC8vIE5lZWQgdG8gbG9vcCBvbiB0YWJsZSBpbnRvIHZpZXdzIHNpbmNlIG11bHRpIHRhYmxlIG1vZGUgZ2V0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKGhpZGRlbiBmaWx0ZXJzIG9yIFRhYmxlIElkKVxuXHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uLnR5cGUpIHtcblx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyB8fCB7fTtcblx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdGlmICghdmlld1NldHRpbmdzLmtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRcdC8vIE5lZWQgdG8gb3ZlcnJpZGUgVGFibGUgSWQgdG8gbWF0Y2ggd2l0aCBUYWIgS2V5IChjdXJyZW50bHkgb25seSB0YWJsZSBpcyBtYW5hZ2VkIGluIG11bHRpcGxlIHZpZXcgbW9kZSlcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQgPSBnZXRUYWJsZUlEKHZpZXdTZXR0aW5ncy5rZXkgPz8gXCJcIiwgXCJMaW5lSXRlbVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ6XG5cdFx0XHRcdHZpc3VhbGl6YXRpb24uaWQgPSBnZXRDaGFydElEKHZpZXdTZXR0aW5ncy5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0dmlzdWFsaXphdGlvbi5tdWx0aVZpZXdzID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgY3VzdG9tIHZpZXcgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIGN1c3RvbSB2aWV3IGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q3VzdG9tVmlldyA9IGZ1bmN0aW9uICh2aWV3U2V0dGluZ3M6IEN1c3RvbVZpZXdTZXR0aW5ncyk6IEN1c3RvbVZpZXdEZWZpbml0aW9uIHtcblx0cmV0dXJuIHtcblx0XHR0aXRsZTogdmlld1NldHRpbmdzLmxhYmVsLFxuXHRcdGZyYWdtZW50OiB2aWV3U2V0dGluZ3MudGVtcGxhdGUsXG5cdFx0dHlwZTogdmlld1NldHRpbmdzLnR5cGUsXG5cdFx0Y3VzdG9tVGFiSWQ6IGdldEN1c3RvbVRhYklEKHZpZXdTZXR0aW5ncy5rZXkgPz8gXCJcIiksXG5cdFx0dmlzaWJsZTogdmlld1NldHRpbmdzLnZpc2libGUsXG5cdFx0dmlld1R5cGU6IFZpZXdEZWZpbml0aW9uVHlwZS5DdXN0b21cblx0fTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBjb250cm9sIG9mIHRoZSB2aWV3LlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgdmlld1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSB2aXN1YWxpemF0aW9uIHRvIGZpbmRcbiAqIEByZXR1cm5zIFRoZSB2aXN1YWxpemF0aW9uIGlmIHRoZSB0eXBlIG1hdGNoZXMsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuY29uc3QgZ2V0Vmlld0NvbnRyb2wgPSBmdW5jdGlvbiA8VCBleHRlbmRzIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlIHwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ+KFxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbixcblx0dmlzdWFsaXphdGlvblR5cGU6IFRcbik6IExyVmlzdWFsaXphdGlvblR5cGU8VD4ge1xuXHRyZXR1cm4gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZpbmQoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb24udHlwZSA9PT0gdmlzdWFsaXphdGlvblR5cGUpIGFzIExyVmlzdWFsaXphdGlvblR5cGU8VD47XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHRpdGxlIG9mIHRoZSB2aWV3LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSB0aXRsZVxuICovXG5jb25zdCBnZXRWaWV3VGl0bGUgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3Ncbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSkge1xuXHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbih2aWV3U2V0dGluZ3MuYW5ub3RhdGlvblBhdGgpLmFubm90YXRpb24gYXNcblx0XHRcdHwgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0fCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmVkIFNlbGVjdGlvblZhcmlhbnQgIG9mIHRoZSB2aWV3LlxuICpcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgU2VsZWN0aW9uVmFyaWFudCBpZiB0aGVyZSBpcyBvbmUsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuY29uc3QgZ2V0Vmlld1NlbGVjdGlvblZhcmlhbnQgPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpKSB7XG5cdFx0cmV0dXJuIHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uICYmXG5cdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4odmlld1NldHRpbmdzLmFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKVxuXHRcdFx0PyBgQCR7dmlld1NldHRpbmdzLmFubm90YXRpb24uU2VsZWN0aW9uVmFyaWFudD8uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVsxXX1gXG5cdFx0XHQ6IHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uUGF0aDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2aXN1YWxpemF0aW9uIHBhdGggb2YgdGhlIHZpZXcuXG4gKlxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBTZWxlY3Rpb25WYXJpYW50IGlmIHRoZXJlIGlzIG9uZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5jb25zdCBnZXRWaWV3VmlzdWFsaXphdGlvblBhdGggPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBzdHJpbmcge1xuXHRpZiAoIWlzVmlld1NldHRpbmdzT2ZUeXBlPEN1c3RvbVZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkN1c3RvbSkpIHtcblx0XHRyZXR1cm4gIWlzVmlld1NldHRpbmdzT2ZUeXBlPENvbWJpbmVkVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQpICYmIHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uXG5cdFx0XHQ/IHZpZXdTZXR0aW5ncy5jb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0dmlld1NldHRpbmdzLmFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5ncy5jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgcmVwb3J0IHZpZXcgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlICBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldFZpZXcgPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRpZiAoIWlzVmlld1NldHRpbmdzT2ZUeXBlPEN1c3RvbVZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkN1c3RvbSkpIHtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gdmlld1NldHRpbmdzLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uc3QgbXVsdGlWaWV3U2V0dGluZ3MgPSBpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSlcblx0XHRcdD8ge1xuXHRcdFx0XHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50OiB2aWV3U2V0dGluZ3Muc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRydWVcblx0XHRcdCAgfVxuXHRcdFx0OiB7fTtcblxuXHRcdGNvbnN0IHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihnZXRWaWV3VmlzdWFsaXphdGlvblBhdGgodmlld1NldHRpbmdzKSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0Li4ueyBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiB0cnVlIH0sXG5cdFx0XHQuLi5tdWx0aVZpZXdTZXR0aW5nc1xuXHRcdH0pO1xuXG5cdFx0aWYgKFxuXHRcdFx0IWlzVmlld1NldHRpbmdzT2ZUeXBlPENvbWJpbmVkVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQpICYmXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMubGVuZ3RoID09PSAyICYmXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY3JlYXRlQWxwVmlldyhbcHJlc2VudGF0aW9uXSwgXCJib3RoXCIsIHZpZXdTZXR0aW5ncyk7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPENvbWJpbmVkVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQpKSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gdmlld1NldHRpbmdzO1xuXHRcdFx0aWYgKHByaW1hcnk/Lmxlbmd0aCAmJiBzZWNvbmRhcnk/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0QWxwUHJlc2VudGF0aW9uKGNvbnZlcnRlckNvbnRleHQsIHByaW1hcnlbMF0sIHRydWUpLCBnZXRBbHBQcmVzZW50YXRpb24oY29udmVydGVyQ29udGV4dCwgc2Vjb25kYXJ5WzBdLCBmYWxzZSldLFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5ncy5kZWZhdWx0UGF0aCxcblx0XHRcdFx0XHR2aWV3U2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlY29uZGFyeUl0ZW1zIGluIHRoZSBWaWV3cyBpcyBub3QgcHJlc2VudFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSkge1xuXHRcdFx0Y29uZmlndXJlTXVsdGlWaWV3cyhwcmVzZW50YXRpb24sIHZpZXdTZXR0aW5ncyk7XG5cdFx0fVxuXHRcdHJldHVybiBjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb24sIHZpZXdTZXR0aW5ncyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGdldEN1c3RvbVZpZXcodmlld1NldHRpbmdzKTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IHJlcG9ydCB2aWV3IGRlZmluaXRpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIG11bHRpcGxlVmlld0NvbmZpZyBUaGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiByZWxhdGVkIG9mIHRoZSBtdWx0aSB2aWV3c1xuICogQHJldHVybnMgVGhlICBkZWZpbml0aW9uc1xuICovXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRtdWx0aXBsZVZpZXdDb25maWc6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG11bHRpcGxlVmlld0NvbmZpZykge1xuXHRcdG11bHRpcGxlVmlld0NvbmZpZy5wYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRpZiAobWFuaWZlc3RXcmFwcGVyLmlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbihwYXRoKSkge1xuXHRcdFx0XHRpZiAobXVsdGlwbGVWaWV3Q29uZmlnLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aCxcblx0XHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtYW5pZmVzdFdyYXBwZXIuaXNDdXN0b21WaWV3Q29uZmlndXJhdGlvbihwYXRoKSkge1xuXHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdGxhYmVsOiBwYXRoLmxhYmVsLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBwYXRoLnRlbXBsYXRlLFxuXHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ3VzdG9tLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXG5cdFx0XHRcdFx0XHRwYXRoLmNvbnRleHRQYXRoIHx8IChwYXRoLmVudGl0eVNldCAmJiBgLyR7cGF0aC5lbnRpdHlTZXR9YCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGxldCBhbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgU2VsZWN0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0XHRcdFx0XHQ/IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIHZpZXdDb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHQ6IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDogdGFyZ2V0QW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25WYXJpYW50ID8gdGFyZ2V0QW5ub3RhdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBwYXRoLnZpc2libGUsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuTXVsdGlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBjcmVhdGVBbHBWaWV3U2V0dGluZ3MoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkRlZmF1bHRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbnZlcnRlckNvbmZpZ3MubWFwKCh2aWV3Q29udmVydGVyQ29uZmlnKSA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcbmNvbnN0IGdldE11bHRpVmlld3NDb250cm9sID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXVxuKTogTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRpZiAodmlld3MubGVuZ3RoID4gMSAmJiAhaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzaG93VGFiQ291bnRzOiB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpIDogdW5kZWZpbmVkLCAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdFx0XHRpZDogZ2V0SWNvblRhYkJhcklEKClcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNldHRpbmdzIHJlbGF0ZWQgdG8gYW4gQUxQIHZpZXcuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcGFyYW0gdmlld0NvbmZpZ3MgVGhlIGNvbmZpZ3Mgb2YgdGhlIG90aGVyIGxpc3QgcmVwb3J0IHZpZXdzXG4gKiBAcmV0dXJucyBUaGUgY29uZmlncyBvZiB0aGUgbGlzdCByZXBvcnQgdmlld3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWxwVmlld1NldHRpbmdzKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXVxuKTogVmlld0NvbnZlcnRlclNldHRpbmdzW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFubm90YXRpb24gPSBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0bGV0IGNoYXJ0LCB0YWJsZTtcblx0aWYgKGFubm90YXRpb24pIHtcblx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdGFubm90YXRpb246IGFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5EZWZhdWx0XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnQgPSBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdFx0dGFibGUgPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGNoYXJ0ICYmIHRhYmxlKSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5ID0gW3sgYW5ub3RhdGlvblBhdGg6IFwiQFwiICsgY2hhcnQudGVybSB9XTtcblx0XHRcdGNvbnN0IHNlY29uZGFyeSA9IFt7IGFubm90YXRpb25QYXRoOiBcIkBcIiArIHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIixcblx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgbmVlZHMgYm90aCBjaGFydCBhbmQgdGFibGUgdG8gbG9hZCB0aGUgYXBwbGljYXRpb25cIik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cbmZ1bmN0aW9uIGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHM8QmFzZUFjdGlvbj4oW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkuYWN0aW9ucyk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGZpbHRlckJhcklkIG9uIHRoZSBzY2VuYXJpbyB3aXRoIG11bHRpIGVudGl0eSBzZXRzLlxuICpcbiAqIEBwYXJhbSB2aWV3cyBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbGlzdCByZXBvcnQgdmlld3NcbiAqIEBwYXJhbSBmaWx0ZXJCYXJJZFxuICovXG5jb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbiAodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdLCBmaWx0ZXJCYXJJZDogc3RyaW5nKTogdm9pZCB7XG5cdHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQhaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDdXN0b21WaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbSkgJiZcblx0XHRcdCFpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZClcblx0XHQpIHtcblx0XHRcdHZpZXcucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCAmJiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCAhPT0gZmlsdGVyQmFySWQpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCA9IGZpbHRlckJhcklkO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiBmb3IgbXVsdGlwbGUgZW50aXR5IHNldHMgKG11bHRpcGxlIHRhYmxlIG1vZGUpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IGRlZmluaXRpb24gYmFzZWQgb24gYW5ub3RhdGlvbiArIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBMaXN0UmVwb3J0RGVmaW5pdGlvbiB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGhhc011bHRpcGxlRW50aXR5U2V0cyA9IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3Qgdmlld3MgPSBnZXRWaWV3cyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3c0RlZmluaXRpb24pO1xuXHRjb25zdCBsclRhYmxlVmlzdWFsaXphdGlvbnMgPSBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3QgbHJDaGFydFZpc3VhbGl6YXRpb25zID0gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKCh0YWJsZSkgPT4gdGFibGUuY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKTtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiO1xuXHRsZXQgc2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGNvbnN0IGR5bmFtaWNMaXN0UmVwb3J0SWQgPSBnZXREeW5hbWljTGlzdFJlcG9ydElEKCk7XG5cdGNvbnN0IGZpbHRlckJhcklkID0gZ2V0RmlsdGVyQmFySUQoc0NvbnRleHRQYXRoKTtcblx0Y29uc3QgZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCA9IGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQoZmlsdGVyQmFySWQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXHRjb25zdCBzaG93Q2xlYXJCdXR0b24gPSBmYkNvbmZpZy5zaG93Q2xlYXJCdXR0b24gIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnNob3dDbGVhckJ1dHRvbiA6IGZhbHNlO1xuXHRjb25zdCBjb25maWcgPSBnZXRDb250ZW50QXJlYUlkKHZpZXdzKTtcblx0aWYgKGNvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBjb25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gY29uZmlnLnRhYmxlSWQ7XG5cdH1cblx0Y29uc3QgdXNlSGlkZGVuRmlsdGVyQmFyID0gbWFuaWZlc3RXcmFwcGVyLnVzZUhpZGRlbkZpbHRlckJhcigpO1xuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSAobWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgfHwgdXNlSGlkZGVuRmlsdGVyQmFyKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG11bHRpVmlld0NvbnRyb2wgPSBnZXRNdWx0aVZpZXdzQ29udHJvbChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBtdWx0aVZpZXdDb250cm9sID8gdW5kZWZpbmVkIDogZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZSA/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKSA6IHt9O1xuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoaGFzTXVsdGlwbGVFbnRpdHlTZXRzKSB7XG5cdFx0Y2hlY2tDaGFydEZpbHRlckJhcklkKHZpZXdzLCBmaWx0ZXJCYXJJZCk7XG5cdH1cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5pZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgbXVsdGlEaW1lbnNpb25hbEdyaWRJZHMgPSBnZXRNdWx0aURpbWVuc2lvbmFsR3JpZElkcyh2aWV3cyk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbXG5cdFx0Li4uKGhpZGVGaWx0ZXJCYXIgJiYgIXVzZUhpZGRlbkZpbHRlckJhciA/IFtdIDogW2ZpbHRlckJhcklkXSksXG5cdFx0Li4uKG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpICE9PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHZpc3VhbGl6YXRpb25JZHMgOiBbXSksXG5cdFx0Li4uKG11bHRpVmlld0NvbnRyb2wgPyBbbXVsdGlWaWV3Q29udHJvbC5pZF0gOiBbXSksXG5cdFx0Li4uKG11bHRpRGltZW5zaW9uYWxHcmlkSWRzLnZhcmlhbnRNYW5hZ2VtZW50SWQgPyBbbXVsdGlEaW1lbnNpb25hbEdyaWRJZHMudmFyaWFudE1hbmFnZW1lbnRJZF0gOiBbXSlcblx0XTtcblx0Y29uc3Qgc3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIgPVxuXHRcdG11bHRpVmlld0NvbnRyb2wgJiYgbWFuaWZlc3RXcmFwcGVyLmdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbigpID8gbXVsdGlWaWV3Q29udHJvbC5pZCA6IHVuZGVmaW5lZDtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIG9uIHRoZSBtYWluIGVudGl0eSBzZXQgYXJlIFRyZWUgdGFibGVzLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSBkcmFmdCBlZGl0U3RhdGUgZmlsdGVyIHNoYWxsIG5vdCBiZSBzaG93blxuXHRjb25zdCBvbmx5VHJlZVRhYmxlc09uTWFpbkVudGl0eVNldCA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5ldmVyeSgodGFibGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIgfHwgdGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbiAhPT0gc0NvbnRleHRQYXRoO1xuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogYCR7c0NvbnRleHRQYXRofS9gLFxuXHRcdG11bHRpVmlld3NDb250cm9sOiBtdWx0aVZpZXdDb250cm9sLFxuXHRcdHN0aWNreVN1YmhlYWRlclByb3ZpZGVyLFxuXHRcdHNpbmdsZVRhYmxlSWQsXG5cdFx0c2luZ2xlQ2hhcnRJZCxcblx0XHRtdWx0aURpbWVuc2lvbmFsR3JpZElkcyxcblx0XHRkeW5hbWljTGlzdFJlcG9ydElkLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRwcm9wZXJ0eUluZm86IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaCxcblx0XHRcdHNob3dDbGVhckJ1dHRvbixcblx0XHRcdGRpc2FibGVEcmFmdEVkaXRTdGF0ZUZpbHRlcjogb25seVRyZWVUYWJsZXNPbk1haW5FbnRpdHlTZXRcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gXCJcIiA6IGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXIsXG5cdFx0dXNlSGlkZGVuRmlsdGVyQmFyXG5cdH07XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGNvbnRlbnQgYXJlYSBpZHMgb2YgdGhlIGxpc3QgcmVwb3J0LlxuICpcbiAqIEBwYXJhbSB2aWV3cyBUaGUgZGVmaW5pdGlvbnMgb2YgdGhlIGxpc3QgcmVwb3J0IHZpZXdzXG4gKiBAcmV0dXJucyBUaGUgY29udGVudCBhcmVhIGlkc1xuICovXG5mdW5jdGlvbiBnZXRDb250ZW50QXJlYUlkKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENvbnRlbnRBcmVhSUQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzaW5nbGVUYWJsZUlkID1cblx0XHRcdHZpZXdzLmZpbmQoXG5cdFx0XHRcdCh2aWV3KTogdmlldyBpcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9PlxuXHRcdFx0XHRcdChpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZCkgfHxcblx0XHRcdFx0XHRcdGlzVmlld0RlZmluaXRpb25PZlR5cGU8U2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZVRhYmxlKSkgJiZcblx0XHRcdFx0XHQhIXZpZXcudGFibGVDb250cm9sSWRcblx0XHRcdCk/LnRhYmxlQ29udHJvbElkID8/IFwiXCIsXG5cdFx0c2luZ2xlQ2hhcnRJZCA9XG5cdFx0XHR2aWV3cy5maW5kKFxuXHRcdFx0XHQodmlldyk6IHZpZXcgaXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPT5cblx0XHRcdFx0XHQoaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpIHx8XG5cdFx0XHRcdFx0XHRpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5TaW5nbGVDaGFydCkpICYmXG5cdFx0XHRcdFx0ISF2aWV3LmNoYXJ0Q29udHJvbElkXG5cdFx0XHQpPy5jaGFydENvbnRyb2xJZCA/PyBcIlwiO1xuXHRpZiAoc2luZ2xlVGFibGVJZCB8fCBzaW5nbGVDaGFydElkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNoYXJ0SWQ6IHNpbmdsZUNoYXJ0SWQsXG5cdFx0XHR0YWJsZUlkOiBzaW5nbGVUYWJsZUlkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBJRHMgb2YgdGhlIHNpbmdsZSBNdWx0aURpbWVuc2lvbmFsR3JpZCBpbiB0aGUgbGlzdCByZXBvcnQsIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gdmlld3NcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBncmlkIElEIGFuZCB0aGUgZ3JpZCB2YXJpYW50IG1hbmFnZW1lbnQgSUQuXG4gKi9cbmZ1bmN0aW9uIGdldE11bHRpRGltZW5zaW9uYWxHcmlkSWRzKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFBhcnRpYWw8eyBpZDogc3RyaW5nOyB2YXJpYW50TWFuYWdlbWVudElkOiBzdHJpbmcgfT4ge1xuXHRmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcblx0XHRjb25zdCBncmlkVmlzdWFsaXphdGlvbiA9IGlzVmlld0RlZmluaXRpb25PZlR5cGU8Q29tYmluZWRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkKVxuXHRcdFx0PyB2aWV3LnByaW1hcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zPy5bMF1cblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChncmlkVmlzdWFsaXphdGlvbj8udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuTXVsdGlEaW1lbnNpb25hbEdyaWQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlkOiBncmlkVmlzdWFsaXphdGlvbi5pZCxcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnRJZDogZ3JpZFZpc3VhbGl6YXRpb24udmFyaWFudE1hbmFnZW1lbnRJZFxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRpZDogdW5kZWZpbmVkLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50SWQ6IHVuZGVmaW5lZFxuXHR9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQStES0EsZ0JBQWdCO0VBQUEsV0FBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0VBQUEsR0FBaEJBLGdCQUFnQixLQUFoQkEsZ0JBQWdCO0VBQUEsSUFxRmhCQyxrQkFBa0I7RUFBQSxXQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7RUFBQSxHQUFsQkEsa0JBQWtCLEtBQWxCQSxrQkFBa0I7RUErQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsVUFDNUJDLHFCQUE0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