@sapui5/sap.fe.core 1.130.0 → 1.131.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 (158) 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 +3 -3
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/CommonUtils.js +38 -14
  6. package/src/sap/fe/core/CommonUtils.ts +39 -15
  7. package/src/sap/fe/core/TemplateComponent.js +4 -1
  8. package/src/sap/fe/core/TemplateComponent.ts +2 -0
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
  10. package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
  11. package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
  12. package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
  13. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
  14. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
  15. package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
  16. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
  17. package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
  18. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
  19. package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
  20. package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
  21. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
  22. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
  23. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  27. package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
  28. package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
  29. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
  30. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
  31. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
  32. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
  33. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
  34. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
  35. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
  36. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
  38. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
  39. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
  40. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
  41. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
  42. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
  43. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
  44. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
  45. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
  46. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
  47. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  48. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  49. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
  50. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
  51. package/src/sap/fe/core/converters/ConverterContext.js +10 -3
  52. package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
  53. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  54. package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
  55. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  56. package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
  57. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  58. package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
  59. package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
  60. package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
  61. package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
  62. package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
  63. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
  64. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
  65. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
  66. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
  67. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
  68. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
  69. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
  70. package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
  71. package/src/sap/fe/core/fpm/manifest.json +1 -1
  72. package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
  73. package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
  74. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  75. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
  78. package/src/sap/fe/core/helpers/MetaPath.js +17 -2
  79. package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
  80. package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
  81. package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
  82. package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
  83. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
  84. package/src/sap/fe/core/library.js +5 -2
  85. package/src/sap/fe/core/library.support.js +3 -3
  86. package/src/sap/fe/core/library.support.ts +2 -1
  87. package/src/sap/fe/core/library.ts +4 -0
  88. package/src/sap/fe/core/messagebundle.properties +6 -0
  89. package/src/sap/fe/core/messagebundle_ar.properties +11 -3
  90. package/src/sap/fe/core/messagebundle_bg.properties +14 -6
  91. package/src/sap/fe/core/messagebundle_ca.properties +10 -2
  92. package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
  93. package/src/sap/fe/core/messagebundle_cs.properties +10 -2
  94. package/src/sap/fe/core/messagebundle_cy.properties +10 -2
  95. package/src/sap/fe/core/messagebundle_da.properties +10 -2
  96. package/src/sap/fe/core/messagebundle_de.properties +12 -4
  97. package/src/sap/fe/core/messagebundle_el.properties +10 -2
  98. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  99. package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
  100. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
  101. package/src/sap/fe/core/messagebundle_es.properties +12 -4
  102. package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
  103. package/src/sap/fe/core/messagebundle_et.properties +10 -2
  104. package/src/sap/fe/core/messagebundle_fi.properties +10 -2
  105. package/src/sap/fe/core/messagebundle_fr.properties +10 -2
  106. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
  107. package/src/sap/fe/core/messagebundle_hi.properties +10 -2
  108. package/src/sap/fe/core/messagebundle_hr.properties +11 -3
  109. package/src/sap/fe/core/messagebundle_hu.properties +11 -3
  110. package/src/sap/fe/core/messagebundle_id.properties +10 -2
  111. package/src/sap/fe/core/messagebundle_it.properties +10 -2
  112. package/src/sap/fe/core/messagebundle_iw.properties +11 -3
  113. package/src/sap/fe/core/messagebundle_ja.properties +10 -2
  114. package/src/sap/fe/core/messagebundle_kk.properties +10 -2
  115. package/src/sap/fe/core/messagebundle_ko.properties +10 -2
  116. package/src/sap/fe/core/messagebundle_lt.properties +10 -2
  117. package/src/sap/fe/core/messagebundle_lv.properties +10 -2
  118. package/src/sap/fe/core/messagebundle_mk.properties +10 -2
  119. package/src/sap/fe/core/messagebundle_ms.properties +10 -2
  120. package/src/sap/fe/core/messagebundle_nl.properties +12 -4
  121. package/src/sap/fe/core/messagebundle_no.properties +11 -3
  122. package/src/sap/fe/core/messagebundle_pl.properties +10 -2
  123. package/src/sap/fe/core/messagebundle_pt.properties +10 -2
  124. package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
  125. package/src/sap/fe/core/messagebundle_ro.properties +10 -2
  126. package/src/sap/fe/core/messagebundle_ru.properties +10 -2
  127. package/src/sap/fe/core/messagebundle_sh.properties +10 -2
  128. package/src/sap/fe/core/messagebundle_sk.properties +10 -2
  129. package/src/sap/fe/core/messagebundle_sl.properties +10 -2
  130. package/src/sap/fe/core/messagebundle_sr.properties +10 -2
  131. package/src/sap/fe/core/messagebundle_sv.properties +10 -2
  132. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  133. package/src/sap/fe/core/messagebundle_tr.properties +12 -4
  134. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  135. package/src/sap/fe/core/messagebundle_vi.properties +11 -3
  136. package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
  137. package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
  138. package/src/sap/fe/core/operationsHelper.js +4 -4
  139. package/src/sap/fe/core/operationsHelper.ts +4 -4
  140. package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
  141. package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
  142. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
  143. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
  144. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
  145. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
  146. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
  147. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
  148. package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
  149. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
  150. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
  151. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
  152. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
  153. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  154. package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
  155. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
  156. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  157. package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
  158. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
@@ -2,11 +2,10 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/collaboration/ActivityBase", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/WebSocket", "sap/m/MessageBox", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory"], function (Log, CommonUtils, ActivityBase, CollaborationCommon, MetaModelConverter, WebSocket, MessageBox, Service, ServiceFactory) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/collaboration/ActivityBase", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/ModelHelper", "sap/m/MessageBox", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory"], function (Log, CommonUtils, ActivityBase, CollaborationCommon, MetaModelConverter, ModelHelper, MessageBox, Service, ServiceFactory) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var getWebSocketBaseUrl = WebSocket.getWebSocketBaseUrl;
10
9
  var getActivityKeyFromPath = CollaborationCommon.getActivityKeyFromPath;
11
10
  var CollaborationUtils = CollaborationCommon.CollaborationUtils;
12
11
  var Activity = CollaborationCommon.Activity;
@@ -292,7 +291,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
292
291
  };
293
292
  _proto.isCollaborationEnabled = function isCollaborationEnabled(view) {
294
293
  const bindingContext = (view === null || view === void 0 ? void 0 : view.getBindingContext) && view.getBindingContext();
295
- return !!(bindingContext && getWebSocketBaseUrl(bindingContext.getModel()));
294
+ return !!(bindingContext && ModelHelper.isCollaborationDraftSupported(bindingContext.getModel().getMetaModel()));
296
295
  }
297
296
 
298
297
  /**
@@ -779,4 +778,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
779
778
  _exports = CollaborativeDraftServiceFactory;
780
779
  return _exports;
781
780
  }, false);
782
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNWUFDVElWSVRJRVMiLCJBQ1RJVkVVU0VSUyIsIkFDVElWSVRJRVMiLCJBU1lOQ01FU1NBR0VTUVVFVUUiLCJSRVRBSU5FREFTWU5DTUVTU0FHRVMiLCJBU1lOQ01FU1NBR0VTVElNRVJJRCIsIlNZTkNHUk9VUElEIiwiREVMQVlPTkZPQ1VTIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIl9TZXJ2aWNlIiwiX2luaGVyaXRzTG9vc2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiY2hlY2tQYXRoRm9yTG9jayIsImFjdGl2aXR5TW9kZWwiLCJhY3Rpdml0eVBhdGgiLCJteUFjdGl2aXRpZXMiLCJnZXRQcm9wZXJ0eSIsImluY2x1ZGVzIiwic2V0TG9jayIsInB1c2giLCJzZXRQcm9wZXJ0eSIsInJlbW92ZUxvY2siLCJhY3Rpdml0eVBhdGhzIiwidW5kZWZpbmVkIiwicGF0aHNUb1JlbW92ZSIsIkFycmF5IiwiaXNBcnJheSIsIm15TmV3QWN0aXZpdGllcyIsImZpbHRlciIsImFjdGl2aXR5IiwibGVuZ3RoIiwiZ2V0TG9ja2VkUHJvcGVydGllcyIsImpvaW4iLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiZWxlbWVudCIsIm9sZENvbnRleHRQYXRoIiwibmV3Q29udGV4dFBhdGgiLCJpc0Nvbm5lY3RlZCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImN1cnJlbnRRdWV1ZSIsImZvckVhY2giLCJxdWV1ZUl0ZW0iLCJwYXRoIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJjaGFuZ2VkQWN0aXZpdGllcyIsInVuY2hhbmdlZEFjdGl2aXRpZXMiLCJsb2NrZWRQYXRoIiwibmV3bG9ja2VkUGF0aCIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkxvY2siLCJjb250ZW50IiwicmVzZXRBc3luY01lc3NhZ2VzVGltZXIiLCJ0aW1lcklkIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInF1ZXVlIiwibmV3UXVldWUiLCJwYXRoc1RvUmV0YWluIiwiaXRlbSIsImRvU2VuZCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJhZGRpdGlvbmFsUGF0aHNUb1JldGFpbiIsInJldGFpbmVkUGF0aHMiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsInBhdGhzVG9SZWxlYXNlIiwicmV0YWluZWRQYXRoIiwiaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwibWVzc2FnZSIsIlVubG9jayIsImRvU2VuZEFzeW5jIiwidHJpZ2dlcmVkQWN0aW9uTmFtZSIsInJlZnJlc2hMaXN0QmluZGluZyIsImFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXMiLCJjbGllbnRDb250ZW50IiwicmVxdWVzdGVkUHJvcGVydGllcyIsInBhdGhGb3JMb2NrIiwicmVtb3ZlZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwicGF0aHNUb0FkZCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJ2aWV3IiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFdlYlNvY2tldEJhc2VVcmwiLCJjb25uZWN0IiwibWUiLCJDb2xsYWJvcmF0aW9uVXRpbHMiLCJnZXRNZSIsInNEcmFmdFVVSUQiLCJyZXF1ZXN0UHJvcGVydHkiLCJpbml0aWFsaXplZCIsImluaXRpYWxpemVDb2xsYWJvcmF0aW9uIiwibWVzc2FnZVJlY2VpdmUiLCJkaXNjb25uZWN0IiwiZW5kQ29sbGFib3JhdGlvbiIsInVzZXJKb2luRHJhZnQiLCJhY3RpdmVVc2VycyIsInNlbmRlciIsImZpbmRJbmRleCIsInVzZXIiLCJpZCIsInVuc2hpZnQiLCJ1c2VyQWN0aW9uIiwiSm9pbiIsIkpvaW5FY2hvIiwidXNlckxlYXZlRHJhZnQiLCJhbGxBY3Rpdml0aWVzIiwicmVtb3ZlVXNlckFjdGl2aXRpZXMiLCJiYWciLCJwIiwiX2FjdGl2aXRpZXMiLCJfYWN0aXZpdGllczIiLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlLZXkiLCJtZXRhUGF0aCIsImNhbGN1bGF0ZU1ldGFQYXRoIiwiY2xpZW50QWN0aW9uIiwidXNlcklEIiwibmFtZSIsInVzZXJEZXNjcmlwdGlvbiIsImluaXRpYWxzIiwiZm9ybWF0SW5pdGlhbHMiLCJjb2xvciIsImdldFVzZXJDb2xvciIsIm1hY3Rpdml0eSIsIkxlYXZlIiwiQ2hhbmdlIiwidXBkYXRlT25DaGFuZ2UiLCJDcmVhdGUiLCJ1cGRhdGVPbkNyZWF0ZSIsIkRlbGV0ZSIsInVwZGF0ZU9uRGVsZXRlIiwiQWN0aXZhdGUiLCJkcmFmdENsb3NlZEJ5T3RoZXJVc2VyIiwiZ2V0VGV4dCIsIkRpc2NhcmQiLCJBY3Rpb24iLCJ1cGRhdGVPbkFjdGlvbiIsImtleSIsImdldEFjdGl2aXR5S2V5RnJvbVBhdGgiLCJpbml0SlNPTk1vZGVsIiwicGFydHMiLCJzcGxpdCIsImkiLCJzbGljZSIsImEiLCJtZXNzYWdlVGV4dCIsIk1lc3NhZ2VCb3giLCJpbmZvcm1hdGlvbiIsIm9uQ2xvc2UiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwibmF2aWdhdGUiLCJlcnJvciIsIkxvZyIsInVwZGF0ZWRPYmplY3RzUGF0aHMiLCJjdXJyZW50UGFnZSIsImdldEN1cnJlbnRQYWdlIiwiY3VycmVudENvbnRleHQiLCJyZXF1ZXN0UHJvbWlzZXMiLCJtYXAiLCJhcHBseVVwZGF0ZXNGb3JDaGFuZ2UiLCJnZXRDb250cm9sbGVyIiwiZWRpdEZsb3ciLCJ1cGRhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJwcm9wZXJ0eVBhdGhGb3JVcGRhdGUiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZGF0YU1vZGVsT2JqZWN0IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0Q29udGV4dFBhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRhcmdldENvbnRleHQiLCJmaW5kQ29udGV4dEZvclVwZGF0ZSIsInBhcmVudENvbGxlY3Rpb25QYXRoIiwicGFyZW50Q29udGV4dFBhdGgiLCJwYXJlbnRDb250ZXh0Iiwic2lkZUVmZmVjdHNQcm9taXNlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInRhcmdldE1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwicmVsYXRpdmVNZXRhUGF0aEZvclVwZGF0ZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZpZWxkR3JvdXBJZHMiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInRhcmdldEVudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJ0YXJnZXRPYmplY3QiLCJwYWdlQ29udHJvbGxlciIsInNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cCIsIl9zaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMiLCJPYmplY3QiLCJrZXlzIiwic2lkZUVmZmVjdE5hbWUiLCJzaWRlRWZmZWN0Iiwic2lkZUVmZmVjdHMiLCJjb250ZXh0IiwiZXJyIiwiY3VycmVudFBhdGgiLCJkZWxldGVkT2JqZWN0UGF0aHMiLCJkZWxldGVkUGF0aEluVXNlIiwiZmluZCIsImRlbGV0ZWRQYXRoIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsInNldEtlZXBBbGl2ZSIsInJlcXVlc3RQcm9taXNlIiwiYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbiIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJjcmVhdGVkT2JqZWN0UGF0aHMiLCJwYXRoSW5Db2xsZWN0aW9uIiwiYXBwQ29tcG9uZW50IiwicGFyZW50UGF0aCIsIm1ldGFQYXRoRm9yVXBkYXRlIiwicGFyZW50TWV0YVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJfbWVzc2FnZSRjbGllbnRSZXF1ZXMiLCJwYXRoc0ZvckFjdGlvbiIsImFjdGlvbk5hbWUiLCJjbGllbnRUcmlnZ2VyZWRBY3Rpb25OYW1lIiwiY2xpZW50UmVxdWVzdGVkUHJvcGVydGllcyIsImNsaWVudFJlZnJlc2hMaXN0QmluZGluZyIsInJlcXVlc3RVcGRhdGVGb3JBY3Rpb24iLCJwYXRoRm9yQWN0aW9uIiwic2lkZUVmZmVjdFNlcnZpY2UiLCJzaWRlRWZmZWN0c0Zyb21BY3Rpb24iLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdFByb21pc2VzIiwiX3NpZGVFZmZlY3RzRnJvbUFjdGlvIiwicGF0aEV4cHJlc3Npb25zIiwibWV0YVBhdGhGb3JBY3Rpb24iLCJkYXRhTW9kZWxQYXRoIiwiZ2V0Q29udGV4dCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm9wIiwidGFyZ2V0UGF0aHMiLCJlbmRzV2l0aCIsIl9jdXJyZW50Q29udGV4dCRnZXRCaSIsIm1vZGVsIiwicGFyZW50TGlzdEJpbmRpbmciLCJnZXRBbGxCaW5kaW5ncyIsImJpbmRpbmciLCJiaW5kaW5nUGF0aCIsImlzUmVsYXRpdmUiLCJnZXRSZXNvbHZlZFBhdGgiLCJpc0EiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsImdldENyZWF0aW9uTW9kZSIsInJvdXRpbmciLCJDb21tb25VdGlscyIsImdldEN1cnJlbnRQYWdlVmlldyIsImRhdGFQYXRoIiwiaW5pdCIsImluaXRQcm9taXNlIiwicmVzb2x2ZSIsIlNlcnZpY2UiLCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeSIsIl9TZXJ2aWNlRmFjdG9yeSIsIl9wcm90bzIiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsImNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQge1xuXHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZSxcblx0ZW5kQ29sbGFib3JhdGlvbixcblx0aW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24sXG5cdGlzQ29sbGFib3JhdGlvbkNvbm5lY3RlZFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eUJhc2VcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgVXNlciwgVXNlckFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIENvbGxhYm9yYXRpb25VdGlscywgZ2V0QWN0aXZpdHlLZXlGcm9tUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFdlYlNvY2tldEJhc2VVcmwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9XZWJTb2NrZXRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5jb25zdCBNWUFDVElWSVRJRVMgPSBcIi9jb2xsYWJvcmF0aW9uL215QWN0aXZpdGllc1wiO1xuY29uc3QgQUNUSVZFVVNFUlMgPSBcIi9jb2xsYWJvcmF0aW9uL2FjdGl2ZVVzZXJzXCI7XG5jb25zdCBBQ1RJVklUSUVTID0gXCIvY29sbGFib3JhdGlvbi9hY3Rpdml0aWVzXCI7XG5jb25zdCBBU1lOQ01FU1NBR0VTUVVFVUUgPSBcIi9jb2xsYWJvcmF0aW9uL2FzeW5jTXNnUXVldWVcIjtcbmNvbnN0IFJFVEFJTkVEQVNZTkNNRVNTQUdFUyA9IFwiL2NvbGxhYm9yYXRpb24vcmV0YWluZWRNZXNzYWdlc1wiO1xuY29uc3QgQVNZTkNNRVNTQUdFU1RJTUVSSUQgPSBcIi9jb2xsYWJvcmF0aW9uL2FzeW5jTXNnVGltZXJJZFwiO1xuY29uc3QgU1lOQ0dST1VQSUQgPSBcIiRhdXRvLnN5bmNcIjtcblxuY29uc3QgREVMQVlPTkZPQ1VTID0gNTAwOyAvLyA1MDBtcyBkZWxheSBmb3IgYXN5bmMgTE9DSy9VTkxPQ0sgbWVzc2FnZXNcblxudHlwZSBBc3luY01lc3NhZ2UgPSB7XG5cdHBhdGg6IHN0cmluZztcblx0YWN0aW9uOiBBY3Rpdml0eS5VbmxvY2sgfCBBY3Rpdml0eS5Mb2NrO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5PiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlPjtcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBpcyBsb2NrZWQgYnkgdGhlIGN1cnJlbnQgdXNlci5cblx0ICogQHBhcmFtIGFjdGl2aXR5TW9kZWxcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwYXRoIGlzIGxvY2tlZFxuXHQgKi9cblx0Y2hlY2tQYXRoRm9yTG9jayhhY3Rpdml0eU1vZGVsOiBKU09OTW9kZWwsIGFjdGl2aXR5UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUyk7XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG15QWN0aXZpdGllcy5pbmNsdWRlcyhhY3Rpdml0eVBhdGgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgcGF0aCBhcyBsb2NrZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIuXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhcblx0ICovXG5cdHNldExvY2soYWN0aXZpdHlNb2RlbDogSlNPTk1vZGVsLCBhY3Rpdml0eVBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUykgPz8gW107XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMuaW5jbHVkZXMoYWN0aXZpdHlQYXRoKSkge1xuXHRcdFx0bXlBY3Rpdml0aWVzLnB1c2goYWN0aXZpdHlQYXRoKTtcblx0XHR9XG5cblx0XHRhY3Rpdml0eU1vZGVsLnNldFByb3BlcnR5KE1ZQUNUSVZJVElFUywgbXlBY3Rpdml0aWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBsb2NrIGZvciBhIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhzXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHBhdGggd2FzIHByZXZpb3VzbHkgbG9ja2VkXG5cdCAqL1xuXHRyZW1vdmVMb2NrKGFjdGl2aXR5TW9kZWw6IEpTT05Nb2RlbCwgYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBteUFjdGl2aXRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IGFjdGl2aXR5TW9kZWwuZ2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTKTtcblx0XHRpZiAoIW15QWN0aXZpdGllcyB8fCBhY3Rpdml0eVBhdGhzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXRoc1RvUmVtb3ZlID0gQXJyYXkuaXNBcnJheShhY3Rpdml0eVBhdGhzKSA/IGFjdGl2aXR5UGF0aHMgOiBbYWN0aXZpdHlQYXRoc107XG5cdFx0Y29uc3QgbXlOZXdBY3Rpdml0aWVzID0gbXlBY3Rpdml0aWVzLmZpbHRlcigoYWN0aXZpdHkpID0+IHtcblx0XHRcdHJldHVybiAhcGF0aHNUb1JlbW92ZS5pbmNsdWRlcyhhY3Rpdml0eSk7XG5cdFx0fSk7XG5cdFx0YWN0aXZpdHlNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIG15TmV3QWN0aXZpdGllcyk7XG5cblx0XHRyZXR1cm4gbXlOZXdBY3Rpdml0aWVzLmxlbmd0aCAhPT0gbXlBY3Rpdml0aWVzLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFsbCBsb2NrZWQgcGF0aHMgZm9yIHRoZSBjdXJyZW50IHVzZXIuXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEByZXR1cm5zIENvbmNhdGVuYXRlZCBwYXRocyBmb3IgYWxsIGxvY2tlZCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRnZXRMb2NrZWRQcm9wZXJ0aWVzKGFjdGl2aXR5TW9kZWw6IEpTT05Nb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUyk7XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBteUFjdGl2aXRpZXMuam9pbihcInxcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgYWxsIGN1cnJlbnQgbG9ja3MgYnkgY2hhbmdpbmcgYSBjb250ZXh0IHBhdGguXG5cdCAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYWN0aXZhdGluZyBhIGNvbnRleHQsIHdoZXJlIHRoZSBpbml0aWFsIGxvY2tzIHdlcmUgdXNpbmcgdGhlIHRyYW5zaWVudCBwYXRoXG5cdCAqIGFuZCBuZWVkIHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgYWN0dWFsIHBhdGguXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEBwYXJhbSBvbGRDb250ZXh0UGF0aFxuXHQgKiBAcGFyYW0gbmV3Q29udGV4dFBhdGhcblx0ICovXG5cdHVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgoZWxlbWVudDogVUk1RWxlbWVudCwgb2xkQ29udGV4dFBhdGg6IHN0cmluZywgbmV3Q29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0Nvbm5lY3RlZChlbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBlbGVtZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0Ly8gUmVwbGFjZSBwYXRocyBpbiBwZW5kaW5nIGFzeW5jIG1lc3NhZ2VzXG5cdFx0Y29uc3QgY3VycmVudFF1ZXVlOiBBc3luY01lc3NhZ2VbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFKTtcblx0XHRjdXJyZW50UXVldWUuZm9yRWFjaCgocXVldWVJdGVtKSA9PiB7XG5cdFx0XHRpZiAocXVldWVJdGVtLnBhdGguc3RhcnRzV2l0aChvbGRDb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0cXVldWVJdGVtLnBhdGggPSBxdWV1ZUl0ZW0ucGF0aC5yZXBsYWNlKG9sZENvbnRleHRQYXRoLCBuZXdDb250ZXh0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBSZXBsYWNlIHBhdGhzIGluIGV4aXN0aW5nIGxvY2tzIChhbmQgYnJvYWRjYXN0IHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaWYgbmVjZXNzYXJ5KVxuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMpO1xuXHRcdGlmIChteUFjdGl2aXRpZXMpIHtcblx0XHRcdGNvbnN0IGNoYW5nZWRBY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdW5jaGFuZ2VkQWN0aXZpdGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdG15QWN0aXZpdGllcy5mb3JFYWNoKChsb2NrZWRQYXRoKSA9PiB7XG5cdFx0XHRcdGlmIChsb2NrZWRQYXRoLnN0YXJ0c1dpdGgob2xkQ29udGV4dFBhdGgpKSB7XG5cdFx0XHRcdFx0Ly8gUmVwbGFjZSB0aGUgcGF0aCBpbiB0aGUgbGlzdCBvZiBsb2NrcywgYW5kIHN0b3JlIHRoaXMgcGF0aCBmb3Igc2VuZGluZyBhIG5ldyBMT0NLIG1lc3NhZ2Vcblx0XHRcdFx0XHRjb25zdCBuZXdsb2NrZWRQYXRoID0gbG9ja2VkUGF0aC5yZXBsYWNlKG9sZENvbnRleHRQYXRoLCBuZXdDb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y2hhbmdlZEFjdGl2aXRpZXMucHVzaChuZXdsb2NrZWRQYXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmNoYW5nZWRBY3Rpdml0aWVzLnB1c2gobG9ja2VkUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KE1ZQUNUSVZJVElFUywgdW5jaGFuZ2VkQWN0aXZpdGllcyk7XG5cdFx0XHRpZiAoY2hhbmdlZEFjdGl2aXRpZXMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdHRoaXMuc2VuZChlbGVtZW50LCB7IGFjdGlvbjogQWN0aXZpdHkuTG9jaywgY29udGVudDogY2hhbmdlZEFjdGl2aXRpZXMgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgdGltZXIgZm9yIHNlbmRpbmcgYXN5bmNocm9ub3VzIGNvbGxhYm9yYXRpb24gbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG5cdCAqL1xuXHRyZXNldEFzeW5jTWVzc2FnZXNUaW1lcihpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRsZXQgdGltZXJJZCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1RJTUVSSUQpO1xuXHRcdGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lcklkKTtcblx0XHR9XG5cblx0XHR0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBxdWV1ZTogQXN5bmNNZXNzYWdlW10gfCB1bmRlZmluZWQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNRVUVVRSk7XG5cdFx0XHRjb25zdCBuZXdRdWV1ZTogQXN5bmNNZXNzYWdlW10gPSBbXTtcblx0XHRcdGNvbnN0IHBhdGhzVG9SZXRhaW46IHN0cmluZ1tdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShSRVRBSU5FREFTWU5DTUVTU0FHRVMpID8/IFtdO1xuXG5cdFx0XHRpZiAoIXF1ZXVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0cXVldWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAocGF0aHNUb1JldGFpbi5pbmNsdWRlcyhpdGVtLnBhdGgpKSB7XG5cdFx0XHRcdFx0bmV3UXVldWUucHVzaChpdGVtKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmRvU2VuZChpbnRlcm5hbE1vZGVsLCBpdGVtLmFjdGlvbiwgaXRlbS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBuZXdRdWV1ZSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNUSU1FUklELCB1bmRlZmluZWQpO1xuXG5cdFx0XHRpZiAobmV3UXVldWUubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIElmIHNvbWUgbWVzc2FnZXMgYXJlIHN0aWxsIHBlbmRpbmcsIHJlc2NoZWR1bGUgYSBuZXcgdGltZXJcblx0XHRcdFx0dGhpcy5yZXNldEFzeW5jTWVzc2FnZXNUaW1lcihpbnRlcm5hbE1vZGVsKTtcblx0XHRcdH1cblx0XHR9LCBERUxBWU9ORk9DVVMpO1xuXG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTVElNRVJJRCwgdGltZXJJZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFyayBzb21lIHBhdGhzIGFzIGJlaW5nIHJldGFpbmVkLCBpLmUuIGFzeW5jIG1lc3NhZ2VzIGZvciB0aGVzZSBwYXRocyB3b24ndCBiZSBzZW50IGJ1dCBrZXB0IHVudGlsIHRoZXkncmUgcmVsZWFzZWQuXG5cdCAqIFRoaXMgYXBwbGllcyB0byBleGlzdGluZyBhc3luYyBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIGJ1dCBhbHNvIHRvIGZ1dHVyZSBtZXNzYWdlcy5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aHMgVGhlIHBhdGhzIHRvIGJlIHJldGFpbmVkXG5cdCAqL1xuXHRyZXRhaW5Bc3luY01lc3NhZ2VzKGVsZW1lbnQ6IFVJNUVsZW1lbnQsIGFjdGl2aXR5UGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGVsZW1lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFBhdGhzVG9SZXRhaW4gPSBBcnJheS5pc0FycmF5KGFjdGl2aXR5UGF0aHMpID8gYWN0aXZpdHlQYXRocyA6IFthY3Rpdml0eVBhdGhzXTtcblxuXHRcdGNvbnN0IHJldGFpbmVkUGF0aHM6IHN0cmluZ1tdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShSRVRBSU5FREFTWU5DTUVTU0FHRVMpO1xuXHRcdGFkZGl0aW9uYWxQYXRoc1RvUmV0YWluLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmICghcmV0YWluZWRQYXRocy5pbmNsdWRlcyhwYXRoKSkge1xuXHRcdFx0XHRyZXRhaW5lZFBhdGhzLnB1c2gocGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVsZWFzZSBhc3luYyBtZXNzYWdlcyBmb3Igc29tZSBwYXRocyB0aGF0IHdlcmUgcHJldmlvdXNseSByZXRhaW5lZC5cblx0ICogVGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZXMgYXJlIG5vdCBzZW50IGltbWVkaWF0ZWx5LCBidXQgdGhlIG5leHQgdGltZSB0aGUgYXN5bmMgdGltZXIgd2FrZXMgdXAuXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhzIFRoZSBwYXRocyB0byBiZSByZWxlYXNlZFxuXHQgKi9cblx0cmVsZWFzZUFzeW5jTWVzc2FnZXMoZWxlbWVudDogVUk1RWxlbWVudCwgYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRjb25zdCBwYXRoc1RvUmV0YWluOiBzdHJpbmdbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUkVUQUlORURBU1lOQ01FU1NBR0VTKTtcblx0XHRjb25zdCBwYXRoc1RvUmVsZWFzZSA9IEFycmF5LmlzQXJyYXkoYWN0aXZpdHlQYXRocykgPyBhY3Rpdml0eVBhdGhzIDogW2FjdGl2aXR5UGF0aHNdO1xuXG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFJFVEFJTkVEQVNZTkNNRVNTQUdFUyxcblx0XHRcdHBhdGhzVG9SZXRhaW4uZmlsdGVyKChyZXRhaW5lZFBhdGgpID0+IHtcblx0XHRcdFx0cmV0dXJuICFwYXRoc1RvUmVsZWFzZS5pbmNsdWRlcyhyZXRhaW5lZFBhdGgpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBpcyBjdXJyZW50bHkgb3Blbi5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBpcyBjdXJyZW50bHkgb3Blbi5cblx0ICovXG5cdGlzQ29ubmVjdGVkKGVsZW1lbnQ6IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRyZXR1cm4gaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkKGludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbmRzIGEgY29sbGFib3JhdGlvbiBtZXNzYWdlIHRvIG90aGVyIGNvbm5lY3RlZCB1c2Vycy5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIG1lc3NhZ2UuYWN0aW9uXG5cdCAqIEBwYXJhbSBtZXNzYWdlLmNvbnRlbnRcblx0ICogQHBhcmFtIG1lc3NhZ2UudHJpZ2dlcmVkQWN0aW9uTmFtZVxuXHQgKiBAcGFyYW0gbWVzc2FnZS5yZWZyZXNoTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIG1lc3NhZ2UuYWN0aW9uUmVxdWVzdGVkUHJvcGVydGllc1xuXHQgKi9cblx0cHVibGljIHNlbmQoXG5cdFx0ZWxlbWVudDogVUk1RWxlbWVudCxcblx0XHRtZXNzYWdlOiB7XG5cdFx0XHRhY3Rpb246IEFjdGl2aXR5O1xuXHRcdFx0Y29udGVudDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdFx0XHR0cmlnZ2VyZWRBY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRcdFx0cmVmcmVzaExpc3RCaW5kaW5nPzogYm9vbGVhbjtcblx0XHRcdGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHR9XG5cdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkKGVsZW1lbnQpKSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdGlmIChtZXNzYWdlLmFjdGlvbiA9PT0gQWN0aXZpdHkuTG9jayB8fCBtZXNzYWdlLmFjdGlvbiA9PT0gQWN0aXZpdHkuVW5sb2NrKSB7XG5cdFx0XHRcdC8vIExvY2stcmVsYXRlZCBldmVudHMgYXJlIGFsd2F5cyBzZW50IHdpdGggc29tZSBkZWxheVxuXHRcdFx0XHR0aGlzLmRvU2VuZEFzeW5jKGludGVybmFsTW9kZWwsIG1lc3NhZ2UuYWN0aW9uLCBtZXNzYWdlLmNvbnRlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kb1NlbmQoXG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlLmFjdGlvbixcblx0XHRcdFx0XHRtZXNzYWdlLmNvbnRlbnQsXG5cdFx0XHRcdFx0bWVzc2FnZS50cmlnZ2VyZWRBY3Rpb25OYW1lLFxuXHRcdFx0XHRcdG1lc3NhZ2UucmVmcmVzaExpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdG1lc3NhZ2UuYWN0aW9uUmVxdWVzdGVkUHJvcGVydGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzZW5kIGEgY29sbGFib3JhdGlvbiBtZXNzYWdlIGltbWVkaWF0ZWx5LlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZW50XG5cdCAqIEBwYXJhbSB0cmlnZ2VyZWRBY3Rpb25OYW1lXG5cdCAqIEBwYXJhbSByZWZyZXNoTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXNcblx0ICovXG5cdGRvU2VuZChcblx0XHRpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsXG5cdFx0YWN0aW9uOiBBY3Rpdml0eSxcblx0XHRjb250ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcblx0XHR0cmlnZ2VyZWRBY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRcdHJlZnJlc2hMaXN0QmluZGluZz86IGJvb2xlYW4sXG5cdFx0YWN0aW9uUmVxdWVzdGVkUHJvcGVydGllcz86IHN0cmluZ1tdXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGNsaWVudENvbnRlbnQgPSAoQXJyYXkuaXNBcnJheShjb250ZW50KSA/IGNvbnRlbnQuam9pbihcInxcIikgOiBjb250ZW50KSA/PyBcIlwiO1xuXHRcdGNvbnN0IHJlcXVlc3RlZFByb3BlcnRpZXMgPSBhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzPy5qb2luKFwifFwiKTtcblx0XHRpZiAoYWN0aW9uID09PSBBY3Rpdml0eS5Mb2NrKSB7XG5cdFx0XHRjb25zdCBwYXRoRm9yTG9jayA9IChBcnJheS5pc0FycmF5KGNvbnRlbnQpID8gY29udGVudFswXSA6IGNvbnRlbnQpID8/IFwiXCI7XG5cdFx0XHQvLyBUbyBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFmZmljIHdlIGtlZXAgdHJhY2sgb2YgbG9jayBjaGFuZ2VzIGFuZCBzZW5kIGl0IG9ubHkgb25jZVxuXHRcdFx0aWYgKHRoaXMuY2hlY2tQYXRoRm9yTG9jayhpbnRlcm5hbE1vZGVsLCBwYXRoRm9yTG9jaykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRMb2NrKGludGVybmFsTW9kZWwsIHBhdGhGb3JMb2NrKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gQWN0aXZpdHkuVW5sb2NrKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkID0gdGhpcy5yZW1vdmVMb2NrKGludGVybmFsTW9kZWwsIGNvbnRlbnQpO1xuXHRcdFx0Ly8gTm8gbmVlZCB0byBzZW5kIGFuIFVubG9jayBtZXNzYWdlIGlmIGl0IHdhcyBub3QgYWxyZWFkeSBsb2NrZWRcblx0XHRcdGlmICghcmVtb3ZlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoYWN0aW9uLCBjbGllbnRDb250ZW50LCBpbnRlcm5hbE1vZGVsLCB0cmlnZ2VyZWRBY3Rpb25OYW1lLCByZWZyZXNoTGlzdEJpbmRpbmcsIHJlcXVlc3RlZFByb3BlcnRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgYXN5bmNocm9ub3VzbHkuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRlbnRcblx0ICovXG5cdGRvU2VuZEFzeW5jKGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCwgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrIHwgQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFF1ZXVlOiBBc3luY01lc3NhZ2VbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFKTtcblx0XHRjb25zdCBwYXRoc1RvQWRkID0gQXJyYXkuaXNBcnJheShjb250ZW50KSA/IGNvbnRlbnQgOiBbY29udGVudF07XG5cdFx0Ly8gUmVtb3ZlIGV4aXN0aW5nIGl0ZW1zIGluIHRoZSBxdWV1ZSBmb3IgdGhlIHBhdGhzIHRoYXQgd2lsbCBiZSBhZGRlZFxuXHRcdGNvbnN0IG5ld1F1ZXVlID0gY3VycmVudFF1ZXVlLmZpbHRlcigoaXRlbSkgPT4ge1xuXHRcdFx0cmV0dXJuICFwYXRoc1RvQWRkLmluY2x1ZGVzKGl0ZW0ucGF0aCk7XG5cdFx0fSk7XG5cdFx0cGF0aHNUb0FkZC5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRuZXdRdWV1ZS5wdXNoKHsgcGF0aCwgYWN0aW9uIH0pO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBuZXdRdWV1ZSk7XG5cdFx0dGhpcy5yZXNldEFzeW5jTWVzc2FnZXNUaW1lcihpbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdGlzQ29sbGFib3JhdGlvbkVuYWJsZWQodmlldzogVmlldyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQgJiYgKHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRyZXR1cm4gISEoYmluZGluZ0NvbnRleHQgJiYgZ2V0V2ViU29ja2V0QmFzZVVybChiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpKSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gdmlldyAgVGhlIHZpZXcgdGhhdCBpcyB1c2VkIHRvIGNvbm5lY3QgdGhlIHdlYnNvY2tldFxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBjb25uZWN0KHZpZXc6IEZFVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgbWUgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0TWUodmlldyk7XG5cblx0XHQvLyBSZXRyaWV2aW5nIE1FIGZyb20gc2hlbGwgc2VydmljZVxuXHRcdGlmICghbWUpIHtcblx0XHRcdC8vIG5vIG1lID0gbm8gc2hlbGwgPSBub3Qgc3VyZSB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRjb25zdCBzRHJhZnRVVUlEID0gYXdhaXQgYmluZGluZ0NvbnRleHQucmVxdWVzdFByb3BlcnR5KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRVVUlEXCIpO1xuXHRcdGlmICghc0RyYWZ0VVVJRCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluaXRpYWxpemVkID0gaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24oXG5cdFx0XHRtZSxcblx0XHRcdHNEcmFmdFVVSUQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlUmVjZWl2ZShtZXNzYWdlLCB2aWV3KTtcblx0XHRcdH0sXG5cdFx0XHR2aWV3XG5cdFx0KTtcblxuXHRcdGlmIChpbml0aWFsaXplZCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBbXSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFJFVEFJTkVEQVNZTkNNRVNTQUdFUywgW10pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBjbG9zZSBhIGNvbm5lY3Rpb24gd2l0aCBhIGNvbGxhYm9yYXRpdmUgZHJhZnQgc2VydmljZS5cblx0ICogQHBhcmFtIHZpZXcgQ3VycmVudCBWaWV3XG5cdCAqL1xuXHRkaXNjb25uZWN0KHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0ZW5kQ29sbGFib3JhdGlvbihpbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byB1cGRhdGUgaW50ZXJuYWwgbW9kZWwgd2hlbiBhIHVzZXIgam9pbnMgdGhlIGRyYWZ0LlxuXHQgKiBAcGFyYW0gYWN0aXZlVXNlcnMgTGlzdCBvZiBjb25uZWN0ZWQgdXNlcnNcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIHNlbmRlciBVc2VyIHNlbmRpbmcgdGhlIEpPSU4gb3IgSk9JTkVDSE8gbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gdmlldyBDdXJyZW50IFZpZXdcblx0ICovXG5cdHVzZXJKb2luRHJhZnQoYWN0aXZlVXNlcnM6IFVzZXJbXSwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBzZW5kZXI6IFVzZXIsIG1lc3NhZ2U6IE1lc3NhZ2UsIHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGlmIChhY3RpdmVVc2Vycy5maW5kSW5kZXgoKHVzZXIpID0+IHVzZXIuaWQgPT09IHNlbmRlci5pZCkgPT09IC0xKSB7XG5cdFx0XHRhY3RpdmVVc2Vycy51bnNoaWZ0KHNlbmRlcik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWRVVTRVJTLCBhY3RpdmVVc2Vycyk7XG5cdFx0fVxuXG5cdFx0aWYgKG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gQWN0aXZpdHkuSm9pbikge1xuXHRcdFx0Ly8gd2UgZWNobyBvdXIgZXhpc3RlbmNlIHRvIHRoZSBuZXdseSBlbnRlcmVkIHVzZXIgYW5kIGFsc28gc2VuZCB0aGUgY3VycmVudCBhY3Rpdml0eSBpZiB0aGVyZSBpcyBhbnlcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkpvaW5FY2hvLCB0aGlzLmdldExvY2tlZFByb3BlcnRpZXMoaW50ZXJuYWxNb2RlbCksIGludGVybmFsTW9kZWwpO1xuXHRcdH1cblxuXHRcdGlmIChtZXNzYWdlLnVzZXJBY3Rpb24gPT09IEFjdGl2aXR5LkpvaW5FY2hvKSB7XG5cdFx0XHRpZiAobWVzc2FnZS5jbGllbnRDb250ZW50KSB7XG5cdFx0XHRcdC8vIGFub3RoZXIgdXNlciB3YXMgYWxyZWFkeSB0eXBpbmcgdGhlcmVmb3JlIEkgd2FudCB0byBzZWUgaGlzIGFjdGl2aXR5IGltbWVkaWF0ZWx5LiBDYWxsaW5nIG1lIGFnYWluIGFzIGEgbGl2ZSBjaGFuZ2Vcblx0XHRcdFx0bWVzc2FnZS51c2VyQWN0aW9uID0gQWN0aXZpdHkuTG9jaztcblx0XHRcdFx0dGhpcy5tZXNzYWdlUmVjZWl2ZShtZXNzYWdlLCB2aWV3KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gdXBkYXRlIGludGVybmFsIG1vZGVsIHdoZW4gYSB1c2VyIGxlYXZlcyB0aGUgZHJhZnQuXG5cdCAqIEBwYXJhbSBhY3RpdmVVc2VycyBMaXN0IG9mIGNvbm5lY3RlZCB1c2Vyc1xuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gc2VuZGVyIFVzZXIgc2VuZGluZyB0aGUgSk9JTiBvciBKT0lORUNITyBtZXNzYWdlXG5cdCAqL1xuXHR1c2VyTGVhdmVEcmFmdChhY3RpdmVVc2VyczogVXNlcltdLCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIHNlbmRlcjogVXNlcik6IHZvaWQge1xuXHRcdC8vIFJlbW92aW5nIHRoZSBhY3RpdmUgdXNlci4gTm90IHJlbW92aW5nIFwibWVcIiBpZiBJIGhhZCB0aGUgc2NyZWVuIG9wZW4gaW4gYW5vdGhlciBzZXNzaW9uXG5cdFx0YWN0aXZlVXNlcnMgPSBhY3RpdmVVc2Vycy5maWx0ZXIoKHVzZXIpID0+IHVzZXIuaWQgIT09IHNlbmRlci5pZCB8fCB1c2VyLm1lKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWRVVTRVJTLCBhY3RpdmVVc2Vycyk7XG5cdFx0Y29uc3QgYWxsQWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUykgfHwge307XG5cdFx0Y29uc3QgcmVtb3ZlVXNlckFjdGl2aXRpZXMgPSBmdW5jdGlvbiAoYmFnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFVzZXJBY3Rpdml0eVtdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBVc2VyQWN0aXZpdHlbXSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShiYWcpKSB7XG5cdFx0XHRcdHJldHVybiBiYWcuZmlsdGVyKChhY3Rpdml0eSkgPT4gYWN0aXZpdHkuaWQgIT09IHNlbmRlci5pZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHAgaW4gYmFnKSB7XG5cdFx0XHRcdFx0YmFnW3BdID0gcmVtb3ZlVXNlckFjdGl2aXRpZXMoYmFnW3BdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgVXNlckFjdGl2aXR5W10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBiYWc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZW1vdmVVc2VyQWN0aXZpdGllcyhhbGxBY3Rpdml0aWVzKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMsIGFsbEFjdGl2aXRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldC5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWRcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdG1lc3NhZ2VSZWNlaXZlKG1lc3NhZ2U6IE1lc3NhZ2UsIHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgYWN0aXZlVXNlcnM6IFVzZXJbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZFVVNFUlMpO1xuXHRcdGxldCBhY3Rpdml0aWVzOiBVc2VyQWN0aXZpdHlbXTtcblx0XHRsZXQgYWN0aXZpdHlLZXk6IHN0cmluZztcblx0XHRjb25zdCBtZXRhUGF0aCA9IHRoaXMuY2FsY3VsYXRlTWV0YVBhdGgodmlldywgbWVzc2FnZS5jbGllbnRDb250ZW50KTtcblx0XHRtZXNzYWdlLnVzZXJBY3Rpb24gPSBtZXNzYWdlLnVzZXJBY3Rpb24gfHwgbWVzc2FnZS5jbGllbnRBY3Rpb247XG5cblx0XHRjb25zdCBzZW5kZXI6IFVzZXIgPSB7XG5cdFx0XHRpZDogbWVzc2FnZS51c2VySUQsXG5cdFx0XHRuYW1lOiBtZXNzYWdlLnVzZXJEZXNjcmlwdGlvbixcblx0XHRcdGluaXRpYWxzOiBDb2xsYWJvcmF0aW9uVXRpbHMuZm9ybWF0SW5pdGlhbHMobWVzc2FnZS51c2VyRGVzY3JpcHRpb24pLFxuXHRcdFx0Y29sb3I6IENvbGxhYm9yYXRpb25VdGlscy5nZXRVc2VyQ29sb3IobWVzc2FnZS51c2VySUQsIGFjdGl2ZVVzZXJzLCBbXSlcblx0XHR9O1xuXG5cdFx0bGV0IG1hY3Rpdml0eTogVXNlckFjdGl2aXR5ID0gc2VuZGVyO1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuXHRcdHN3aXRjaCAobWVzc2FnZS51c2VyQWN0aW9uKSB7XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkpvaW46XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkpvaW5FY2hvOlxuXHRcdFx0XHR0aGlzLnVzZXJKb2luRHJhZnQoYWN0aXZlVXNlcnMsIGludGVybmFsTW9kZWwsIHNlbmRlciwgbWVzc2FnZSwgdmlldyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxlYXZlOlxuXHRcdFx0XHR0aGlzLnVzZXJMZWF2ZURyYWZ0KGFjdGl2ZVVzZXJzLCBpbnRlcm5hbE1vZGVsLCBzZW5kZXIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5DaGFuZ2U6XG5cdFx0XHRcdHRoaXMudXBkYXRlT25DaGFuZ2UodmlldywgbWVzc2FnZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkNyZWF0ZTpcblx0XHRcdFx0Ly8gRm9yIGNyZWF0ZSB3ZSBhY3R1YWxseSBqdXN0IG5lZWQgdG8gcmVmcmVzaCB0aGUgdGFibGVcblx0XHRcdFx0dGhpcy51cGRhdGVPbkNyZWF0ZSh2aWV3LCBtZXNzYWdlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuRGVsZXRlOlxuXHRcdFx0XHQvLyBGb3Igbm93IGFsc28gcmVmcmVzaCB0aGUgcGFnZSBidXQgaW4gY2FzZSBvZiBkZWxldGlvbiB3ZSBuZWVkIHRvIGluZm9ybSB0aGUgdXNlclxuXHRcdFx0XHR0aGlzLnVwZGF0ZU9uRGVsZXRlKHZpZXcsIG1lc3NhZ2UpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5BY3RpdmF0ZTpcblx0XHRcdFx0dGhpcy5kcmFmdENsb3NlZEJ5T3RoZXJVc2VyKFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0bWVzc2FnZS5jbGllbnRDb250ZW50LFxuXHRcdFx0XHRcdENvbGxhYm9yYXRpb25VdGlscy5nZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfQUNUSVZBVEVcIiwgc2VuZGVyLm5hbWUpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkRpc2NhcmQ6XG5cdFx0XHRcdHRoaXMuZHJhZnRDbG9zZWRCeU90aGVyVXNlcihcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHRcdG1lc3NhZ2UuY2xpZW50Q29udGVudCxcblx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0RJU0NBUkRcIiwgc2VuZGVyLm5hbWUpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkFjdGlvbjpcblx0XHRcdFx0dGhpcy51cGRhdGVPbkFjdGlvbih2aWV3LCBtZXNzYWdlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuTG9jazpcblx0XHRcdFx0bWFjdGl2aXR5ID0gc2VuZGVyO1xuXHRcdFx0XHRtYWN0aXZpdHkua2V5ID0gZ2V0QWN0aXZpdHlLZXlGcm9tUGF0aChtZXNzYWdlLmNsaWVudENvbnRlbnQpO1xuXG5cdFx0XHRcdC8vIHN0dXBpZCBKU09OIG1vZGVsLi4uXG5cdFx0XHRcdGxldCBpbml0SlNPTk1vZGVsID0gXCJcIjtcblx0XHRcdFx0Y29uc3QgcGFydHMgPSBtZXRhUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0aW5pdEpTT05Nb2RlbCArPSBgLyR7cGFydHNbaV19YDtcblx0XHRcdFx0XHRpZiAoIWludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIGluaXRKU09OTW9kZWwpKSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMgKyBpbml0SlNPTk1vZGVsLCB7fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoKTtcblx0XHRcdFx0YWN0aXZpdGllcyA9IGFjdGl2aXRpZXM/LnNsaWNlID8gYWN0aXZpdGllcy5zbGljZSgpIDogW107XG5cdFx0XHRcdGFjdGl2aXRpZXMucHVzaChtYWN0aXZpdHkpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMgKyBtZXRhUGF0aCwgYWN0aXZpdGllcyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LlVubG9jazpcblx0XHRcdFx0Ly8gVGhlIHVzZXIgZGlkIGEgY2hhbmdlIGJ1dCByZXZlcnRlZCBpdCwgdGhlcmVmb3JlIHVuYmxvY2sgdGhlIGNvbnRyb2xcblx0XHRcdFx0YWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoKTtcblx0XHRcdFx0YWN0aXZpdHlLZXkgPSBnZXRBY3Rpdml0eUtleUZyb21QYXRoKG1lc3NhZ2UuY2xpZW50Q29udGVudCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoLCBhY3Rpdml0aWVzPy5maWx0ZXIoKGEpID0+IGEua2V5ICE9PSBhY3Rpdml0eUtleSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgYSBtZXNzYWdlIHRoYXQgdGhlIGN1cnJlbnQgZHJhZnQgd2FzIGNsb3NlZCBiZSBhbm90aGVyIHVzZXIsIGFuZCBuYXZpZ2F0ZXMgYmFjayB0byBhIHByb3BlciB2aWV3LlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBuYXZpZ2F0ZSB0b1xuXHQgKiBAcGFyYW0gbWVzc2FnZVRleHQgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheVxuXHQgKi9cblx0ZHJhZnRDbG9zZWRCeU90aGVyVXNlcih2aWV3OiBGRVZpZXcsIHBhdGg6IHN0cmluZywgbWVzc2FnZVRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZGlzY29ubmVjdCh2aWV3KTtcblx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKG1lc3NhZ2VUZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlKHBhdGgsIHZpZXcpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJQZW5kaW5nIENoYW5nZXMgY291bGQgbm90IGJlIHJlc2V0IC0gc3RpbGwgbmF2aWdhdGluZyB0byBhY3RpdmUgaW5zdGFuY2VcIik7XG5cdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZShwYXRoLCB2aWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSB3aGVuIGEgQ0hBTkdFIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldFxuXHQgKi9cblx0dXBkYXRlT25DaGFuZ2UodmlldzogRkVWaWV3LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0Y29uc3QgdXBkYXRlZE9iamVjdHNQYXRocyA9IG1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIik7XG5cblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgY3VycmVudENvbnRleHQgPSBjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlcyA9IHVwZGF0ZWRPYmplY3RzUGF0aHMubWFwKGFzeW5jIChwYXRoKSA9PiB0aGlzLmFwcGx5VXBkYXRlc0ZvckNoYW5nZSh2aWV3LCBwYXRoKSk7XG5cblx0XHQvLyBTaW11bGF0ZSBhbnkgY2hhbmdlIHNvIHRoZSBlZGl0IGZsb3cgc2hvd3MgdGhlIGRyYWZ0IGluZGljYXRvciBhbmQgc2V0cyB0aGUgcGFnZSB0byBkaXJ0eVxuXHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50Q29udGV4dCwgUHJvbWlzZS5hbGwocmVxdWVzdFByb21pc2VzKSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXRoLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoRm9yVXBkYXRlIEFic29sdXRlIHBhdGggdG8gdGhlIHVwZGF0ZWQgcHJvcGVydHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIGRhdGEgYW5kIGl0cyByZWxhdGVkIHNpZGUgZWZmZWN0cyBoYXZlIGJlZW4gcmVjZWl2ZWRcblx0ICovXG5cdGFzeW5jIGFwcGx5VXBkYXRlc0ZvckNoYW5nZSh2aWV3OiBGRVZpZXcsIHByb3BlcnR5UGF0aEZvclVwZGF0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHByb3BlcnR5UGF0aEZvclVwZGF0ZSk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4obWV0YUNvbnRleHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHRQYXRoID0gcHJvcGVydHlQYXRoRm9yVXBkYXRlLnN1YnN0cmluZygwLCBwcm9wZXJ0eVBhdGhGb3JVcGRhdGUubGFzdEluZGV4T2YoXCIvXCIpKTsgLy8gUmVtb3ZlIHByb3BlcnR5IG5hbWVcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdGhpcy5maW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3LCB0YXJnZXRDb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgcGFyZW50Q29sbGVjdGlvblBhdGggPSB0YXJnZXRDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgdGFyZ2V0Q29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIoXCIpKTtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0UGF0aCA9IHBhcmVudENvbGxlY3Rpb25QYXRoLnN1YnN0cmluZygwLCBwYXJlbnRDb2xsZWN0aW9uUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0UGF0aCA/IHRoaXMuZmluZENvbnRleHRGb3JVcGRhdGUodmlldywgcGFyZW50Q29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCF0YXJnZXRDb250ZXh0ICYmICFwYXJlbnRDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47IC8vIE5vIGNvbnRleHQgZm9yIHVwZGF0ZVxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1Byb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldykuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cblx0XHRcdGlmICh0YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRcdC8vIFdlIGhhdmUgYSB0YXJnZXQgY29udGV4dCwgc28gd2UgY2FuIHJldHJpZXZlIHRoZSB1cGRhdGVkIHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHRhcmdldE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHRhcmdldENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRpdmVNZXRhUGF0aEZvclVwZGF0ZSA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwcm9wZXJ0eVBhdGhGb3JVcGRhdGUpLnJlcGxhY2UodGFyZ2V0TWV0YVBhdGgsIFwiXCIpLnNsaWNlKDEpO1xuXHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbcmVsYXRpdmVNZXRhUGF0aEZvclVwZGF0ZV0sIHRhcmdldENvbnRleHQsIFNZTkNHUk9VUElEKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRHcm91cElkcyBjb3JyZXNwb25kaW5nIHRvIHBhdGhGb3JVcGRhdGVcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0c1NlcnZpY2UuY29tcHV0ZUZpZWxkR3JvdXBJZHMoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCEuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBFeGVjdXRlIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBmaWVsZEdyb3VwSWRzXG5cdFx0XHRpZiAoZmllbGRHcm91cElkcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwID0gcGFnZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMoXG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0IHx8IHBhcmVudENvbnRleHRcblx0XHRcdFx0KSBhcyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXApLmZvckVhY2goKHNpZGVFZmZlY3ROYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdCA9IHNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cFtzaWRlRWZmZWN0TmFtZV07XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0cGFnZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhcblx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdC5zaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdC5jb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRTWU5DR1JPVVBJRCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHNpZGVFZmZlY3RzUHJvbWlzZXMpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBkYXRhIGFmdGVyIGNoYW5nZTpcIiArIGVycik7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSB3aGVuIGEgREVMRVRFIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldFxuXHQgKi9cblx0dXBkYXRlT25EZWxldGUodmlldzogVmlldywgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KTtcblx0XHRjb25zdCBjdXJyZW50Q29udGV4dCA9IGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgY3VycmVudFBhdGggPSBjdXJyZW50Q29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHRjb25zdCBkZWxldGVkT2JqZWN0UGF0aHMgPSBtZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdXNlciBjdXJyZW50bHkgZGlzcGxheXMgYSBkZWxldGVkIG9iamVjdCBvciBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzXG5cdFx0Y29uc3QgZGVsZXRlZFBhdGhJblVzZSA9IGRlbGV0ZWRPYmplY3RQYXRocy5maW5kKChkZWxldGVkUGF0aCkgPT4gY3VycmVudFBhdGguc3RhcnRzV2l0aChkZWxldGVkUGF0aCkpO1xuXHRcdGlmIChkZWxldGVkUGF0aEluVXNlKSB7XG5cdFx0XHQvLyBhbnkgb3RoZXIgdXNlciBkZWxldGVkIHRoZSBvYmplY3QgSSdtIGN1cnJlbnRseSBsb29raW5nIGF0LiBJbmZvcm0gdGhlIHVzZXIgd2Ugd2lsbCBuYXZpZ2F0ZSB0byByb290IG5vd1xuXHRcdFx0TWVzc2FnZUJveC5pbmZvcm1hdGlvbihDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0RFTEVURVwiLCBtZXNzYWdlLnVzZXJEZXNjcmlwdGlvbiksIHtcblx0XHRcdFx0b25DbG9zZTogKCkgPT4ge1xuXHRcdFx0XHRcdC8vIFdlIHJldHJpZXZlIHRoZSBkZWxldGVkIGNvbnRleHQgYXMgYSBrZWVwLWFsaXZlLCBhbmQgZGlzYWJsZSBpdHMga2VlcGFsaXZlIHN0YXR1cyxcblx0XHRcdFx0XHQvLyBzbyB0aGF0IGl0IGlzIHByb3Blcmx5IGRlc3Ryb3llZCB3aGVuIHJlZnJlc2hpbmcgZGF0YVxuXHRcdFx0XHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSBjdXJyZW50Q29udGV4dC5nZXRNb2RlbCgpLmdldEtlZXBBbGl2ZUNvbnRleHQoZGVsZXRlZFBhdGhJblVzZSk7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5hcHBseVVwZGF0ZXNGb3JDb2xsZWN0aW9uKHZpZXcsIGRlbGV0ZWRPYmplY3RQYXRoc1swXSk7XG5cdFx0XHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIHJlcXVlc3RQcm9taXNlKTtcblx0XHRcdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQodGFyZ2V0Q29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMuYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3LCBkZWxldGVkT2JqZWN0UGF0aHNbMF0pO1xuXHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIHJlcXVlc3RQcm9taXNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIHdoZW4gYSBDUkVBVEUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHR1cGRhdGVPbkNyZWF0ZSh2aWV3OiBWaWV3LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpO1xuXHRcdGNvbnN0IGNyZWF0ZWRPYmplY3RQYXRocyA9IG1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIik7XG5cblx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMuYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3LCBjcmVhdGVkT2JqZWN0UGF0aHNbMF0pO1xuXHRcdC8vIFNpbXVsYXRlIGEgY2hhbmdlIHNvIHRoZSBlZGl0IGZsb3cgc2hvd3MgdGhlIGRyYWZ0IGluZGljYXRvciBhbmQgc2V0cyB0aGUgcGFnZSB0byBkaXJ0eVxuXHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpLCByZXF1ZXN0UHJvbWlzZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIGluIGEgY29sbGVjdGlvbi5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHBhdGhJbkNvbGxlY3Rpb24gQSBwYXRoIHRvIGFuIGVudGl0eSBpbiB0aGUgY29sbGVjdGlvblxuXHQgKi9cblx0YXN5bmMgYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3OiBWaWV3LCBwYXRoSW5Db2xsZWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdGNvbnN0IHBhcmVudFBhdGggPSBwYXRoSW5Db2xsZWN0aW9uLnN1YnN0cmluZygwLCBwYXRoSW5Db2xsZWN0aW9uLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IHRoaXMuZmluZENvbnRleHRGb3JVcGRhdGUodmlldywgcGFyZW50UGF0aCk7XG5cblx0XHRpZiAocGFyZW50Q29udGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gcGFyZW50Q29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBtZXRhUGF0aEZvclVwZGF0ZSA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoSW5Db2xsZWN0aW9uKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGFyZW50Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBtZXRhUGF0aEZvclVwZGF0ZS5yZXBsYWNlKGAke3BhcmVudE1ldGFQYXRofS9gLCBcIlwiKTtcblxuXHRcdFx0XHQvLyBSZWxvYWQgdGhlIGNvbGxlY3Rpb25cblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbcmVsYXRpdmVQYXRoXSwgcGFyZW50Q29udGV4dCwgU1lOQ0dST1VQSUQpKTtcblxuXHRcdFx0XHQvLyBSZXF1ZXN0IHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBjb2xsZWN0aW9uXG5cdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KHJlbGF0aXZlUGF0aCwgcGFyZW50Q29udGV4dCwgU1lOQ0dST1VQSUQsIHRydWUpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoc2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBkYXRhIGFmdGVyIGNvbGxlY3Rpb24gdXBkYXRlOlwiICsgZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIHdoZW4gYSBBQ1RJT04gbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHR1cGRhdGVPbkFjdGlvbih2aWV3OiBGRVZpZXcsIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgcGF0aHNGb3JBY3Rpb24gPSBtZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBtZXNzYWdlLmNsaWVudFRyaWdnZXJlZEFjdGlvbk5hbWUgfHwgXCJcIjtcblx0XHRjb25zdCByZXF1ZXN0ZWRQcm9wZXJ0aWVzID0gbWVzc2FnZS5jbGllbnRSZXF1ZXN0ZWRQcm9wZXJ0aWVzPy5zcGxpdChcInxcIik7XG5cdFx0Y29uc3QgcmVmcmVzaExpc3RCaW5kaW5nID0gbWVzc2FnZS5jbGllbnRSZWZyZXNoTGlzdEJpbmRpbmcgPT09IFwidHJ1ZVwiO1xuXG5cdFx0bGV0IHJlcXVlc3RQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cblx0XHRpZiAocmVmcmVzaExpc3RCaW5kaW5nKSB7XG5cdFx0XHRyZXF1ZXN0UHJvbWlzZXMucHVzaCh0aGlzLmFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24odmlldywgcGF0aHNGb3JBY3Rpb25bMF0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVxdWVzdFByb21pc2VzID0gcGF0aHNGb3JBY3Rpb24ubWFwKGFzeW5jIChwYXRoKSA9PiB0aGlzLnJlcXVlc3RVcGRhdGVGb3JBY3Rpb24odmlldywgcGF0aCwgYWN0aW9uTmFtZSwgcmVxdWVzdGVkUHJvcGVydGllcykpO1xuXHRcdH1cblxuXHRcdC8vIFNpbXVsYXRlIGFueSBjaGFuZ2Ugc28gdGhlIGVkaXQgZmxvdyBzaG93cyB0aGUgZHJhZnQgaW5kaWNhdG9yIGFuZCBzZXRzIHRoZSBwYWdlIHRvIGRpcnR5XG5cdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIFByb21pc2UuYWxsKHJlcXVlc3RQcm9taXNlcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgc2lkZS1lZmZlY3RzIGRhdGEgd2hlbiBhbiBhY3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIGEgY29udGV4dC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHBhdGhGb3JBY3Rpb24gUGF0aCBvZiB0aGUgY29udGV4dCB0byBhcHBseSB0aGUgYWN0aW9uIHRvXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIE5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gcmVxdWVzdGVkUHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIHNpZGUtZWZmZWN0cyBkYXRhIGhhcyBiZWVuIGxvYWRlZFxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFVwZGF0ZUZvckFjdGlvbih2aWV3OiBGRVZpZXcsIHBhdGhGb3JBY3Rpb246IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nLCByZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdGhpcy5maW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3LCBwYXRoRm9yQWN0aW9uKTtcblx0XHRpZiAoIXRhcmdldENvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzRnJvbUFjdGlvbiA9IHNpZGVFZmZlY3RTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoYWN0aW9uTmFtZSwgdGFyZ2V0Q29udGV4dCk7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdFByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRpZiAoc2lkZUVmZmVjdHNGcm9tQWN0aW9uKSB7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHNGcm9tQWN0aW9uLnBhdGhFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHNpZGVFZmZlY3RQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0Zyb21BY3Rpb24ucGF0aEV4cHJlc3Npb25zLCB0YXJnZXRDb250ZXh0LCBTWU5DR1JPVVBJRClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHJlcXVlc3RlZFByb3BlcnRpZXMgJiYgcmVxdWVzdGVkUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL2NsZWFuLXVwIG9mIHRoZSBwcm9wZXJ0aWVzIHRvIHJlcXVlc3QgbGlzdDpcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFQYXRoRm9yQWN0aW9uID0gdGhpcy5jYWxjdWxhdGVNZXRhUGF0aCh2aWV3LCBwYXRoRm9yQWN0aW9uKTtcblx0XHRcdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KG1ldGFQYXRoRm9yQWN0aW9uKSk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXNcblx0XHRcdFx0Lm1hcCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maWx0ZXIoKHByb3ApID0+IHJlcXVlc3RlZFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcCkpO1xuXHRcdFx0aWYgKHByb3BlcnRpZXNUb1JlcXVlc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzaWRlRWZmZWN0UHJvbWlzZXMucHVzaChzaWRlRWZmZWN0U2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMocHJvcGVydGllc1RvUmVxdWVzdCwgdGFyZ2V0Q29udGV4dCwgU1lOQ0dST1VQSUQpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChzaWRlRWZmZWN0UHJvbWlzZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIGEgY29udGV4dCB0byBhcHBseSBhbiB1cGRhdGUgbWVzc2FnZSAoQ0hBTkdFLCBDUkVBVEUsIERFTEVURSBvciBBQ1RJT04pLlxuXHQgKiBAcGFyYW0gdmlldyAgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdG8gYmUgZm91bmQgKHNoYWxsIHBvaW50IHRvIGFuIGVudGl0eSwgbm90IGEgcHJvcGVydHkpXG5cdCAqIEByZXR1cm5zIEEgY29udGV4dCBpZiBpdCBjb3VsZCBiZSBmb3VuZFxuXHQgKi9cblx0ZmluZENvbnRleHRGb3JVcGRhdGUodmlldzogVmlldywgcGF0aDogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFwYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHQvLyBGaW5kIGFsbCBwb3RlbnRpYWwgcGF0aHNcblx0XHRjb25zdCB0YXJnZXRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHR3aGlsZSAoIXBhdGguZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHR0YXJnZXRQYXRocy51bnNoaWZ0KHBhdGgpO1xuXHRcdFx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHR9XG5cdFx0dGFyZ2V0UGF0aHMudW5zaGlmdChwYXRoKTtcblxuXHRcdGNvbnN0IHBhcmVudENvbGxlY3Rpb25QYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZihcIihcIikpOyAvLyBSZW1vdmUgdGhlIGxhc3Qga2V5XG5cblx0XHRsZXQgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRsZXQgY3VycmVudENvbnRleHQgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHR3aGlsZSAoY3VycmVudENvbnRleHQgJiYgIXRhcmdldENvbnRleHQpIHtcblx0XHRcdGlmICh0YXJnZXRQYXRocy5pbmNsdWRlcyhjdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdHRhcmdldENvbnRleHQgPSBjdXJyZW50Q29udGV4dDtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudENvbnRleHQgPSBjdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk/LmdldENvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRDb250ZXh0KSB7XG5cdFx0XHQvLyBGb3VuZCAhXG5cdFx0XHRyZXR1cm4gdGFyZ2V0Q29udGV4dDtcblx0XHR9XG5cblx0XHQvLyBUcnkgdG8gZmluZCB0aGUgdGFyZ2V0IGNvbnRleHQgaW4gYSBsaXN0QmluZGluZ1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KS5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgcGFyZW50TGlzdEJpbmRpbmcgPSBtb2RlbC5nZXRBbGxCaW5kaW5ncygpLmZpbmQoKGJpbmRpbmcpID0+IHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gYmluZGluZy5pc1JlbGF0aXZlKCkgPyBiaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpIDogYmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRyZXR1cm4gYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSAmJiBiaW5kaW5nUGF0aCA9PT0gcGFyZW50Q29sbGVjdGlvblBhdGg7XG5cdFx0fSkgYXMgT0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHQvLyBXZSd2ZSBmb3VuZCBhIGxpc3QgYmluZGluZyB0aGF0IGNvdWxkIGNvbnRhaW4gdGhlIHRhcmdldCBjb250ZXh0IC0tPiBsb29rIGZvciBpdFxuXHRcdHRhcmdldENvbnRleHQgPSBwYXJlbnRMaXN0QmluZGluZz8uZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRhcmdldFBhdGhzLmluY2x1ZGVzKGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiB0YXJnZXRDb250ZXh0O1xuXHR9XG5cblx0bmF2aWdhdGUocGF0aDogc3RyaW5nLCB2aWV3OiBGRVZpZXcpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiByb3V0aW5nLm5hdmlnYXRlIGRvZXNuJ3QgY29uc2lkZXIgc2VtYW50aWMgYm9va21hcmtpbmdcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dCA9IHZpZXcuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChwYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHQvLyBJZiB0aGUgb2JqZWN0IHdhcyBhIG5ld2x5IGNyZWF0ZWQgb25lLCB3ZSBuYXZpZ2F0ZSBiYWNrXG5cdFx0aWYgKGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy5nZXRDcmVhdGlvbk1vZGUoKSkge1xuXHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KHRhcmdldENvbnRleHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkucm91dGluZy5uYXZpZ2F0ZSh0YXJnZXRDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJyZW50UGFnZSh2aWV3OiBWaWV3KTogRkVWaWV3IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcoYXBwQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBtZXRhcGF0aCBmcm9tIG9uZSBvciBtb3JlIGRhdGEgcGF0aChzKS5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gcGF0aCBPbmUgb3JlIG1vcmUgZGF0YSBwYXRoKHMpLCBpbiBjYXNlIG9mIG11bHRpcGxlIHBhdGhzIHNlcGFyYXRlZCBieSAnfCdcblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgbWV0YVBhdGhcblx0ICovXG5cdGNhbGN1bGF0ZU1ldGFQYXRoKHZpZXc6IEZFVmlldywgcGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IG1ldGFQYXRoID0gXCJcIjtcblx0XHRpZiAocGF0aCkge1xuXHRcdFx0Ly8gaW4gY2FzZSBtb3JlIHRoYW4gb25lIHBhdGggaXMgc2VudCBhbGwgb2YgdGhlbSBoYXZlIHRvIHVzZSB0aGUgc2FtZSBtZXRhcGF0aCB0aGVyZWZvcmUgd2UganVzdCBjb25zaWRlciB0aGUgZmlyc3Qgb25lXG5cdFx0XHRjb25zdCBkYXRhUGF0aCA9IHBhdGguc3BsaXQoXCJ8XCIpWzBdO1xuXHRcdFx0bWV0YVBhdGggPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoZGF0YVBhdGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbWV0YVBhdGg7XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4ge1xuXHRwdWJsaWMgYXN5bmMgY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4pOiBQcm9taXNlPENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U+IHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlID0gbmV3IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QkEsTUFBTUEsWUFBWSxHQUFHLDZCQUE2QjtFQUNsRCxNQUFNQyxXQUFXLEdBQUcsNEJBQTRCO0VBQ2hELE1BQU1DLFVBQVUsR0FBRywyQkFBMkI7RUFDOUMsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQThCO0VBQ3pELE1BQU1DLHFCQUFxQixHQUFHLGlDQUFpQztFQUMvRCxNQUFNQyxvQkFBb0IsR0FBRyxnQ0FBZ0M7RUFDN0QsTUFBTUMsV0FBVyxHQUFHLFlBQVk7RUFFaEMsTUFBTUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQUEsSUFPYkMseUJBQXlCLDBCQUFBQyxRQUFBO0lBQUFDLGNBQUEsQ0FBQUYseUJBQUEsRUFBQUMsUUFBQTtJQUFBLFNBQUFELDBCQUFBO01BQUEsT0FBQUMsUUFBQSxDQUFBRSxLQUFBLE9BQUFDLFNBQUE7SUFBQTtJQUFBQyxRQUFBLENBQUFMLHlCQUFBLEdBQUFBLHlCQUFBO0lBQUEsSUFBQU0sTUFBQSxHQUFBTix5QkFBQSxDQUFBTyxTQUFBO0lBR3JDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxDRCxNQUFBLENBTUFFLGdCQUFnQixHQUFoQixTQUFBQSxpQkFBaUJDLGFBQXdCLEVBQUVDLFlBQW9CLEVBQVc7TUFDekUsTUFBTUMsWUFBeUMsR0FBR0YsYUFBYSxDQUFDRyxXQUFXLENBQUNwQixZQUFZLENBQUM7TUFDekYsSUFBSSxDQUFDbUIsWUFBWSxFQUFFO1FBQ2xCLE9BQU8sS0FBSztNQUNiLENBQUMsTUFBTTtRQUNOLE9BQU9BLFlBQVksQ0FBQ0UsUUFBUSxDQUFDSCxZQUFZLENBQUM7TUFDM0M7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFD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
781
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNWUFDVElWSVRJRVMiLCJBQ1RJVkVVU0VSUyIsIkFDVElWSVRJRVMiLCJBU1lOQ01FU1NBR0VTUVVFVUUiLCJSRVRBSU5FREFTWU5DTUVTU0FHRVMiLCJBU1lOQ01FU1NBR0VTVElNRVJJRCIsIlNZTkNHUk9VUElEIiwiREVMQVlPTkZPQ1VTIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIl9TZXJ2aWNlIiwiX2luaGVyaXRzTG9vc2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiY2hlY2tQYXRoRm9yTG9jayIsImFjdGl2aXR5TW9kZWwiLCJhY3Rpdml0eVBhdGgiLCJteUFjdGl2aXRpZXMiLCJnZXRQcm9wZXJ0eSIsImluY2x1ZGVzIiwic2V0TG9jayIsInB1c2giLCJzZXRQcm9wZXJ0eSIsInJlbW92ZUxvY2siLCJhY3Rpdml0eVBhdGhzIiwidW5kZWZpbmVkIiwicGF0aHNUb1JlbW92ZSIsIkFycmF5IiwiaXNBcnJheSIsIm15TmV3QWN0aXZpdGllcyIsImZpbHRlciIsImFjdGl2aXR5IiwibGVuZ3RoIiwiZ2V0TG9ja2VkUHJvcGVydGllcyIsImpvaW4iLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiZWxlbWVudCIsIm9sZENvbnRleHRQYXRoIiwibmV3Q29udGV4dFBhdGgiLCJpc0Nvbm5lY3RlZCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImN1cnJlbnRRdWV1ZSIsImZvckVhY2giLCJxdWV1ZUl0ZW0iLCJwYXRoIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJjaGFuZ2VkQWN0aXZpdGllcyIsInVuY2hhbmdlZEFjdGl2aXRpZXMiLCJsb2NrZWRQYXRoIiwibmV3bG9ja2VkUGF0aCIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkxvY2siLCJjb250ZW50IiwicmVzZXRBc3luY01lc3NhZ2VzVGltZXIiLCJ0aW1lcklkIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInF1ZXVlIiwibmV3UXVldWUiLCJwYXRoc1RvUmV0YWluIiwiaXRlbSIsImRvU2VuZCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJhZGRpdGlvbmFsUGF0aHNUb1JldGFpbiIsInJldGFpbmVkUGF0aHMiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsInBhdGhzVG9SZWxlYXNlIiwicmV0YWluZWRQYXRoIiwiaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwibWVzc2FnZSIsIlVubG9jayIsImRvU2VuZEFzeW5jIiwidHJpZ2dlcmVkQWN0aW9uTmFtZSIsInJlZnJlc2hMaXN0QmluZGluZyIsImFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXMiLCJjbGllbnRDb250ZW50IiwicmVxdWVzdGVkUHJvcGVydGllcyIsInBhdGhGb3JMb2NrIiwicmVtb3ZlZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwicGF0aHNUb0FkZCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJ2aWV3IiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJnZXRNZXRhTW9kZWwiLCJjb25uZWN0IiwibWUiLCJDb2xsYWJvcmF0aW9uVXRpbHMiLCJnZXRNZSIsInNEcmFmdFVVSUQiLCJyZXF1ZXN0UHJvcGVydHkiLCJpbml0aWFsaXplZCIsImluaXRpYWxpemVDb2xsYWJvcmF0aW9uIiwibWVzc2FnZVJlY2VpdmUiLCJkaXNjb25uZWN0IiwiZW5kQ29sbGFib3JhdGlvbiIsInVzZXJKb2luRHJhZnQiLCJhY3RpdmVVc2VycyIsInNlbmRlciIsImZpbmRJbmRleCIsInVzZXIiLCJpZCIsInVuc2hpZnQiLCJ1c2VyQWN0aW9uIiwiSm9pbiIsIkpvaW5FY2hvIiwidXNlckxlYXZlRHJhZnQiLCJhbGxBY3Rpdml0aWVzIiwicmVtb3ZlVXNlckFjdGl2aXRpZXMiLCJiYWciLCJwIiwiX2FjdGl2aXRpZXMiLCJfYWN0aXZpdGllczIiLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlLZXkiLCJtZXRhUGF0aCIsImNhbGN1bGF0ZU1ldGFQYXRoIiwiY2xpZW50QWN0aW9uIiwidXNlcklEIiwibmFtZSIsInVzZXJEZXNjcmlwdGlvbiIsImluaXRpYWxzIiwiZm9ybWF0SW5pdGlhbHMiLCJjb2xvciIsImdldFVzZXJDb2xvciIsIm1hY3Rpdml0eSIsIkxlYXZlIiwiQ2hhbmdlIiwidXBkYXRlT25DaGFuZ2UiLCJDcmVhdGUiLCJ1cGRhdGVPbkNyZWF0ZSIsIkRlbGV0ZSIsInVwZGF0ZU9uRGVsZXRlIiwiQWN0aXZhdGUiLCJkcmFmdENsb3NlZEJ5T3RoZXJVc2VyIiwiZ2V0VGV4dCIsIkRpc2NhcmQiLCJBY3Rpb24iLCJ1cGRhdGVPbkFjdGlvbiIsImtleSIsImdldEFjdGl2aXR5S2V5RnJvbVBhdGgiLCJpbml0SlNPTk1vZGVsIiwicGFydHMiLCJzcGxpdCIsImkiLCJzbGljZSIsImEiLCJtZXNzYWdlVGV4dCIsIk1lc3NhZ2VCb3giLCJpbmZvcm1hdGlvbiIsIm9uQ2xvc2UiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwibmF2aWdhdGUiLCJlcnJvciIsIkxvZyIsInVwZGF0ZWRPYmplY3RzUGF0aHMiLCJjdXJyZW50UGFnZSIsImdldEN1cnJlbnRQYWdlIiwiY3VycmVudENvbnRleHQiLCJyZXF1ZXN0UHJvbWlzZXMiLCJtYXAiLCJhcHBseVVwZGF0ZXNGb3JDaGFuZ2UiLCJnZXRDb250cm9sbGVyIiwiZWRpdEZsb3ciLCJ1cGRhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJwcm9wZXJ0eVBhdGhGb3JVcGRhdGUiLCJtZXRhTW9kZWwiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZGF0YU1vZGVsT2JqZWN0IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0Q29udGV4dFBhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRhcmdldENvbnRleHQiLCJmaW5kQ29udGV4dEZvclVwZGF0ZSIsInBhcmVudENvbGxlY3Rpb25QYXRoIiwicGFyZW50Q29udGV4dFBhdGgiLCJwYXJlbnRDb250ZXh0Iiwic2lkZUVmZmVjdHNQcm9taXNlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInRhcmdldE1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwicmVsYXRpdmVNZXRhUGF0aEZvclVwZGF0ZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZpZWxkR3JvdXBJZHMiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInRhcmdldEVudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJ0YXJnZXRPYmplY3QiLCJwYWdlQ29udHJvbGxlciIsInNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cCIsIl9zaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMiLCJPYmplY3QiLCJrZXlzIiwic2lkZUVmZmVjdE5hbWUiLCJzaWRlRWZmZWN0Iiwic2lkZUVmZmVjdHMiLCJjb250ZXh0IiwiZXJyIiwiY3VycmVudFBhdGgiLCJkZWxldGVkT2JqZWN0UGF0aHMiLCJkZWxldGVkUGF0aEluVXNlIiwiZmluZCIsImRlbGV0ZWRQYXRoIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsInNldEtlZXBBbGl2ZSIsInJlcXVlc3RQcm9taXNlIiwiYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbiIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJjcmVhdGVkT2JqZWN0UGF0aHMiLCJwYXRoSW5Db2xsZWN0aW9uIiwiYXBwQ29tcG9uZW50IiwicGFyZW50UGF0aCIsIm1ldGFQYXRoRm9yVXBkYXRlIiwicGFyZW50TWV0YVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJfbWVzc2FnZSRjbGllbnRSZXF1ZXMiLCJwYXRoc0ZvckFjdGlvbiIsImFjdGlvbk5hbWUiLCJjbGllbnRUcmlnZ2VyZWRBY3Rpb25OYW1lIiwiY2xpZW50UmVxdWVzdGVkUHJvcGVydGllcyIsImNsaWVudFJlZnJlc2hMaXN0QmluZGluZyIsInJlcXVlc3RVcGRhdGVGb3JBY3Rpb24iLCJwYXRoRm9yQWN0aW9uIiwic2lkZUVmZmVjdFNlcnZpY2UiLCJzaWRlRWZmZWN0c0Zyb21BY3Rpb24iLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdFByb21pc2VzIiwiX3NpZGVFZmZlY3RzRnJvbUFjdGlvIiwicGF0aEV4cHJlc3Npb25zIiwibWV0YVBhdGhGb3JBY3Rpb24iLCJkYXRhTW9kZWxQYXRoIiwiZ2V0Q29udGV4dCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm9wIiwidGFyZ2V0UGF0aHMiLCJlbmRzV2l0aCIsIl9jdXJyZW50Q29udGV4dCRnZXRCaSIsIm1vZGVsIiwicGFyZW50TGlzdEJpbmRpbmciLCJnZXRBbGxCaW5kaW5ncyIsImJpbmRpbmciLCJiaW5kaW5nUGF0aCIsImlzUmVsYXRpdmUiLCJnZXRSZXNvbHZlZFBhdGgiLCJpc0EiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsImdldENyZWF0aW9uTW9kZSIsInJvdXRpbmciLCJDb21tb25VdGlscyIsImdldEN1cnJlbnRQYWdlVmlldyIsImRhdGFQYXRoIiwiaW5pdCIsImluaXRQcm9taXNlIiwicmVzb2x2ZSIsIlNlcnZpY2UiLCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeSIsIl9TZXJ2aWNlRmFjdG9yeSIsIl9wcm90bzIiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsImNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQge1xuXHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZSxcblx0ZW5kQ29sbGFib3JhdGlvbixcblx0aW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24sXG5cdGlzQ29sbGFib3JhdGlvbkNvbm5lY3RlZFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eUJhc2VcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgVXNlciwgVXNlckFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIENvbGxhYm9yYXRpb25VdGlscywgZ2V0QWN0aXZpdHlLZXlGcm9tUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmNvbnN0IE1ZQUNUSVZJVElFUyA9IFwiL2NvbGxhYm9yYXRpb24vbXlBY3Rpdml0aWVzXCI7XG5jb25zdCBBQ1RJVkVVU0VSUyA9IFwiL2NvbGxhYm9yYXRpb24vYWN0aXZlVXNlcnNcIjtcbmNvbnN0IEFDVElWSVRJRVMgPSBcIi9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXNcIjtcbmNvbnN0IEFTWU5DTUVTU0FHRVNRVUVVRSA9IFwiL2NvbGxhYm9yYXRpb24vYXN5bmNNc2dRdWV1ZVwiO1xuY29uc3QgUkVUQUlORURBU1lOQ01FU1NBR0VTID0gXCIvY29sbGFib3JhdGlvbi9yZXRhaW5lZE1lc3NhZ2VzXCI7XG5jb25zdCBBU1lOQ01FU1NBR0VTVElNRVJJRCA9IFwiL2NvbGxhYm9yYXRpb24vYXN5bmNNc2dUaW1lcklkXCI7XG5jb25zdCBTWU5DR1JPVVBJRCA9IFwiJGF1dG8uc3luY1wiO1xuXG5jb25zdCBERUxBWU9ORk9DVVMgPSA1MDA7IC8vIDUwMG1zIGRlbGF5IGZvciBhc3luYyBMT0NLL1VOTE9DSyBtZXNzYWdlc1xuXG50eXBlIEFzeW5jTWVzc2FnZSA9IHtcblx0cGF0aDogc3RyaW5nO1xuXHRhY3Rpb246IEFjdGl2aXR5LlVubG9jayB8IEFjdGl2aXR5LkxvY2s7XG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSBleHRlbmRzIFNlcnZpY2U8Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3Rvcnk+IHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U+O1xuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBnaXZlbiBwYXRoIGlzIGxvY2tlZCBieSB0aGUgY3VycmVudCB1c2VyLlxuXHQgKiBAcGFyYW0gYWN0aXZpdHlNb2RlbFxuXHQgKiBAcGFyYW0gYWN0aXZpdHlQYXRoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHBhdGggaXMgbG9ja2VkXG5cdCAqL1xuXHRjaGVja1BhdGhGb3JMb2NrKGFjdGl2aXR5TW9kZWw6IEpTT05Nb2RlbCwgYWN0aXZpdHlQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBteUFjdGl2aXRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IGFjdGl2aXR5TW9kZWwuZ2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTKTtcblx0XHRpZiAoIW15QWN0aXZpdGllcykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbXlBY3Rpdml0aWVzLmluY2x1ZGVzKGFjdGl2aXR5UGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBwYXRoIGFzIGxvY2tlZCBmb3IgdGhlIGN1cnJlbnQgdXNlci5cblx0ICogQHBhcmFtIGFjdGl2aXR5TW9kZWxcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aFxuXHQgKi9cblx0c2V0TG9jayhhY3Rpdml0eU1vZGVsOiBKU09OTW9kZWwsIGFjdGl2aXR5UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSA9IGFjdGl2aXR5TW9kZWwuZ2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTKSA/PyBbXTtcblx0XHRpZiAoIW15QWN0aXZpdGllcy5pbmNsdWRlcyhhY3Rpdml0eVBhdGgpKSB7XG5cdFx0XHRteUFjdGl2aXRpZXMucHVzaChhY3Rpdml0eVBhdGgpO1xuXHRcdH1cblxuXHRcdGFjdGl2aXR5TW9kZWwuc2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTLCBteUFjdGl2aXRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGxvY2sgZm9yIGEgZ2l2ZW4gcGF0aC5cblx0ICogQHBhcmFtIGFjdGl2aXR5TW9kZWxcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aHNcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcGF0aCB3YXMgcHJldmlvdXNseSBsb2NrZWRcblx0ICovXG5cdHJlbW92ZUxvY2soYWN0aXZpdHlNb2RlbDogSlNPTk1vZGVsLCBhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gYWN0aXZpdHlNb2RlbC5nZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMpO1xuXHRcdGlmICghbXlBY3Rpdml0aWVzIHx8IGFjdGl2aXR5UGF0aHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhdGhzVG9SZW1vdmUgPSBBcnJheS5pc0FycmF5KGFjdGl2aXR5UGF0aHMpID8gYWN0aXZpdHlQYXRocyA6IFthY3Rpdml0eVBhdGhzXTtcblx0XHRjb25zdCBteU5ld0FjdGl2aXRpZXMgPSBteUFjdGl2aXRpZXMuZmlsdGVyKChhY3Rpdml0eSkgPT4ge1xuXHRcdFx0cmV0dXJuICFwYXRoc1RvUmVtb3ZlLmluY2x1ZGVzKGFjdGl2aXR5KTtcblx0XHR9KTtcblx0XHRhY3Rpdml0eU1vZGVsLnNldFByb3BlcnR5KE1ZQUNUSVZJVElFUywgbXlOZXdBY3Rpdml0aWVzKTtcblxuXHRcdHJldHVybiBteU5ld0FjdGl2aXRpZXMubGVuZ3RoICE9PSBteUFjdGl2aXRpZXMubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYWxsIGxvY2tlZCBwYXRocyBmb3IgdGhlIGN1cnJlbnQgdXNlci5cblx0ICogQHBhcmFtIGFjdGl2aXR5TW9kZWxcblx0ICogQHJldHVybnMgQ29uY2F0ZW5hdGVkIHBhdGhzIGZvciBhbGwgbG9ja2VkIHByb3BlcnRpZXNcblx0ICovXG5cdGdldExvY2tlZFByb3BlcnRpZXMoYWN0aXZpdHlNb2RlbDogSlNPTk1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBteUFjdGl2aXRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IGFjdGl2aXR5TW9kZWwuZ2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTKTtcblx0XHRpZiAoIW15QWN0aXZpdGllcykge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG15QWN0aXZpdGllcy5qb2luKFwifFwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBhbGwgY3VycmVudCBsb2NrcyBieSBjaGFuZ2luZyBhIGNvbnRleHQgcGF0aC5cblx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiBhY3RpdmF0aW5nIGEgY29udGV4dCwgd2hlcmUgdGhlIGluaXRpYWwgbG9ja3Mgd2VyZSB1c2luZyB0aGUgdHJhbnNpZW50IHBhdGhcblx0ICogYW5kIG5lZWQgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBhY3R1YWwgcGF0aC5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHBhcmFtIG9sZENvbnRleHRQYXRoXG5cdCAqIEBwYXJhbSBuZXdDb250ZXh0UGF0aFxuXHQgKi9cblx0dXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aChlbGVtZW50OiBVSTVFbGVtZW50LCBvbGRDb250ZXh0UGF0aDogc3RyaW5nLCBuZXdDb250ZXh0UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmlzQ29ubmVjdGVkKGVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGVsZW1lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHQvLyBSZXBsYWNlIHBhdGhzIGluIHBlbmRpbmcgYXN5bmMgbWVzc2FnZXNcblx0XHRjb25zdCBjdXJyZW50UXVldWU6IEFzeW5jTWVzc2FnZVtdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTUVVFVUUpO1xuXHRcdGN1cnJlbnRRdWV1ZS5mb3JFYWNoKChxdWV1ZUl0ZW0pID0+IHtcblx0XHRcdGlmIChxdWV1ZUl0ZW0ucGF0aC5zdGFydHNXaXRoKG9sZENvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRxdWV1ZUl0ZW0ucGF0aCA9IHF1ZXVlSXRlbS5wYXRoLnJlcGxhY2Uob2xkQ29udGV4dFBhdGgsIG5ld0NvbnRleHRQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIFJlcGxhY2UgcGF0aHMgaW4gZXhpc3RpbmcgbG9ja3MgKGFuZCBicm9hZGNhc3QgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBpZiBuZWNlc3NhcnkpXG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUyk7XG5cdFx0aWYgKG15QWN0aXZpdGllcykge1xuXHRcdFx0Y29uc3QgY2hhbmdlZEFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRjb25zdCB1bmNoYW5nZWRBY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0bXlBY3Rpdml0aWVzLmZvckVhY2goKGxvY2tlZFBhdGgpID0+IHtcblx0XHRcdFx0aWYgKGxvY2tlZFBhdGguc3RhcnRzV2l0aChvbGRDb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0XHQvLyBSZXBsYWNlIHRoZSBwYXRoIGluIHRoZSBsaXN0IG9mIGxvY2tzLCBhbmQgc3RvcmUgdGhpcyBwYXRoIGZvciBzZW5kaW5nIGEgbmV3IExPQ0sgbWVzc2FnZVxuXHRcdFx0XHRcdGNvbnN0IG5ld2xvY2tlZFBhdGggPSBsb2NrZWRQYXRoLnJlcGxhY2Uob2xkQ29udGV4dFBhdGgsIG5ld0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRjaGFuZ2VkQWN0aXZpdGllcy5wdXNoKG5ld2xvY2tlZFBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuY2hhbmdlZEFjdGl2aXRpZXMucHVzaChsb2NrZWRQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTLCB1bmNoYW5nZWRBY3Rpdml0aWVzKTtcblx0XHRcdGlmIChjaGFuZ2VkQWN0aXZpdGllcy5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0dGhpcy5zZW5kKGVsZW1lbnQsIHsgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrLCBjb250ZW50OiBjaGFuZ2VkQWN0aXZpdGllcyB9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSB0aW1lciBmb3Igc2VuZGluZyBhc3luY2hyb25vdXMgY29sbGFib3JhdGlvbiBtZXNzYWdlcy5cblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxcblx0ICovXG5cdHJlc2V0QXN5bmNNZXNzYWdlc1RpbWVyKGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGxldCB0aW1lcklkID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTVElNRVJJRCk7XG5cdFx0aWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuXHRcdH1cblxuXHRcdHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGNvbnN0IHF1ZXVlOiBBc3luY01lc3NhZ2VbXSB8IHVuZGVmaW5lZCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFKTtcblx0XHRcdGNvbnN0IG5ld1F1ZXVlOiBBc3luY01lc3NhZ2VbXSA9IFtdO1xuXHRcdFx0Y29uc3QgcGF0aHNUb1JldGFpbjogc3RyaW5nW10gPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFJFVEFJTkVEQVNZTkNNRVNTQUdFUykgPz8gW107XG5cblx0XHRcdGlmICghcXVldWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRxdWV1ZS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChwYXRoc1RvUmV0YWluLmluY2x1ZGVzKGl0ZW0ucGF0aCkpIHtcblx0XHRcdFx0XHRuZXdRdWV1ZS5wdXNoKGl0ZW0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZG9TZW5kKGludGVybmFsTW9kZWwsIGl0ZW0uYWN0aW9uLCBpdGVtLnBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTUVVFVUUsIG5ld1F1ZXVlKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1RJTUVSSUQsIHVuZGVmaW5lZCk7XG5cblx0XHRcdGlmIChuZXdRdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gSWYgc29tZSBtZXNzYWdlcyBhcmUgc3RpbGwgcGVuZGluZywgcmVzY2hlZHVsZSBhIG5ldyB0aW1lclxuXHRcdFx0XHR0aGlzLnJlc2V0QXN5bmNNZXNzYWdlc1RpbWVyKGludGVybmFsTW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0sIERFTEFZT05GT0NVUyk7XG5cblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNUSU1FUklELCB0aW1lcklkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYXJrIHNvbWUgcGF0aHMgYXMgYmVpbmcgcmV0YWluZWQsIGkuZS4gYXN5bmMgbWVzc2FnZXMgZm9yIHRoZXNlIHBhdGhzIHdvbid0IGJlIHNlbnQgYnV0IGtlcHQgdW50aWwgdGhleSdyZSByZWxlYXNlZC5cblx0ICogVGhpcyBhcHBsaWVzIHRvIGV4aXN0aW5nIGFzeW5jIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZSwgYnV0IGFsc28gdG8gZnV0dXJlIG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcGFyYW0gYWN0aXZpdHlQYXRocyBUaGUgcGF0aHMgdG8gYmUgcmV0YWluZWRcblx0ICovXG5cdHJldGFpbkFzeW5jTWVzc2FnZXMoZWxlbWVudDogVUk1RWxlbWVudCwgYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRjb25zdCBhZGRpdGlvbmFsUGF0aHNUb1JldGFpbiA9IEFycmF5LmlzQXJyYXkoYWN0aXZpdHlQYXRocykgPyBhY3Rpdml0eVBhdGhzIDogW2FjdGl2aXR5UGF0aHNdO1xuXG5cdFx0Y29uc3QgcmV0YWluZWRQYXRoczogc3RyaW5nW10gPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFJFVEFJTkVEQVNZTkNNRVNTQUdFUyk7XG5cdFx0YWRkaXRpb25hbFBhdGhzVG9SZXRhaW4uZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdFx0aWYgKCFyZXRhaW5lZFBhdGhzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHRcdHJldGFpbmVkUGF0aHMucHVzaChwYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWxlYXNlIGFzeW5jIG1lc3NhZ2VzIGZvciBzb21lIHBhdGhzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJldGFpbmVkLlxuXHQgKiBUaGUgY29ycmVzcG9uZGluZyBtZXNzYWdlcyBhcmUgbm90IHNlbnQgaW1tZWRpYXRlbHksIGJ1dCB0aGUgbmV4dCB0aW1lIHRoZSBhc3luYyB0aW1lciB3YWtlcyB1cC5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aHMgVGhlIHBhdGhzIHRvIGJlIHJlbGVhc2VkXG5cdCAqL1xuXHRyZWxlYXNlQXN5bmNNZXNzYWdlcyhlbGVtZW50OiBVSTVFbGVtZW50LCBhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBlbGVtZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGNvbnN0IHBhdGhzVG9SZXRhaW46IHN0cmluZ1tdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShSRVRBSU5FREFTWU5DTUVTU0FHRVMpO1xuXHRcdGNvbnN0IHBhdGhzVG9SZWxlYXNlID0gQXJyYXkuaXNBcnJheShhY3Rpdml0eVBhdGhzKSA/IGFjdGl2aXR5UGF0aHMgOiBbYWN0aXZpdHlQYXRoc107XG5cblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0UkVUQUlORURBU1lOQ01FU1NBR0VTLFxuXHRcdFx0cGF0aHNUb1JldGFpbi5maWx0ZXIoKHJldGFpbmVkUGF0aCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gIXBhdGhzVG9SZWxlYXNlLmluY2x1ZGVzKHJldGFpbmVkUGF0aCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgY29sbGFib3JhdGlvbiBzZXNzaW9uIGlzIGN1cnJlbnRseSBvcGVuLlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sbGFib3JhdGlvbiBzZXNzaW9uIGlzIGN1cnJlbnRseSBvcGVuLlxuXHQgKi9cblx0aXNDb25uZWN0ZWQoZWxlbWVudDogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBlbGVtZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdHJldHVybiBpc0NvbGxhYm9yYXRpb25Db25uZWN0ZWQoaW50ZXJuYWxNb2RlbCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VuZHMgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgdG8gb3RoZXIgY29ubmVjdGVkIHVzZXJzLlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZS5hY3Rpb25cblx0ICogQHBhcmFtIG1lc3NhZ2UuY29udGVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZS50cmlnZ2VyZWRBY3Rpb25OYW1lXG5cdCAqIEBwYXJhbSBtZXNzYWdlLnJlZnJlc2hMaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gbWVzc2FnZS5hY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzXG5cdCAqL1xuXHRwdWJsaWMgc2VuZChcblx0XHRlbGVtZW50OiBVSTVFbGVtZW50LFxuXHRcdG1lc3NhZ2U6IHtcblx0XHRcdGFjdGlvbjogQWN0aXZpdHk7XG5cdFx0XHRjb250ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblx0XHRcdHRyaWdnZXJlZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdFx0XHRyZWZyZXNoTGlzdEJpbmRpbmc/OiBib29sZWFuO1xuXHRcdFx0YWN0aW9uUmVxdWVzdGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdH1cblx0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaXNDb25uZWN0ZWQoZWxlbWVudCkpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBlbGVtZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0aWYgKG1lc3NhZ2UuYWN0aW9uID09PSBBY3Rpdml0eS5Mb2NrIHx8IG1lc3NhZ2UuYWN0aW9uID09PSBBY3Rpdml0eS5VbmxvY2spIHtcblx0XHRcdFx0Ly8gTG9jay1yZWxhdGVkIGV2ZW50cyBhcmUgYWx3YXlzIHNlbnQgd2l0aCBzb21lIGRlbGF5XG5cdFx0XHRcdHRoaXMuZG9TZW5kQXN5bmMoaW50ZXJuYWxNb2RlbCwgbWVzc2FnZS5hY3Rpb24sIG1lc3NhZ2UuY29udGVudCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmRvU2VuZChcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2UuYWN0aW9uLFxuXHRcdFx0XHRcdG1lc3NhZ2UuY29udGVudCxcblx0XHRcdFx0XHRtZXNzYWdlLnRyaWdnZXJlZEFjdGlvbk5hbWUsXG5cdFx0XHRcdFx0bWVzc2FnZS5yZWZyZXNoTGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0bWVzc2FnZS5hY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgaW1tZWRpYXRlbHkuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRlbnRcblx0ICogQHBhcmFtIHRyaWdnZXJlZEFjdGlvbk5hbWVcblx0ICogQHBhcmFtIHJlZnJlc2hMaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gYWN0aW9uUmVxdWVzdGVkUHJvcGVydGllc1xuXHQgKi9cblx0ZG9TZW5kKFxuXHRcdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRhY3Rpb246IEFjdGl2aXR5LFxuXHRcdGNvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuXHRcdHRyaWdnZXJlZEFjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdFx0cmVmcmVzaExpc3RCaW5kaW5nPzogYm9vbGVhbixcblx0XHRhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW11cblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY2xpZW50Q29udGVudCA9IChBcnJheS5pc0FycmF5KGNvbnRlbnQpID8gY29udGVudC5qb2luKFwifFwiKSA6IGNvbnRlbnQpID8/IFwiXCI7XG5cdFx0Y29uc3QgcmVxdWVzdGVkUHJvcGVydGllcyA9IGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXM/LmpvaW4oXCJ8XCIpO1xuXHRcdGlmIChhY3Rpb24gPT09IEFjdGl2aXR5LkxvY2spIHtcblx0XHRcdGNvbnN0IHBhdGhGb3JMb2NrID0gKEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50WzBdIDogY29udGVudCkgPz8gXCJcIjtcblx0XHRcdC8vIFRvIGF2b2lkIHVubmVjZXNzYXJ5IHRyYWZmaWMgd2Uga2VlcCB0cmFjayBvZiBsb2NrIGNoYW5nZXMgYW5kIHNlbmQgaXQgb25seSBvbmNlXG5cdFx0XHRpZiAodGhpcy5jaGVja1BhdGhGb3JMb2NrKGludGVybmFsTW9kZWwsIHBhdGhGb3JMb2NrKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldExvY2soaW50ZXJuYWxNb2RlbCwgcGF0aEZvckxvY2spO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSBBY3Rpdml0eS5VbmxvY2spIHtcblx0XHRcdGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJlbW92ZUxvY2soaW50ZXJuYWxNb2RlbCwgY29udGVudCk7XG5cdFx0XHQvLyBObyBuZWVkIHRvIHNlbmQgYW4gVW5sb2NrIG1lc3NhZ2UgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IGxvY2tlZFxuXHRcdFx0aWYgKCFyZW1vdmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShhY3Rpb24sIGNsaWVudENvbnRlbnQsIGludGVybmFsTW9kZWwsIHRyaWdnZXJlZEFjdGlvbk5hbWUsIHJlZnJlc2hMaXN0QmluZGluZywgcmVxdWVzdGVkUHJvcGVydGllcyk7XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2VuZCBhIGNvbGxhYm9yYXRpb24gbWVzc2FnZSBhc3luY2hyb25vdXNseS5cblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcGFyYW0gY29udGVudFxuXHQgKi9cblx0ZG9TZW5kQXN5bmMoaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBhY3Rpb246IEFjdGl2aXR5LkxvY2sgfCBBY3Rpdml0eS5VbmxvY2ssIGNvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50UXVldWU6IEFzeW5jTWVzc2FnZVtdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTUVVFVUUpO1xuXHRcdGNvbnN0IHBhdGhzVG9BZGQgPSBBcnJheS5pc0FycmF5KGNvbnRlbnQpID8gY29udGVudCA6IFtjb250ZW50XTtcblx0XHQvLyBSZW1vdmUgZXhpc3RpbmcgaXRlbXMgaW4gdGhlIHF1ZXVlIGZvciB0aGUgcGF0aHMgdGhhdCB3aWxsIGJlIGFkZGVkXG5cdFx0Y29uc3QgbmV3UXVldWUgPSBjdXJyZW50UXVldWUuZmlsdGVyKChpdGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gIXBhdGhzVG9BZGQuaW5jbHVkZXMoaXRlbS5wYXRoKTtcblx0XHR9KTtcblx0XHRwYXRoc1RvQWRkLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdG5ld1F1ZXVlLnB1c2goeyBwYXRoLCBhY3Rpb24gfSk7XG5cdFx0fSk7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTUVVFVUUsIG5ld1F1ZXVlKTtcblx0XHR0aGlzLnJlc2V0QXN5bmNNZXNzYWdlc1RpbWVyKGludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0aXNDb2xsYWJvcmF0aW9uRW5hYmxlZCh2aWV3OiBWaWV3KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2aWV3Py5nZXRCaW5kaW5nQ29udGV4dCAmJiAodmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdHJldHVybiAhIShiaW5kaW5nQ29udGV4dCAmJiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gdmlldyAgVGhlIHZpZXcgdGhhdCBpcyB1c2VkIHRvIGNvbm5lY3QgdGhlIHdlYnNvY2tldFxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBjb25uZWN0KHZpZXc6IEZFVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgbWUgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0TWUodmlldyk7XG5cblx0XHQvLyBSZXRyaWV2aW5nIE1FIGZyb20gc2hlbGwgc2VydmljZVxuXHRcdGlmICghbWUpIHtcblx0XHRcdC8vIG5vIG1lID0gbm8gc2hlbGwgPSBub3Qgc3VyZSB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRjb25zdCBzRHJhZnRVVUlEID0gYXdhaXQgYmluZGluZ0NvbnRleHQucmVxdWVzdFByb3BlcnR5KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRVVUlEXCIpO1xuXHRcdGlmICghc0RyYWZ0VVVJRCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluaXRpYWxpemVkID0gaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24oXG5cdFx0XHRtZSxcblx0XHRcdHNEcmFmdFVVSUQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlUmVjZWl2ZShtZXNzYWdlLCB2aWV3KTtcblx0XHRcdH0sXG5cdFx0XHR2aWV3XG5cdFx0KTtcblxuXHRcdGlmIChpbml0aWFsaXplZCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBbXSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFJFVEFJTkVEQVNZTkNNRVNTQUdFUywgW10pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBjbG9zZSBhIGNvbm5lY3Rpb24gd2l0aCBhIGNvbGxhYm9yYXRpdmUgZHJhZnQgc2VydmljZS5cblx0ICogQHBhcmFtIHZpZXcgQ3VycmVudCBWaWV3XG5cdCAqL1xuXHRkaXNjb25uZWN0KHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0ZW5kQ29sbGFib3JhdGlvbihpbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byB1cGRhdGUgaW50ZXJuYWwgbW9kZWwgd2hlbiBhIHVzZXIgam9pbnMgdGhlIGRyYWZ0LlxuXHQgKiBAcGFyYW0gYWN0aXZlVXNlcnMgTGlzdCBvZiBjb25uZWN0ZWQgdXNlcnNcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIHNlbmRlciBVc2VyIHNlbmRpbmcgdGhlIEpPSU4gb3IgSk9JTkVDSE8gbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gdmlldyBDdXJyZW50IFZpZXdcblx0ICovXG5cdHVzZXJKb2luRHJhZnQoYWN0aXZlVXNlcnM6IFVzZXJbXSwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBzZW5kZXI6IFVzZXIsIG1lc3NhZ2U6IE1lc3NhZ2UsIHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGlmIChhY3RpdmVVc2Vycy5maW5kSW5kZXgoKHVzZXIpID0+IHVzZXIuaWQgPT09IHNlbmRlci5pZCkgPT09IC0xKSB7XG5cdFx0XHRhY3RpdmVVc2Vycy51bnNoaWZ0KHNlbmRlcik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWRVVTRVJTLCBhY3RpdmVVc2Vycyk7XG5cdFx0fVxuXG5cdFx0aWYgKG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gQWN0aXZpdHkuSm9pbikge1xuXHRcdFx0Ly8gd2UgZWNobyBvdXIgZXhpc3RlbmNlIHRvIHRoZSBuZXdseSBlbnRlcmVkIHVzZXIgYW5kIGFsc28gc2VuZCB0aGUgY3VycmVudCBhY3Rpdml0eSBpZiB0aGVyZSBpcyBhbnlcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkpvaW5FY2hvLCB0aGlzLmdldExvY2tlZFByb3BlcnRpZXMoaW50ZXJuYWxNb2RlbCksIGludGVybmFsTW9kZWwpO1xuXHRcdH1cblxuXHRcdGlmIChtZXNzYWdlLnVzZXJBY3Rpb24gPT09IEFjdGl2aXR5LkpvaW5FY2hvKSB7XG5cdFx0XHRpZiAobWVzc2FnZS5jbGllbnRDb250ZW50KSB7XG5cdFx0XHRcdC8vIGFub3RoZXIgdXNlciB3YXMgYWxyZWFkeSB0eXBpbmcgdGhlcmVmb3JlIEkgd2FudCB0byBzZWUgaGlzIGFjdGl2aXR5IGltbWVkaWF0ZWx5LiBDYWxsaW5nIG1lIGFnYWluIGFzIGEgbGl2ZSBjaGFuZ2Vcblx0XHRcdFx0bWVzc2FnZS51c2VyQWN0aW9uID0gQWN0aXZpdHkuTG9jaztcblx0XHRcdFx0dGhpcy5tZXNzYWdlUmVjZWl2ZShtZXNzYWdlLCB2aWV3KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gdXBkYXRlIGludGVybmFsIG1vZGVsIHdoZW4gYSB1c2VyIGxlYXZlcyB0aGUgZHJhZnQuXG5cdCAqIEBwYXJhbSBhY3RpdmVVc2VycyBMaXN0IG9mIGNvbm5lY3RlZCB1c2Vyc1xuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gc2VuZGVyIFVzZXIgc2VuZGluZyB0aGUgSk9JTiBvciBKT0lORUNITyBtZXNzYWdlXG5cdCAqL1xuXHR1c2VyTGVhdmVEcmFmdChhY3RpdmVVc2VyczogVXNlcltdLCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIHNlbmRlcjogVXNlcik6IHZvaWQge1xuXHRcdC8vIFJlbW92aW5nIHRoZSBhY3RpdmUgdXNlci4gTm90IHJlbW92aW5nIFwibWVcIiBpZiBJIGhhZCB0aGUgc2NyZWVuIG9wZW4gaW4gYW5vdGhlciBzZXNzaW9uXG5cdFx0YWN0aXZlVXNlcnMgPSBhY3RpdmVVc2Vycy5maWx0ZXIoKHVzZXIpID0+IHVzZXIuaWQgIT09IHNlbmRlci5pZCB8fCB1c2VyLm1lKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWRVVTRVJTLCBhY3RpdmVVc2Vycyk7XG5cdFx0Y29uc3QgYWxsQWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUykgfHwge307XG5cdFx0Y29uc3QgcmVtb3ZlVXNlckFjdGl2aXRpZXMgPSBmdW5jdGlvbiAoYmFnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFVzZXJBY3Rpdml0eVtdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBVc2VyQWN0aXZpdHlbXSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShiYWcpKSB7XG5cdFx0XHRcdHJldHVybiBiYWcuZmlsdGVyKChhY3Rpdml0eSkgPT4gYWN0aXZpdHkuaWQgIT09IHNlbmRlci5pZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHAgaW4gYmFnKSB7XG5cdFx0XHRcdFx0YmFnW3BdID0gcmVtb3ZlVXNlckFjdGl2aXRpZXMoYmFnW3BdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgVXNlckFjdGl2aXR5W10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBiYWc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZW1vdmVVc2VyQWN0aXZpdGllcyhhbGxBY3Rpdml0aWVzKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMsIGFsbEFjdGl2aXRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldC5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWRcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdG1lc3NhZ2VSZWNlaXZlKG1lc3NhZ2U6IE1lc3NhZ2UsIHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgYWN0aXZlVXNlcnM6IFVzZXJbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZFVVNFUlMpO1xuXHRcdGxldCBhY3Rpdml0aWVzOiBVc2VyQWN0aXZpdHlbXTtcblx0XHRsZXQgYWN0aXZpdHlLZXk6IHN0cmluZztcblx0XHRjb25zdCBtZXRhUGF0aCA9IHRoaXMuY2FsY3VsYXRlTWV0YVBhdGgodmlldywgbWVzc2FnZS5jbGllbnRDb250ZW50KTtcblx0XHRtZXNzYWdlLnVzZXJBY3Rpb24gPSBtZXNzYWdlLnVzZXJBY3Rpb24gfHwgbWVzc2FnZS5jbGllbnRBY3Rpb247XG5cblx0XHRjb25zdCBzZW5kZXI6IFVzZXIgPSB7XG5cdFx0XHRpZDogbWVzc2FnZS51c2VySUQsXG5cdFx0XHRuYW1lOiBtZXNzYWdlLnVzZXJEZXNjcmlwdGlvbixcblx0XHRcdGluaXRpYWxzOiBDb2xsYWJvcmF0aW9uVXRpbHMuZm9ybWF0SW5pdGlhbHMobWVzc2FnZS51c2VyRGVzY3JpcHRpb24pLFxuXHRcdFx0Y29sb3I6IENvbGxhYm9yYXRpb25VdGlscy5nZXRVc2VyQ29sb3IobWVzc2FnZS51c2VySUQsIGFjdGl2ZVVzZXJzLCBbXSlcblx0XHR9O1xuXG5cdFx0bGV0IG1hY3Rpdml0eTogVXNlckFjdGl2aXR5ID0gc2VuZGVyO1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuXHRcdHN3aXRjaCAobWVzc2FnZS51c2VyQWN0aW9uKSB7XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkpvaW46XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkpvaW5FY2hvOlxuXHRcdFx0XHR0aGlzLnVzZXJKb2luRHJhZnQoYWN0aXZlVXNlcnMsIGludGVybmFsTW9kZWwsIHNlbmRlciwgbWVzc2FnZSwgdmlldyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxlYXZlOlxuXHRcdFx0XHR0aGlzLnVzZXJMZWF2ZURyYWZ0KGFjdGl2ZVVzZXJzLCBpbnRlcm5hbE1vZGVsLCBzZW5kZXIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5DaGFuZ2U6XG5cdFx0XHRcdHRoaXMudXBkYXRlT25DaGFuZ2UodmlldywgbWVzc2FnZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkNyZWF0ZTpcblx0XHRcdFx0Ly8gRm9yIGNyZWF0ZSB3ZSBhY3R1YWxseSBqdXN0IG5lZWQgdG8gcmVmcmVzaCB0aGUgdGFibGVcblx0XHRcdFx0dGhpcy51cGRhdGVPbkNyZWF0ZSh2aWV3LCBtZXNzYWdlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuRGVsZXRlOlxuXHRcdFx0XHQvLyBGb3Igbm93IGFsc28gcmVmcmVzaCB0aGUgcGFnZSBidXQgaW4gY2FzZSBvZiBkZWxldGlvbiB3ZSBuZWVkIHRvIGluZm9ybSB0aGUgdXNlclxuXHRcdFx0XHR0aGlzLnVwZGF0ZU9uRGVsZXRlKHZpZXcsIG1lc3NhZ2UpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5BY3RpdmF0ZTpcblx0XHRcdFx0dGhpcy5kcmFmdENsb3NlZEJ5T3RoZXJVc2VyKFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0bWVzc2FnZS5jbGllbnRDb250ZW50LFxuXHRcdFx0XHRcdENvbGxhYm9yYXRpb25VdGlscy5nZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfQUNUSVZBVEVcIiwgc2VuZGVyLm5hbWUpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkRpc2NhcmQ6XG5cdFx0XHRcdHRoaXMuZHJhZnRDbG9zZWRCeU90aGVyVXNlcihcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHRcdG1lc3NhZ2UuY2xpZW50Q29udGVudCxcblx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0RJU0NBUkRcIiwgc2VuZGVyLm5hbWUpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkFjdGlvbjpcblx0XHRcdFx0dGhpcy51cGRhdGVPbkFjdGlvbih2aWV3LCBtZXNzYWdlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuTG9jazpcblx0XHRcdFx0bWFjdGl2aXR5ID0gc2VuZGVyO1xuXHRcdFx0XHRtYWN0aXZpdHkua2V5ID0gZ2V0QWN0aXZpdHlLZXlGcm9tUGF0aChtZXNzYWdlLmNsaWVudENvbnRlbnQpO1xuXG5cdFx0XHRcdC8vIHN0dXBpZCBKU09OIG1vZGVsLi4uXG5cdFx0XHRcdGxldCBpbml0SlNPTk1vZGVsID0gXCJcIjtcblx0XHRcdFx0Y29uc3QgcGFydHMgPSBtZXRhUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0aW5pdEpTT05Nb2RlbCArPSBgLyR7cGFydHNbaV19YDtcblx0XHRcdFx0XHRpZiAoIWludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIGluaXRKU09OTW9kZWwpKSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMgKyBpbml0SlNPTk1vZGVsLCB7fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoKTtcblx0XHRcdFx0YWN0aXZpdGllcyA9IGFjdGl2aXRpZXM/LnNsaWNlID8gYWN0aXZpdGllcy5zbGljZSgpIDogW107XG5cdFx0XHRcdGFjdGl2aXRpZXMucHVzaChtYWN0aXZpdHkpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMgKyBtZXRhUGF0aCwgYWN0aXZpdGllcyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LlVubG9jazpcblx0XHRcdFx0Ly8gVGhlIHVzZXIgZGlkIGEgY2hhbmdlIGJ1dCByZXZlcnRlZCBpdCwgdGhlcmVmb3JlIHVuYmxvY2sgdGhlIGNvbnRyb2xcblx0XHRcdFx0YWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoKTtcblx0XHRcdFx0YWN0aXZpdHlLZXkgPSBnZXRBY3Rpdml0eUtleUZyb21QYXRoKG1lc3NhZ2UuY2xpZW50Q29udGVudCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoLCBhY3Rpdml0aWVzPy5maWx0ZXIoKGEpID0+IGEua2V5ICE9PSBhY3Rpdml0eUtleSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgYSBtZXNzYWdlIHRoYXQgdGhlIGN1cnJlbnQgZHJhZnQgd2FzIGNsb3NlZCBiZSBhbm90aGVyIHVzZXIsIGFuZCBuYXZpZ2F0ZXMgYmFjayB0byBhIHByb3BlciB2aWV3LlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBuYXZpZ2F0ZSB0b1xuXHQgKiBAcGFyYW0gbWVzc2FnZVRleHQgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheVxuXHQgKi9cblx0ZHJhZnRDbG9zZWRCeU90aGVyVXNlcih2aWV3OiBGRVZpZXcsIHBhdGg6IHN0cmluZywgbWVzc2FnZVRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZGlzY29ubmVjdCh2aWV3KTtcblx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKG1lc3NhZ2VUZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlKHBhdGgsIHZpZXcpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJQZW5kaW5nIENoYW5nZXMgY291bGQgbm90IGJlIHJlc2V0IC0gc3RpbGwgbmF2aWdhdGluZyB0byBhY3RpdmUgaW5zdGFuY2VcIik7XG5cdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZShwYXRoLCB2aWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSB3aGVuIGEgQ0hBTkdFIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldFxuXHQgKi9cblx0dXBkYXRlT25DaGFuZ2UodmlldzogRkVWaWV3LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0Y29uc3QgdXBkYXRlZE9iamVjdHNQYXRocyA9IG1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIik7XG5cblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgY3VycmVudENvbnRleHQgPSBjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlcyA9IHVwZGF0ZWRPYmplY3RzUGF0aHMubWFwKGFzeW5jIChwYXRoKSA9PiB0aGlzLmFwcGx5VXBkYXRlc0ZvckNoYW5nZSh2aWV3LCBwYXRoKSk7XG5cblx0XHQvLyBTaW11bGF0ZSBhbnkgY2hhbmdlIHNvIHRoZSBlZGl0IGZsb3cgc2hvd3MgdGhlIGRyYWZ0IGluZGljYXRvciBhbmQgc2V0cyB0aGUgcGFnZSB0byBkaXJ0eVxuXHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50Q29udGV4dCwgUHJvbWlzZS5hbGwocmVxdWVzdFByb21pc2VzKSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXRoLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoRm9yVXBkYXRlIEFic29sdXRlIHBhdGggdG8gdGhlIHVwZGF0ZWQgcHJvcGVydHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIGRhdGEgYW5kIGl0cyByZWxhdGVkIHNpZGUgZWZmZWN0cyBoYXZlIGJlZW4gcmVjZWl2ZWRcblx0ICovXG5cdGFzeW5jIGFwcGx5VXBkYXRlc0ZvckNoYW5nZSh2aWV3OiBGRVZpZXcsIHByb3BlcnR5UGF0aEZvclVwZGF0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHByb3BlcnR5UGF0aEZvclVwZGF0ZSk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4obWV0YUNvbnRleHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHRQYXRoID0gcHJvcGVydHlQYXRoRm9yVXBkYXRlLnN1YnN0cmluZygwLCBwcm9wZXJ0eVBhdGhGb3JVcGRhdGUubGFzdEluZGV4T2YoXCIvXCIpKTsgLy8gUmVtb3ZlIHByb3BlcnR5IG5hbWVcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdGhpcy5maW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3LCB0YXJnZXRDb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgcGFyZW50Q29sbGVjdGlvblBhdGggPSB0YXJnZXRDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgdGFyZ2V0Q29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIoXCIpKTtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0UGF0aCA9IHBhcmVudENvbGxlY3Rpb25QYXRoLnN1YnN0cmluZygwLCBwYXJlbnRDb2xsZWN0aW9uUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0UGF0aCA/IHRoaXMuZmluZENvbnRleHRGb3JVcGRhdGUodmlldywgcGFyZW50Q29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCF0YXJnZXRDb250ZXh0ICYmICFwYXJlbnRDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47IC8vIE5vIGNvbnRleHQgZm9yIHVwZGF0ZVxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1Byb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldykuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cblx0XHRcdGlmICh0YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRcdC8vIFdlIGhhdmUgYSB0YXJnZXQgY29udGV4dCwgc28gd2UgY2FuIHJldHJpZXZlIHRoZSB1cGRhdGVkIHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHRhcmdldE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHRhcmdldENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRpdmVNZXRhUGF0aEZvclVwZGF0ZSA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwcm9wZXJ0eVBhdGhGb3JVcGRhdGUpLnJlcGxhY2UodGFyZ2V0TWV0YVBhdGgsIFwiXCIpLnNsaWNlKDEpO1xuXHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbcmVsYXRpdmVNZXRhUGF0aEZvclVwZGF0ZV0sIHRhcmdldENvbnRleHQsIFNZTkNHUk9VUElEKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRHcm91cElkcyBjb3JyZXNwb25kaW5nIHRvIHBhdGhGb3JVcGRhdGVcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0c1NlcnZpY2UuY29tcHV0ZUZpZWxkR3JvdXBJZHMoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCEuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBFeGVjdXRlIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBmaWVsZEdyb3VwSWRzXG5cdFx0XHRpZiAoZmllbGRHcm91cElkcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwID0gcGFnZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMoXG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0IHx8IHBhcmVudENvbnRleHRcblx0XHRcdFx0KSBhcyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXApLmZvckVhY2goKHNpZGVFZmZlY3ROYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdCA9IHNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cFtzaWRlRWZmZWN0TmFtZV07XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0cGFnZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhcblx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdC5zaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdC5jb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRTWU5DR1JPVVBJRCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHNpZGVFZmZlY3RzUHJvbWlzZXMpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBkYXRhIGFmdGVyIGNoYW5nZTpcIiArIGVycik7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSB3aGVuIGEgREVMRVRFIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldFxuXHQgKi9cblx0dXBkYXRlT25EZWxldGUodmlldzogVmlldywgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KTtcblx0XHRjb25zdCBjdXJyZW50Q29udGV4dCA9IGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgY3VycmVudFBhdGggPSBjdXJyZW50Q29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHRjb25zdCBkZWxldGVkT2JqZWN0UGF0aHMgPSBtZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdXNlciBjdXJyZW50bHkgZGlzcGxheXMgYSBkZWxldGVkIG9iamVjdCBvciBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzXG5cdFx0Y29uc3QgZGVsZXRlZFBhdGhJblVzZSA9IGRlbGV0ZWRPYmplY3RQYXRocy5maW5kKChkZWxldGVkUGF0aCkgPT4gY3VycmVudFBhdGguc3RhcnRzV2l0aChkZWxldGVkUGF0aCkpO1xuXHRcdGlmIChkZWxldGVkUGF0aEluVXNlKSB7XG5cdFx0XHQvLyBhbnkgb3RoZXIgdXNlciBkZWxldGVkIHRoZSBvYmplY3QgSSdtIGN1cnJlbnRseSBsb29raW5nIGF0LiBJbmZvcm0gdGhlIHVzZXIgd2Ugd2lsbCBuYXZpZ2F0ZSB0byByb290IG5vd1xuXHRcdFx0TWVzc2FnZUJveC5pbmZvcm1hdGlvbihDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0RFTEVURVwiLCBtZXNzYWdlLnVzZXJEZXNjcmlwdGlvbiksIHtcblx0XHRcdFx0b25DbG9zZTogKCkgPT4ge1xuXHRcdFx0XHRcdC8vIFdlIHJldHJpZXZlIHRoZSBkZWxldGVkIGNvbnRleHQgYXMgYSBrZWVwLWFsaXZlLCBhbmQgZGlzYWJsZSBpdHMga2VlcGFsaXZlIHN0YXR1cyxcblx0XHRcdFx0XHQvLyBzbyB0aGF0IGl0IGlzIHByb3Blcmx5IGRlc3Ryb3llZCB3aGVuIHJlZnJlc2hpbmcgZGF0YVxuXHRcdFx0XHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSBjdXJyZW50Q29udGV4dC5nZXRNb2RlbCgpLmdldEtlZXBBbGl2ZUNvbnRleHQoZGVsZXRlZFBhdGhJblVzZSk7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5hcHBseVVwZGF0ZXNGb3JDb2xsZWN0aW9uKHZpZXcsIGRlbGV0ZWRPYmplY3RQYXRoc1swXSk7XG5cdFx0XHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIHJlcXVlc3RQcm9taXNlKTtcblx0XHRcdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQodGFyZ2V0Q29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMuYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3LCBkZWxldGVkT2JqZWN0UGF0aHNbMF0pO1xuXHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIHJlcXVlc3RQcm9taXNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIHdoZW4gYSBDUkVBVEUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHR1cGRhdGVPbkNyZWF0ZSh2aWV3OiBWaWV3LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpO1xuXHRcdGNvbnN0IGNyZWF0ZWRPYmplY3RQYXRocyA9IG1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIik7XG5cblx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMuYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3LCBjcmVhdGVkT2JqZWN0UGF0aHNbMF0pO1xuXHRcdC8vIFNpbXVsYXRlIGEgY2hhbmdlIHNvIHRoZSBlZGl0IGZsb3cgc2hvd3MgdGhlIGRyYWZ0IGluZGljYXRvciBhbmQgc2V0cyB0aGUgcGFnZSB0byBkaXJ0eVxuXHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpLCByZXF1ZXN0UHJvbWlzZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIGluIGEgY29sbGVjdGlvbi5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHBhdGhJbkNvbGxlY3Rpb24gQSBwYXRoIHRvIGFuIGVudGl0eSBpbiB0aGUgY29sbGVjdGlvblxuXHQgKi9cblx0YXN5bmMgYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3OiBWaWV3LCBwYXRoSW5Db2xsZWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdGNvbnN0IHBhcmVudFBhdGggPSBwYXRoSW5Db2xsZWN0aW9uLnN1YnN0cmluZygwLCBwYXRoSW5Db2xsZWN0aW9uLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IHRoaXMuZmluZENvbnRleHRGb3JVcGRhdGUodmlldywgcGFyZW50UGF0aCk7XG5cblx0XHRpZiAocGFyZW50Q29udGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gcGFyZW50Q29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBtZXRhUGF0aEZvclVwZGF0ZSA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoSW5Db2xsZWN0aW9uKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGFyZW50Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBtZXRhUGF0aEZvclVwZGF0ZS5yZXBsYWNlKGAke3BhcmVudE1ldGFQYXRofS9gLCBcIlwiKTtcblxuXHRcdFx0XHQvLyBSZWxvYWQgdGhlIGNvbGxlY3Rpb25cblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbcmVsYXRpdmVQYXRoXSwgcGFyZW50Q29udGV4dCwgU1lOQ0dST1VQSUQpKTtcblxuXHRcdFx0XHQvLyBSZXF1ZXN0IHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBjb2xsZWN0aW9uXG5cdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KHJlbGF0aXZlUGF0aCwgcGFyZW50Q29udGV4dCwgU1lOQ0dST1VQSUQsIHRydWUpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoc2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBkYXRhIGFmdGVyIGNvbGxlY3Rpb24gdXBkYXRlOlwiICsgZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIHdoZW4gYSBBQ1RJT04gbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHR1cGRhdGVPbkFjdGlvbih2aWV3OiBGRVZpZXcsIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgcGF0aHNGb3JBY3Rpb24gPSBtZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBtZXNzYWdlLmNsaWVudFRyaWdnZXJlZEFjdGlvbk5hbWUgfHwgXCJcIjtcblx0XHRjb25zdCByZXF1ZXN0ZWRQcm9wZXJ0aWVzID0gbWVzc2FnZS5jbGllbnRSZXF1ZXN0ZWRQcm9wZXJ0aWVzPy5zcGxpdChcInxcIik7XG5cdFx0Y29uc3QgcmVmcmVzaExpc3RCaW5kaW5nID0gbWVzc2FnZS5jbGllbnRSZWZyZXNoTGlzdEJpbmRpbmcgPT09IFwidHJ1ZVwiO1xuXG5cdFx0bGV0IHJlcXVlc3RQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cblx0XHRpZiAocmVmcmVzaExpc3RCaW5kaW5nKSB7XG5cdFx0XHRyZXF1ZXN0UHJvbWlzZXMucHVzaCh0aGlzLmFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24odmlldywgcGF0aHNGb3JBY3Rpb25bMF0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVxdWVzdFByb21pc2VzID0gcGF0aHNGb3JBY3Rpb24ubWFwKGFzeW5jIChwYXRoKSA9PiB0aGlzLnJlcXVlc3RVcGRhdGVGb3JBY3Rpb24odmlldywgcGF0aCwgYWN0aW9uTmFtZSwgcmVxdWVzdGVkUHJvcGVydGllcykpO1xuXHRcdH1cblxuXHRcdC8vIFNpbXVsYXRlIGFueSBjaGFuZ2Ugc28gdGhlIGVkaXQgZmxvdyBzaG93cyB0aGUgZHJhZnQgaW5kaWNhdG9yIGFuZCBzZXRzIHRoZSBwYWdlIHRvIGRpcnR5XG5cdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIFByb21pc2UuYWxsKHJlcXVlc3RQcm9taXNlcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgc2lkZS1lZmZlY3RzIGRhdGEgd2hlbiBhbiBhY3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIGEgY29udGV4dC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHBhdGhGb3JBY3Rpb24gUGF0aCBvZiB0aGUgY29udGV4dCB0byBhcHBseSB0aGUgYWN0aW9uIHRvXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIE5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gcmVxdWVzdGVkUHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIHNpZGUtZWZmZWN0cyBkYXRhIGhhcyBiZWVuIGxvYWRlZFxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFVwZGF0ZUZvckFjdGlvbih2aWV3OiBGRVZpZXcsIHBhdGhGb3JBY3Rpb246IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nLCByZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdGhpcy5maW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3LCBwYXRoRm9yQWN0aW9uKTtcblx0XHRpZiAoIXRhcmdldENvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzRnJvbUFjdGlvbiA9IHNpZGVFZmZlY3RTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoYWN0aW9uTmFtZSwgdGFyZ2V0Q29udGV4dCk7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdFByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRpZiAoc2lkZUVmZmVjdHNGcm9tQWN0aW9uKSB7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHNGcm9tQWN0aW9uLnBhdGhFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHNpZGVFZmZlY3RQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0Zyb21BY3Rpb24ucGF0aEV4cHJlc3Npb25zLCB0YXJnZXRDb250ZXh0LCBTWU5DR1JPVVBJRClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHJlcXVlc3RlZFByb3BlcnRpZXMgJiYgcmVxdWVzdGVkUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL2NsZWFuLXVwIG9mIHRoZSBwcm9wZXJ0aWVzIHRvIHJlcXVlc3QgbGlzdDpcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFQYXRoRm9yQWN0aW9uID0gdGhpcy5jYWxjdWxhdGVNZXRhUGF0aCh2aWV3LCBwYXRoRm9yQWN0aW9uKTtcblx0XHRcdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KG1ldGFQYXRoRm9yQWN0aW9uKSk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXNcblx0XHRcdFx0Lm1hcCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maWx0ZXIoKHByb3ApID0+IHJlcXVlc3RlZFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcCkpO1xuXHRcdFx0aWYgKHByb3BlcnRpZXNUb1JlcXVlc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzaWRlRWZmZWN0UHJvbWlzZXMucHVzaChzaWRlRWZmZWN0U2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMocHJvcGVydGllc1RvUmVxdWVzdCwgdGFyZ2V0Q29udGV4dCwgU1lOQ0dST1VQSUQpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChzaWRlRWZmZWN0UHJvbWlzZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIGEgY29udGV4dCB0byBhcHBseSBhbiB1cGRhdGUgbWVzc2FnZSAoQ0hBTkdFLCBDUkVBVEUsIERFTEVURSBvciBBQ1RJT04pLlxuXHQgKiBAcGFyYW0gdmlldyAgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdG8gYmUgZm91bmQgKHNoYWxsIHBvaW50IHRvIGFuIGVudGl0eSwgbm90IGEgcHJvcGVydHkpXG5cdCAqIEByZXR1cm5zIEEgY29udGV4dCBpZiBpdCBjb3VsZCBiZSBmb3VuZFxuXHQgKi9cblx0ZmluZENvbnRleHRGb3JVcGRhdGUodmlldzogVmlldywgcGF0aDogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFwYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHQvLyBGaW5kIGFsbCBwb3RlbnRpYWwgcGF0aHNcblx0XHRjb25zdCB0YXJnZXRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHR3aGlsZSAoIXBhdGguZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHR0YXJnZXRQYXRocy51bnNoaWZ0KHBhdGgpO1xuXHRcdFx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHR9XG5cdFx0dGFyZ2V0UGF0aHMudW5zaGlmdChwYXRoKTtcblxuXHRcdGNvbnN0IHBhcmVudENvbGxlY3Rpb25QYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZihcIihcIikpOyAvLyBSZW1vdmUgdGhlIGxhc3Qga2V5XG5cblx0XHRsZXQgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRsZXQgY3VycmVudENvbnRleHQgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHR3aGlsZSAoY3VycmVudENvbnRleHQgJiYgIXRhcmdldENvbnRleHQpIHtcblx0XHRcdGlmICh0YXJnZXRQYXRocy5pbmNsdWRlcyhjdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdHRhcmdldENvbnRleHQgPSBjdXJyZW50Q29udGV4dDtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudENvbnRleHQgPSBjdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk/LmdldENvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRDb250ZXh0KSB7XG5cdFx0XHQvLyBGb3VuZCAhXG5cdFx0XHRyZXR1cm4gdGFyZ2V0Q29udGV4dDtcblx0XHR9XG5cblx0XHQvLyBUcnkgdG8gZmluZCB0aGUgdGFyZ2V0IGNvbnRleHQgaW4gYSBsaXN0QmluZGluZ1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KS5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgcGFyZW50TGlzdEJpbmRpbmcgPSBtb2RlbC5nZXRBbGxCaW5kaW5ncygpLmZpbmQoKGJpbmRpbmcpID0+IHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gYmluZGluZy5pc1JlbGF0aXZlKCkgPyBiaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpIDogYmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRyZXR1cm4gYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSAmJiBiaW5kaW5nUGF0aCA9PT0gcGFyZW50Q29sbGVjdGlvblBhdGg7XG5cdFx0fSkgYXMgT0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHQvLyBXZSd2ZSBmb3VuZCBhIGxpc3QgYmluZGluZyB0aGF0IGNvdWxkIGNvbnRhaW4gdGhlIHRhcmdldCBjb250ZXh0IC0tPiBsb29rIGZvciBpdFxuXHRcdHRhcmdldENvbnRleHQgPSBwYXJlbnRMaXN0QmluZGluZz8uZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRhcmdldFBhdGhzLmluY2x1ZGVzKGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiB0YXJnZXRDb250ZXh0O1xuXHR9XG5cblx0bmF2aWdhdGUocGF0aDogc3RyaW5nLCB2aWV3OiBGRVZpZXcpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiByb3V0aW5nLm5hdmlnYXRlIGRvZXNuJ3QgY29uc2lkZXIgc2VtYW50aWMgYm9va21hcmtpbmdcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dCA9IHZpZXcuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChwYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHQvLyBJZiB0aGUgb2JqZWN0IHdhcyBhIG5ld2x5IGNyZWF0ZWQgb25lLCB3ZSBuYXZpZ2F0ZSBiYWNrXG5cdFx0aWYgKGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy5nZXRDcmVhdGlvbk1vZGUoKSkge1xuXHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KHRhcmdldENvbnRleHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkucm91dGluZy5uYXZpZ2F0ZSh0YXJnZXRDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJyZW50UGFnZSh2aWV3OiBWaWV3KTogRkVWaWV3IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcoYXBwQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBtZXRhcGF0aCBmcm9tIG9uZSBvciBtb3JlIGRhdGEgcGF0aChzKS5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gcGF0aCBPbmUgb3JlIG1vcmUgZGF0YSBwYXRoKHMpLCBpbiBjYXNlIG9mIG11bHRpcGxlIHBhdGhzIHNlcGFyYXRlZCBieSAnfCdcblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgbWV0YVBhdGhcblx0ICovXG5cdGNhbGN1bGF0ZU1ldGFQYXRoKHZpZXc6IEZFVmlldywgcGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IG1ldGFQYXRoID0gXCJcIjtcblx0XHRpZiAocGF0aCkge1xuXHRcdFx0Ly8gaW4gY2FzZSBtb3JlIHRoYW4gb25lIHBhdGggaXMgc2VudCBhbGwgb2YgdGhlbSBoYXZlIHRvIHVzZSB0aGUgc2FtZSBtZXRhcGF0aCB0aGVyZWZvcmUgd2UganVzdCBjb25zaWRlciB0aGUgZmlyc3Qgb25lXG5cdFx0XHRjb25zdCBkYXRhUGF0aCA9IHBhdGguc3BsaXQoXCJ8XCIpWzBdO1xuXHRcdFx0bWV0YVBhdGggPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoZGF0YVBhdGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbWV0YVBhdGg7XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4ge1xuXHRwdWJsaWMgYXN5bmMgY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4pOiBQcm9taXNlPENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U+IHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlID0gbmV3IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQXlCQSxNQUFNQSxZQUFZLEdBQUcsNkJBQTZCO0VBQ2xELE1BQU1DLFdBQVcsR0FBRyw0QkFBNEI7RUFDaEQsTUFBTUMsVUFBVSxHQUFHLDJCQUEyQjtFQUM5QyxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBOEI7RUFDekQsTUFBTUMscUJBQXFCLEdBQUcsaUNBQWlDO0VBQy9ELE1BQU1DLG9CQUFvQixHQUFHLGdDQUFnQztFQUM3RCxNQUFNQyxXQUFXLEdBQUcsWUFBWTtFQUVoQyxNQUFNQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFBQSxJQU9iQyx5QkFBeUIsMEJBQUFDLFFBQUE7SUFBQUMsY0FBQSxDQUFBRix5QkFBQSxFQUFBQyxRQUFBO0lBQUEsU0FBQUQsMEJBQUE7TUFBQSxPQUFBQyxRQUFBLENBQUFFLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLFFBQUEsQ0FBQUwseUJBQUEsR0FBQUEseUJBQUE7SUFBQSxJQUFBTSxNQUFBLEdBQUFOLHlCQUFBLENBQUFPLFNBQUE7SUFHckM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTENELE1BQUEsQ0FNQUUsZ0JBQWdCLEdBQWhCLFNBQUFBLGlCQUFpQkMsYUFBd0IsRUFBRUMsWUFBb0IsRUFBVztNQUN6RSxNQUFNQyxZQUF5QyxHQUFHRixhQUFhLENBQUNHLFdBQVcsQ0FBQ3BCLFlBQVksQ0FBQztNQUN6RixJQUFJLENBQUNtQixZQUFZLEVBQUU7UUFDbEIsT0FBTyxLQUFLO01BQ2IsQ0FBQyxNQUFNO1FBQ04sT0FBT0EsWUFBWSxDQUFDRSxRQUFRLENBQUNILFlBQVksQ0FBQztNQUMzQztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBSixNQUFBLENBS0FRLE9BQU8sR0FBUCxTQUFBQSxRQUFRTCxhQUF3QixFQUFFQyxZQUFvQixFQUFRO01BQzdELE1BQU1DLFlBQXNCLEdBQUdGLGFBQWEsQ0FBQ0csV0FBVyxDQUFDcEIsWUFBWSxDQUFDLElBQUksRUFBRTtNQUM1RSxJQUFJLENBQUNtQixZQUFZLENBQUNFLFFBQVEsQ0FBQ0gsWUFBWSxDQUFDLEVBQUU7UUFDekNDLFlBQVksQ0FBQ0ksSUFBSSxDQUFDTCxZQUFZLENBQUM7TUFDaEM7TUFFQUQsYUFBYSxDQUFDTyxXQUFXLENBQUN4QixZQUFZLEVBQUVtQixZQUFZLENBQUM7SUFDdEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQUwsTUFBQSxDQU1BVyxVQUFVLEdBQVYsU0FBQUEsV0FBV1IsYUFBd0IsRUFBRVMsYUFBNEMsRUFBVztNQUMzRixNQUFNUCxZQUF5QyxHQUFHRixhQUFhLENBQUNHLFdBQVcsQ0FBQ3BCLFlBQVksQ0FBQztNQUN6RixJQUFJLENBQUNtQixZQUFZLElBQUlPLGFBQWEsS0FBS0MsU0FBUyxFQUFFO1FBQ2pELE9BQU8sS0FBSztNQUNiO01BRUEsTUFBTUMsYUFBYSxHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBRyxDQUFDQSxhQUFhLENBQUM7TUFDcEYsTUFBTUssZUFBZSxHQUFHWixZQUFZLENBQUNhLE1BQU0sQ0FBRUMsUUFBUSxJQUFLO1FBQ3pELE9BQU8sQ0FBQ0wsYUFBYSxDQUFDUCxRQUFRLENBQUNZLFFBQVEsQ0FBQztNQUN6QyxDQUFDLENBQUM7TUFDRmhCLGFBQWEsQ0FBQ08sV0FBVyxDQUFDeEIsWUFBWSxFQUFFK0IsZUFBZSxDQUFDO01BRXhELE9BQU9BLGVBQWUsQ0FBQ0csTUFBTSxLQUFLZixZQUFZLENBQUNlLE1BQU07SUFDdEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFwQixNQUFBLENBS0FxQixtQkFBbUIsR0FBbkIsU0FBQUEsb0JBQW9CbEIsYUFBd0IsRUFBc0I7TUFDakUsTUFBTUUsWUFBeUMsR0FBR0YsYUFBYSxDQUFDRyxXQUFXLENBQUNwQixZQUFZLENBQUM7TUFDekYsSUFBSSxDQUFDbUIsWUFBWSxFQUFFO1FBQ2xCLE9BQU9RLFNBQVM7TUFDakIsQ0FBQyxNQUFNO1FBQ04sT0FBT1IsWUFBWSxDQUFDaUIsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUM5QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBdEIsTUFBQSxDQVFBdUIseUJBQXlCLEdBQXpCLFNBQUFBLDBCQUEwQkMsT0FBbUIsRUFBRUMsY0FBc0IsRUFBRUMsY0FBc0IsRUFBUTtNQUNwRyxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUNILE9BQU8sQ0FBQyxFQUFFO1FBQy9CO01BQ0Q7TUFFQSxNQUFNSSxhQUFhLEdBQUdKLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDLFVBQVUsQ0FBYzs7TUFFL0Q7TUFDQSxNQUFNQyxZQUE0QixHQUFHRixhQUFhLENBQUN0QixXQUFXLENBQUNqQixrQkFBa0IsQ0FBQztNQUNsRnlDLFlBQVksQ0FBQ0MsT0FBTyxDQUFFQyxTQUFTLElBQUs7UUFDbkMsSUFBSUEsU0FBUyxDQUFDQyxJQUFJLENBQUNDLFVBQVUsQ0FBQ1QsY0FBYyxDQUFDLEVBQUU7VUFDOUNPLFNBQVMsQ0FBQ0MsSUFBSSxHQUFHRCxTQUFTLENBQUNDLElBQUksQ0FBQ0UsT0FBTyxDQUFDVixjQUFjLEVBQUVDLGNBQWMsQ0FBQztRQUN4RTtNQUNELENBQUMsQ0FBQzs7TUFFRjtNQUNBLE1BQU1yQixZQUF5QyxHQUFHdUIsYUFBYSxDQUFDdEIsV0FBVyxDQUFDcEIsWUFBWSxDQUFDO01BQ3pGLElBQUltQixZQUFZLEVBQUU7UUFDakIsTUFBTStCLGlCQUEyQixHQUFHLEVBQUU7UUFDdEMsTUFBTUMsbUJBQTZCLEdBQUcsRUFBRTtRQUN4Q2hDLFlBQVksQ0FBQzBCLE9BQU8sQ0FBRU8sVUFBVSxJQUFLO1VBQ3BDLElBQUlBLFVBQVUsQ0FBQ0osVUFBVSxDQUFDVCxjQUFjLENBQUMsRUFBRTtZQUMxQztZQUNBLE1BQU1jLGFBQWEsR0FBR0QsVUFBVSxDQUFDSCxPQUFPLENBQUNWLGNBQWMsRUFBRUMsY0FBYyxDQUFDO1lBQ3hFVSxpQkFBaUIsQ0FBQzNCLElBQUksQ0FBQzhCLGFBQWEsQ0FBQztVQUN0QyxDQUFDLE1BQU07WUFDTkYsbUJBQW1CLENBQUM1QixJQUFJLENBQUM2QixVQUFVLENBQUM7VUFDckM7UUFDRCxDQUFDLENBQUM7UUFFRlYsYUFBYSxDQUFDbEIsV0FBVyxDQUFDeEIsWUFBWSxFQUFFbUQsbUJBQW1CLENBQUM7UUFDNUQsSUFBSUQsaUJBQWlCLENBQUNoQixNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ25DLElBQUksQ0FBQ29CLElBQUksQ0FBQ2hCLE9BQU8sRUFBRTtZQUFFaUIsTUFBTSxFQUFFQyxRQUFRLENBQUNDLElBQUk7WUFBRUMsT0FBTyxFQUFFUjtVQUFrQixDQUFDLENBQUM7UUFDMUU7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXBDLE1BQUEsQ0FJQTZDLHVCQUF1QixHQUF2QixTQUFBQSx3QkFBd0JqQixhQUF3QixFQUFRO01BQ3ZELElBQUlrQixPQUFPLEdBQUdsQixhQUFhLENBQUN0QixXQUFXLENBQUNmLG9CQUFvQixDQUFDO01BQzdELElBQUl1RCxPQUFPLEtBQUtqQyxTQUFTLEVBQUU7UUFDMUJrQyxZQUFZLENBQUNELE9BQU8sQ0FBQztNQUN0QjtNQUVBQSxPQUFPLEdBQUdFLFVBQVUsQ0FBQyxNQUFNO1FBQzFCLE1BQU1DLEtBQWlDLEdBQUdyQixhQUFhLENBQUN0QixXQUFXLENBQUNqQixrQkFBa0IsQ0FBQztRQUN2RixNQUFNNkQsUUFBd0IsR0FBRyxFQUFFO1FBQ25DLE1BQU1DLGFBQXVCLEdBQUd2QixhQUFhLENBQUN0QixXQUFXLENBQUNoQixxQkFBcUIsQ0FBQyxJQUFJLEVBQUU7UUFFdEYsSUFBSSxDQUFDMkQsS0FBSyxFQUFFO1VBQ1g7UUFDRDtRQUVBQSxLQUFLLENBQUNsQixPQUFPLENBQUVxQixJQUFJLElBQUs7VUFDdkIsSUFBSUQsYUFBYSxDQUFDNUMsUUFBUSxDQUFDNkMsSUFBSSxDQUFDbkIsSUFBSSxDQUFDLEVBQUU7WUFDdENpQixRQUFRLENBQUN6QyxJQUFJLENBQUMyQyxJQUFJLENBQUM7VUFDcEIsQ0FBQyxNQUFNO1lBQ04sSUFBSSxDQUFDQyxNQUFNLENBQUN6QixhQUFhLEVBQUV3QixJQUFJLENBQUNYLE1BQU0sRUFBRVcsSUFBSSxDQUFDbkIsSUFBSSxDQUFDO1VBQ25EO1FBQ0QsQ0FBQyxDQUFDO1FBRUZMLGFBQWEsQ0FBQ2xCLFdBQVcsQ0FBQ3JCLGtCQUFrQixFQUFFNkQsUUFBUSxDQUFDO1FBQ3ZEdEIsYUFBYSxDQUFDbEIsV0FBVyxDQUFDbkIsb0JBQW9CLEVBQUVzQixTQUFTLENBQUM7UUFFMUQsSUFBSXFDLFFBQVEsQ0FBQzlCLE1BQU0sRUFBRTtVQUNwQjtVQUNBLElBQUksQ0FBQ3lCLHVCQUF1QixDQUFDakIsYUFBYSxDQUFDO1FBQzVDO01BQ0QsQ0FBQyxFQUFFbkMsWUFBWSxDQUFDO01BRWhCbUMsYUFBYSxDQUFDbEIsV0FBVyxDQUFDbkIsb0JBQW9CLEVBQUV1RCxPQUFPLENBQUM7SUFDekQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTlDLE1BQUEsQ0FNQXNELG1CQUFtQixHQUFuQixTQUFBQSxvQkFBb0I5QixPQUFtQixFQUFFWixhQUFnQyxFQUFRO01BQ2hGLE1BQU1nQixhQUFhLEdBQUdKLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDLFVBQVUsQ0FBYztNQUMvRCxNQUFNMEIsdUJBQXVCLEdBQUd4QyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBRyxDQUFDQSxhQUFhLENBQUM7TUFFOUYsTUFBTTRDLGFBQXVCLEdBQUc1QixhQUFhLENBQUN0QixXQUFXLENBQUNoQixxQkFBcUIsQ0FBQztNQUNoRmlFLHVCQUF1QixDQUFDeEIsT0FBTyxDQUFFRSxJQUFJLElBQUs7UUFDekMsSUFBSSxDQUFDdUIsYUFBYSxDQUFDakQsUUFBUSxDQUFDMEIsSUFBSSxDQUFDLEVBQUU7VUFDbEN1QixhQUFhLENBQUMvQyxJQUFJLENBQUN3QixJQUFJLENBQUM7UUFDekI7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBakMsTUFBQSxDQU1BeUQsb0JBQW9CLEdBQXBCLFNBQUFBLHFCQUFxQmpDLE9BQW1CLEVBQUVaLGFBQWdDLEVBQVE7TUFDakYsTUFBTWdCLGFBQWEsR0FBR0osT0FBTyxDQUFDSyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQy9ELE1BQU1zQixhQUF1QixHQUFHdkIsYUFBYSxDQUFDdEIsV0FBVyxDQUFDaEIscUJBQXFCLENBQUM7TUFDaEYsTUFBTW9FLGNBQWMsR0FBRzNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixhQUFhLENBQUMsR0FBR0EsYUFBYSxHQUFHLENBQUNBLGFBQWEsQ0FBQztNQUVyRmdCLGFBQWEsQ0FBQ2xCLFdBQVcsQ0FDeEJwQixxQkFBcUIsRUFDckI2RCxhQUFhLENBQUNqQyxNQUFNLENBQUV5QyxZQUFZLElBQUs7UUFDdEMsT0FBTyxDQUFDRCxjQUFjLENBQUNuRCxRQUFRLENBQUNvRCxZQUFZLENBQUM7TUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTNELE1BQUEsQ0FLQTJCLFdBQVcsR0FBWCxTQUFBQSxZQUFZSCxPQUFtQixFQUFXO01BQ3pDLE1BQU1JLGFBQWEsR0FBR0osT0FBTyxDQUFDSyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQy9ELE9BQU8rQix3QkFBd0IsQ0FBQ2hDLGFBQWEsQ0FBQztJQUMvQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUE1QixNQUFBLENBVU93QyxJQUFJLEdBQVgsU0FBQUEsS0FDQ2hCLE9BQW1CLEVBQ25CcUMsT0FNQyxFQUNNO01BQ1AsSUFBSSxJQUFJLENBQUNsQyxXQUFXLENBQUNILE9BQU8sQ0FBQyxFQUFFO1FBQzlCLE1BQU1JLGFBQWEsR0FBR0osT0FBTyxDQUFDSyxRQUFRLENBQUMsVUFBVSxDQUFjO1FBQy9ELElBQUlnQyxPQUFPLENBQUNwQixNQUFNLEtBQUtDLFFBQVEsQ0FBQ0MsSUFBSSxJQUFJa0IsT0FBTyxDQUFDcEIsTUFBTSxLQUFLQyxRQUFRLENBQUNvQixNQUFNLEVBQUU7VUFDM0U7VUFDQSxJQUFJLENBQUNDLFdBQVcsQ0FBQ25DLGFBQWEsRUFBRWlDLE9BQU8sQ0FBQ3BCLE1BQU0sRUFBRW9CLE9BQU8sQ0FBQ2pCLE9BQU8sQ0FBQztRQUNqRSxDQUFDLE1BQU07VUFDTixJQUFJLENBQUNTLE1BQU0sQ0FDVnpCLGFBQWEsRUFDYmlDLE9BQU8sQ0FBQ3BCLE1BQU0sRUFDZG9CLE9BQU8sQ0FBQ2pCLE9BQU8sRUFDZmlCLE9BQU8sQ0FBQ0csbUJBQW1CLEVBQzNCSCxPQUFPLENBQUNJLGtCQUFrQixFQUMxQkosT0FBTyxDQUFDSyx5QkFDVCxDQUFDO1FBQ0Y7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVJDO0lBQUFsRSxNQUFBLENBU0FxRCxNQUFNLEdBQU4sU0FBQUEsT0FDQ3pCLGFBQXdCLEVBQ3hCYSxNQUFnQixFQUNoQkcsT0FBc0MsRUFDdENvQixtQkFBNEIsRUFDNUJDLGtCQUE0QixFQUM1QkMseUJBQW9DLEVBQzdCO01BQ1AsTUFBTUMsYUFBYSxHQUFHLENBQUNwRCxLQUFLLENBQUNDLE9BQU8sQ0FBQzRCLE9BQU8sQ0FBQyxHQUFHQSxPQUFPLENBQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUdzQixPQUFPLEtBQUssRUFBRTtNQUNsRixNQUFNd0IsbUJBQW1CLEdBQUdGLHlCQUF5QixhQUF6QkEseUJBQXlCLHVCQUF6QkEseUJBQXlCLENBQUU1QyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQ2hFLElBQUltQixNQUFNLEtBQUtDLFFBQVEsQ0FBQ0MsSUFBSSxFQUFFO1FBQzdCLE1BQU0wQixXQUFXLEdBQUcsQ0FBQ3RELEtBQUssQ0FBQ0MsT0FBTyxDQUFDNEIsT0FBTyxDQUFDLEdBQUdBLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBR0EsT0FBTyxLQUFLLEVBQUU7UUFDekU7UUFDQSxJQUFJLElBQUksQ0FBQzFDLGdCQUFnQixDQUFDMEIsYUFBYSxFQUFFeUMsV0FBVyxDQUFDLEVBQUU7VUFDdEQ7UUFDRCxDQUFDLE1BQU07VUFDTixJQUFJLENBQUM3RCxPQUFPLENBQUNvQixhQUFhLEVBQUV5QyxXQUFXLENBQUM7UUFDekM7TUFDRCxDQUFDLE1BQU0sSUFBSTVCLE1BQU0sS0FBS0MsUUFBUSxDQUFDb0IsTUFBTSxFQUFFO1FBQ3RDLE1BQU1RLE9BQU8sR0FBRyxJQUFJLENBQUMzRCxVQUFVLENBQUNpQixhQUFhLEVBQUVnQixPQUFPLENBQUM7UUFDdkQ7UUFDQSxJQUFJLENBQUMwQixPQUFPLEVBQUU7VUFDYjtRQUNEO01BQ0Q7TUFFQUMsNkJBQTZCLENBQUM5QixNQUFNLEVBQUUwQixhQUFhLEVBQUV2QyxhQUFhLEVBQUVvQyxtQkFBbUIsRUFBRUMsa0JBQWtCLEVBQUVHLG1CQUFtQixDQUFDO0lBQ2xJOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFwRSxNQUFBLENBTUErRCxXQUFXLEdBQVgsU0FBQUEsWUFBWW5DLGFBQXdCLEVBQUVhLE1BQXVDLEVBQUVHLE9BQXNDLEVBQVE7TUFDNUgsSUFBSUEsT0FBTyxLQUFLL0IsU0FBUyxFQUFFO1FBQzFCO01BQ0Q7TUFDQSxNQUFNaUIsWUFBNEIsR0FBR0YsYUFBYSxDQUFDdEIsV0FBVyxDQUFDakIsa0JBQWtCLENBQUM7TUFDbEYsTUFBTW1GLFVBQVUsR0FBR3pELEtBQUssQ0FBQ0MsT0FBTyxDQUFDNEIsT0FBTyxDQUFDLEdBQUdBLE9BQU8sR0FBRyxDQUFDQSxPQUFPLENBQUM7TUFDL0Q7TUFDQSxNQUFNTSxRQUFRLEdBQUdwQixZQUFZLENBQUNaLE1BQU0sQ0FBRWtDLElBQUksSUFBSztRQUM5QyxPQUFPLENBQUNvQixVQUFVLENBQUNqRSxRQUFRLENBQUM2QyxJQUFJLENBQUNuQixJQUFJLENBQUM7TUFDdkMsQ0FBQyxDQUFDO01BQ0Z1QyxVQUFVLENBQUN6QyxPQUFPLENBQUVFLElBQUksSUFBSztRQUM1QmlCLFFBQVEsQ0FBQ3pDLElBQUksQ0FBQztVQUFFd0IsSUFBSTtVQUFFUTtRQUFPLENBQUMsQ0FBQztNQUNoQyxDQUFDLENBQUM7TUFDRmIsYUFBYSxDQUFDbEIsV0FBVyxDQUFDckIsa0JBQWtCLEVBQUU2RCxRQUFRLENBQUM7TUFDdkQsSUFBSSxDQUFDTCx1QkFBdUIsQ0FBQ2pCLGFBQWEsQ0FBQztJQUM1QyxDQUFDO0lBQUE1QixNQUFBLENBRUR5RSxzQkFBc0IsR0FBdEIsU0FBQUEsdUJBQXVCQyxJQUFVLEVBQVc7TUFDM0MsTUFBTUMsY0FBYyxHQUFHLENBQUFELElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFRSxpQkFBaUIsS0FBS0YsSUFBSSxDQUFDRSxpQkFBaUIsQ0FBQyxDQUFhO01BQ3ZGLE9BQU8sQ0FBQyxFQUFFRCxjQUFjLElBQUlFLFdBQVcsQ0FBQ0MsNkJBQTZCLENBQUNILGNBQWMsQ0FBQzlDLFFBQVEsQ0FBQyxDQUFDLENBQUNrRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakg7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEvRSxNQUFBLENBS01nRixPQUFPLEdBQWIsZUFBQUEsUUFBY04sSUFBWSxFQUFpQjtNQUMxQyxNQUFNOUMsYUFBYSxHQUFHOEMsSUFBSSxDQUFDN0MsUUFBUSxDQUFDLFVBQVUsQ0FBQztNQUMvQyxNQUFNb0QsRUFBRSxHQUFHQyxrQkFBa0IsQ0FBQ0MsS0FBSyxDQUFDVCxJQUFJLENBQUM7O01BRXpDO01BQ0EsSUFBSSxDQUFDTyxFQUFFLEVBQUU7UUFDUjtRQUNBO01BQ0Q7TUFFQSxNQUFNTixjQUFjLEdBQUdELElBQUksQ0FBQ0UsaUJBQWlCLENBQUMsQ0FBQztNQUUvQyxNQUFNUSxVQUFVLEdBQUcsTUFBTVQsY0FBYyxDQUFDVSxlQUFlLENBQUMsbUNBQW1DLENBQUM7TUFDNUYsSUFBSSxDQUFDRCxVQUFVLEVBQUU7UUFDaEI7TUFDRDtNQUVBLE1BQU1FLFdBQVcsR0FBR0MsdUJBQXVCLENBQzFDTixFQUFFLEVBQ0ZHLFVBQVUsRUFDVnhELGFBQWEsRUFDWmlDLE9BQWdCLElBQUs7UUFDckIsSUFBSSxDQUFDMkIsY0FBYyxDQUFDM0IsT0FBTyxFQUFFYSxJQUFJLENBQUM7TUFDbkMsQ0FBQyxFQUNEQSxJQUNELENBQUM7TUFFRCxJQUFJWSxXQUFXLEVBQUU7UUFDaEIxRCxhQUFhLENBQUNsQixXQUFXLENBQUN4QixZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQzNDMEMsYUFBYSxDQUFDbEIsV0FBVyxDQUFDckIsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQ2pEdUMsYUFBYSxDQUFDbEIsV0FBVyxDQUFDcEIscUJBQXFCLEVBQUUsRUFBRSxDQUFDO01BQ3JEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBVSxNQUFBLENBSUF5RixVQUFVLEdBQVYsU0FBQUEsV0FBV2YsSUFBWSxFQUFRO01BQzlCLE1BQU05QyxhQUFhLEdBQUc4QyxJQUFJLENBQUM3QyxRQUFRLENBQUMsVUFBVSxDQUFDO01BQy9DNkQsZ0JBQWdCLENBQUM5RCxhQUFhLENBQUM7SUFDaEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUE1QixNQUFBLENBUUEyRixhQUFhLEdBQWIsU0FBQUEsY0FBY0MsV0FBbUIsRUFBRWhFLGFBQXdCLEVBQUVpRSxNQUFZLEVBQUVoQyxPQUFnQixFQUFFYSxJQUFZLEVBQVE7TUFDaEgsSUFBSWtCLFdBQVcsQ0FBQ0UsU0FBUyxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ0MsRUFBRSxLQUFLSCxNQUFNLENBQUNHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2xFSixXQUFXLENBQUNLLE9BQU8sQ0FBQ0osTUFBTSxDQUFDO1FBQzNCakUsYUFBYSxDQUFDbEIsV0FBVyxDQUFDdkIsV0FBVyxFQUFFeUcsV0FBVyxDQUFDO01BQ3BEO01BRUEsSUFBSS9CLE9BQU8sQ0FBQ3FDLFVBQVUsS0FBS3hELFFBQVEsQ0FBQ3lELElBQUksRUFBRTtRQUN6QztRQUNBNUIsNkJBQTZCLENBQUM3QixRQUFRLENBQUMwRCxRQUFRLEVBQUUsSUFBSSxDQUFDL0UsbUJBQW1CLENBQUNPLGFBQWEsQ0FBQyxFQUFFQSxhQUFhLENBQUM7TUFDekc7TUFFQSxJQUFJaUMsT0FBTyxDQUFDcUMsVUFBVSxLQUFLeEQsUUFBUSxDQUFDMEQsUUFBUSxFQUFFO1FBQzdDLElBQUl2QyxPQUFPLENBQUNNLGFBQWEsRUFBRTtVQUMxQjtVQUNBTixPQUFPLENBQUNxQyxVQUFVLEdBQUd4RCxRQUFRLENBQUNDLElBQUk7VUFDbEMsSUFBSSxDQUFDNkMsY0FBYyxDQUFDM0IsT0FBTyxFQUFFYSxJQUFJLENBQUM7UUFDbkM7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUExRSxNQUFBLENBTUFxRyxjQUFjLEdBQWQsU0FBQUEsZUFBZVQsV0FBbUIsRUFBRWhFLGFBQXdCLEVBQUVpRSxNQUFZLEVBQVE7TUFDakY7TUFDQUQsV0FBVyxHQUFHQSxXQUFXLENBQUMxRSxNQUFNLENBQUU2RSxJQUFJLElBQUtBLElBQUksQ0FBQ0MsRUFBRSxLQUFLSCxNQUFNLENBQUNHLEVBQUUsSUFBSUQsSUFBSSxDQUFDZCxFQUFFLENBQUM7TUFDNUVyRCxhQUFhLENBQUNsQixXQUFXLENBQUN2QixXQUFXLEVBQUV5RyxXQUFXLENBQUM7TUFDbkQsTUFBTVUsYUFBYSxHQUFHMUUsYUFBYSxDQUFDdEIsV0FBVyxDQUFDbEIsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2pFLE1BQU1tSCxvQkFBb0IsR0FBRyxTQUFBQSxDQUFVQyxHQUE2QyxFQUE0QztRQUMvSCxJQUFJekYsS0FBSyxDQUFDQyxPQUFPLENBQUN3RixHQUFHLENBQUMsRUFBRTtVQUN2QixPQUFPQSxHQUFHLENBQUN0RixNQUFNLENBQUVDLFFBQVEsSUFBS0EsUUFBUSxDQUFDNkUsRUFBRSxLQUFLSCxNQUFNLENBQUNHLEVBQUUsQ0FBQztRQUMzRCxDQUFDLE1BQU07VUFDTixLQUFLLE1BQU1TLENBQUMsSUFBSUQsR0FBRyxFQUFFO1lBQ3BCQSxHQUFHLENBQUNDLENBQUMsQ0FBQyxHQUFHRixvQkFBb0IsQ0FBQ0MsR0FBRyxDQUFDQyxDQUFDLENBQTZDLENBQUM7VUFDbEY7VUFDQSxPQUFPRCxHQUFHO1FBQ1g7TUFDRCxDQUFDO01BQ0RELG9CQUFvQixDQUFDRCxhQUFhLENBQUM7TUFDbkMxRSxhQUFhLENBQUNsQixXQUFXLENBQUN0QixVQUFVLEVBQUVrSCxhQUFhLENBQUM7SUFDckQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF0RyxNQUFBLENBS0F3RixjQUFjLEdBQWQsU0FBQUEsZUFBZTNCLE9BQWdCLEVBQUVhLElBQVksRUFBUTtNQUFBLElBQUFnQyxXQUFBLEVBQUFDLFlBQUE7TUFDcEQsTUFBTS9FLGFBQWEsR0FBRzhDLElBQUksQ0FBQzdDLFFBQVEsQ0FBQyxVQUFVLENBQUM7TUFDL0MsTUFBTStELFdBQW1CLEdBQUdoRSxhQUFhLENBQUN0QixXQUFXLENBQUNuQixXQUFXLENBQUM7TUFDbEUsSUFBSXlILFVBQTBCO01BQzlCLElBQUlDLFdBQW1CO01BQ3ZCLE1BQU1DLFFBQVEsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDckMsSUFBSSxFQUFFYixPQUFPLENBQUNNLGFBQWEsQ0FBQztNQUNwRU4sT0FBTyxDQUFDcUMsVUFBVSxHQUFHckMsT0FBTyxDQUFDcUMsVUFBVSxJQUFJckMsT0FBTyxDQUFDbUQsWUFBWTtNQUUvRCxNQUFNbkIsTUFBWSxHQUFHO1FBQ3BCRyxFQUFFLEVBQUVuQyxPQUFPLENBQUNvRCxNQUFNO1FBQ2xCQyxJQUFJLEVBQUVyRCxPQUFPLENBQUNzRCxlQUFlO1FBQzdCQyxRQUFRLEVBQUVsQyxrQkFBa0IsQ0FBQ21DLGNBQWMsQ0FBQ3hELE9BQU8sQ0FBQ3NELGVBQWUsQ0FBQztRQUNwRUcsS0FBSyxFQUFFcEMsa0JBQWtCLENBQUNxQyxZQUFZLENBQUMxRCxPQUFPLENBQUNvRCxNQUFNLEVBQUVyQixXQUFXLEVBQUUsRUFBRTtNQUN2RSxDQUFDO01BRUQsSUFBSTRCLFNBQXVCLEdBQUczQixNQUFNOztNQUVwQztNQUNBLFFBQVFoQyxPQUFPLENBQUNxQyxVQUFVO1FBQ3pCLEtBQUt4RCxRQUFRLENBQUN5RCxJQUFJO1FBQ2xCLEtBQUt6RCxRQUFRLENBQUMwRCxRQUFRO1VBQ3JCLElBQUksQ0FBQ1QsYUFBYSxDQUFDQyxXQUFXLEVBQUVoRSxhQUFhLEVBQUVpRSxNQUFNLEVBQUVoQyxPQUFPLEVBQUVhLElBQUksQ0FBQztVQUNyRTtRQUVELEtBQUtoQyxRQUFRLENBQUMrRSxLQUFLO1VBQ2xCLElBQUksQ0FBQ3BCLGNBQWMsQ0FBQ1QsV0FBVyxFQUFFaEUsYUFBYSxFQUFFaUUsTUFBTSxDQUFDO1VBQ3ZEO1FBRUQsS0FBS25ELFFBQVEsQ0FBQ2dGLE1BQU07VUFDbkIsSUFBSSxDQUFDQyxjQUFjLENBQUNqRCxJQUFJLEVBQUViLE9BQU8sQ0FBQztVQUNsQztRQUVELEtBQUtuQixRQUFRLENBQUNrRixNQUFNO1VBQ25CO1VBQ0EsSUFBSSxDQUFDQyxjQUFjLENBQUNuRCxJQUFJLEVBQUViLE9BQU8sQ0FBQztVQUNsQztRQUVELEtBQUtuQixRQUFRLENBQUNvRixNQUFNO1VBQ25CO1VBQ0EsSUFBSSxDQUFDQyxjQUFjLENBQUNyRCxJQUFJLEVBQUViLE9BQU8sQ0FBQztVQUNsQztRQUVELEtBQUtuQixRQUFRLENBQUNzRixRQUFRO1VBQ3JCLElBQUksQ0FBQ0Msc0JBQXNCLENBQzFCdkQsSUFBSSxFQUNKYixPQUFPLENBQUNNLGFBQWEsRUFDckJlLGtCQUFrQixDQUFDZ0QsT0FBTyxDQUFDLCtCQUErQixFQUFFckMsTUFBTSxDQUFDcUIsSUFBSSxDQUN4RSxDQUFDO1VBQ0Q7UUFFRCxLQUFLeEUsUUFBUSxDQUFDeUYsT0FBTztVQUNwQixJQUFJLENBQUNGLHNCQUFzQixDQUMxQnZELElBQUksRUFDSmIsT0FBTyxDQUFDTSxhQUFhLEVBQ3JCZSxrQkFBa0IsQ0FBQ2dELE9BQU8sQ0FBQyw4QkFBOEIsRUFBRXJDLE1BQU0sQ0FBQ3FCLElBQUksQ0FDdkUsQ0FBQztVQUNEO1FBRUQsS0FBS3hFLFFBQVEsQ0FBQzBGLE1BQU07VUFDbkIsSUFBSSxDQUFDQyxjQUFjLENBQUMzRCxJQUFJLEVBQUViLE9BQU8sQ0FBQztVQUNsQztRQUVELEtBQUtuQixRQUFRLENBQUNDLElBQUk7VUFDakI2RSxTQUFTLEdBQUczQixNQUFNO1VBQ2xCMkIsU0FBUyxDQUFDYyxHQUFHLEdBQUdDLHNCQUFzQixDQUFDMUUsT0FBTyxDQUFDTSxhQUFhLENBQUM7O1VBRTdEO1VBQ0EsSUFBSXFFLGFBQWEsR0FBRyxFQUFFO1VBQ3RCLE1BQU1DLEtBQUssR0FBRzNCLFFBQVEsQ0FBQzRCLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFDakMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLEtBQUssQ0FBQ3JILE1BQU0sR0FBRyxDQUFDLEVBQUV1SCxDQUFDLEVBQUUsRUFBRTtZQUMxQ0gsYUFBYSxJQUFJLElBQUlDLEtBQUssQ0FBQ0UsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDL0csYUFBYSxDQUFDdEIsV0FBVyxDQUFDbEIsVUFBVSxHQUFHb0osYUFBYSxDQUFDLEVBQUU7Y0FDM0Q1RyxhQUFhLENBQUNsQixXQUFXLENBQUN0QixVQUFVLEdBQUdvSixhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQ7VUFDRDtVQUVBNUIsVUFBVSxHQUFHaEYsYUFBYSxDQUFDdEIsV0FBVyxDQUFDbEIsVUFBVSxHQUFHMEgsUUFBUSxDQUFDO1VBQzdERixVQUFVLEdBQUcsQ0FBQUYsV0FBQSxHQUFBRSxVQUFVLGNBQUFGLFdBQUEsZUFBVkEsV0FBQSxDQUFZa0MsS0FBSyxHQUFHaEMsVUFBVSxDQUFDZ0MsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFO1VBQ3hEaEMsVUFBVSxDQUFDbkcsSUFBSSxDQUFDK0csU0FBUyxDQUFDO1VBQzFCNUYsYUFBYSxDQUFDbEIsV0FBVyxDQUFDdEIsVUFBVSxHQUFHMEgsUUFBUSxFQUFFRixVQUFVLENBQUM7VUFDNUQ7UUFFRCxLQUFLbEUsUUFBUSxDQUFDb0IsTUFBTTtVQUNuQjtVQUNBOEMsVUFBVSxHQUFHaEYsYUFBYSxDQUFDdEIsV0FBVyxDQUFDbEIsVUFBVSxHQUFHMEgsUUFBUSxDQUFDO1VBQzdERCxXQUFXLEdBQUcwQixzQkFBc0IsQ0FBQzFFLE9BQU8sQ0FBQ00sYUFBYSxDQUFDO1VBQzNEdkMsYUFBYSxDQUFDbEIsV0FBVyxDQUFDdEIsVUFBVSxHQUFHMEgsUUFBUSxHQUFBSCxZQUFBLEdBQUVDLFVBQVUsY0FBQUQsWUFBQSx1QkFBVkEsWUFBQSxDQUFZekYsTUFBTSxDQUFFMkgsQ0FBQyxJQUFLQSxDQUFDLENBQUNQLEdBQUcsS0FBS3pCLFdBQVcsQ0FBQyxDQUFDO1VBQ2xHO01BQ0Y7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBN0csTUFBQSxDQU1BaUksc0JBQXNCLEdBQXRCLFNBQUFBLHVCQUF1QnZELElBQVksRUFBRXpDLElBQVksRUFBRTZHLFdBQW1CLEVBQVE7TUFDN0UsSUFBSSxDQUFDckQsVUFBVSxDQUFDZixJQUFJLENBQUM7TUFDckJxRSxVQUFVLENBQUNDLFdBQVcsQ0FBQ0YsV0FBVyxFQUFFO1FBQ25DRyxPQUFPLEVBQUUsTUFBQUEsQ0FBQSxLQUFZO1VBQ3BCLElBQUk7WUFDSCxNQUFNdkUsSUFBSSxDQUFDRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUNzRSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxZQUFZLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUNDLFFBQVEsQ0FBQ25ILElBQUksRUFBRXlDLElBQUksQ0FBQztZQUN6QjtVQUNELENBQUMsQ0FBQyxPQUFPMkUsS0FBSyxFQUFFO1lBQ2ZDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLDBFQUEwRSxDQUFDO1lBQ3JGLElBQUksQ0FBQ0QsUUFBUSxDQUFDbkgsSUFBSSxFQUFFeUMsSUFBSSxDQUFDO1VBQzFCO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFFLE1BQUEsQ0FLQTJILGNBQWMsR0FBZCxTQUFBQSxlQUFlakQsSUFBWSxFQUFFYixPQUFnQixFQUFRO01BQ3BELE1BQU0wRixtQkFBbUIsR0FBRzFGLE9BQU8sQ0FBQ00sYUFBYSxDQUFDdUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUU1RCxNQUFNYyxXQUFXLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUMvRSxJQUFJLENBQUM7TUFDN0MsTUFBTWdGLGNBQWMsR0FBR0YsV0FBVyxDQUFDNUUsaUJBQWlCLENBQUMsQ0FBQztNQUN0RCxNQUFNK0UsZUFBZSxHQUFHSixtQkFBbUIsQ0FBQ0ssR0FBRyxDQUFDLE1BQU8zSCxJQUFJLElBQUssSUFBSSxDQUFDNEgscUJBQXFCLENBQUNuRixJQUFJLEVBQUV6QyxJQUFJLENBQUMsQ0FBQzs7TUFFdkc7TUFDQXVILFdBQVcsQ0FBQ00sYUFBYSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUNOLGNBQWMsRUFBRU8sT0FBTyxDQUFDQyxHQUFHLENBQUNQLGVBQWUsQ0FBQyxDQUFDO0lBQ2xHOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEzSixNQUFBLENBTU02SixxQkFBcUIsR0FBM0IsZUFBQUEsc0JBQTRCbkYsSUFBWSxFQUFFeUYscUJBQTZCLEVBQWlCO01BQ3ZGLE1BQU1DLFNBQVMsR0FBRzFGLElBQUksQ0FBQzdDLFFBQVEsQ0FBQyxDQUFDLENBQUNrRCxZQUFZLENBQUMsQ0FBQztNQUNoRCxNQUFNc0YsV0FBVyxHQUFHRCxTQUFTLENBQUNFLGNBQWMsQ0FBQ0gscUJBQXFCLENBQUM7TUFDbkUsTUFBTUksZUFBZSxHQUFHQyxrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQVdKLFdBQVcsQ0FBQztNQUM3RixNQUFNSyxpQkFBaUIsR0FBR1AscUJBQXFCLENBQUNRLFNBQVMsQ0FBQyxDQUFDLEVBQUVSLHFCQUFxQixDQUFDUyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RHLE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDcEcsSUFBSSxFQUFFZ0csaUJBQWlCLENBQUM7TUFDeEUsTUFBTUssb0JBQW9CLEdBQUdMLGlCQUFpQixDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFRCxpQkFBaUIsQ0FBQ0UsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQy9GLE1BQU1JLGlCQUFpQixHQUFHRCxvQkFBb0IsQ0FBQ0osU0FBUyxDQUFDLENBQUMsRUFBRUksb0JBQW9CLENBQUNILFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNsRyxNQUFNSyxhQUFhLEdBQUdELGlCQUFpQixHQUFHLElBQUksQ0FBQ0Ysb0JBQW9CLENBQUNwRyxJQUFJLEVBQUVzRyxpQkFBaUIsQ0FBQyxHQUFHbkssU0FBUztNQUV4RyxJQUFJLENBQUNnSyxhQUFhLElBQUksQ0FBQ0ksYUFBYSxFQUFFO1FBQ3JDLE9BQU8sQ0FBQztNQUNUO01BRUEsSUFBSTtRQUNILE1BQU1DLG1CQUF1QyxHQUFHLEVBQUU7UUFDbEQsTUFBTUMsa0JBQWtCLEdBQUdqRyxrQkFBa0IsQ0FBQ2tHLGVBQWUsQ0FBQzFHLElBQUksQ0FBQyxDQUFDMkcscUJBQXFCLENBQUMsQ0FBQztRQUUzRixJQUFJUixhQUFhLEVBQUU7VUFDbEI7VUFDQSxNQUFNUyxjQUFjLEdBQUdsQixTQUFTLENBQUNtQixXQUFXLENBQUNWLGFBQWEsQ0FBQ1csT0FBTyxDQUFDLENBQUMsQ0FBQztVQUNyRSxNQUFNQyx5QkFBeUIsR0FBR3JCLFNBQVMsQ0FBQ21CLFdBQVcsQ0FBQ3BCLHFCQUFxQixDQUFDLENBQUNoSSxPQUFPLENBQUNtSixjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMxQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1VBQ25Ic0MsbUJBQW1CLENBQUN6SyxJQUFJLENBQUMwSyxrQkFBa0IsQ0FBQ08sa0JBQWtCLENBQUMsQ0FBQ0QseUJBQXlCLENBQUMsRUFBRVosYUFBYSxFQUFFckwsV0FBVyxDQUFDLENBQUM7UUFDekg7O1FBRUE7UUFDQSxNQUFNbU0sYUFBYSxHQUFHUixrQkFBa0IsQ0FBQ1Msb0JBQW9CLENBQzVEckIsZUFBZSxDQUFDc0IsZ0JBQWdCLENBQUNDLGtCQUFrQixFQUNuRHZCLGVBQWUsQ0FBQ3dCLFlBQVksQ0FBRUQsa0JBQy9CLENBQUM7O1FBRUQ7UUFDQSxJQUFJSCxhQUFhLENBQUN2SyxNQUFNLEVBQUU7VUFDekIsTUFBTTRLLGNBQWMsR0FBR3RILElBQUksQ0FBQ29GLGFBQWEsQ0FBQyxDQUFDO1VBQzNDLE1BQU1tQywyQkFBMkIsR0FBR0QsY0FBYyxDQUFDRSxZQUFZLENBQUNDLCtCQUErQixDQUM5RlIsYUFBYSxFQUNiZCxhQUFhLElBQUlJLGFBQ2xCLENBQThCO1VBQzlCbUIsTUFBTSxDQUFDQyxJQUFJLENBQUNKLDJCQUEyQixDQUFDLENBQUNsSyxPQUFPLENBQUV1SyxjQUFjLElBQUs7WUFDcEUsTUFBTUMsVUFBVSxHQUFHTiwyQkFBMkIsQ0FBQ0ssY0FBYyxDQUFDO1lBQzlEcEIsbUJBQW1CLENBQUN6SyxJQUFJLENBQ3ZCdUwsY0FBYyxDQUFDRSxZQUFZLENBQUNSLGtCQUFrQixDQUM3Q2EsVUFBVSxDQUFDQyxXQUFXLEVBQ3RCRCxVQUFVLENBQUNFLE9BQU8sRUFDbEJqTixXQUFXLEVBQ1hxQixTQUFTLEVBQ1QsSUFDRCxDQUNELENBQUM7VUFDRixDQUFDLENBQUM7UUFDSDtRQUVBLE1BQU1vSixPQUFPLENBQUNDLEdBQUcsQ0FBQ2dCLG1CQUFtQixDQUFDO01BQ3ZDLENBQUMsQ0FBQyxPQUFPd0IsR0FBRyxFQUFFO1FBQ2JwRCxHQUFHLENBQUNELEtBQUssQ0FBQyxxQ0FBcUMsR0FBR3FELEdBQUcsQ0FBQztRQUN0RCxNQUFNQSxHQUFHO01BQ1Y7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFNLE1BQUEsQ0FLQStILGNBQWMsR0FBZCxTQUFBQSxlQUFlckQsSUFBVSxFQUFFYixPQUFnQixFQUFRO01BQ2xELE1BQU0yRixXQUFXLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUMvRSxJQUFJLENBQUM7TUFDN0MsTUFBTWdGLGNBQWMsR0FBR0YsV0FBVyxDQUFDNUUsaUJBQWlCLENBQUMsQ0FBQztNQUN0RCxNQUFNK0gsV0FBVyxHQUFHakQsY0FBYyxDQUFDOEIsT0FBTyxDQUFDLENBQUM7TUFFNUMsTUFBTW9CLGtCQUFrQixHQUFHL0ksT0FBTyxDQUFDTSxhQUFhLENBQUN1RSxLQUFLLENBQUMsR0FBRyxDQUFDOztNQUUzRDtNQUNBLE1BQU1tRSxnQkFBZ0IsR0FBR0Qsa0JBQWtCLENBQUNFLElBQUksQ0FBRUMsV0FBVyxJQUFLSixXQUFXLENBQUN6SyxVQUFVLENBQUM2SyxXQUFXLENBQUMsQ0FBQztNQUN0RyxJQUFJRixnQkFBZ0IsRUFBRTtRQUNyQjtRQUNBOUQsVUFBVSxDQUFDQyxXQUFXLENBQUM5RCxrQkFBa0IsQ0FBQ2dELE9BQU8sQ0FBQyw2QkFBNkIsRUFBRXJFLE9BQU8sQ0FBQ3NELGVBQWUsQ0FBQyxFQUFFO1VBQzFHOEIsT0FBTyxFQUFFQSxDQUFBLEtBQU07WUFDZDtZQUNBO1lBQ0EsTUFBTTRCLGFBQWEsR0FBR25CLGNBQWMsQ0FBQzdILFFBQVEsQ0FBQyxDQUFDLENBQUNtTCxtQkFBbUIsQ0FBQ0gsZ0JBQWdCLENBQUM7WUFDckZoQyxhQUFhLENBQUNvQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ2pDLE1BQU1DLGNBQWMsR0FBRyxJQUFJLENBQUNDLHlCQUF5QixDQUFDekksSUFBSSxFQUFFa0ksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEZwRCxXQUFXLENBQUNNLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDUixXQUFXLENBQUM1RSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVzSSxjQUFjLENBQUM7WUFDcEcxRCxXQUFXLENBQUNNLGFBQWEsQ0FBQyxDQUFDLENBQUNzRCxRQUFRLENBQUNDLHVCQUF1QixDQUFDeEMsYUFBYSxDQUFDO1VBQzVFO1FBQ0QsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ04sTUFBTXFDLGNBQWMsR0FBRyxJQUFJLENBQUNDLHlCQUF5QixDQUFDekksSUFBSSxFQUFFa0ksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEZwRCxXQUFXLENBQUNNLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDUixXQUFXLENBQUM1RSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVzSSxjQUFjLENBQUM7TUFDckc7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWxOLE1BQUEsQ0FLQTZILGNBQWMsR0FBZCxTQUFBQSxlQUFlbkQsSUFBVSxFQUFFYixPQUFnQixFQUFRO01BQ2xELE1BQU0yRixXQUFXLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUMvRSxJQUFJLENBQUM7TUFDN0MsTUFBTTRJLGtCQUFrQixHQUFHekosT0FBTyxDQUFDTSxhQUFhLENBQUN1RSxLQUFLLENBQUMsR0FBRyxDQUFDO01BRTNELE1BQU13RSxjQUFjLEdBQUcsSUFBSSxDQUFDQyx5QkFBeUIsQ0FBQ3pJLElBQUksRUFBRTRJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2xGO01BQ0E5RCxXQUFXLENBQUNNLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDUixXQUFXLENBQUM1RSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVzSSxjQUFjLENBQUM7SUFDckc7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFsTixNQUFBLENBS01tTix5QkFBeUIsR0FBL0IsZUFBQUEsMEJBQWdDekksSUFBVSxFQUFFNkksZ0JBQXdCLEVBQWlCO01BQ3BGLE1BQU1DLFlBQVksR0FBR3RJLGtCQUFrQixDQUFDa0csZUFBZSxDQUFDMUcsSUFBSSxDQUFDO01BQzdELE1BQU0rSSxVQUFVLEdBQUdGLGdCQUFnQixDQUFDNUMsU0FBUyxDQUFDLENBQUMsRUFBRTRDLGdCQUFnQixDQUFDM0MsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25GLE1BQU1LLGFBQWEsR0FBRyxJQUFJLENBQUNILG9CQUFvQixDQUFDcEcsSUFBSSxFQUFFK0ksVUFBVSxDQUFDO01BRWpFLElBQUl4QyxhQUFhLEVBQUU7UUFDbEIsSUFBSTtVQUNILE1BQU1DLG1CQUF1QyxHQUFHLEVBQUU7VUFFbEQsTUFBTWQsU0FBUyxHQUFHYSxhQUFhLENBQUNwSixRQUFRLENBQUMsQ0FBQyxDQUFDa0QsWUFBWSxDQUFDLENBQUM7VUFDekQsTUFBTTJJLGlCQUFpQixHQUFHdEQsU0FBUyxDQUFDbUIsV0FBVyxDQUFDZ0MsZ0JBQWdCLENBQUM7VUFDakUsTUFBTUksY0FBYyxHQUFHdkQsU0FBUyxDQUFDbUIsV0FBVyxDQUFDTixhQUFhLENBQUNPLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDckUsTUFBTW9DLFlBQVksR0FBR0YsaUJBQWlCLENBQUN2TCxPQUFPLENBQUMsR0FBR3dMLGNBQWMsR0FBRyxFQUFFLEVBQUUsQ0FBQzs7VUFFeEU7VUFDQSxNQUFNeEMsa0JBQWtCLEdBQUdxQyxZQUFZLENBQUNuQyxxQkFBcUIsQ0FBQyxDQUFDO1VBQy9ESCxtQkFBbUIsQ0FBQ3pLLElBQUksQ0FBQzBLLGtCQUFrQixDQUFDTyxrQkFBa0IsQ0FBQyxDQUFDa0MsWUFBWSxDQUFDLEVBQUUzQyxhQUFhLEVBQUV6TCxXQUFXLENBQUMsQ0FBQzs7VUFFM0c7VUFDQTBMLG1CQUFtQixDQUFDekssSUFBSSxDQUN2QjBLLGtCQUFrQixDQUFDMEMsdUNBQXVDLENBQUNELFlBQVksRUFBRTNDLGFBQWEsRUFBRXpMLFdBQVcsRUFBRSxJQUFJLENBQzFHLENBQUM7VUFFRCxNQUFNeUssT0FBTyxDQUFDQyxHQUFHLENBQUNnQixtQkFBbUIsQ0FBQztRQUN2QyxDQUFDLENBQUMsT0FBT3dCLEdBQUcsRUFBRTtVQUNicEQsR0FBRyxDQUFDRCxLQUFLLENBQUMsZ0RBQWdELEdBQUdxRCxHQUFHLENBQUM7UUFDbEU7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBMU0sTUFBQSxDQUtBcUksY0FBYyxHQUFkLFNBQUFBLGVBQWUzRCxJQUFZLEVBQUViLE9BQWdCLEVBQVE7TUFBQSxJQUFBaUsscUJBQUE7TUFDcEQsTUFBTXRFLFdBQVcsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQy9FLElBQUksQ0FBQztNQUM3QyxNQUFNcUosY0FBYyxHQUFHbEssT0FBTyxDQUFDTSxhQUFhLENBQUN1RSxLQUFLLENBQUMsR0FBRyxDQUFDO01BQ3ZELE1BQU1zRixVQUFVLEdBQUduSyxPQUFPLENBQUNvSyx5QkFBeUIsSUFBSSxFQUFFO01BQzFELE1BQU03SixtQkFBbUIsSUFBQTBKLHFCQUFBLEdBQUdqSyxPQUFPLENBQUNxSyx5QkFBeUIsY0FBQUoscUJBQUEsdUJBQWpDQSxxQkFBQSxDQUFtQ3BGLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDekUsTUFBTXpFLGtCQUFrQixHQUFHSixPQUFPLENBQUNzSyx3QkFBd0IsS0FBSyxNQUFNO01BRXRFLElBQUl4RSxlQUFnQyxHQUFHLEVBQUU7TUFFekMsSUFBSTFGLGtCQUFrQixFQUFFO1FBQ3ZCMEYsZUFBZSxDQUFDbEosSUFBSSxDQUFDLElBQUksQ0FBQzBNLHlCQUF5QixDQUFDekksSUFBSSxFQUFFcUosY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDOUUsQ0FBQyxNQUFNO1FBQ05wRSxlQUFlLEdBQUdvRSxjQUFjLENBQUNuRSxHQUFHLENBQUMsTUFBTzNILElBQUksSUFBSyxJQUFJLENBQUNtTSxzQkFBc0IsQ0FBQzFKLElBQUksRUFBRXpDLElBQUksRUFBRStMLFVBQVUsRUFBRTVKLG1CQUFtQixDQUFDLENBQUM7TUFDL0g7O01BRUE7TUFDQW9GLFdBQVcsQ0FBQ00sYUFBYSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUNSLFdBQVcsQ0FBQzVFLGlCQUFpQixDQUFDLENBQUMsRUFBRXFGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUCxlQUFlLENBQUMsQ0FBQztJQUNuSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQTNKLE1BQUEsQ0FRTW9PLHNCQUFzQixHQUE1QixlQUFBQSx1QkFBNkIxSixJQUFZLEVBQUUySixhQUFxQixFQUFFTCxVQUFrQixFQUFFNUosbUJBQThCLEVBQWlCO01BQ3BJLE1BQU15RyxhQUFhLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ3BHLElBQUksRUFBRTJKLGFBQWEsQ0FBQztNQUNwRSxJQUFJLENBQUN4RCxhQUFhLEVBQUU7UUFDbkI7TUFDRDtNQUVBLE1BQU0yQyxZQUFZLEdBQUd0SSxrQkFBa0IsQ0FBQ2tHLGVBQWUsQ0FBQzFHLElBQUksQ0FBQztNQUM3RCxNQUFNNEosaUJBQWlCLEdBQUdkLFlBQVksQ0FBQ25DLHFCQUFxQixDQUFDLENBQUM7TUFDOUQsTUFBTWtELHFCQUFxQixHQUFHRCxpQkFBaUIsQ0FBQ0UseUJBQXlCLENBQUNSLFVBQVUsRUFBRW5ELGFBQWEsQ0FBQztNQUNwRyxNQUFNNEQsa0JBQXNDLEdBQUcsRUFBRTtNQUNqRCxJQUFJRixxQkFBcUIsRUFBRTtRQUFBLElBQUFHLHFCQUFBO1FBQzFCLEtBQUFBLHFCQUFBLEdBQUlILHFCQUFxQixDQUFDSSxlQUFlLGNBQUFELHFCQUFBLGVBQXJDQSxxQkFBQSxDQUF1Q3ROLE1BQU0sRUFBRTtVQUNsRHFOLGtCQUFrQixDQUFDaE8sSUFBSSxDQUN0QjZOLGlCQUFpQixDQUFDNUMsa0JBQWtCLENBQUM2QyxxQkFBcUIsQ0FBQ0ksZUFBZSxFQUFFOUQsYUFBYSxFQUFFckwsV0FBVyxDQUN2RyxDQUFDO1FBQ0Y7TUFDRDtNQUNBLElBQUk0RSxtQkFBbUIsSUFBSUEsbUJBQW1CLENBQUNoRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFEO1FBQ0EsTUFBTWdKLFNBQVMsR0FBRzFGLElBQUksQ0FBQzdDLFFBQVEsQ0FBQyxDQUFDLENBQUNrRCxZQUFZLENBQUMsQ0FBQztRQUNoRCxNQUFNNkosaUJBQWlCLEdBQUcsSUFBSSxDQUFDN0gsaUJBQWlCLENBQUNyQyxJQUFJLEVBQUUySixhQUFhLENBQUM7UUFDckUsTUFBTVEsYUFBYSxHQUFHckUsa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDTCxTQUFTLENBQUMwRSxVQUFVLENBQUNGLGlCQUFpQixDQUFDLENBQUM7UUFDN0csTUFBTUcsbUJBQW1CLEdBQUdGLGFBQWEsQ0FBQ2hELGdCQUFnQixDQUFDbUQsZ0JBQWdCLENBQ3pFcEYsR0FBRyxDQUFFcUYsUUFBa0IsSUFBSztVQUM1QixPQUFPQSxRQUFRLENBQUMvSCxJQUFJO1FBQ3JCLENBQUMsQ0FBQyxDQUNEaEcsTUFBTSxDQUFFZ08sSUFBSSxJQUFLOUssbUJBQW1CLENBQUM3RCxRQUFRLENBQUMyTyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJSCxtQkFBbUIsQ0FBQzNOLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDbkNxTixrQkFBa0IsQ0FBQ2hPLElBQUksQ0FBQzZOLGlCQUFpQixDQUFDNUMsa0JBQWtCLENBQUNxRCxtQkFBbUIsRUFBRWxFLGFBQWEsRUFBRXJMLFdBQVcsQ0FBQyxDQUFDO1FBQy9HO01BQ0Q7TUFFQSxNQUFNeUssT0FBTyxDQUFDQyxHQUFHLENBQUN1RSxrQkFBa0IsQ0FBQztJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBek8sTUFBQSxDQU1BOEssb0JBQW9CLEdBQXBCLFNBQUFBLHFCQUFxQnBHLElBQVUsRUFBRXpDLElBQVksRUFBdUI7TUFDbkUsSUFBSSxDQUFDQSxJQUFJLEVBQUU7UUFDVixPQUFPcEIsU0FBUztNQUNqQjtNQUNBO01BQ0EsTUFBTXNPLFdBQXFCLEdBQUcsRUFBRTtNQUNoQyxPQUFPLENBQUNsTixJQUFJLENBQUNtTixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0JELFdBQVcsQ0FBQ2xKLE9BQU8sQ0FBQ2hFLElBQUksQ0FBQztRQUN6QkEsSUFBSSxHQUFHQSxJQUFJLENBQUMwSSxTQUFTLENBQUMsQ0FBQyxFQUFFMUksSUFBSSxDQUFDMkksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2hEO01BQ0F1RSxXQUFXLENBQUNsSixPQUFPLENBQUNoRSxJQUFJLENBQUM7TUFFekIsTUFBTThJLG9CQUFvQixHQUFHOUksSUFBSSxDQUFDMEksU0FBUyxDQUFDLENBQUMsRUFBRTFJLElBQUksQ0FBQzJJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O01BRXZFLElBQUlDLGFBQWtDO01BQ3RDLElBQUluQixjQUFjLEdBQUcsSUFBSSxDQUFDRCxjQUFjLENBQUMvRSxJQUFJLENBQUMsQ0FBQ0UsaUJBQWlCLENBQUMsQ0FBd0I7TUFDekYsT0FBTzhFLGNBQWMsSUFBSSxDQUFDbUIsYUFBYSxFQUFFO1FBQUEsSUFBQXdFLHFCQUFBO1FBQ3hDLElBQUlGLFdBQVcsQ0FBQzVPLFFBQVEsQ0FBQ21KLGNBQWMsQ0FBQzhCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNuRFgsYUFBYSxHQUFHbkIsY0FBYztRQUMvQjtRQUVBQSxjQUFjLElBQUEyRixxQkFBQSxHQUFHM0YsY0FBYyxDQUFDUixVQUFVLENBQUMsQ0FBQyxjQUFBbUcscUJBQUEsdUJBQTNCQSxxQkFBQSxDQUE2QlAsVUFBVSxDQUFDLENBQXdCO01BQ2xGO01BRUEsSUFBSWpFLGFBQWEsRUFBRTtRQUNsQjtRQUNBLE9BQU9BLGFBQWE7TUFDckI7O01BRUE7TUFDQSxNQUFNeUUsS0FBSyxHQUFHLElBQUksQ0FBQzdGLGNBQWMsQ0FBQy9FLElBQUksQ0FBQyxDQUFDRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMvQyxRQUFRLENBQUMsQ0FBQztNQUN0RSxNQUFNME4saUJBQWlCLEdBQUdELEtBQUssQ0FBQ0UsY0FBYyxDQUFDLENBQUMsQ0FBQzFDLElBQUksQ0FBRTJDLE9BQU8sSUFBSztRQUNsRSxNQUFNQyxXQUFXLEdBQUdELE9BQU8sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsR0FBR0YsT0FBTyxDQUFDRyxlQUFlLENBQUMsQ0FBQyxHQUFHSCxPQUFPLENBQUNqRSxPQUFPLENBQUMsQ0FBQztRQUN4RixPQUFPaUUsT0FBTyxDQUFDSSxHQUFHLENBQUMsd0NBQXdDLENBQUMsSUFBSUgsV0FBVyxLQUFLM0Usb0JBQW9CO01BQ3JHLENBQUMsQ0FBaUM7TUFDbEM7TUFDQUYsYUFBYSxHQUFHMEUsaUJBQWlCLGFBQWpCQSxpQkFBaUIsdUJBQWpCQSxpQkFBaUIsQ0FBRU8scUJBQXFCLENBQUMsQ0FBQyxDQUFDaEQsSUFBSSxDQUFFTCxPQUFPLElBQUs7UUFDNUUsT0FBTzBDLFdBQVcsQ0FBQzVPLFFBQVEsQ0FBQ2tNLE9BQU8sQ0FBQ2pCLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDL0MsQ0FBQyxDQUFDO01BRUYsT0FBT1gsYUFBYTtJQUNyQixDQUFDO0lBQUE3SyxNQUFBLENBRURvSixRQUFRLEdBQVIsU0FBQUEsU0FBU25ILElBQVksRUFBRXlDLElBQVksRUFBUTtNQUMxQztNQUNBLE1BQU04RSxXQUFXLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUMvRSxJQUFJLENBQUM7TUFDN0MsTUFBTW1HLGFBQWEsR0FBR25HLElBQUksQ0FBQzdDLFFBQVEsQ0FBQyxDQUFDLENBQUNrTyxXQUFXLENBQUM5TixJQUFJLENBQUMsQ0FBQytOLGVBQWUsQ0FBQyxDQUFDO01BQ3pFO01BQ0EsSUFBSXhHLFdBQVcsQ0FBQ00sYUFBYSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDa0csZUFBZSxDQUFDLENBQUMsRUFBRTtRQUMzRHpHLFdBQVcsQ0FBQ00sYUFBYSxDQUFDLENBQUMsQ0FBQ3NELFFBQVEsQ0FBQ0MsdUJBQXVCLENBQUN4QyxhQUFhLENBQUM7TUFDNUUsQ0FBQyxNQUFNO1FBQ05yQixXQUFXLENBQUNNLGFBQWEsQ0FBQyxDQUFDLENBQUNvRyxPQUFPLENBQUM5RyxRQUFRLENBQUN5QixhQUFhLENBQUM7TUFDNUQ7SUFDRCxDQUFDO0lBQUE3SyxNQUFBLENBRUR5SixjQUFjLEdBQWQsU0FBQUEsZUFBZS9FLElBQVUsRUFBVTtNQUNsQyxNQUFNOEksWUFBWSxHQUFHdEksa0JBQWtCLENBQUNrRyxlQUFlLENBQUMxRyxJQUFJLENBQUM7TUFDN0QsT0FBT3lMLFdBQVcsQ0FBQ0Msa0JBQWtCLENBQUM1QyxZQUFZLENBQUM7SUFDcEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXhOLE1BQUEsQ0FNQStHLGlCQUFpQixHQUFqQixTQUFBQSxrQkFBa0JyQyxJQUFZLEVBQUV6QyxJQUFhLEVBQVU7TUFDdEQsSUFBSTZFLFFBQVEsR0FBRyxFQUFFO01BQ2pCLElBQUk3RSxJQUFJLEVBQUU7UUFDVDtRQUNBLE1BQU1vTyxRQUFRLEdBQUdwTyxJQUFJLENBQUN5RyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DNUIsUUFBUSxHQUFHcEMsSUFBSSxDQUFDN0MsUUFBUSxDQUFDLENBQUMsQ0FBQ2tELFlBQVksQ0FBQyxDQUFDLENBQUN3RyxXQUFXLENBQUM4RSxRQUFRLENBQUM7TUFDaEU7TUFDQSxPQUFPdkosUUFBUTtJQUNoQixDQUFDO0lBQUE5RyxNQUFBLENBRURzUSxJQUFJLEdBQUosU0FBQUEsS0FBQSxFQUFhO01BQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUd0RyxPQUFPLENBQUN1RyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFBQSxPQUFBOVEseUJBQUE7RUFBQSxFQW4wQjZDK1EsT0FBTztFQUFBMVEsUUFBQSxDQUFBTCx5QkFBQSxHQUFBQSx5QkFBQTtFQUFBLElBczBCakNnUixnQ0FBZ0MsMEJBQUFDLGVBQUE7SUFBQS9RLGNBQUEsQ0FBQThRLGdDQUFBLEVBQUFDLGVBQUE7SUFBQSxTQUFBRCxpQ0FBQTtNQUFBLE9BQUFDLGVBQUEsQ0FBQTlRLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLFFBQUEsR0FBQTJRLGdDQUFBO0lBQUEsSUFBQUUsT0FBQSxHQUFBRixnQ0FBQSxDQUFBelEsU0FBQTtJQUFBMlEsT0FBQSxDQUN2Q0MsY0FBYyxHQUEzQixlQUFBQSxlQUE0QkMsZUFBaUUsRUFBc0M7TUFDbEksTUFBTUMseUJBQXlCLEdBQUcsSUFBSXJSLHlCQUF5QixDQUFDb1IsZUFBZSxDQUFDO01BQ2hGLE9BQU9DLHlCQUF5QixDQUFDUixXQUFXO0lBQzdDLENBQUM7SUFBQSxPQUFBRyxnQ0FBQTtFQUFBLEVBSjRETSxjQUFjO0VBQUFqUixRQUFBLEdBQUEyUSxnQ0FBQTtFQUFBLE9BQUEzUSxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -12,7 +12,7 @@ import {
12
12
  import type { Message, User, UserActivity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
13
13
  import { Activity, CollaborationUtils, getActivityKeyFromPath } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
14
14
  import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
15
- import { getWebSocketBaseUrl } from "sap/fe/core/helpers/WebSocket";
15
+ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
16
16
  import MessageBox from "sap/m/MessageBox";
17
17
  import type UI5Element from "sap/ui/core/Element";
18
18
  import type View from "sap/ui/core/mvc/View";
@@ -337,7 +337,7 @@ export class CollaborativeDraftService extends Service<CollaborativeDraftService
337
337
 
338
338
  isCollaborationEnabled(view: View): boolean {
339
339
  const bindingContext = view?.getBindingContext && (view.getBindingContext() as Context);
340
- return !!(bindingContext && getWebSocketBaseUrl(bindingContext.getModel()));
340
+ return !!(bindingContext && ModelHelper.isCollaborationDraftSupported(bindingContext.getModel().getMetaModel()));
341
341
  }
342
342
 
343
343
  /**