@sapui5/sap.fe.templates 1.147.0 → 1.148.1

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 (41) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
  4. package/src/sap/fe/templates/ListReport/ListReport.view.xml +2 -2
  5. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +10 -16
  6. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +10 -17
  7. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +4 -1
  8. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +3 -0
  9. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  10. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +134 -24
  11. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +132 -19
  12. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +195 -20
  13. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +226 -22
  14. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +16 -8
  15. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +20 -9
  16. package/src/sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog.js +4 -1
  17. package/src/sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog.tsx +1 -0
  18. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +15 -4
  19. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +11 -2
  20. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +28 -1
  21. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +31 -0
  22. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -3
  23. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +9 -1
  24. package/src/sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper.js +72 -0
  25. package/src/sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper.ts +75 -0
  26. package/src/sap/fe/templates/ObjectPage/manifest.json +1 -15
  27. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.js +29 -20
  28. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.ts +28 -21
  29. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +4 -3
  30. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +4 -4
  31. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +93 -17
  32. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +108 -22
  33. package/src/sap/fe/templates/ObjectPage/view/fragments/EmphasizedFirstHeaderAction.fragment.xml +1 -0
  34. package/src/sap/fe/templates/ObjectPage/view/fragments/ExpandedHeading.fragment.xml +4 -4
  35. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +4 -4
  36. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +1 -1
  37. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +1 -1
  38. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -0
  39. package/src/sap/fe/templates/library.js +1 -1
  40. package/src/sap/fe/templates/messagebundle_no.properties +1 -1
  41. package/src/sap/fe/templates/messagebundle_uk.properties +1 -1
@@ -2,10 +2,12 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/macros/CommonHelper", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/OverrideExecution", "./overrides/CollaborationManager", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ClassSupport, ActionRuntime, CommonUtils, PageController, BusyLocker, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, CollaborationManager, draft, UiModelConstants, NavigationReason, ConfirmRecommendationDialog, ModelHelper, FELibrary, CommonHelper, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, CollaborationDiscard, TableScroller, InstanceManager, Device, UI5Element, Library, Messaging, Message, MessageType, OverrideExecution, CollaborationManagerOverride, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/macros/CommonHelper", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog", "sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/OverrideExecution", "./overrides/CollaborationManager", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ClassSupport, ActionRuntime, CommonUtils, PageController, BusyLocker, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, CollaborationManager, draft, UiModelConstants, NavigationReason, ConfirmRecommendationDialog, ManifestSettings, ModelHelper, FELibrary, CommonHelper, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, CollaborationDiscard, SectionNavigationHelper, TableScroller, InstanceManager, Device, UI5Element, Library, Messaging, Message, MessageType, OverrideExecution, CollaborationManagerOverride, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10;
9
+ var pollForSectionStability = SectionNavigationHelper.pollForSectionStability;
10
+ var CreationMode = ManifestSettings.CreationMode;
9
11
  var RecommendationDialogDecision = ConfirmRecommendationDialog.RecommendationDialogDecision;
10
12
  var usingExtension = ClassSupport.usingExtension;
11
13
  var publicExtension = ClassSupport.publicExtension;
@@ -51,6 +53,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
51
53
  _initializerDefineProperty(_this, "pageReady", _descriptor10, _this);
52
54
  _this.invalidateTitleHierarchyCacheSetUp = false;
53
55
  _this.mergePatchDraft = false;
56
+ // Flag to prevent ViewState.apply() from overriding section selection after user interaction or targetControlId navigation
57
+ _this.skipViewStateSectionRestore = false;
58
+ // Tracks if the binding context path changed (new entity vs same entity re-binding)
59
+ _this.isNewBindingContext = false;
54
60
  _this.handlers = {
55
61
  onPrimaryAction(oController, oView, oContext, sActionName, mParameters, mConditions) {
56
62
  /**
@@ -197,12 +203,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
197
203
  },
198
204
  onNavigateChange(oEvent) {
199
205
  //will be called always when we click on a section tab
200
- this.getExtensionAPI().updateAppState();
201
206
  this.bSectionNavigated = true;
207
+
208
+ // Prevent ViewState from overriding the user's manual tab selection.
209
+ // This is important after discard when ViewState.apply might try to restore the previous section.
210
+ this.skipViewStateSectionRestore = true;
211
+ const subSection = oEvent.getParameter("subSection");
212
+ this.targetSubSection = subSection;
213
+ this.getExtensionAPI().updateAppState();
202
214
  const oInternalModelContext = this.getView().getBindingContext("internal");
203
215
  if (CommonUtils.getIsEditable(this.getView()) && this.getView().getViewData().sectionLayout === "Tabs" && oInternalModelContext.getProperty("errorNavigationSectionFlag") === false) {
204
- const oSubSection = oEvent.getParameter("subSection");
205
- this._updateFocusInEditMode([oSubSection], true);
216
+ this._updateFocusInEditMode([subSection], true);
206
217
  }
207
218
  },
208
219
  onVariantSelected: function () {
@@ -388,7 +399,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
388
399
  }
389
400
  const tableType = table.isA("sap.ui.mdc.Table") && table.getType();
390
401
  const tableAPI = table.getParent()?.isA("sap.fe.macros.Table") ? table.getParent() : undefined;
391
- if (tableType && (tableType?.isA("sap.ui.mdc.table.GridTableType") || tableType?.isA("sap.ui.mdc.table.TreeTableType")) && tableAPI?.getTableDefinition().control.rowCountMode === "Auto") {
402
+ const tableControl = tableAPI?.getTableDefinition().control;
403
+ if (tableType && (tableType?.isA("sap.ui.mdc.table.GridTableType") || tableType?.isA("sap.ui.mdc.table.TreeTableType")) && tableControl?.rowCountMode === "Auto" && (
404
+ // Exclude CreationRow mode unless sectionLayout is Tabs: the fit-container style creates whitespace in the subsection in edit mode when CreationRow is used in TableCreationOptions
405
+ tableControl?.creationMode !== CreationMode.CreationRow || this.getView().getViewData().sectionLayout === "Tabs")) {
392
406
  //In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
393
407
  visibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
394
408
  visibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
@@ -464,8 +478,27 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
464
478
  };
465
479
  _proto._onBeforeBinding = function _onBeforeBinding(oContext) {
466
480
  let mParameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
467
- // TODO: we should check how this comes together with the transaction helper, same to the change in the afterBinding
468
- this.previousBindingContextPath = this.getView().getBindingContext()?.getPath();
481
+ // Reset flag to allow section restoration on this new binding context.
482
+ // This ensures ViewState.apply() can properly restore sections after discard or re-navigation.
483
+ this.skipViewStateSectionRestore = false;
484
+
485
+ // Store targetControlId for scrolling after binding completes
486
+ this.pendingTargetControlId = mParameters.targetControlId;
487
+
488
+ // Apply targetControlId only on initial navigation - don't apply during edit/save/discard transitions
489
+ // to preserve user's section selection. Note: getView().getBindingContext() returns the OLD context
490
+ // therefore the oContext parameter is used.
491
+ const currentContextPath = oContext?.getPath();
492
+ const getEntityIdentity = path => {
493
+ if (!path) return undefined;
494
+ // Remove IsActiveEntity from the path to get entity identity
495
+ // e.g., "/Products(ID=1,IsActiveEntity=true)" -> "/Products(ID=1)"
496
+ return path.replace(/,?IsActiveEntity=(true|false),?/, "").replace(/\(\s*,/, "(").replace(/,\s*\)/, ")");
497
+ };
498
+ const currentEntityId = getEntityIdentity(currentContextPath);
499
+ const previousEntityId = getEntityIdentity(this.previousBindingContextPath);
500
+ this.isNewBindingContext = previousEntityId !== currentEntityId;
501
+ this.previousBindingContextPath = currentContextPath;
469
502
  const aTables = this._findTables(),
470
503
  oObjectPage = this._getObjectPageLayoutControl(),
471
504
  oInternalModelContext = this.getView().getBindingContext("internal"),
@@ -698,6 +731,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
698
731
  /**
699
732
  * Set the initial focus in edit mode.
700
733
  * @param aSubSections Object page sub sections
734
+ * @param fromTabNavigation Indicates if the focus is set after a tab navigation
701
735
  */;
702
736
  _proto._updateFocusInEditMode = function _updateFocusInEditMode(aSubSections) {
703
737
  let fromTabNavigation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@@ -723,7 +757,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
723
757
  if (oFieldToFocus.isA("sap.ui.mdc.field.FieldInput")) {
724
758
  oFieldToFocus = oFieldToFocus.getParent();
725
759
  }
726
- oFieldToFocus.focus(focusInfo);
760
+ if (oFieldToFocus?.isA("sap.m.SearchField") && oFieldToFocus.getEnableSuggestions() && !oFieldToFocus.isBound("enableSuggestions")) {
761
+ // In case the focus is set on a search field with suggestions, we temporarily disable the suggestions to avoid triggering them on focus
762
+ // unless this property is bound (to avoid modifying something in a model)
763
+ oFieldToFocus.setEnableSuggestions(false);
764
+ oFieldToFocus.focus(focusInfo);
765
+ oFieldToFocus.setEnableSuggestions(true);
766
+ } else {
767
+ oFieldToFocus?.focus(focusInfo);
768
+ }
727
769
  }
728
770
  }.bind(this), fromTabNavigation ? 300 : 0);
729
771
  }
@@ -771,15 +813,24 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
771
813
 
772
814
  // Function to navigate back, or display the launchpad if we're on the first page of the history
773
815
  const navBack = () => {
774
- const currentURL = document.URL;
775
- history.back();
776
- // In case there is no previous page in the history, history.back does nothing.
777
- // In this case, we need to use navigateBackFromContext, that will display the home page
778
- setTimeout(() => {
779
- if (document.URL === currentURL) {
780
- this._routing.navigateBackFromContext(oContext);
781
- }
782
- }, 500);
816
+ // Use the new Navigation API if it's available in the browser, to check if we can go back in history.
817
+ const canGoBack = window.navigation?.canGoBack;
818
+ if (canGoBack === true) {
819
+ history.back();
820
+ } else if (canGoBack === false) {
821
+ this._routing.navigateBackFromContext(oContext);
822
+ } else {
823
+ // Fallback in case the browser doesn't support the Navigation API
824
+ const currentURL = document.URL;
825
+ history.back();
826
+ // In case there is no previous page in the history, history.back does nothing.
827
+ // In this case, we need to use navigateBackFromContext, that will display the home page
828
+ setTimeout(() => {
829
+ if (document.URL === currentURL) {
830
+ this._routing.navigateBackFromContext(oContext);
831
+ }
832
+ }, 500);
833
+ }
783
834
  };
784
835
  if (this.getAppComponent().getRouterProxy().checkIfBackHasSameContext()) {
785
836
  // Back nav will keep the same context --> no need to display the dialog
@@ -805,7 +856,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
805
856
  if ([NavigationReason.EditFlowAction, NavigationReason.RowPress].includes(mParameters?.reason)) {
806
857
  this.editFlow.storeSiblingContextData(inputBindingContext);
807
858
  }
808
- this._sideEffects.clearFieldGroupsValidity();
859
+ this.sideEffects.clearFieldGroupsValidity();
809
860
 
810
861
  // TODO: this is only a temp solution as long as the model fix the cache issue and we use this additional
811
862
  // binding with ownRequest
@@ -937,6 +988,130 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
937
988
  const applyAppState = this.getAppComponent().getAppStateHandler().applyAppState(view);
938
989
  this.pageReady.waitFor(applyAppState);
939
990
  this.reconnectSubSectionVisibilityObservers(this.subSections, oObjectPage, applyAppState, this.previousBindingContextPath !== this.getView().getBindingContext()?.getPath());
991
+
992
+ // Capture synchronously to avoid race with subsequent navigations
993
+ const pendingTargetControlId = this.pendingTargetControlId;
994
+ this.pendingTargetControlId = undefined;
995
+ this.handlePendingTargetControlIdNavigation(applyAppState, oObjectPage, pendingTargetControlId);
996
+ }
997
+
998
+ /**
999
+ * Handles navigation to a target section or subsection after app state is applied.
1000
+ * This coordinates targetControlId navigation from two sources:
1001
+ * - In-app navigation: pendingTargetControlId captured before applyAppState.
1002
+ * - Cross-app navigation: xAppState targetControlId stored by AppStateHandler during LR to OP transition.
1003
+ * @param applyAppState Promise that resolves when app state has been applied.
1004
+ * @param oObjectPage The ObjectPageLayout control.
1005
+ * @param pendingTargetControlId The targetControlId captured before applyAppState, if any.
1006
+ */;
1007
+ _proto.handlePendingTargetControlIdNavigation = function handlePendingTargetControlIdNavigation(applyAppState, oObjectPage, pendingTargetControlId) {
1008
+ applyAppState.then(async () => {
1009
+ const xAppStateTargetControlId = this.getAppComponent().getAppStateHandler()?.consumePendingTargetControlId();
1010
+ const targetControlId = pendingTargetControlId ?? xAppStateTargetControlId;
1011
+ if (!targetControlId) {
1012
+ return;
1013
+ }
1014
+
1015
+ // Wait for visibility bindings (needed for lazy loading scenarios)
1016
+ try {
1017
+ await Promise.all(this.waitForVisibilityBindings);
1018
+ } catch {
1019
+ // Some visibility bindings failed to resolve, proceeding anyway
1020
+ }
1021
+
1022
+ // Wait for pageReady to ensure ObjectPage is fully initialized
1023
+ await this.pageReady.waitPageReady();
1024
+
1025
+ // Navigate to target section
1026
+ this.navigateToTargetSection(oObjectPage, targetControlId);
1027
+ return; // Required by linter rule promise/always-return
1028
+ }).catch(() => {
1029
+ // applyAppState failed - skip targetControlId navigation
1030
+ });
1031
+ }
1032
+
1033
+ /**
1034
+ * Navigates to a target section with automatic re-navigation if UX rules reset the selection.
1035
+ * Polls the section state since setSelectedSection() doesn't fire the navigate event.
1036
+ * @param oObjectPage The ObjectPageLayout control.
1037
+ * @param targetControlId The local ID of the target section or subsection.
1038
+ */;
1039
+ _proto.navigateToTargetSection = function navigateToTargetSection(oObjectPage, targetControlId) {
1040
+ // Determine target section ID for comparison
1041
+ const targetControl = this.getView().byId(targetControlId);
1042
+ const isSection = targetControl?.isA("sap.uxap.ObjectPageSection");
1043
+ const targetSectionId = isSection ? targetControl?.getId() : targetControl?.getParent()?.getId();
1044
+
1045
+ // Navigate function with guard to prevent duplicate calls when already on target
1046
+ const navigateToTarget = () => {
1047
+ if (oObjectPage.getSelectedSection() === targetSectionId) {
1048
+ return; // Already on target section
1049
+ }
1050
+ this.navigateWithConfirmation(targetControlId);
1051
+ };
1052
+
1053
+ // Navigate immediately
1054
+ navigateToTarget();
1055
+
1056
+ // Skip polling if already on target section (navigation was no-op or succeeded immediately)
1057
+ if (oObjectPage.getSelectedSection() === targetSectionId) {
1058
+ this.skipViewStateSectionRestore = true;
1059
+ return;
1060
+ }
1061
+
1062
+ // Poll to detect UX rules reset only on new entity binding.
1063
+ // _adjustSelectedSectionByUXRules() only runs when ObjectPageLayout re-initializes with a new entity.
1064
+ if (this.isNewBindingContext) {
1065
+ pollForSectionStability({
1066
+ getSelectedSection: () => oObjectPage.getSelectedSection(),
1067
+ targetSectionId,
1068
+ onResetDetected: navigateToTarget
1069
+ }).then(() => {
1070
+ this.skipViewStateSectionRestore = true;
1071
+ return; // Required by linter rule promise/always-return
1072
+ }).catch(() => {
1073
+ // Required by linter rule promise/catch-or-return - polling failures are non-critical
1074
+ });
1075
+ }
1076
+ }
1077
+
1078
+ /**
1079
+ * Sets targetSubSection based on the target control ID for app state persistence.
1080
+ * @param targetControlId The local ID of the target section or subsection.
1081
+ */;
1082
+ _proto.setTargetSubSection = function setTargetSubSection(targetControlId) {
1083
+ const targetControl = this.getView().byId(targetControlId);
1084
+ if (targetControl?.isA("sap.uxap.ObjectPageSubSection")) {
1085
+ this.targetSubSection = targetControl;
1086
+ } else if (targetControl?.isA("sap.uxap.ObjectPageSection")) {
1087
+ const subSections = targetControl.getSubSections();
1088
+ this.targetSubSection = subSections[0];
1089
+ }
1090
+ }
1091
+
1092
+ /**
1093
+ * Performs navigation to the target section and then updates the app state.
1094
+ * @param targetControlId The local ID of the target section or subsection.
1095
+ */;
1096
+ _proto.navigateWithConfirmation = function navigateWithConfirmation(targetControlId) {
1097
+ // Set targetSubSection BEFORE navigation for app state saving.
1098
+ // scrollToSection() doesn't fire the navigate event, so onNavigateChange won't be called.
1099
+ this.setTargetSubSection(targetControlId);
1100
+ this.getExtensionAPI().navigateToSubSection(targetControlId);
1101
+
1102
+ // Wait for ExtensionAPI polling to complete (~100ms) plus scroll to finish
1103
+ // before updating app state and setting focus.
1104
+ setTimeout(() => {
1105
+ this.viewState.updateAppStateDebounced();
1106
+
1107
+ // Set focus if in edit mode (for in-app navigation to sub-object page in edit mode)
1108
+ // This is needed because scrollToSection() doesn't fire onNavigateChange,
1109
+ // so we need to manually trigger focus setting here
1110
+ const isInEditMode = CommonUtils.getIsEditable(this.getView());
1111
+ if (isInEditMode && this.targetSubSection) {
1112
+ this._updateFocusInEditMode([this.targetSubSection], false);
1113
+ }
1114
+ }, 150);
940
1115
  }
941
1116
 
942
1117
  /**
@@ -1290,7 +1465,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1290
1465
  // If there is at least one global SideEffects for the related entity, execute it/them
1291
1466
  if (globalSideEffects.length) {
1292
1467
  await this.editFlow.syncTask();
1293
- return Promise.all(globalSideEffects.map(async sideEffects => this._sideEffects.requestSideEffects(sideEffects, context)));
1468
+ return Promise.all(globalSideEffects.map(async sideEffects => this.sideEffects.requestSideEffects(sideEffects, context)));
1294
1469
  }
1295
1470
  }
1296
1471
  const draftRootContext = await CommonUtils.createRootContext(ProgrammingModel.Draft, this.getView(), appComponent);
@@ -1854,4 +2029,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1854
2029
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _class2)) || _class);
1855
2030
  return ObjectPageController;
1856
2031
  }, false);
1857
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJwcmltYXJ5Q2FuZGlkYXRlIiwiX2dldFByaW1hcnlBY3Rpb25TaG9ydGN1dENhbmRpZGF0ZXMiLCJnZXRFbmFibGVkIiwiaXNBIiwiZmlyZVByZXNzIiwiZmlyZURlZmF1bHRBY3Rpb24iLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZCIsInRhYmxlQ29udGV4dCIsInRhYmxlRGF0YSIsImdldE9iamVjdCIsImV2ZXJ5Iiwia2V5IiwiZ2V0SW5kZXgiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZSIsIkxvZyIsImVycm9yIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJvblRhYmxlQmluZGluZ1VwZGF0ZWQiLCJzeW5jVGFzayIsImludm9rZUFjdGlvbiIsInRoZW4iLCJyZXMiLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiY2F0Y2giLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9Tb3VyY2UiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb250cm9sQ29uZmlnIiwic0NvbGxlY3Rpb25QYXRoIiwiSlNPTiIsInBhcnNlIiwib1RhcmdldEluZm8iLCJvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzTWV0YVBhdGgiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJjdXN0b21EYXRhIiwiZ2V0Q3VzdG9tRGF0YSIsImdldEtleSIsIl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMiLCJnZXRWYWx1ZSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJzT3V0Ym91bmRUYXJnZXQiLCJzQ3JlYXRlUGF0aCIsIm9uTmF2aWdhdGVDaGFuZ2UiLCJvRXZlbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImJTZWN0aW9uTmF2aWdhdGVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwic2VjdGlvbkxheW91dCIsImdldFByb3BlcnR5Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwidGFyZ2V0SWQiLCJzdWJTZWN0aW9uSWQiLCJzZWN0aW9uSWQiLCJjbG9zZUNvbGxhYm9yYXRpb25TdHJpcCIsInNldFByb3BlcnR5IiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsInZpZXciLCJiSXNJbkVkaXRNb2RlIiwiaW50ZXJuYWxNb2RlbCIsIm1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0Qm91bmRDb250ZXh0IiwiY29udGV4dEJvdW5kTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwicmVtb3ZlTWVzc2FnZXMiLCJoaWRlTWVzc2FnZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwicm9vdCIsIm9ubHlBY3Rpb25hYmxlIiwiZmluZEFnZ3JlZ2F0ZWRPYmplY3RzIiwib2JqZWN0IiwiaXNCdXR0b24iLCJpc01lbnVCdXR0b24iLCJjdHJsIiwiZmxhZyIsImdldFZpc2libGUiLCJzSWQiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJvT2JqZWN0UGFnZSIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsImdldE93bmVyQ29tcG9uZW50IiwicGFnZSIsInZpc2liaWxpdHkiLCJpdGVtcyIsIl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXciLCJnZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24iLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwiYmluZCIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsImZvckVhY2giLCJzdWJTZWN0aW9uIiwiYnlJZCIsIm1lc3NhZ2VCaW5kaW5nIiwiYmluZExpc3QiLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwiX2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24iLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsInZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsInRhYmxlVHlwZSIsImdldFR5cGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwicm93Q291bnRNb2RlIiwiYWRkU3R5bGVDbGFzcyIsImRldGFjaEV2ZW50IiwiYmxvY2siLCJnZXRUYWJsZUFQSSIsIm1haW5Db250ZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJtYWluQ29udGVudFRhYmxlQVBJIiwic2lkZUNvbnRlbnQiLCJnZXRTaWRlQ29udGVudCIsInNpZGVDb250ZW50VGFibGVBUEkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwiYXBwbHkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbiIsImdldFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsInByZXZpb3VzQmluZGluZ0NvbnRleHRQYXRoIiwiYVRhYmxlcyIsIl9maW5kVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJFZGl0Rmxvd0FjdGlvbiIsIl9jbG9zZVNpZGVDb250ZW50Iiwib3BDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJzb21lIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsIml0ZW0iLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJmbk9QUmVuZGVyaW5nTGF5b3V0IiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJfaW5pdGlhbGl6ZVBhZ2luYXRpb24iLCJsaXN0QmluZGluZyIsIl9kaXNhYmxlQmxvY2tzQmluZGluZ3MiLCJkaXNjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMiLCJ3YWl0Rm9yVmlzaWJpbGl0eUJpbmRpbmdzIiwid2FpdEZvckFsbFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZ3NSZXNvbHZlZCIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsImVuYWJsZUFuaW1hdGlvbiIsIm9iamVjdFBhZ2VMYXlvdXQiLCJzZXRWaXNpYmxlIiwic3ViU2VjdGlvbnNJbmZvIiwiZmUiLCJvdGhlcnMiLCJkaXNjb25uZWN0VmlzaWJpbGl0eU9ic2VydmVyIiwiZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZG9tRWRpdGFibGVFbGVtZW50IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsIlVJNUVsZW1lbnQiLCJjbG9zZXN0VG8iLCJnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvYmplY3RQYWdlIiwiZm9vdGVyIiwiZ2V0Rm9vdGVyIiwiZm9vdGVyUHJpbWFyeUFjdGlvbiIsImZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJnZXRDb250ZW50IiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJFZGl0YWJsZUhlYWRlciIsImZpcnN0VmlzaWJpbGl0eUJpbmRpbmciLCJfZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJpU2VjdGlvbiIsIm9TZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJkaXNhYmxlQmluZGluZ0NvbnRleHRDb25kaXRpb24iLCJzdWJCbG9jayIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJibG9ja0NvbnRyb2wiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwiZnJvbVRhYk5hdmlnYXRpb24iLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiZ2V0Q29udGVudEVkaXQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJhbGxzdWJTZWN0aW9ucyIsImN1cnJlbnRNb2RlbCIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlU3ViU2VjdGlvbkNyZWF0ZWQiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIlJvd1ByZXNzIiwiaW5jbHVkZXMiLCJzdG9yZVNpYmxpbmdDb250ZXh0RGF0YSIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsIm9CaW5kaW5nIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJnZXRDb250ZXh0IiwiZm5IYW5kbGVDaGFuZ2UiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIm9FcnJvciIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwicmVjb21tZW5kYXRpb25zIiwiY2xlYXJSZWNvbW1lbmRhdGlvbnMiLCJkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsIl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCIsImFwcGx5QXBwU3RhdGUiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwicmVjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMiLCJzdWJTZWN0aW9uSW5mbyIsIndhaXRGb3JBcHBseUFwcHN0YXRlIiwiYWxsIiwib2JzZXJ2ZUN1cnJlbnRTZWN0aW9uIiwic3Vic2VjdGlvbiIsImZpcmVFdmVudCIsImNhcmRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiaGFzQ29sbGFib3JhdGlvbk1hbmFnZXJDb25uZWN0ZWQiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNhcmRPYmplY3QiLCJ1cGRhdGVDYXJkcyIsInBhcmVudEFwcElkIiwiYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwic2hhcmVBdmFpbGFibGVDYXJkcyIsImZpbmRFbGVtZW50cyIsImVsZW0iLCJtZXNzYWdlU3RyaXAiLCJlbnRpdHlOYW1lIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJjb2xsYWJvcmF0aW9uTWVzc2FnZSIsIk1lc3NhZ2UiLCJnZXRUZXh0IiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvT2JqZWN0UGFnZURlc2NyaXB0aW9uIiwiZXh0cmFjdFBhdGhzIiwiYmluZGluZ0luZm8iLCJmcm9tIiwiU2V0IiwicGFydHMiLCJwYXJ0IiwibW9kZWwiLCJwYXRoIiwiQm9vbGVhbiIsInN1YnRpdGxlUGF0aHMiLCJnZXRCaW5kaW5nSW5mbyIsImRlc2NyaXB0aW9uUGF0aHMiLCJwYXRoc1RvUmVzb2x2ZSIsImFwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImZuQ2xlYXJDYWNoZVRpdGxlIiwiaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvT2JqZWN0UGFnZUNvbnRleHQiLCJidWlsZCIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJwIiwicmVxdWVzdFByb3BlcnR5IiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJvTWVzc2FnZSIsImlzRXJyb3JNZXNzYWdlIiwidmFsaWRhdGlvbiIsIm1lc3NhZ2VWYWxpZGF0aW9uIiwiaXNFZGl0TW9kZSIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsIm9JdGVtQmluZGluZyIsImdldExlbmd0aCIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJlZGl0RG9jdW1lbnQiLCJmaW5hbGx5IiwicHJvcGVydHlQYXRoIiwiTG9jYWxQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJnZXRBY3RpdmVFbGVtZW50IiwiYnlQYXNzU2lkZUVmZmVjdHMiLCJpc1RyYW5zaWVudCIsImNyZWF0ZWQiLCJob2xkTWVzc2FnZXNGb3JDb250cm9sIiwicmV0IiwiZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24iLCJzaG93TWVzc2FnZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiY3JlYXRlUm9vdENvbnRleHQiLCJEcmFmdCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJpc0Nvbm5lY3RlZCIsInNraXBCaW5kaW5nVG9WaWV3IiwidXNlU2F2ZUFuZExlYXZlIiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwibWVzc2FnZVBvcG92ZXJFcnIiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZGlhbG9nQWN0aW9uIiwiQ29sbGFib3JhdGlvbkRpc2NhcmQiLCJnZXRVc2VyQWN0aW9uIiwiZXJyIiwiY3JlYXRpb25Sb3ciLCJ0YWJsZUJpbmRpbmciLCJjb250ZXh0S2V5cyIsInN0YXJ0c1dpdGgiLCJjcmVhdGVEb2N1bWVudCIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZUF0RW5kIiwiZ2V0QWdncmVnYXRpb24iLCJza2lwU2lkZUVmZmVjdHMiLCJpc1N0YW5kYXJkU2F2ZSIsImNvbW1hbmQiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwibGFzdEZvY3VzZWRDb250cm9sSWQiLCJzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImFmdGVyQ2FuY2VsIiwicHJvbWlzZVJlc3VsdCIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsIml0ZW0xIiwib0VsZW1lbnQiLCJjaGFydENvbnRyb2wiLCJnZXRDaGFydENvbnRyb2wiLCJvU3ViRWxlbWVudCIsIl9nZXRBbGxCbG9ja3MiLCJfZmluZENoYXJ0cyIsImFDaGFydHMiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwicmVwbGFjZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsImVudGl0eVNldCIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9WaWV3RGF0YSIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwic0tleSIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsImJpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGluayIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiLCJfZmluZFN1bW1hcml6ZUJ1dHRvbiIsIm9iamVjdFBhZ2VUaXRsZSIsInN1bW1hcml6ZUJ1dHRvbiIsImJ1dHRvbiIsImVuZHNXaXRoIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1zIiwicHJlZmVycmVkQWN0aW9uIiwicHJlZmVycmVkQWN0aW9uTGV2ZWwiLCJwYXJzZUludCIsInNwbGl0IiwiaXNOYU4iLCJnZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMiLCJDYW5QZXJmb3JtIiwic2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiQWxyZWFkeVBlcmZvcm1lZCIsImVudmlyb25tZW50U2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiU21hcnRTdW1tYXJpemUiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCwgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIENoYXJ0QmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkQmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9zZWN0aW9uL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIEZvcm1BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQVBJXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VCdXR0b25cIjtcbmltcG9ydCB0eXBlIFNoYXJlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NoYXJlL1NoYXJlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUNyZWF0aW9uT3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUNyZWF0aW9uT3B0aW9uc1wiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uRGlzY2FyZCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRpc2NhcmREaWFsb2dcIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb25CbG9jayBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N1YlNlY3Rpb25CbG9ja1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIElucHV0QmFzZSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlVHlwZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVGFibGVUeXBlQmFzZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbGxhYm9yYXRpb25EcmFmdCBmcm9tIFwiLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EcmFmdFwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBCaW5kaW5nUGFyYW1zID0ge1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcbmNvbnN0IFByZWZlcnJlZEFjdGlvblN0YXR1cyA9IEZFTGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBGRVZpZXc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKENvbGxhYm9yYXRpb25NYW5hZ2VyLm92ZXJyaWRlKENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUpKVxuXHRjb2xsYWJvcmF0aW9uTWFuYWdlciE6IENvbGxhYm9yYXRpb25NYW5hZ2VyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uITogTWVzc2FnZUJ1dHRvbjtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25NZXNzYWdlPzogTWVzc2FnZTtcblxuXHRwcml2YXRlIG1lcmdlUGF0Y2hEcmFmdCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgYXV0b1F1ZXVlTG9jazogUmV0dXJuVHlwZTxPRGF0YU1vZGVsW1wibG9ja1wiXT4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSB3YWl0Rm9yVmlzaWJpbGl0eUJpbmRpbmdzITogUHJvbWlzZTx1bmtub3duPltdO1xuXG5cdHByaXZhdGUgc3ViU2VjdGlvbnM/OiB7IGZlOiBTdWJTZWN0aW9uW107IG90aGVyczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB9O1xuXG5cdHByaXZhdGUgcHJldmlvdXNCaW5kaW5nQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgY29udHJvbHMgKEJ1dHRvbiAvIE1lbnVCdXR0b24pIHRoYXQgYXJlIG1hcmtlZCBhcyBcInByaW1hcnkgYWN0aW9uXCIuXG5cdCAqIFRoZSBtYXJrZXIgaXMgc2V0IGJ5IHRoZSBjb252ZXJ0ZXJzIHdoZW4gYW4gYWN0aW9uIGlzIGVtcGhhc2l6ZWQgKGFubm90YXRpb24tYmFzZWQpIG9yXG5cdCAqIGNvbmZpZ3VyZWQgYXMgcHJpbWFyeUFjdGlvbiAoY3VzdG9tIGFjdGlvbiBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG5cdCAqIEBwYXJhbSByb290IFJvb3QgY29udHJvbCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb21cblx0ICogQHBhcmFtIG9ubHlBY3Rpb25hYmxlIElmIHRydWUsIG9ubHkgYWN0aW9uYWJsZSAoZW5hYmxlZCkgY2FuZGlkYXRlcyBhcmUgcmV0dXJuZWRcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgY29udHJvbHMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IgcHJpbWFyeSBhY3Rpb24gc2hvcnRjdXRzXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRQcmltYXJ5QWN0aW9uU2hvcnRjdXRDYW5kaWRhdGVzKHJvb3Q6IE1hbmFnZWRPYmplY3QsIG9ubHlBY3Rpb25hYmxlID0gZmFsc2UpOiBBcnJheTxCdXR0b24gfCBNZW51QnV0dG9uPiB7XG5cdFx0cmV0dXJuIHJvb3QuZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChvYmplY3Q6IE1hbmFnZWRPYmplY3QpID0+IHtcblx0XHRcdGNvbnN0IGlzQnV0dG9uID0gb2JqZWN0LmlzQShcInNhcC5tLkJ1dHRvblwiKTtcblx0XHRcdGNvbnN0IGlzTWVudUJ1dHRvbiA9IG9iamVjdC5pc0EoXCJzYXAubS5NZW51QnV0dG9uXCIpO1xuXHRcdFx0aWYgKCFpc0J1dHRvbiAmJiAhaXNNZW51QnV0dG9uKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN0cmwgPSBvYmplY3QgYXMgQnV0dG9uIHwgTWVudUJ1dHRvbjtcblx0XHRcdGNvbnN0IGZsYWcgPSBjdHJsXG5cdFx0XHRcdC5nZXRDdXN0b21EYXRhKClcblx0XHRcdFx0LmZpbmQoKGN1c3RvbURhdGE6IEN1c3RvbURhdGEpID0+IGN1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiZmVQcmltYXJ5QWN0aW9uU2hvcnRjdXRcIilcblx0XHRcdFx0Py5nZXRWYWx1ZSgpO1xuXHRcdFx0aWYgKGZsYWcgIT09IHRydWUgJiYgZmxhZyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHJsLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHQvLyBGb3IgZm9jdXMgcGxhY2VtZW50IHdlIG11c3QgaWdub3JlIGRpc2FibGVkIGNhbmRpZGF0ZXMuXG5cdFx0XHRyZXR1cm4gb25seUFjdGlvbmFibGUgPyBjdHJsLmdldEVuYWJsZWQoKSA6IHRydWU7XG5cdFx0fSkgYXMgQXJyYXk8QnV0dG9uIHwgTWVudUJ1dHRvbj47XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9LCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXG5cdFx0XHRcInJlbGF0ZWRBcHBzXCIsXG5cdFx0XHR7XG5cdFx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0XHRpdGVtczogbnVsbFxuXHRcdFx0fSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdHN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKSBhcyBNZXNzYWdlQnV0dG9uO1xuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdEVuYWJsZWRcIiwgdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cblx0XHR0aGlzLl9oYW5kbGVTbWFydFN1bW1hcnlTdGFydHVwQWN0aW9uKCk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uZGV0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgYXBwIGlzIHN1c3BlbmRlZCwgd2UgZG8gbm90IHNob3cgdGhlIG1lc3NhZ2VzICh0aGUgTWVzc2FnZU1vZGVsIGNvbnRhaW5zIG1lc3NhZ2VzIGZyb20gdGhlIGFjdGl2ZSBhcHApLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nPy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuX3Nob3dNZXNzYWdlcyhtZXNzYWdlcywgXCJCYWNrZW5kXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBUYWJsZSk6IE9EYXRhTGlzdEJpbmRpbmcge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgdG8gZXZlcnkgdmlzaWJsZSBzdWJzZWN0aW9uIHRoYXQgY29udGFpbnMgb25seSBhIHNpbmdsZSBHcmlkVGFibGUgb3IgVHJlZVRhYmxlLlxuXHQgKiBUaGlzIG1ha2VzIHRoZSB0YWJsZSBmaWxsIHRoZSBmdWxsIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSB0YWJsZSBpdHNlbGYgcmF0aGVyIHRoYW4gb24gdGhlIHBhZ2UuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIHZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLnZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi52aXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKGJsb2Nrcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAodGFibGUuZ2V0VHlwZSgpIGFzIFRhYmxlVHlwZUJhc2UpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy5UYWJsZVwiKSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZVR5cGUgJiZcblx0XHRcdFx0XHQodGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikgfHwgdGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLlRyZWVUYWJsZVR5cGVcIikpICYmXG5cdFx0XHRcdFx0dGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wucm93Q291bnRNb2RlID09PSBcIkF1dG9cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdFx0dmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0XHR2aXNpYmxlU3ViU2VjdGlvbi5kZXRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBzdWJTZWN0aW9ucykge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdHN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgc3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZ2V0VGFibGVBUEkgPSAoY29udHJvbDogQ29udHJvbCk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wgYXMgVGFibGVBUEk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRjb25zdCBtYWluQ29udGVudCA9IChjb250cm9sIGFzIER5bmFtaWNTaWRlQ29udGVudCkuZ2V0TWFpbkNvbnRlbnQoKVswXTtcblx0XHRcdFx0Y29uc3QgbWFpbkNvbnRlbnRUYWJsZUFQSSA9IGdldFRhYmxlQVBJKG1haW5Db250ZW50KTtcblx0XHRcdFx0aWYgKG1haW5Db250ZW50VGFibGVBUEkpIHtcblx0XHRcdFx0XHR0YWJsZUFQSSA9IG1haW5Db250ZW50VGFibGVBUEk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUNvbnRlbnQgPSAoY29udHJvbCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldFNpZGVDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUNvbnRlbnRUYWJsZUFQSSA9IGdldFRhYmxlQVBJKHNpZGVDb250ZW50KTtcblx0XHRcdFx0XHRpZiAoc2lkZUNvbnRlbnRUYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkgPSBzaWRlQ29udGVudFRhYmxlQVBJO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGFibGVBUEkgPSBnZXRUYWJsZUFQSShjb250cm9sKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcuZ2V0Vmlld0RhdGEoKT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGxldCBzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRpZiAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRVc2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHR0aGlzLnByZXZpb3VzQmluZGluZ0NvbnRleHRQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIik7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25Sb3c7XG5cdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0b1wiKTtcblx0XHRpZiAobVBhcmFtZXRlcnMucmVhc29uICE9PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0aWYgKFxuXHRcdFx0b3BDb250ZXh0ICYmXG5cdFx0XHRvcENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJlxuXHRcdFx0IWFCYXRjaEdyb3Vwcy5zb21lKG9wQ29udGV4dC5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcblx0XHRcdFx0XHRcdFx0XHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gaXRlbS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyB7IGlzRmlyc3RSZW5kZXJpbmc/OiAoKSA9PiBib29sZWFuIH0pLmlzRmlyc3RSZW5kZXJpbmc/LigpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Y29uc3QgZm5PUFJlbmRlcmluZ0xheW91dCA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmVkaXRhYmxlSGVhZGVyQ29udGVudCkge1xuXHRcdFx0XHRcdGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKGZuT1BSZW5kZXJpbmdMYXlvdXQpO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHR0aGlzLl9pbml0aWFsaXplUGFnaW5hdGlvbihvQ29udGV4dCwgb0ludGVybmFsTW9kZWwsIG1QYXJhbWV0ZXJzPy5saXN0QmluZGluZyk7XG5cblx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXG5cdFx0dGhpcy5zdWJTZWN0aW9ucyA9IHRoaXMuZGlzY29ubmVjdFN1YlNlY3Rpb25WaXNpYmlsaXR5T2JzZXJ2ZXJzKG9PYmplY3RQYWdlKTtcblx0XHR0aGlzLndhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MgPSB0aGlzLndhaXRGb3JBbGxTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmdzUmVzb2x2ZWQoKTtcblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgb0NvbnRhaW5lcjogQ29udHJvbCB9KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlci5lbmFibGVBbmltYXRpb24oKTtcblx0XHRcdFx0KG9OYXZDb250YWluZXIgYXMgdW5rbm93biBhcyB7IHNob3dQbGFjZWhvbGRlcjogRnVuY3Rpb24gfSkuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY29ubmVjdCB0aGUgdmlzaWJpbGl0eSBvYnNlcnZlcnMgb2YgYWxsIEZFIHN1YnNlY3Rpb25zLlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZUxheW91dFxuXHQgKiBAcmV0dXJucyBUaGUgc3Vic2VjdGlvbnMgaW5mb3JtYXRpb24gb3IgdW5kZWZpbmVkIGlmIG9wdGltaXphdGlvbiBpcyBkaXNhYmxlZFxuXHQgKi9cblx0ZGlzY29ubmVjdFN1YlNlY3Rpb25WaXNpYmlsaXR5T2JzZXJ2ZXJzKFxuXHRcdG9iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXRcblx0KTogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRvYmplY3RQYWdlTGF5b3V0LnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnNJbmZvOiB7XG5cdFx0XHRcdGZlOiBTdWJTZWN0aW9uW107XG5cdFx0XHRcdG90aGVyczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRcdH0gPSB7IGZlOiBbXSwgb3RoZXJzOiBbXSB9O1xuXHRcdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChzdWJTZWN0aW9uLmlzQTxTdWJTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCIpKSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbnNJbmZvLmZlLnB1c2goc3ViU2VjdGlvbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbnNJbmZvLm90aGVycy5wdXNoKHN1YlNlY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHN1YlNlY3Rpb25zSW5mby5mZS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiBzdWJTZWN0aW9uLmRpc2Nvbm5lY3RWaXNpYmlsaXR5T2JzZXJ2ZXIoKSk7XG5cdFx0XHRyZXR1cm4gc3ViU2VjdGlvbnNJbmZvO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbG9hZGluZyBzdHJhdGVneSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGluZyBzdHJhdGVneSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuXHQgKi9cblx0Z2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmRhdGEoXCJkaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb25cIikgPT09IFwidHJ1ZVwiO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZG9tRWRpdGFibGVFbGVtZW50ID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk7XG5cdFx0cmV0dXJuIGRvbUVkaXRhYmxlRWxlbWVudCA/IFVJNUVsZW1lbnQuY2xvc2VzdFRvKGRvbUVkaXRhYmxlRWxlbWVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdC8vIEluIGRpc3BsYXkgbW9kZSwgaWYgYSB2aXNpYmxlIHByaW1hcnkgYWN0aW9uIHdpdGggdGhlIGVtcGhhc2lzIGV4aXN0cyBpbiB0aGUgZm9vdGVyLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBvbiB0aGUgcGFnZS5cblx0XHRjb25zdCBmb290ZXIgPSBvYmplY3RQYWdlLmdldEZvb3RlcigpO1xuXHRcdGNvbnN0IGZvb3RlclByaW1hcnlBY3Rpb24gPSBmb290ZXJcblx0XHRcdD8gdGhpcy5fZ2V0UHJpbWFyeUFjdGlvblNob3J0Y3V0Q2FuZGlkYXRlcyhmb290ZXIgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0LCB0cnVlKVswXVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvb3RlclByaW1hcnlBY3Rpb24pIHtcblx0XHRcdHJldHVybiBmb290ZXJQcmltYXJ5QWN0aW9uO1xuXHRcdH1cblx0XHQvLyBGYWxsYmFjazogZmlyc3QgdmlzaWJsZSAmIGVuYWJsZWQgaGVhZGVyIGFjdGlvbiAoRWRpdCwgZXRjLilcblx0XHRsZXQgZmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgKG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Zmlyc3RDbGlja2FibGVFbGVtZW50ID0gYWN0aW9ucy5maW5kKGZ1bmN0aW9uIChhY3Rpb246IENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChhY3Rpb24uaXNBPFN1bW1hcml6YXRpb25CdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5TdW1tYXJpemF0aW9uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRDb250ZW50KCk/LmdldFZpc2libGUoKSA/PyBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRhY3Rpb24uaXNBPFNoYXJlQVBJPihcInNhcC5mZS5tYWNyb3MuU2hhcmVcIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPEVhc3lGaWxsQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuRWFzeUZpbGxCdXR0b25cIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPENvbGxhYm9yYXRpb25EcmFmdD4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29tcG9uZW50cy5Db2xsYWJvcmF0aW9uRHJhZnRcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gc2luY2UgU2hhcmUgYW5kIENvbGxhYm9yYXRpb25EcmFmdCBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYWJsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFjdGlvbi5pc0E8SW52aXNpYmxlVGV4dD4oXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmICFhY3Rpb24uaXNBPFRvb2xiYXJTcGFjZXI+KFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpICYmIChhY3Rpb24gYXMgQnV0dG9uKS5nZXRFbmFibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGUgdGhlIGJpbmRpbmdzIG9mIGJsb2NrcyBpbiBPYmplY3QgUGFnZSBMYXlvdXQgYmFzZWQgb24gdGhlIGl0cyBvdmVyYWxsIGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqL1xuXHRfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogdm9pZCB7XG5cdFx0Y29uc3QgYVNlY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0bGV0IGlTa2lwID0gMzsgLy8gMyBzZWN0aW9ucy9zdWJzZWN0aW9ucyBhcmUgbG9hZGVkIGluaXRpYWxseSwgdGhlIG90aGVycyBhcmUgbG9hZGVkIGxhemlseVxuXHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRjb25zdCBmaXJzdFZpc2liaWxpdHlCaW5kaW5nID0gdGhpcy5fZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTtcblx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uID1cblx0XHRcdFx0XHQodGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSAmJlxuXHRcdFx0XHRcdFx0KGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkpIHx8XG5cdFx0XHRcdFx0KCF0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpICYmXG5cdFx0XHRcdFx0XHQoKCFiVXNlSWNvblRhYkJhciAmJiAoaVNraXAgPCAxIHx8IG9TdWJTZWN0aW9uLmdldEJpbmRpbmcoXCJ2aXNpYmxlXCIpKSkgfHwgLy9pZiB3ZSBhcmUgbm90IGluIEljb25UYWJCYXIgbW9kZSwgYWxsIHNlY3Rpb24gd2l0aCBpbmRleCA+PTMgb3Igd2l0aCB2aXNpYmlsaXR5IGJpbmRpbmcgc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0XHRcdFx0XHQoIWJVc2VJY29uVGFiQmFyICYmICFmaXJzdFZpc2liaWxpdHlCaW5kaW5nICYmIGlTa2lwIDwgMSkgfHwgLy8gaWYgbm8gc3Vic2VjdGlvbiBoYXMgdmlzaWJpbGl0eSBiaW5kaW5nIGFuZCB3ZSBhcmUgbm90IGluIEljb25UYWJCYXIgbW9kZVxuXHRcdFx0XHRcdFx0XHQoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkpO1xuXHRcdFx0XHRpZiAoZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGJpbmRpbmcgaXMgZW5hYmxlZC5cblx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBjb250ZW50cyBiaW5kaW5nIGlzIGRpc2FibGVkLlxuXHRcdFx0XHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGJsb2NrLmlzQTxTdWJTZWN0aW9uQmxvY2s+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0XHRcdFx0XHRibG9jay5jb250ZW50LnNldEJpbmRpbmdDb250ZXh0Py4obnVsbCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRmb3IgKGNvbnN0IHN1YlNlY3Rpb24gb2YgYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBhQmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyAoRm9ybSB8IEZvcm1BUEkpW107XG5cblx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgYmxvY2tDb250cm9sIG9mIGFCbG9ja3MpIHtcblx0XHRcdFx0XHRpZiAoYmxvY2tDb250cm9sLmdldEJpbmRpbmdDb250ZXh0Py4oKSkge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBibG9ja0NvbnRyb2wuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sLmdldENvbnRlbnQgJiYgYmxvY2tDb250cm9sLmdldENvbnRlbnQoKT8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sPy5nZXRDb250ZW50Py4oKT8uaXNBPEZvcm1BUEk+KFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm1BUEkpLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1Db250YWluZXIgb2YgYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGZvcm1Db250YWluZXIuZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUVsZW1lbnQgb2YgYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gZm9ybUVsZW1lbnQuZ2V0RmllbGRzKCkgYXMgSW5wdXRCYXNlW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVtcHR5RmllbGQgPSB0aGlzLmdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGFGaWVsZHMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZW1wdHlGaWVsZCkgcmV0dXJuIGVtcHR5RmllbGQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWZXJpZnkgaWYgdGhlIGZpcnN0IGZpZWxkIGlzIGVtcHR5IGFuZCByZXF1aXJlZC5cblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBlbXB0eSByZXF1aXJlZCBmaWVsZCBvciB1bmRlZmluZWQgaWYgbm8gc3VjaCBmaWVsZCBleGlzdHNcblx0ICovXG5cdGdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGZpZWxkczogSW5wdXRCYXNlW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGlmICghZmllbGRzWzBdLmdldFJlcXVpcmVkPy4oKSkgcmV0dXJuO1xuXG5cdFx0bGV0IGlzRW1wdHkgPSBmYWxzZTtcblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoZmllbGRzWzBdLmlzQShcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gKGZpZWxkc1swXSBhcyB1bmtub3duIGFzIE11bHRpVmFsdWVGaWVsZEJsb2NrKS5nZXRNdWx0aVZhbHVlRmllbGQoKS5nZXRJdGVtcygpO1xuXHRcdFx0XHRpc0VtcHR5ID0gaXRlbXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAoZmllbGRzWzBdIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0aXNFbXB0eSA9ICF2YWx1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIGNoZWNraW5nIGZpZWxkIHByb3BlcnRpZXM6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzRW1wdHkgPyBmaWVsZHNbMF0gOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbml0aWFsIGZvY3VzIGluIGVkaXQgbW9kZS5cblx0ICogQHBhcmFtIGFTdWJTZWN0aW9ucyBPYmplY3QgcGFnZSBzdWIgc2VjdGlvbnNcblx0ICovXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdLCBmcm9tVGFiTmF2aWdhdGlvbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dChcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0XHRcdGxldCBvRmllbGRUb0ZvY3VzO1xuXHRcdFx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZC5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAoXG5cdFx0XHRcdFx0XHRcdG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIHsgY29udGVudDogeyBnZXRDb250ZW50RWRpdDogRnVuY3Rpb24gfSB9XG5cdFx0XHRcdFx0XHQpLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IHRoaXMuZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgPz8gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gb0ZpZWxkVG9Gb2N1cy5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdFx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cy5pc0EoXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkSW5wdXRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvRmllbGRUb0ZvY3VzLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdGZyb21UYWJOYXZpZ2F0aW9uID8gMzAwIDogMFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaXJzdCBzdWItc2VjdGlvbiB3aXRoIGEgdmlzaWJpbGl0eSBib3VuZCB0byB0aGUgbW9kZWwgb2YgdGhlIHZpZXcuXG5cdCAqIFNlY3Rpb25zIHdpdGggYmluZGluZ3Mgb24gaW50ZXJuYWwgbW9kZWxzIG9ubHkgYXJlIGlnbm9yZWQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgb2YgdGhlIGZpcnN0IHN1Yi1zZWN0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRfZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTogQmluZGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWxsc3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGN1cnJlbnRNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cdFx0cmV0dXJuIGFsbHN1YlNlY3Rpb25zXG5cdFx0XHQuZmluZChcblx0XHRcdFx0KHN1YlNlY3Rpb24pID0+XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24uZ2V0QmluZGluZyhcInZpc2libGVcIikgYXMgQ29tcG9zaXRlQmluZGluZyB8IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdD8uZ2V0QmluZGluZ3M/LigpXG5cdFx0XHRcdFx0XHQuc29tZSgoYmluZGluZykgPT4gYmluZGluZy5nZXRNb2RlbCgpID09PSBjdXJyZW50TW9kZWwpXG5cdFx0XHQpXG5cdFx0XHQ/LmdldEJpbmRpbmcoXCJ2aXNpYmxlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIGFsbCBzdWJzZWN0aW9uIHZpc2liaWxpdHkgYmluZGluZ3MgdG8gYmUgcmVzb2x2ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGxpc3RlbnMgZm9yIHRoZSAndmlzaWJpbGl0eUNoYW5nZWQnIGV2ZW50ICAuIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgZXZlbiBpZiB0aGUgdmFsdWVzIGFyZSBub3QgY2hhbmdlZCBidXQganVzdCByZXNvbHZlZC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvbWlzZXMgdGhhdCByZXNvbHZlIHdoZW4gZWFjaCB2aXNpYmlsaXR5IGJpbmRpbmcgaXMgcmVzb2x2ZWQuXG5cdCAqL1xuXHR3YWl0Rm9yQWxsU3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nc1Jlc29sdmVkKCk6IFByb21pc2U8dW5rbm93bj5bXSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKClcblx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdChzdWJTZWN0aW9uKSA9PiBzdWJTZWN0aW9uLmlzQTxTdWJTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCIpICYmIHN1YlNlY3Rpb24uZ2V0QmluZGluZyhcInZpc2libGVcIilcblx0XHRcdCkgLy9maWx0ZXJpbmcgb24gRkUgc3Vic2VjdGlvbnMgd2l0aCB2aXNpYmlsaXR5IGJpbmRpbmcpXG5cdFx0XHQubWFwKGFzeW5jIChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc3ViU2VjdGlvbi5hdHRhY2hFdmVudE9uY2UoXCJ2aXNpYmlsaXR5Q2hhbmdlZFwiLCByZXNvbHZlKSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0aWYgKG9TdWJTZWN0aW9uLmlzQTxTdWJTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCIpKSB7XG5cdFx0XHRvU3ViU2VjdGlvbi5oYW5kbGVTdWJTZWN0aW9uQ3JlYXRlZCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuXHRcdFx0aWYgKGJsb2NrLmlzQTxTdWJTZWN0aW9uQmxvY2s+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0XHRibG9jay5jb250ZW50LnNldEJpbmRpbmdDb250ZXh0Py4odW5kZWZpbmVkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDUwMCk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdC8vIFRoaXMgb2JqZWN0IHBhZ2UgZG9lc24ndCBoYXZlIGEgYmluZGluZyBjb250ZXh0LCBidXQgc3RpbGwgaGFuZGxlcyB0aGUgc2hlbGwgYmFjayBuYXZpZ2F0aW9uIC0tPiBwZm9ybSB0aGUgbmF2IGJhY2sgYW5kIHJlbW92ZSB0aGUgbmF2YmFjayBoYW5kbGVyIGFzIGl0IG1ha2VzIG5vIHNlbnNlIGFueSBsb25nZXJcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHQuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbihuYXZCYWNrKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNldHRpbmcgYmFjayBuYXZpZ2F0aW9uXCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdFx0Py5lbmFibGVkO1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdG5hdkJhY2ssXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0RW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHZpZXc/LmdldFZpZXdEYXRhKCk/LnZpZXdMZXZlbDtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRpZiAoW05hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24sIE5hdmlnYXRpb25SZWFzb24uUm93UHJlc3NdLmluY2x1ZGVzKG1QYXJhbWV0ZXJzPy5yZWFzb24gYXMgTmF2aWdhdGlvblJlYXNvbikpIHtcblx0XHRcdHRoaXMuZWRpdEZsb3cuc3RvcmVTaWJsaW5nQ29udGV4dERhdGEoaW5wdXRCaW5kaW5nQ29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBTdG9yZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaW4gaW50ZXJuYWwgbW9kZWwgZm9yIGFjY2VzcyBieSBjb250cm9sbGVyIGV4dGVuc2lvbnNcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChtUGFyYW1ldGVycykge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJuYXZpZ2F0aW9uUGFyYW1ldGVyc1wiLCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5lZGl0Rmxvdy5jb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzXG5cdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgYmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHt9LCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRcdChvT2JqZWN0UGFnZSBhcyB1bmtub3duIGFzIHsgX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHM6IEZ1bmN0aW9uIH0pLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhbXSk7XG5cdFx0fVxuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRvRmluYWxVSVN0YXRlPy50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWNvbW1lbmRhdGlvbnMuY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UobVBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0KTtcblx0XHR0aGlzLl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpO1xuXG5cdFx0Y29uc3QgYXBwbHlBcHBTdGF0ZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh2aWV3KTtcblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKGFwcGx5QXBwU3RhdGUpO1xuXG5cdFx0dGhpcy5yZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhcblx0XHRcdHRoaXMuc3ViU2VjdGlvbnMsXG5cdFx0XHRvT2JqZWN0UGFnZSxcblx0XHRcdGFwcGx5QXBwU3RhdGUsXG5cdFx0XHR0aGlzLnByZXZpb3VzQmluZGluZ0NvbnRleHRQYXRoICE9PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlY29ubmVjdCB0aGUgdmlzaWJpbGl0eSBvYnNlcnZlcnMgb2YgYWxsIEZFIHN1YnNlY3Rpb25zIGFmdGVyIHRoZSBzdWJzZWN0aW9uIHZpc2liaWxpdHkgYmluZGluZ3MgYXJlIHJlc29sdmVkIGFuZCB0aGUgYXBwIHN0YXRlIGlzIGFwcGxpZWQuXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2FpdCBmb3IgdGhlIGFwcFNhdGUgdG8gYmUgYXBwbGllZCBiZWZvcmUgcmVjb25uZWN0aW5nIHRoZSBvYnNlcnZlcnMgYW5kIHRoZSBzY3JvbGxpbmcgdG8gdGhlIHNlbGVjdGVkIHNlY3Rpb24gaWYgaXQgY2hhbmdlZCBkdXJpbmcgdGhlIGFwcFN0YXRlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbkluZm8gU3Vic2VjdGlvbnMgaW5mb3JtYXRpb24gcmV0cmlldmVkIGR1cmluZyBkaXNjb25uZWN0aW9uXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlTGF5b3V0IE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEBwYXJhbSB3YWl0Rm9yQXBwbHlBcHBzdGF0ZSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXBwIHN0YXRlIGlzIGFwcGxpZWRcblx0ICogQHBhcmFtIHdhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gd2FpdCBmb3IgdmlzaWJpbGl0eSBiaW5kaW5ncyB0byBiZSByZXNvbHZlZCBiZWZvcmUgcmVjb25uZWN0aW5nIG9ic2VydmVyc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSBvYnNlcnZlcnMgd2VyZSByZWNvbm5lY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRhc3luYyByZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhcblx0XHRzdWJTZWN0aW9uSW5mbzogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfSB8IHVuZGVmaW5lZCxcblx0XHRvYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHdhaXRGb3JBcHBseUFwcHN0YXRlOiBQcm9taXNlPHVua25vd24+LFxuXHRcdHdhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MgPSB0cnVlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSAmJiBzdWJTZWN0aW9uSW5mbykge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwod2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyA/IHRoaXMud2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyA6IFtdKVxuXHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHQvL3dhaXRpbmcgZm9yIHRoZSBhcHAgc3RhdGUgdG8gYmUgYXBwbGllZCBidG8gZW5zdXJlIGZvY3VzaW5nIG9uIHRoZSBjb3JyZWN0IHNlY3Rpb24gaWYgcmVxdWlyZWRcblx0XHRcdFx0XHRcdGF3YWl0IHdhaXRGb3JBcHBseUFwcHN0YXRlO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBhcHBseWluZyBhcHAgc3RhdGVcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN1YlNlY3Rpb25JbmZvLmZlLmZvckVhY2goKHN1YlNlY3Rpb24pID0+IHN1YlNlY3Rpb24ub2JzZXJ2ZUN1cnJlbnRTZWN0aW9uKCkpO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25JbmZvLm90aGVyc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigoc3Vic2VjdGlvbikgPT4gc3Vic2VjdGlvbi5nZXRWaXNpYmxlKCkpXG5cdFx0XHRcdFx0XHQuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4gc3ViU2VjdGlvbi5maXJlRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHsgc3ViU2VjdGlvbjogc3ViU2VjdGlvbiB9KSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGU6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBhcHBseWluZyBhcHAgc3RhdGVcIiwgZSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIGNhcmRzIEFycmF5IG9mIGNhcmRzIHRvIGJlIHVwZGF0ZWRcblx0ICovXG5cdGFzeW5jIF91cGRhdGVBdmFpbGFibGVDYXJkcyhjYXJkczogV3JhcHBlZENhcmRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCk7XG5cdFx0Ly8gT25seSBjb2xsZWN0IGNhcmRzIHdoZW4gY29uc3VtZXJzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGNhcmRzIGNoYW5uZWxcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlLmhhc0NvbGxhYm9yYXRpb25NYW5hZ2VyQ29ubmVjdGVkKCkpIHtcblx0XHRcdGF3YWl0IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGNhcmRPYmplY3QgPSB0aGlzLmNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldElkKCk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZS5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2Uuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTWVzc2FnZXN0cmlwIE9QLlxuXHQgKi9cblx0X3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIsIHsgLi4uaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIpIH0pO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0KG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHQ/LmZpbmRFbGVtZW50cyh0cnVlLCAoZWxlbTogQ29udHJvbCkgPT4gZWxlbS5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpXG5cdFx0XHRcdC5mb3JFYWNoKChtZXNzYWdlU3RyaXA6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlU3RyaXAuc2V0QmluZGluZ0NvbnRleHQoXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSEsXG5cdFx0XHRcdFx0XHRcImludGVybmFsXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIElmIHRoZSB2aWV3J3MgYmluZGluZyBjb250ZXh0IGFscmVhZHkgaGFkIG1lc3NhZ2VzIHRoYXQgd2VyZSBub3QgY2xlYXJlZCwgd2Ugd291bGQgbmVlZCB0byByZS1ldmFsdWF0ZSB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0dGhpcy5fZm5TaG93T1BNZXNzYWdlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgYSBtZXNzYWdlIHN0cmlwIGlmIGEgcmVkaXJlY3Rpb24gdG8gYSBub24tZHJhZnQgZWxlbWVudCBoYXMgYmVlbiBkb25lLlxuXHQgKiBSZW1vdmUgdGhlIG1lc3NhZ2Ugc3RyaXAgaW4gY2FzZSB3ZSBuYXZpZ2F0ZSB0byBhbm90aGVyIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlXG5cdCAqL1xuXHRkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UoZW50aXR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UpIHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdFx0ZGVsZXRlIHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2U7XG5cdFx0fVxuXG5cdFx0aWYgKGVudGl0eU5hbWUpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJSRVJPVVRFRF9OQVZJR0FUSU9OX1RPX1NBVkVEX1ZFUlNJT05cIiwgW2VudGl0eU5hbWVdKSxcblx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24sXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBjdHh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvLyBzZXR0aW5nIHRoaXMgbW9kZWwgZGF0YSB0byBiZSB1c2VkIGZvciByZWNvbW1lbmRhdGlvbnMgYmluZGluZ1xuXHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvY3VycmVudEN0eHRcIiwgY3R4dCk7XG5cblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRvIG5vdCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBhY3Rpb24gaWYgd2UgYXJlIGluIERpc3BsYXkgbW9kZVxuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRpZiAoaXNFZGl0YWJsZSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoW3sgY29udGV4dDogb0JpbmRpbmdDb250ZXh0IH1dKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmZvcmNlRm9jdXMpIHtcblx0XHRcdHNldEZvY3VzKCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RoZSBmb2xsb3dpbmcgY29kaW5nIGlzIGRvbmUgdG8gbWVyZ2UgYW4gb3BlbiBQQVRDSCBhbmQgdGhlIGRyYWZ0cHJlcGFyZS9kcmFmdGFjdGl2YXRlXG5cdFx0Ly9yZXF1ZXN0IGludG8gb25lICRiYXRjaCByZXF1ZXN0XG5cdFx0Ly9UbyBhY2hpZXZlIHRoaXMgdGhlICRhdXRvIHF1ZXVlIGlzIGxvY2tlZCBhdCB0aGUgbW91c2Vkb3duIGV2ZW50IChiZWZvcmUgZm9jdXNvdXQpIGluXG5cdFx0Ly9vcmRlciB0byB3YWl0IGZvciB0aGUgZHJhZnQgcmVxdWVzdCBpc3N1ZWQgaW4gdGhlIHNhdmUgYnV0dG9ucyBwcmVzcyBldmVudCBoYW5kbGVyLlxuXHRcdC8vVGhlIHF1ZXVlIGlzIHJlbGVhc2VkIGFnYWluIGR1cmluZyBtb3VzZXVwIChiZWZvcmUgcHJlc3MpLlxuXHRcdC8vVGhpcyBpcyBvbmx5IHBvc3NpYmxlIG9uIG5vbiB0b3VjaCBkZXZpY2VzIGJlY2F1c2Ugb24gdG91Y2ggZGV2aWNlcyB0aGUgZm9jdXNvdXQgYW5kIHByZXNzXG5cdFx0Ly9ldmVudHMgYXJlIGJvdGggaW5pdGlhdGVkIGF0IHRvdWNoZW5kIGJ5IHNhcC5tLkJ1dHRvbi5cblx0XHQvL21vdXNlSGFuZGxlclNldCBpcyB1c2VkIHRvIGVuc3VyZXMgdGhhdCB0aGUgZXZlbnQgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIG9ubHkgb25lIHRpbWUuXG5cdFx0Ly9UaGVyZSBjYW4gYmUgbXVsdGlwbGUgb25QYWdlUmVhZHkgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQvZGlzcGxheSBtb2RlXG5cdFx0aWYgKCF0aGlzLm1lcmdlUGF0Y2hEcmFmdCAmJiAhRGV2aWNlLnN1cHBvcnQudG91Y2gpIHtcblx0XHRcdGNvbnN0IHNhdmVCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OlNhdmVcIikgYXMgQnV0dG9uO1xuXHRcdFx0Y29uc3QgYXV0b1F1ZXVlVW5sb2NrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrLnVubG9jaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdH07XG5cblx0XHRcdHNhdmVCdXR0b24/LmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlZG93blwiLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5sb2NrKFwiJGF1dG9cIik7XG5cdFx0XHRcdFx0Ly93aGVuIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGF3YXkgZnJvbSB0aGUgc2F2ZSBidXR0b24gd2hpbGUgcHJlc3NlZCB0aGVuIHRoZXJlIHdpbGwgYmUgbm9cblx0XHRcdFx0XHQvL21vdXNldXAgZXZlbnQgb24gdGhlIHNhdmUgYnV0dG9uLiBUaGVyZWZvcmUsIHRoZSB1bmxvY2tpbmcgaXMgZG9uZSBvbiBcIm1vdXNldXBcIiBhbmQgXCJibHVyXCJcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVyZ2VQYXRjaERyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk6IE9iamVjdFBhZ2VMYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0YXN5bmMgX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IFByb21pc2U8eyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlRGVzY3JpcHRpb24gPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlRGVzY3JpcHRpb25cIjtcblx0XHR9KTtcblx0XHRjb25zdCBleHRyYWN0UGF0aHMgPSAoYmluZGluZ0luZm8/OiB7IHBhcnRzPzogeyBwYXRoPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9W10gfSk6IHN0cmluZ1tdID0+XG5cdFx0XHRBcnJheS5mcm9tKFxuXHRcdFx0XHRuZXcgU2V0KFxuXHRcdFx0XHRcdChiaW5kaW5nSW5mbz8ucGFydHMgfHwgW10pXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChwYXJ0KSA9PiAhcGFydC5tb2RlbClcblx0XHRcdFx0XHRcdC5tYXAoKHBhcnQpID0+IHBhcnQucGF0aCB8fCBcIlwiKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGNvbnN0IHN1YnRpdGxlUGF0aHMgPSBleHRyYWN0UGF0aHMob09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSk7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBwYXRoc1RvUmVzb2x2ZSA9IFsuLi5zdWJ0aXRsZVBhdGhzLCAuLi5kZXNjcmlwdGlvblBhdGhzXTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBmbkNsZWFyQ2FjaGVUaXRsZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmICgob09iamVjdFBhZ2VEZXNjcmlwdGlvbiB8fCBvT2JqZWN0UGFnZVN1YnRpdGxlKSAmJiAhdGhpcy5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHRvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHR0aGlzLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBvT2JqZWN0UGFnZUNvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJ1aWxkID0gKCk6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9ID0+ICh7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSA/PyBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGU/LmdldFZhbHVlKCkgPz8gXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0VmFsdWUoKSA/PyBcIlwiXG5cdFx0fSk7XG5cdFx0Ly9pZiBubyBjb250ZXh0IG9yIG5vdGhpbmcgdG8gcmVzb2x2ZSwgZGlyZWN0IHJldHVyblxuXHRcdGlmICghb09iamVjdFBhZ2VDb250ZXh0IHx8IHBhdGhzVG9SZXNvbHZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZCgpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRwYXRoc1RvUmVzb2x2ZS5tYXAoYXN5bmMgKHApID0+IChvT2JqZWN0UGFnZUNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLnJlcXVlc3RQcm9wZXJ0eShwKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpKVxuXHRcdCk7XG5cdFx0cmV0dXJuIGJ1aWxkKCk7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gKG9FeGVjdXRpb24uZ2V0U291cmNlKCkgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uKS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkhKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBpc0Vycm9yTWVzc2FnZSA9IG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VWYWxpZGF0aW9uID0gaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0XHQ/IGlzRXJyb3JNZXNzYWdlXG5cdFx0XHRcdFx0OiBpc0Vycm9yTWVzc2FnZSAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaW5jbHVkZXMoc1ZpZXdJZCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZVZhbGlkYXRpb24pIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcigpOiB2b2lkIHtcblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHBhcmFtIHVzZVNhdmVBbmRMZWF2ZSBJbmRpY2F0ZXMgaWYgdGhlIHNhdmUgaXMgdHJpZ2dlcmVkIGZyb20gYSBzYXZlIGFuZCBsZWF2ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sIHVzZVNhdmVBbmRMZWF2ZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0bGV0IG1lc3NhZ2VQb3BvdmVyRXJyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXG5cdFx0XHRcdGNvbnN0IGNvbnRleHRLZXlzID0gT2JqZWN0LmtleXMoKGNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0T2JqZWN0KCkgfHwge30pO1xuXHRcdFx0XHRpZiAoY29udGV4dEtleXMuZmlsdGVyKChrZXkpID0+ICFrZXkuc3RhcnRzV2l0aChcIkAkdWk1LlwiKSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3dcblx0XHRcdFx0XHRcdFx0LmNyZWF0ZURvY3VtZW50KHRhYmxlQmluZGluZywge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvblJvdzogY3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6XG5cdFx0XHRcdFx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0QWdncmVnYXRpb24oXCJjcmVhdGlvbk1vZGVcIikgYXMgVGFibGVDcmVhdGlvbk9wdGlvbnMgfCB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcdCk/LmdldFByb3BlcnR5KFwiY3JlYXRlQXRFbmRcIikgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0c2tpcFNpZGVFZmZlY3RzOiB0cnVlIC8vIHRoZSBza2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXksIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4gdGFibGVCaW5kaW5nKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0bGV0IGlzU3RhbmRhcmRTYXZlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNraXBCaW5kaW5nVG9WaWV3ICYmIHR5cGVvZiBza2lwQmluZGluZ1RvVmlldyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRjb25zdCBjb21tYW5kID0gKHNraXBCaW5kaW5nVG9WaWV3IGFzIENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50KT8uZ2V0U291cmNlPy4oKT8uZ2V0Q29tbWFuZD8uKCk7XG5cdFx0XHRcdGlzU3RhbmRhcmRTYXZlID0gY29tbWFuZCA9PT0gXCJTYXZlXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGF3YWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHtcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYmluZGluZ3MgYXMgdW5rbm93biBhcyBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0XHRcdFx0bWVyZ2VQYXRjaERyYWZ0OiB0aGlzLm1lcmdlUGF0Y2hEcmFmdCxcblx0XHRcdFx0XHRza2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRpc1N0YW5kYXJkU2F2ZSxcblx0XHRcdFx0XHR1c2VTYXZlQW5kTGVhdmVcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHRpZiAoZXJyb3IgIT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHRtZXNzYWdlUG9wb3ZlckVyciA9IChlcnJvciBhcyBzdHJpbmcpID8/IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQobW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG1vZGVsKTtcblx0XHRcdH1cblx0XHRcdGlmIChtZXNzYWdlUG9wb3ZlckVyciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChtZXNzYWdlUG9wb3ZlckVyci5sZW5ndGgpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IobWVzc2FnZVBvcG92ZXJFcnIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbikgYXMgQnV0dG9uIHwgdW5kZWZpbmVkOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpPy5nZXRJZCgpO1xuXHRcdGxldCBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIGZhbHNlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImRpc2NhcmRDb25maXJtZWRcIikge1xuXHRcdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZ2V0IGNvbGxhYm9yYXRpdmUgdXNlcnNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fFxuXHRcdFx0KCF0aGlzLmdldFN0aWNreUVkaXRNb2RlKCkgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZFN1bW1hcml6ZUJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhZ2VUaXRsZSA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlVGl0bGU/LmdldEFjdGlvbnMoKTtcblx0XHRsZXQgc3VtbWFyaXplQnV0dG9uOiBCdXR0b24gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBhY3Rpb24uZ2V0Q29udGVudCgpIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGJ1dHRvbiAmJiBidXR0b24uZ2V0SWQoKS5lbmRzV2l0aChcIjo6U3VtbWFyaXplOjpidXR0b25cIikpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24gPSBidXR0b247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3VtbWFyaXplQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHRyaWdnZXJzIHRoZSBzbWFydCBzdW1tYXJ5IGFjdGlvbiBvbiB0aGUgT2JqZWN0IFBhZ2UgaWYgcmVxdWlyZWQuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhhdCBhIHNtYXJ0IHN1bW1hcnkgc2hvdWxkIGJlIHBlcmZvcm1lZCBmb3IgdGhlIGN1cnJlbnQgT2JqZWN0IFBhZ2UgbGV2ZWwuXG5cdCAqIFRoZSBsZXZlbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBPYmplY3QgUGFnZSBzaG91bGQgYmUgc3VtbWFyaXplZCwgd2hpY2ggaXMgcmVsZXZhbnQgaW4gRmxleGlibGUgQ29sdW1uIExheW91dCAoRkNMKSBzY2VuYXJpb3Mgd2hlcmVcblx0ICogbXVsdGlwbGUgT2JqZWN0IFBhZ2VzIG1heSBiZSBkaXNwbGF5ZWQgc2ltdWx0YW5lb3VzbHkuXG5cdCAqIElmIG5vIGxldmVsIGlzIHByb3ZpZGVkIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHRoZSBtZXRob2QgZGVmYXVsdHMgdGhlIGxldmVsIHRvIDEuXG5cdCAqIElmIHRoZSBzdW1tYXJ5IGFjdGlvbiBpcyBhbGxvd2VkIGFuZCB0aGUgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUsIGl0IGxvY2F0ZXMgdGhlIHN1bW1hcml6ZSBidXR0b24gYW5kIHRyaWdnZXJzIGl0cyBwcmVzcyBldmVudC5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoZSBzdW1tYXJ5IGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgbmF2aWdhdGlvbiBhbmQgbG9ncyBlcnJvcnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldCBvciB0aGUgYnV0dG9uIGlzIHVuYXZhaWxhYmxlLlxuXHQgKiBBbGwgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0IGFuZCBsb2dnZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGFwcENvbXBvbmVudFxuXHRcdFx0Py5nZXRTdGFydHVwUGFyYW1ldGVycygpXG5cdFx0XHQ/LnRoZW4oKHN0YXJ0dXBQYXJhbXM6IFN0YXJ0dXBQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb24gfHwgIXN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnN0YXJ0c1dpdGgoXCJzdW1tYXJ5XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IE9QIGJ5IGNoZWNraW5nIHRoZSBsZXZlbCBwcm92aWRlZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0XHRjb25zdCBwcmVmZXJyZWRBY3Rpb25MZXZlbCA9XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0gPT09IFwic3VtbWFyeVwiID8gMSA6IHBhcnNlSW50KHN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnNwbGl0KFwiLVwiKVsxXSwgMTApO1xuXHRcdFx0XHRpZiAoaXNOYU4ocHJlZmVycmVkQWN0aW9uTGV2ZWwpIHx8IHZpZXdMZXZlbCAhPT0gcHJlZmVycmVkQWN0aW9uTGV2ZWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBzdW1tYXJ5IGFjdGlvbiBzaGFsbCBiZSBleGVjdXRlZCBub3cgKGl0IG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIGJ5IGEgaGlnaGVyIGxldmVsIE9QKVxuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldFByZWZlcnJlZEFjdGlvblN0YXR1cygpID09PSBQcmVmZXJyZWRBY3Rpb25TdGF0dXMuQ2FuUGVyZm9ybSkge1xuXHRcdFx0XHRcdGFwcENvbXBvbmVudC5zZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoUHJlZmVycmVkQWN0aW9uU3RhdHVzLkFscmVhZHlQZXJmb3JtZWQpOyAvLyB0byBwcmV2ZW50IG90aGVyIE9QcyBvbiBoaWdoZXIgbGV2ZWxzIHRvIGV4ZWN1dGUgdGhlIHN1bW1hcnkgYWdhaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZVxuXHRcdFx0XHRjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRcdFx0aWYgKCFlbnZpcm9ubWVudFNlcnZpY2U/LmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNtYXJ0U3VtbWFyaXplKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBTdW1tYXJ5IGJ1dHRvblxuXHRcdFx0XHRjb25zdCBzdW1tYXJpemVCdXR0b24gPSB0aGlzLl9maW5kU3VtbWFyaXplQnV0dG9uKCk7XG5cblx0XHRcdFx0aWYgKHN1bW1hcml6ZUJ1dHRvbiAmJiBzdW1tYXJpemVCdXR0b24uZ2V0VmlzaWJsZSgpICYmIHN1bW1hcml6ZUJ1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24uZmlyZVByZXNzKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XHRcdFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIHRoZSBTdW1tYXJpemUgYnV0dG9uIGlzIGVpdGhlciBub3QgdmlzaWJsZSBvciBub3QgZW5hYmxlZCBvciBub3QgZm91bmQuXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyBzdGFydHVwIHBhcmFtZXRlcnMgb3IgdHJpZ2dlcmluZyBzbWFydCBzdW1tYXJ5OlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBDdHJsK0VudGVyIChDbWQrRW50ZXIgb24gbWFjT1MpLlxuXHRcdFx0ICovXG5cblx0XHRcdGNvbnN0IHByaW1hcnlDYW5kaWRhdGUgPSBvQ29udHJvbGxlci5fZ2V0UHJpbWFyeUFjdGlvblNob3J0Y3V0Q2FuZGlkYXRlcyhvVmlldylbMF07XG5cblx0XHRcdC8qIEJ5IGRlc2lnbiwgdGhlcmUgbXVzdCBiZSBhdCBtb3N0IG9uZSBjYW5kaWRhdGUgZHVlIHRvIHRoZSBcInNpbmdsZSBlbXBoYXNpcyBwZXIgcGFnZVwiIHJ1bGUuXG5cdFx0XHQgICBJZiBhIHByaW1hcnktZW50ZXIgdGFyZ2V0IGlzIGZvdW5kLCBpdCBtdXN0IGZ1bGx5IHRha2Ugb3ZlciBDdHJsL0NtZCtFbnRlci4qL1xuXG5cdFx0XHRpZiAocHJpbWFyeUNhbmRpZGF0ZSkge1xuXHRcdFx0XHRpZiAoIXByaW1hcnlDYW5kaWRhdGUuZ2V0RW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0Ly8gVGFrZSBvdmVyIEN0cmwvQ21kK0VudGVyLCBidXQgZG8gbm90IHRyaWdnZXIgYW55dGhpbmcgd2hlbiB0aGUgcHJpbWFyeSBhY3Rpb24gaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcmltYXJ5Q2FuZGlkYXRlLmlzQShcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdChwcmltYXJ5Q2FuZGlkYXRlIGFzIEJ1dHRvbikuZmlyZVByZXNzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKChwcmltYXJ5Q2FuZGlkYXRlIGFzIE1lbnVCdXR0b24pLmlzQShcInNhcC5tLk1lbnVCdXR0b25cIikpIHtcblx0XHRcdFx0XHQocHJpbWFyeUNhbmRpZGF0ZSBhcyBNZW51QnV0dG9uKS5maXJlRGVmYXVsdEFjdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEFsbEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID1cblx0XHRcdFx0XHRcdFx0dGFibGVDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdC5maW5kKCh0YWJsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGF0YSA9IHRhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQ/LmdldEluZGV4KCkgPz8gLTE7XG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGlhbG9nID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuZGF0YShcIkZ1bGxTY3JlZW5EaWFsb2dcIikgIT09IHRydWUpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlZCBiZWZvcmUgc2V0IHRoZSBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdG9uVGFibGVCaW5kaW5nVXBkYXRlZCh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4oKHJlcykgPT4ge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIoKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0sIHRydWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cblx0XHRcdC8vIERldGVybWluZSB0aGUgdGFyZ2V0IElEIGJhc2VkIG9uIGlucHV0IHR5cGVcblx0XHRcdGxldCB0YXJnZXRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHR5cGVvZiBvRGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHRhcmdldElkID0gb0RldGFpbENvbmZpZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFByaW9yaXR5OiBzdWJTZWN0aW9uSWQgPiBzZWN0aW9uSWRcblx0XHRcdFx0dGFyZ2V0SWQgPSBvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCA/PyBvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRhcmdldElkKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLmdldEV4dGVuc2lvbkFQSSgpLm5hdmlnYXRlVG9TdWJTZWN0aW9uKHRhcmdldElkKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2xvc2VDb2xsYWJvcmF0aW9uU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9zaG93Q29sbGFib3JhdGlvblN0cmlwXCIsIGZhbHNlKTtcblx0XHR9LFxuXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IGludGVybmFsTW9kZWxcblx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhO1xuXHRcdFx0Ly8gUmVtb3ZlIGNvbnRleHQgYm91bmQgbWVzc2FnZXMgYW5kIHNldCB0aGUgcHJvcGVydHkgdG8gZmFsc2UgZm9yIHRoZSBiYWNrZW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaW4gZWRpdCBtb2RlLlxuXHRcdFx0aWYgKCFiSXNJbkVkaXRNb2RlICYmIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dEJvdW5kTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcihcblx0XHRcdFx0XHRcdChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpICYmIG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGNvbnRleHRCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhjb250ZXh0Qm91bmRNZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0R0EsTUFBTUEsZ0JBQWdCLEdBQUdDLFNBQVMsQ0FBQ0QsZ0JBQWdCO0VBQ25ELE1BQU1FLHFCQUFxQixHQUFHRCxTQUFTLENBQUNFLHlCQUF5Qjs7RUFFakU7QUFDQTtBQUNBO0VBRkEsSUFJTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxFQUFBQyxLQUFBLEdBRzNCRixjQUFjLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDTixjQUFjLENBQUNPLGVBQWUsQ0FBQ0gsUUFBUSxDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakVULGNBQWMsQ0FBQ1UsU0FBUyxDQUFDTixRQUFRLENBQUNPLGlCQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdyRFosY0FBYyxDQUFDYSxjQUFjLENBQUNULFFBQVEsQ0FBQ1Usc0JBQXNCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRy9EZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ1osUUFBUSxDQUFDYSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixvQkFBb0IsQ0FBQ2YsUUFBUSxDQUFDZ0IsNEJBQTRCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzNFckIsY0FBYyxDQUNkc0IsNkJBQTZCLENBQUNsQixRQUFRLENB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
2032
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0Iiwic2tpcFZpZXdTdGF0ZVNlY3Rpb25SZXN0b3JlIiwiaXNOZXdCaW5kaW5nQ29udGV4dCIsImhhbmRsZXJzIiwib25QcmltYXJ5QWN0aW9uIiwib0NvbnRyb2xsZXIiLCJvVmlldyIsIm9Db250ZXh0Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm1Db25kaXRpb25zIiwicHJpbWFyeUNhbmRpZGF0ZSIsIl9nZXRQcmltYXJ5QWN0aW9uU2hvcnRjdXRDYW5kaWRhdGVzIiwiZ2V0RW5hYmxlZCIsImlzQSIsImZpcmVQcmVzcyIsImZpcmVEZWZhdWx0QWN0aW9uIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJDb21tb25VdGlscyIsImdldElzRWRpdGFibGUiLCJfc2F2ZURvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJvblRhYmxlQ29udGV4dENoYW5nZSIsImV2ZW50IiwidGFibGVBUEkiLCJnZXRTb3VyY2UiLCJ0YWJsZSIsImNvbnRlbnQiLCJjdXJyZW50QWN0aW9uUHJvbWlzZSIsImVkaXRGbG93IiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJ0YWJsZUNvbnRleHRzIiwiX2dldFRhYmxlQmluZGluZyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImFjdGlvblJlc3BvbnNlIiwiY29udHJvbElkIiwiZ2V0SWQiLCJhY3Rpb25EYXRhIiwib0RhdGEiLCJrZXlzIiwibmV3SXRlbSIsImZpbmQiLCJ0YWJsZUNvbnRleHQiLCJ0YWJsZURhdGEiLCJnZXRPYmplY3QiLCJldmVyeSIsImtleSIsImdldEluZGV4IiwiZGlhbG9nIiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwib25UYWJsZUJpbmRpbmdVcGRhdGVkIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwicmVzIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImNhdGNoIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvU291cmNlIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0IiwiY3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzIiwiZ2V0VmFsdWUiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJzdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwidGFyZ2V0U3ViU2VjdGlvbiIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwic2VjdGlvbkxheW91dCIsImdldFByb3BlcnR5IiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsInRhcmdldElkIiwic3ViU2VjdGlvbklkIiwic2VjdGlvbklkIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJvb3QiLCJvbmx5QWN0aW9uYWJsZSIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm9iamVjdCIsImlzQnV0dG9uIiwiaXNNZW51QnV0dG9uIiwiY3RybCIsImZsYWciLCJnZXRWaXNpYmxlIiwic0lkIiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0Iiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJnZXRPd25lckNvbXBvbmVudCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsImJpbmQiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJmb3JFYWNoIiwiYnlJZCIsIm1lc3NhZ2VCaW5kaW5nIiwiYmluZExpc3QiLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwiX2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24iLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsInZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsInRhYmxlVHlwZSIsImdldFR5cGUiLCJnZXRQYXJlbnQiLCJ0YWJsZUNvbnRyb2wiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwicm93Q291bnRNb2RlIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJhZGRTdHlsZUNsYXNzIiwiZGV0YWNoRXZlbnQiLCJibG9jayIsImdldFRhYmxlQVBJIiwibWFpbkNvbnRlbnQiLCJnZXRNYWluQ29udGVudCIsIm1haW5Db250ZW50VGFibGVBUEkiLCJzaWRlQ29udGVudCIsImdldFNpZGVDb250ZW50Iiwic2lkZUNvbnRlbnRUYWJsZUFQSSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiUGFnZUNvbnRyb2xsZXIiLCJhcHBseSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJDb21tb25IZWxwZXIiLCJzZXRNZXRhTW9kZWwiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0VXNlSWNvblRhYkJhciIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJzZWN0aW9uIiwiZ2V0U3ViU2VjdGlvbnMiLCJfb25CZWZvcmVCaW5kaW5nIiwicGVuZGluZ1RhcmdldENvbnRyb2xJZCIsInRhcmdldENvbnRyb2xJZCIsImN1cnJlbnRDb250ZXh0UGF0aCIsImdldEVudGl0eUlkZW50aXR5IiwicGF0aCIsInJlcGxhY2UiLCJjdXJyZW50RW50aXR5SWQiLCJwcmV2aW91c0VudGl0eUlkIiwicHJldmlvdXNCaW5kaW5nQ29udGV4dFBhdGgiLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyIsImRpc2Nvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyIsIndhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MiLCJ3YWl0Rm9yQWxsU3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nc1Jlc29sdmVkIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwib2JqZWN0UGFnZUxheW91dCIsInNldFZpc2libGUiLCJzdWJTZWN0aW9uc0luZm8iLCJmZSIsIm90aGVycyIsImRpc2Nvbm5lY3RWaXNpYmlsaXR5T2JzZXJ2ZXIiLCJnZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJkb21FZGl0YWJsZUVsZW1lbnQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiVUk1RWxlbWVudCIsImNsb3Nlc3RUbyIsImdldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9iamVjdFBhZ2UiLCJmb290ZXIiLCJnZXRGb290ZXIiLCJmb290ZXJQcmltYXJ5QWN0aW9uIiwiZmlyc3RDbGlja2FibGVFbGVtZW50IiwiYWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsImdldENvbnRlbnQiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYkVkaXRhYmxlSGVhZGVyIiwiZmlyc3RWaXNpYmlsaXR5QmluZGluZyIsIl9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZyIsImlTZWN0aW9uIiwib1NlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsIm9TdWJTZWN0aW9uIiwiZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uIiwic3ViQmxvY2siLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiYmxvY2tDb250cm9sIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImVtcHR5RmllbGQiLCJnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZCIsImZpZWxkcyIsImdldFJlcXVpcmVkIiwiaXNFbXB0eSIsImdldE11bHRpVmFsdWVGaWVsZCIsImdldEl0ZW1zIiwidmFsdWUiLCJkZWJ1ZyIsImZyb21UYWJOYXZpZ2F0aW9uIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImdldEVuYWJsZVN1Z2dlc3Rpb25zIiwiaXNCb3VuZCIsInNldEVuYWJsZVN1Z2dlc3Rpb25zIiwiZm9jdXMiLCJhbGxzdWJTZWN0aW9ucyIsImN1cnJlbnRNb2RlbCIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlU3ViU2VjdGlvbkNyZWF0ZWQiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjYW5Hb0JhY2siLCJ3aW5kb3ciLCJuYXZpZ2F0aW9uIiwiaGlzdG9yeSIsImJhY2siLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwid2FybmluZyIsImhpZGRlbkRyYWZ0RW5hYmxlZCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsImlucHV0QmluZGluZ0NvbnRleHQiLCJSb3dQcmVzcyIsImluY2x1ZGVzIiwic3RvcmVTaWJsaW5nQ29udGV4dERhdGEiLCJzaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsIm9CaW5kaW5nIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJnZXRDb250ZXh0IiwiZm5IYW5kbGVDaGFuZ2UiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIm9FcnJvciIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwicmVjb21tZW5kYXRpb25zIiwiY2xlYXJSZWNvbW1lbmRhdGlvbnMiLCJkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsIl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCIsImFwcGx5QXBwU3RhdGUiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwicmVjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMiLCJoYW5kbGVQZW5kaW5nVGFyZ2V0Q29udHJvbElkTmF2aWdhdGlvbiIsInhBcHBTdGF0ZVRhcmdldENvbnRyb2xJZCIsImNvbnN1bWVQZW5kaW5nVGFyZ2V0Q29udHJvbElkIiwiYWxsIiwid2FpdFBhZ2VSZWFkeSIsIm5hdmlnYXRlVG9UYXJnZXRTZWN0aW9uIiwidGFyZ2V0Q29udHJvbCIsImlzU2VjdGlvbiIsInRhcmdldFNlY3Rpb25JZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb24iLCJwb2xsRm9yU2VjdGlvblN0YWJpbGl0eSIsIm9uUmVzZXREZXRlY3RlZCIsInNldFRhcmdldFN1YlNlY3Rpb24iLCJ2aWV3U3RhdGUiLCJ1cGRhdGVBcHBTdGF0ZURlYm91bmNlZCIsImlzSW5FZGl0TW9kZSIsInN1YlNlY3Rpb25JbmZvIiwid2FpdEZvckFwcGx5QXBwc3RhdGUiLCJvYnNlcnZlQ3VycmVudFNlY3Rpb24iLCJzdWJzZWN0aW9uIiwiZmlyZUV2ZW50IiwiY2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJoYXNDb2xsYWJvcmF0aW9uTWFuYWdlckNvbm5lY3RlZCIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsIm1lc3NhZ2VTdHJpcCIsImVudGl0eU5hbWUiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbGxhYm9yYXRpb25NZXNzYWdlIiwiTWVzc2FnZSIsImdldFRleHQiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJjdHh0Iiwib0JpbmRpbmdDb250ZXh0IiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJpc0VkaXRhYmxlIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyIsImNvbnRleHQiLCJmb3JjZUZvY3VzIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJEZXZpY2UiLCJzdXBwb3J0IiwidG91Y2giLCJzYXZlQnV0dG9uIiwiYXV0b1F1ZXVlVW5sb2NrIiwiYXV0b1F1ZXVlTG9jayIsImlzTG9ja2VkIiwidW5sb2NrIiwiZGV0YWNoQnJvd3NlckV2ZW50IiwiYXR0YWNoQnJvd3NlckV2ZW50IiwibG9jayIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsIm9PYmplY3RQYWdlRGVzY3JpcHRpb24iLCJleHRyYWN0UGF0aHMiLCJiaW5kaW5nSW5mbyIsImZyb20iLCJTZXQiLCJwYXJ0cyIsInBhcnQiLCJtb2RlbCIsIkJvb2xlYW4iLCJzdWJ0aXRsZVBhdGhzIiwiZ2V0QmluZGluZ0luZm8iLCJkZXNjcmlwdGlvblBhdGhzIiwicGF0aHNUb1Jlc29sdmUiLCJhcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJmbkNsZWFyQ2FjaGVUaXRsZSIsImludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlIiwib09iamVjdFBhZ2VDb250ZXh0IiwiYnVpbGQiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsImRlc2NyaXB0aW9uIiwicCIsInJlcXVlc3RQcm9wZXJ0eSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwib01lc3NhZ2UiLCJpc0Vycm9yTWVzc2FnZSIsInZhbGlkYXRpb24iLCJtZXNzYWdlVmFsaWRhdGlvbiIsImlzRWRpdE1vZGUiLCJjdXJyZW50UGFnZVZpZXciLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib01lc3NhZ2VCdXR0b24iLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImRyYWZ0Um9vdENvbnRleHQiLCJjcmVhdGVSb290Q29udGV4dCIsIkRyYWZ0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImlzQ29ubmVjdGVkIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJ1c2VTYXZlQW5kTGVhdmUiLCJhd2FpdENyZWF0ZURvY3VtZW50cyIsImV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJtZXNzYWdlUG9wb3ZlckVyciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJlcnIiLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRlQXRFbmQiLCJnZXRBZ2dyZWdhdGlvbiIsInNraXBTaWRlRWZmZWN0cyIsImlzU3RhbmRhcmRTYXZlIiwiY29tbWFuZCIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJvRWxlbWVudCIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJlbnRpdHlTZXQiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmsiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIiwiX2ZpbmRTdW1tYXJpemVCdXR0b24iLCJvYmplY3RQYWdlVGl0bGUiLCJzdW1tYXJpemVCdXR0b24iLCJidXR0b24iLCJlbmRzV2l0aCIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtcyIsInByZWZlcnJlZEFjdGlvbiIsInByZWZlcnJlZEFjdGlvbkxldmVsIiwicGFyc2VJbnQiLCJzcGxpdCIsImlzTmFOIiwiZ2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiQ2FuUGVyZm9ybSIsInNldFByZWZlcnJlZEFjdGlvblN0YXR1cyIsIkFscmVhZHlQZXJmb3JtZWQiLCJlbnZpcm9ubWVudFNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsIlNtYXJ0U3VtbWFyaXplIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jYXJkcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2VkaXRGbG93Q29uc3RhbnRzXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL1JlY29tbWVuZGF0aW9ucy9Db25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQsIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWxsQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL0Vhc3lGaWxsQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTdW1tYXJpemF0aW9uQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL1N1bW1hcml6YXRpb25CdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvc2VjdGlvbi9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBGb3JtQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUFQSVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTaGFyZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaGFyZS9TaGFyZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVDcmVhdGlvbk9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVDcmVhdGlvbk9wdGlvbnNcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkRpc2NhcmQgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EaXNjYXJkRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB7IHBvbGxGb3JTZWN0aW9uU3RhYmlsaXR5IH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9oZWxwZXJzL1NlY3Rpb25OYXZpZ2F0aW9uSGVscGVyXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFNlYXJjaEZpZWxkIGZyb20gXCJzYXAvbS9TZWFyY2hGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIExpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aW9uRHJhZnQgZnJvbSBcIi4vY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRHJhZnRcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuZXhwb3J0IHR5cGUgQmluZGluZ1BhcmFtcyA9IHtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdHJlcXVlc3RPbkJpbmRpbmc/OiBzdHJpbmdbXTtcblx0dGFyZ2V0Q29udHJvbElkPzogc3RyaW5nO1xufTtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuY29uc3QgUHJlZmVycmVkQWN0aW9uU3RhdHVzID0gRkVMaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGU7XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IEZFVmlldztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oQ29sbGFib3JhdGlvbk1hbmFnZXIub3ZlcnJpZGUoQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSkpXG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyITogQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIG1lc3NhZ2VCdXR0b24hOiBNZXNzYWdlQnV0dG9uO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbk1lc3NhZ2U/OiBNZXNzYWdlO1xuXG5cdHByaXZhdGUgbWVyZ2VQYXRjaERyYWZ0ID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBhdXRvUXVldWVMb2NrOiBSZXR1cm5UeXBlPE9EYXRhTW9kZWxbXCJsb2NrXCJdPiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIG1lc3NhZ2VCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIHdhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MhOiBQcm9taXNlPHVua25vd24+W107XG5cblx0cHJpdmF0ZSBzdWJTZWN0aW9ucz86IHsgZmU6IFN1YlNlY3Rpb25bXTsgb3RoZXJzOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIH07XG5cblx0cHJpdmF0ZSBwcmV2aW91c0JpbmRpbmdDb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRwcml2YXRlIHBlbmRpbmdUYXJnZXRDb250cm9sSWQ/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSB0YXJnZXRTdWJTZWN0aW9uPzogT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cblx0Ly8gRmxhZyB0byBwcmV2ZW50IFZpZXdTdGF0ZS5hcHBseSgpIGZyb20gb3ZlcnJpZGluZyBzZWN0aW9uIHNlbGVjdGlvbiBhZnRlciB1c2VyIGludGVyYWN0aW9uIG9yIHRhcmdldENvbnRyb2xJZCBuYXZpZ2F0aW9uXG5cdHByaXZhdGUgc2tpcFZpZXdTdGF0ZVNlY3Rpb25SZXN0b3JlID0gZmFsc2U7XG5cblx0Ly8gVHJhY2tzIGlmIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0aCBjaGFuZ2VkIChuZXcgZW50aXR5IHZzIHNhbWUgZW50aXR5IHJlLWJpbmRpbmcpXG5cdHByaXZhdGUgaXNOZXdCaW5kaW5nQ29udGV4dCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGNvbnRyb2xzIChCdXR0b24gLyBNZW51QnV0dG9uKSB0aGF0IGFyZSBtYXJrZWQgYXMgXCJwcmltYXJ5IGFjdGlvblwiLlxuXHQgKiBUaGUgbWFya2VyIGlzIHNldCBieSB0aGUgY29udmVydGVycyB3aGVuIGFuIGFjdGlvbiBpcyBlbXBoYXNpemVkIChhbm5vdGF0aW9uLWJhc2VkKSBvclxuXHQgKiBjb25maWd1cmVkIGFzIHByaW1hcnlBY3Rpb24gKGN1c3RvbSBhY3Rpb24gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpLlxuXHQgKiBAcGFyYW0gcm9vdCBSb290IGNvbnRyb2wgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tXG5cdCAqIEBwYXJhbSBvbmx5QWN0aW9uYWJsZSBJZiB0cnVlLCBvbmx5IGFjdGlvbmFibGUgKGVuYWJsZWQpIGNhbmRpZGF0ZXMgYXJlIHJldHVybmVkXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbnRyb2xzIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yIHByaW1hcnkgYWN0aW9uIHNob3J0Y3V0c1xuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0UHJpbWFyeUFjdGlvblNob3J0Y3V0Q2FuZGlkYXRlcyhyb290OiBNYW5hZ2VkT2JqZWN0LCBvbmx5QWN0aW9uYWJsZSA9IGZhbHNlKTogQXJyYXk8QnV0dG9uIHwgTWVudUJ1dHRvbj4ge1xuXHRcdHJldHVybiByb290LmZpbmRBZ2dyZWdhdGVkT2JqZWN0cyh0cnVlLCAob2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBpc0J1dHRvbiA9IG9iamVjdC5pc0EoXCJzYXAubS5CdXR0b25cIik7XG5cdFx0XHRjb25zdCBpc01lbnVCdXR0b24gPSBvYmplY3QuaXNBKFwic2FwLm0uTWVudUJ1dHRvblwiKTtcblx0XHRcdGlmICghaXNCdXR0b24gJiYgIWlzTWVudUJ1dHRvbikge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjdHJsID0gb2JqZWN0IGFzIEJ1dHRvbiB8IE1lbnVCdXR0b247XG5cdFx0XHRjb25zdCBmbGFnID0gY3RybFxuXHRcdFx0XHQuZ2V0Q3VzdG9tRGF0YSgpXG5cdFx0XHRcdC5maW5kKChjdXN0b21EYXRhOiBDdXN0b21EYXRhKSA9PiBjdXN0b21EYXRhLmdldEtleSgpID09PSBcImZlUHJpbWFyeUFjdGlvblNob3J0Y3V0XCIpXG5cdFx0XHRcdD8uZ2V0VmFsdWUoKTtcblx0XHRcdGlmIChmbGFnICE9PSB0cnVlICYmIGZsYWcgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmICghY3RybC5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRm9yIGZvY3VzIHBsYWNlbWVudCB3ZSBtdXN0IGlnbm9yZSBkaXNhYmxlZCBjYW5kaWRhdGVzLlxuXHRcdFx0cmV0dXJuIG9ubHlBY3Rpb25hYmxlID8gY3RybC5nZXRFbmFibGVkKCkgOiB0cnVlO1xuXHRcdH0pIGFzIEFycmF5PEJ1dHRvbiB8IE1lbnVCdXR0b24+O1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFxuXHRcdFx0XCJyZWxhdGVkQXBwc1wiLFxuXHRcdFx0e1xuXHRcdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdFx0aXRlbXM6IG51bGxcblx0XHRcdH0sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSkge1xuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4ge1xuXHRcdFx0XHRzdWJTZWN0aW9uLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgTWVzc2FnZUJ1dHRvbjtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiKTtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nPy5hdHRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRFbmFibGVkXCIsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0VmlzaWJsZVwiLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXG5cdFx0dGhpcy5faGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIHRvIGV2ZXJ5IHZpc2libGUgc3Vic2VjdGlvbiB0aGF0IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgR3JpZFRhYmxlIG9yIFRyZWVUYWJsZS5cblx0ICogVGhpcyBtYWtlcyB0aGUgdGFibGUgZmlsbCB0aGUgZnVsbCBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgYXBwZWFycyBvbiB0aGUgdGFibGUgaXRzZWxmIHJhdGhlciB0aGFuIG9uIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCB2aXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi52aXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4udmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MuVGFibGVcIikgPyAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCB0YWJsZUNvbnRyb2wgPSB0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbDtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGFibGVUeXBlICYmXG5cdFx0XHRcdFx0KHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpIHx8IHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5UcmVlVGFibGVUeXBlXCIpKSAmJlxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbD8ucm93Q291bnRNb2RlID09PSBcIkF1dG9cIiAmJlxuXHRcdFx0XHRcdC8vIEV4Y2x1ZGUgQ3JlYXRpb25Sb3cgbW9kZSB1bmxlc3Mgc2VjdGlvbkxheW91dCBpcyBUYWJzOiB0aGUgZml0LWNvbnRhaW5lciBzdHlsZSBjcmVhdGVzIHdoaXRlc3BhY2UgaW4gdGhlIHN1YnNlY3Rpb24gaW4gZWRpdCBtb2RlIHdoZW4gQ3JlYXRpb25Sb3cgaXMgdXNlZCBpbiBUYWJsZUNyZWF0aW9uT3B0aW9uc1xuXHRcdFx0XHRcdCh0YWJsZUNvbnRyb2w/LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93IHx8IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHR2aXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRcdHZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHN1YlNlY3Rpb25zKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0c3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBzdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBnZXRUYWJsZUFQSSA9IChjb250cm9sOiBDb250cm9sKTogVGFibGVBUEkgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBKFwic2FwLmZlLm1hY3Jvcy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChibG9jay5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gYmxvY2suY29udGVudDtcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGNvbnN0IG1haW5Db250ZW50ID0gKGNvbnRyb2wgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRNYWluQ29udGVudCgpWzBdO1xuXHRcdFx0XHRjb25zdCBtYWluQ29udGVudFRhYmxlQVBJID0gZ2V0VGFibGVBUEkobWFpbkNvbnRlbnQpO1xuXHRcdFx0XHRpZiAobWFpbkNvbnRlbnRUYWJsZUFQSSkge1xuXHRcdFx0XHRcdHRhYmxlQVBJID0gbWFpbkNvbnRlbnRUYWJsZUFQSTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzaWRlQ29udGVudCA9IChjb250cm9sIGFzIER5bmFtaWNTaWRlQ29udGVudCkuZ2V0U2lkZUNvbnRlbnQoKVswXTtcblx0XHRcdFx0XHRjb25zdCBzaWRlQ29udGVudFRhYmxlQVBJID0gZ2V0VGFibGVBUEkoc2lkZUNvbnRlbnQpO1xuXHRcdFx0XHRcdGlmIChzaWRlQ29udGVudFRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHR0YWJsZUFQSSA9IHNpZGVDb250ZW50VGFibGVBUEk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGdldFRhYmxlQVBJKGNvbnRyb2wpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5nZXRWaWV3RGF0YSgpPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0bGV0IHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdGlmICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdFx0c3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogT0RhdGFWNENvbnRleHQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zID0ge30pOiB2b2lkIHtcblx0XHQvLyBSZXNldCBmbGFnIHRvIGFsbG93IHNlY3Rpb24gcmVzdG9yYXRpb24gb24gdGhpcyBuZXcgYmluZGluZyBjb250ZXh0LlxuXHRcdC8vIFRoaXMgZW5zdXJlcyBWaWV3U3RhdGUuYXBwbHkoKSBjYW4gcHJvcGVybHkgcmVzdG9yZSBzZWN0aW9ucyBhZnRlciBkaXNjYXJkIG9yIHJlLW5hdmlnYXRpb24uXG5cdFx0dGhpcy5za2lwVmlld1N0YXRlU2VjdGlvblJlc3RvcmUgPSBmYWxzZTtcblxuXHRcdC8vIFN0b3JlIHRhcmdldENvbnRyb2xJZCBmb3Igc2Nyb2xsaW5nIGFmdGVyIGJpbmRpbmcgY29tcGxldGVzXG5cdFx0dGhpcy5wZW5kaW5nVGFyZ2V0Q29udHJvbElkID0gbVBhcmFtZXRlcnMudGFyZ2V0Q29udHJvbElkO1xuXG5cdFx0Ly8gQXBwbHkgdGFyZ2V0Q29udHJvbElkIG9ubHkgb24gaW5pdGlhbCBuYXZpZ2F0aW9uIC0gZG9uJ3QgYXBwbHkgZHVyaW5nIGVkaXQvc2F2ZS9kaXNjYXJkIHRyYW5zaXRpb25zXG5cdFx0Ly8gdG8gcHJlc2VydmUgdXNlcidzIHNlY3Rpb24gc2VsZWN0aW9uLiBOb3RlOiBnZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSByZXR1cm5zIHRoZSBPTEQgY29udGV4dFxuXHRcdC8vIHRoZXJlZm9yZSB0aGUgb0NvbnRleHQgcGFyYW1ldGVyIGlzIHVzZWQuXG5cdFx0Y29uc3QgY3VycmVudENvbnRleHRQYXRoID0gb0NvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRjb25zdCBnZXRFbnRpdHlJZGVudGl0eSA9IChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0aWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0Ly8gUmVtb3ZlIElzQWN0aXZlRW50aXR5IGZyb20gdGhlIHBhdGggdG8gZ2V0IGVudGl0eSBpZGVudGl0eVxuXHRcdFx0Ly8gZS5nLiwgXCIvUHJvZHVjdHMoSUQ9MSxJc0FjdGl2ZUVudGl0eT10cnVlKVwiIC0+IFwiL1Byb2R1Y3RzKElEPTEpXCJcblx0XHRcdHJldHVybiBwYXRoXG5cdFx0XHRcdC5yZXBsYWNlKC8sP0lzQWN0aXZlRW50aXR5PSh0cnVlfGZhbHNlKSw/LywgXCJcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKFxccyosLywgXCIoXCIpXG5cdFx0XHRcdC5yZXBsYWNlKC8sXFxzKlxcKS8sIFwiKVwiKTtcblx0XHR9O1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlJZCA9IGdldEVudGl0eUlkZW50aXR5KGN1cnJlbnRDb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgcHJldmlvdXNFbnRpdHlJZCA9IGdldEVudGl0eUlkZW50aXR5KHRoaXMucHJldmlvdXNCaW5kaW5nQ29udGV4dFBhdGgpO1xuXHRcdHRoaXMuaXNOZXdCaW5kaW5nQ29udGV4dCA9IHByZXZpb3VzRW50aXR5SWQgIT09IGN1cnJlbnRFbnRpdHlJZDtcblx0XHR0aGlzLnByZXZpb3VzQmluZGluZ0NvbnRleHRQYXRoID0gY3VycmVudENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIik7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25Sb3c7XG5cdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0b1wiKTtcblx0XHRpZiAobVBhcmFtZXRlcnMucmVhc29uICE9PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0aWYgKFxuXHRcdFx0b3BDb250ZXh0ICYmXG5cdFx0XHRvcENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJlxuXHRcdFx0IWFCYXRjaEdyb3Vwcy5zb21lKG9wQ29udGV4dC5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcblx0XHRcdFx0XHRcdFx0XHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gaXRlbS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyB7IGlzRmlyc3RSZW5kZXJpbmc/OiAoKSA9PiBib29sZWFuIH0pLmlzRmlyc3RSZW5kZXJpbmc/LigpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Y29uc3QgZm5PUFJlbmRlcmluZ0xheW91dCA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmVkaXRhYmxlSGVhZGVyQ29udGVudCkge1xuXHRcdFx0XHRcdGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKGZuT1BSZW5kZXJpbmdMYXlvdXQpO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHR0aGlzLl9pbml0aWFsaXplUGFnaW5hdGlvbihvQ29udGV4dCwgb0ludGVybmFsTW9kZWwsIG1QYXJhbWV0ZXJzPy5saXN0QmluZGluZyk7XG5cblx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXG5cdFx0dGhpcy5zdWJTZWN0aW9ucyA9IHRoaXMuZGlzY29ubmVjdFN1YlNlY3Rpb25WaXNpYmlsaXR5T2JzZXJ2ZXJzKG9PYmplY3RQYWdlKTtcblx0XHR0aGlzLndhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MgPSB0aGlzLndhaXRGb3JBbGxTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmdzUmVzb2x2ZWQoKTtcblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgb0NvbnRhaW5lcjogQ29udHJvbCB9KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlci5lbmFibGVBbmltYXRpb24oKTtcblx0XHRcdFx0KG9OYXZDb250YWluZXIgYXMgdW5rbm93biBhcyB7IHNob3dQbGFjZWhvbGRlcjogRnVuY3Rpb24gfSkuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY29ubmVjdCB0aGUgdmlzaWJpbGl0eSBvYnNlcnZlcnMgb2YgYWxsIEZFIHN1YnNlY3Rpb25zLlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZUxheW91dFxuXHQgKiBAcmV0dXJucyBUaGUgc3Vic2VjdGlvbnMgaW5mb3JtYXRpb24gb3IgdW5kZWZpbmVkIGlmIG9wdGltaXphdGlvbiBpcyBkaXNhYmxlZFxuXHQgKi9cblx0ZGlzY29ubmVjdFN1YlNlY3Rpb25WaXNpYmlsaXR5T2JzZXJ2ZXJzKFxuXHRcdG9iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXRcblx0KTogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRvYmplY3RQYWdlTGF5b3V0LnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnNJbmZvOiB7XG5cdFx0XHRcdGZlOiBTdWJTZWN0aW9uW107XG5cdFx0XHRcdG90aGVyczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRcdH0gPSB7IGZlOiBbXSwgb3RoZXJzOiBbXSB9O1xuXHRcdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChzdWJTZWN0aW9uLmlzQTxTdWJTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCIpKSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbnNJbmZvLmZlLnB1c2goc3ViU2VjdGlvbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbnNJbmZvLm90aGVycy5wdXNoKHN1YlNlY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHN1YlNlY3Rpb25zSW5mby5mZS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiBzdWJTZWN0aW9uLmRpc2Nvbm5lY3RWaXNpYmlsaXR5T2JzZXJ2ZXIoKSk7XG5cdFx0XHRyZXR1cm4gc3ViU2VjdGlvbnNJbmZvO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbG9hZGluZyBzdHJhdGVneSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGluZyBzdHJhdGVneSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuXHQgKi9cblx0Z2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmRhdGEoXCJkaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb25cIikgPT09IFwidHJ1ZVwiO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZG9tRWRpdGFibGVFbGVtZW50ID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk7XG5cdFx0cmV0dXJuIGRvbUVkaXRhYmxlRWxlbWVudCA/IFVJNUVsZW1lbnQuY2xvc2VzdFRvKGRvbUVkaXRhYmxlRWxlbWVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdC8vIEluIGRpc3BsYXkgbW9kZSwgaWYgYSB2aXNpYmxlIHByaW1hcnkgYWN0aW9uIHdpdGggdGhlIGVtcGhhc2lzIGV4aXN0cyBpbiB0aGUgZm9vdGVyLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBvbiB0aGUgcGFnZS5cblx0XHRjb25zdCBmb290ZXIgPSBvYmplY3RQYWdlLmdldEZvb3RlcigpO1xuXHRcdGNvbnN0IGZvb3RlclByaW1hcnlBY3Rpb24gPSBmb290ZXJcblx0XHRcdD8gdGhpcy5fZ2V0UHJpbWFyeUFjdGlvblNob3J0Y3V0Q2FuZGlkYXRlcyhmb290ZXIgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0LCB0cnVlKVswXVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvb3RlclByaW1hcnlBY3Rpb24pIHtcblx0XHRcdHJldHVybiBmb290ZXJQcmltYXJ5QWN0aW9uO1xuXHRcdH1cblx0XHQvLyBGYWxsYmFjazogZmlyc3QgdmlzaWJsZSAmIGVuYWJsZWQgaGVhZGVyIGFjdGlvbiAoRWRpdCwgZXRjLilcblx0XHRsZXQgZmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgKG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Zmlyc3RDbGlja2FibGVFbGVtZW50ID0gYWN0aW9ucy5maW5kKGZ1bmN0aW9uIChhY3Rpb246IENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChhY3Rpb24uaXNBPFN1bW1hcml6YXRpb25CdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5TdW1tYXJpemF0aW9uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRDb250ZW50KCk/LmdldFZpc2libGUoKSA/PyBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRhY3Rpb24uaXNBPFNoYXJlQVBJPihcInNhcC5mZS5tYWNyb3MuU2hhcmVcIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPEVhc3lGaWxsQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuRWFzeUZpbGxCdXR0b25cIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPENvbGxhYm9yYXRpb25EcmFmdD4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29tcG9uZW50cy5Db2xsYWJvcmF0aW9uRHJhZnRcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gc2luY2UgU2hhcmUgYW5kIENvbGxhYm9yYXRpb25EcmFmdCBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYWJsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFjdGlvbi5pc0E8SW52aXNpYmxlVGV4dD4oXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmICFhY3Rpb24uaXNBPFRvb2xiYXJTcGFjZXI+KFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpICYmIChhY3Rpb24gYXMgQnV0dG9uKS5nZXRFbmFibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGUgdGhlIGJpbmRpbmdzIG9mIGJsb2NrcyBpbiBPYmplY3QgUGFnZSBMYXlvdXQgYmFzZWQgb24gdGhlIGl0cyBvdmVyYWxsIGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqL1xuXHRfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogdm9pZCB7XG5cdFx0Y29uc3QgYVNlY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0bGV0IGlTa2lwID0gMzsgLy8gMyBzZWN0aW9ucy9zdWJzZWN0aW9ucyBhcmUgbG9hZGVkIGluaXRpYWxseSwgdGhlIG90aGVycyBhcmUgbG9hZGVkIGxhemlseVxuXHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRjb25zdCBmaXJzdFZpc2liaWxpdHlCaW5kaW5nID0gdGhpcy5fZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTtcblx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uID1cblx0XHRcdFx0XHQodGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSAmJlxuXHRcdFx0XHRcdFx0KGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkpIHx8XG5cdFx0XHRcdFx0KCF0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpICYmXG5cdFx0XHRcdFx0XHQoKCFiVXNlSWNvblRhYkJhciAmJiAoaVNraXAgPCAxIHx8IG9TdWJTZWN0aW9uLmdldEJpbmRpbmcoXCJ2aXNpYmxlXCIpKSkgfHwgLy9pZiB3ZSBhcmUgbm90IGluIEljb25UYWJCYXIgbW9kZSwgYWxsIHNlY3Rpb24gd2l0aCBpbmRleCA+PTMgb3Igd2l0aCB2aXNpYmlsaXR5IGJpbmRpbmcgc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0XHRcdFx0XHQoIWJVc2VJY29uVGFiQmFyICYmICFmaXJzdFZpc2liaWxpdHlCaW5kaW5nICYmIGlTa2lwIDwgMSkgfHwgLy8gaWYgbm8gc3Vic2VjdGlvbiBoYXMgdmlzaWJpbGl0eSBiaW5kaW5nIGFuZCB3ZSBhcmUgbm90IGluIEljb25UYWJCYXIgbW9kZVxuXHRcdFx0XHRcdFx0XHQoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkpO1xuXHRcdFx0XHRpZiAoZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGJpbmRpbmcgaXMgZW5hYmxlZC5cblx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBjb250ZW50cyBiaW5kaW5nIGlzIGRpc2FibGVkLlxuXHRcdFx0XHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGJsb2NrLmlzQTxTdWJTZWN0aW9uQmxvY2s+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0XHRcdFx0XHRibG9jay5jb250ZW50LnNldEJpbmRpbmdDb250ZXh0Py4obnVsbCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRmb3IgKGNvbnN0IHN1YlNlY3Rpb24gb2YgYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBhQmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyAoRm9ybSB8IEZvcm1BUEkpW107XG5cblx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgYmxvY2tDb250cm9sIG9mIGFCbG9ja3MpIHtcblx0XHRcdFx0XHRpZiAoYmxvY2tDb250cm9sLmdldEJpbmRpbmdDb250ZXh0Py4oKSkge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBibG9ja0NvbnRyb2wuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sLmdldENvbnRlbnQgJiYgYmxvY2tDb250cm9sLmdldENvbnRlbnQoKT8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sPy5nZXRDb250ZW50Py4oKT8uaXNBPEZvcm1BUEk+KFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm1BUEkpLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1Db250YWluZXIgb2YgYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGZvcm1Db250YWluZXIuZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUVsZW1lbnQgb2YgYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gZm9ybUVsZW1lbnQuZ2V0RmllbGRzKCkgYXMgSW5wdXRCYXNlW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVtcHR5RmllbGQgPSB0aGlzLmdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGFGaWVsZHMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZW1wdHlGaWVsZCkgcmV0dXJuIGVtcHR5RmllbGQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWZXJpZnkgaWYgdGhlIGZpcnN0IGZpZWxkIGlzIGVtcHR5IGFuZCByZXF1aXJlZC5cblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBlbXB0eSByZXF1aXJlZCBmaWVsZCBvciB1bmRlZmluZWQgaWYgbm8gc3VjaCBmaWVsZCBleGlzdHNcblx0ICovXG5cdGdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGZpZWxkczogSW5wdXRCYXNlW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGlmICghZmllbGRzWzBdLmdldFJlcXVpcmVkPy4oKSkgcmV0dXJuO1xuXG5cdFx0bGV0IGlzRW1wdHkgPSBmYWxzZTtcblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoZmllbGRzWzBdLmlzQShcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gKGZpZWxkc1swXSBhcyB1bmtub3duIGFzIE11bHRpVmFsdWVGaWVsZEJsb2NrKS5nZXRNdWx0aVZhbHVlRmllbGQoKS5nZXRJdGVtcygpO1xuXHRcdFx0XHRpc0VtcHR5ID0gaXRlbXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAoZmllbGRzWzBdIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0aXNFbXB0eSA9ICF2YWx1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIGNoZWNraW5nIGZpZWxkIHByb3BlcnRpZXM6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzRW1wdHkgPyBmaWVsZHNbMF0gOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbml0aWFsIGZvY3VzIGluIGVkaXQgbW9kZS5cblx0ICogQHBhcmFtIGFTdWJTZWN0aW9ucyBPYmplY3QgcGFnZSBzdWIgc2VjdGlvbnNcblx0ICogQHBhcmFtIGZyb21UYWJOYXZpZ2F0aW9uIEluZGljYXRlcyBpZiB0aGUgZm9jdXMgaXMgc2V0IGFmdGVyIGEgdGFiIG5hdmlnYXRpb25cblx0ICovXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdLCBmcm9tVGFiTmF2aWdhdGlvbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dChcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0XHRcdGxldCBvRmllbGRUb0ZvY3VzOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZC5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAoXG5cdFx0XHRcdFx0XHRcdG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIHsgY29udGVudDogeyBnZXRDb250ZW50RWRpdDogRnVuY3Rpb24gfSB9XG5cdFx0XHRcdFx0XHQpLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IHRoaXMuZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgPz8gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gb0ZpZWxkVG9Gb2N1cy5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdFx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cy5pc0EoXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkSW5wdXRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvRmllbGRUb0ZvY3VzLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cz8uaXNBPFNlYXJjaEZpZWxkPihcInNhcC5tLlNlYXJjaEZpZWxkXCIpICYmXG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmdldEVuYWJsZVN1Z2dlc3Rpb25zKCkgJiZcblx0XHRcdFx0XHRcdCFvRmllbGRUb0ZvY3VzLmlzQm91bmQoXCJlbmFibGVTdWdnZXN0aW9uc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgZm9jdXMgaXMgc2V0IG9uIGEgc2VhcmNoIGZpZWxkIHdpdGggc3VnZ2VzdGlvbnMsIHdlIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHN1Z2dlc3Rpb25zIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlbSBvbiBmb2N1c1xuXHRcdFx0XHRcdFx0Ly8gdW5sZXNzIHRoaXMgcHJvcGVydHkgaXMgYm91bmQgKHRvIGF2b2lkIG1vZGlmeWluZyBzb21ldGhpbmcgaW4gYSBtb2RlbClcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMuc2V0RW5hYmxlU3VnZ2VzdGlvbnMoZmFsc2UpO1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5zZXRFbmFibGVTdWdnZXN0aW9ucyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cz8uZm9jdXMoZm9jdXNJbmZvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdGZyb21UYWJOYXZpZ2F0aW9uID8gMzAwIDogMFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaXJzdCBzdWItc2VjdGlvbiB3aXRoIGEgdmlzaWJpbGl0eSBib3VuZCB0byB0aGUgbW9kZWwgb2YgdGhlIHZpZXcuXG5cdCAqIFNlY3Rpb25zIHdpdGggYmluZGluZ3Mgb24gaW50ZXJuYWwgbW9kZWxzIG9ubHkgYXJlIGlnbm9yZWQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgb2YgdGhlIGZpcnN0IHN1Yi1zZWN0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRfZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTogQmluZGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWxsc3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGN1cnJlbnRNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cdFx0cmV0dXJuIGFsbHN1YlNlY3Rpb25zXG5cdFx0XHQuZmluZChcblx0XHRcdFx0KHN1YlNlY3Rpb24pID0+XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24uZ2V0QmluZGluZyhcInZpc2libGVcIikgYXMgQ29tcG9zaXRlQmluZGluZyB8IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdD8uZ2V0QmluZGluZ3M/LigpXG5cdFx0XHRcdFx0XHQuc29tZSgoYmluZGluZykgPT4gYmluZGluZy5nZXRNb2RlbCgpID09PSBjdXJyZW50TW9kZWwpXG5cdFx0XHQpXG5cdFx0XHQ/LmdldEJpbmRpbmcoXCJ2aXNpYmxlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIGFsbCBzdWJzZWN0aW9uIHZpc2liaWxpdHkgYmluZGluZ3MgdG8gYmUgcmVzb2x2ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGxpc3RlbnMgZm9yIHRoZSAndmlzaWJpbGl0eUNoYW5nZWQnIGV2ZW50ICAuIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgZXZlbiBpZiB0aGUgdmFsdWVzIGFyZSBub3QgY2hhbmdlZCBidXQganVzdCByZXNvbHZlZC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvbWlzZXMgdGhhdCByZXNvbHZlIHdoZW4gZWFjaCB2aXNpYmlsaXR5IGJpbmRpbmcgaXMgcmVzb2x2ZWQuXG5cdCAqL1xuXHR3YWl0Rm9yQWxsU3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nc1Jlc29sdmVkKCk6IFByb21pc2U8dW5rbm93bj5bXSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKClcblx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdChzdWJTZWN0aW9uKSA9PiBzdWJTZWN0aW9uLmlzQTxTdWJTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCIpICYmIHN1YlNlY3Rpb24uZ2V0QmluZGluZyhcInZpc2libGVcIilcblx0XHRcdCkgLy9maWx0ZXJpbmcgb24gRkUgc3Vic2VjdGlvbnMgd2l0aCB2aXNpYmlsaXR5IGJpbmRpbmcpXG5cdFx0XHQubWFwKGFzeW5jIChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc3ViU2VjdGlvbi5hdHRhY2hFdmVudE9uY2UoXCJ2aXNpYmlsaXR5Q2hhbmdlZFwiLCByZXNvbHZlKSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0aWYgKG9TdWJTZWN0aW9uLmlzQTxTdWJTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCIpKSB7XG5cdFx0XHRvU3ViU2VjdGlvbi5oYW5kbGVTdWJTZWN0aW9uQ3JlYXRlZCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuXHRcdFx0aWYgKGJsb2NrLmlzQTxTdWJTZWN0aW9uQmxvY2s+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0XHRibG9jay5jb250ZW50LnNldEJpbmRpbmdDb250ZXh0Py4odW5kZWZpbmVkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdC8vIFVzZSB0aGUgbmV3IE5hdmlnYXRpb24gQVBJIGlmIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyLCB0byBjaGVjayBpZiB3ZSBjYW4gZ28gYmFjayBpbiBoaXN0b3J5LlxuXHRcdFx0Y29uc3QgY2FuR29CYWNrID0gKHdpbmRvdyBhcyB7IG5hdmlnYXRpb24/OiB7IGNhbkdvQmFjaz86IGJvb2xlYW4gfSB9KS5uYXZpZ2F0aW9uPy5jYW5Hb0JhY2s7XG5cdFx0XHRpZiAoY2FuR29CYWNrID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0fSBlbHNlIGlmIChjYW5Hb0JhY2sgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRmFsbGJhY2sgaW4gY2FzZSB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhlIE5hdmlnYXRpb24gQVBJXG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhZ2UgaW4gdGhlIGhpc3RvcnksIGhpc3RvcnkuYmFjayBkb2VzIG5vdGhpbmcuXG5cdFx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LlVSTCA9PT0gY3VycmVudFVSTCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGlzIG9iamVjdCBwYWdlIGRvZXNuJ3QgaGF2ZSBhIGJpbmRpbmcgY29udGV4dCwgYnV0IHN0aWxsIGhhbmRsZXMgdGhlIHNoZWxsIGJhY2sgbmF2aWdhdGlvbiAtLT4gcGZvcm0gdGhlIG5hdiBiYWNrIGFuZCByZW1vdmUgdGhlIG5hdmJhY2sgaGFuZGxlciBhcyBpdCBtYWtlcyBubyBzZW5zZSBhbnkgbG9uZ2VyXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0LnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZClcblx0XHRcdFx0LnRoZW4obmF2QmFjaylcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGJhY2sgbmF2aWdhdGlvblwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGhpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHRcdD8uZW5hYmxlZDtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRuYXZCYWNrLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRoaWRkZW5EcmFmdEVuYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKGlucHV0QmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB2aWV3Py5nZXRWaWV3RGF0YSgpPy52aWV3TGV2ZWw7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0aWYgKFtOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uLCBOYXZpZ2F0aW9uUmVhc29uLlJvd1ByZXNzXS5pbmNsdWRlcyhtUGFyYW1ldGVycz8ucmVhc29uIGFzIE5hdmlnYXRpb25SZWFzb24pKSB7XG5cdFx0XHR0aGlzLmVkaXRGbG93LnN0b3JlU2libGluZ0NvbnRleHREYXRhKGlucHV0QmluZGluZ0NvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBTdG9yZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaW4gaW50ZXJuYWwgbW9kZWwgZm9yIGFjY2VzcyBieSBjb250cm9sbGVyIGV4dGVuc2lvbnNcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChtUGFyYW1ldGVycykge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJuYXZpZ2F0aW9uUGFyYW1ldGVyc1wiLCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5lZGl0Rmxvdy5jb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzXG5cdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgYmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHt9LCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRcdChvT2JqZWN0UGFnZSBhcyB1bmtub3duIGFzIHsgX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHM6IEZ1bmN0aW9uIH0pLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhbXSk7XG5cdFx0fVxuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRvRmluYWxVSVN0YXRlPy50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWNvbW1lbmRhdGlvbnMuY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UobVBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0KTtcblx0XHR0aGlzLl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpO1xuXG5cdFx0Y29uc3QgYXBwbHlBcHBTdGF0ZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh2aWV3KTtcblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKGFwcGx5QXBwU3RhdGUpO1xuXG5cdFx0dGhpcy5yZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhcblx0XHRcdHRoaXMuc3ViU2VjdGlvbnMsXG5cdFx0XHRvT2JqZWN0UGFnZSxcblx0XHRcdGFwcGx5QXBwU3RhdGUsXG5cdFx0XHR0aGlzLnByZXZpb3VzQmluZGluZ0NvbnRleHRQYXRoICE9PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHQpO1xuXG5cdFx0Ly8gQ2FwdHVyZSBzeW5jaHJvbm91c2x5IHRvIGF2b2lkIHJhY2Ugd2l0aCBzdWJzZXF1ZW50IG5hdmlnYXRpb25zXG5cdFx0Y29uc3QgcGVuZGluZ1RhcmdldENvbnRyb2xJZCA9IHRoaXMucGVuZGluZ1RhcmdldENvbnRyb2xJZDtcblx0XHR0aGlzLnBlbmRpbmdUYXJnZXRDb250cm9sSWQgPSB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLmhhbmRsZVBlbmRpbmdUYXJnZXRDb250cm9sSWROYXZpZ2F0aW9uKGFwcGx5QXBwU3RhdGUsIG9PYmplY3RQYWdlLCBwZW5kaW5nVGFyZ2V0Q29udHJvbElkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIG5hdmlnYXRpb24gdG8gYSB0YXJnZXQgc2VjdGlvbiBvciBzdWJzZWN0aW9uIGFmdGVyIGFwcCBzdGF0ZSBpcyBhcHBsaWVkLlxuXHQgKiBUaGlzIGNvb3JkaW5hdGVzIHRhcmdldENvbnRyb2xJZCBuYXZpZ2F0aW9uIGZyb20gdHdvIHNvdXJjZXM6XG5cdCAqIC0gSW4tYXBwIG5hdmlnYXRpb246IHBlbmRpbmdUYXJnZXRDb250cm9sSWQgY2FwdHVyZWQgYmVmb3JlIGFwcGx5QXBwU3RhdGUuXG5cdCAqIC0gQ3Jvc3MtYXBwIG5hdmlnYXRpb246IHhBcHBTdGF0ZSB0YXJnZXRDb250cm9sSWQgc3RvcmVkIGJ5IEFwcFN0YXRlSGFuZGxlciBkdXJpbmcgTFIgdG8gT1AgdHJhbnNpdGlvbi5cblx0ICogQHBhcmFtIGFwcGx5QXBwU3RhdGUgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYXBwIHN0YXRlIGhhcyBiZWVuIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSBvT2JqZWN0UGFnZSBUaGUgT2JqZWN0UGFnZUxheW91dCBjb250cm9sLlxuXHQgKiBAcGFyYW0gcGVuZGluZ1RhcmdldENvbnRyb2xJZCBUaGUgdGFyZ2V0Q29udHJvbElkIGNhcHR1cmVkIGJlZm9yZSBhcHBseUFwcFN0YXRlLCBpZiBhbnkuXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZVBlbmRpbmdUYXJnZXRDb250cm9sSWROYXZpZ2F0aW9uKFxuXHRcdGFwcGx5QXBwU3RhdGU6IFByb21pc2U8dm9pZCB8IG9iamVjdD4sXG5cdFx0b09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdFx0cGVuZGluZ1RhcmdldENvbnRyb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IHZvaWQge1xuXHRcdGFwcGx5QXBwU3RhdGVcblx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0Y29uc3QgeEFwcFN0YXRlVGFyZ2V0Q29udHJvbElkID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKT8uY29uc3VtZVBlbmRpbmdUYXJnZXRDb250cm9sSWQoKTtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0Q29udHJvbElkID0gcGVuZGluZ1RhcmdldENvbnRyb2xJZCA/PyB4QXBwU3RhdGVUYXJnZXRDb250cm9sSWQ7XG5cdFx0XHRcdGlmICghdGFyZ2V0Q29udHJvbElkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2FpdCBmb3IgdmlzaWJpbGl0eSBiaW5kaW5ncyAgKG5lZWRlZCBmb3IgbGF6eSBsb2FkaW5nIHNjZW5hcmlvcylcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbCh0aGlzLndhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHQvLyBTb21lIHZpc2liaWxpdHkgYmluZGluZ3MgZmFpbGVkIHRvIHJlc29sdmUsIHByb2NlZWRpbmcgYW55d2F5XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXYWl0IGZvciBwYWdlUmVhZHkgdG8gZW5zdXJlIE9iamVjdFBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWRcblx0XHRcdFx0YXdhaXQgdGhpcy5wYWdlUmVhZHkud2FpdFBhZ2VSZWFkeSgpO1xuXG5cdFx0XHRcdC8vIE5hdmlnYXRlIHRvIHRhcmdldCBzZWN0aW9uXG5cdFx0XHRcdHRoaXMubmF2aWdhdGVUb1RhcmdldFNlY3Rpb24ob09iamVjdFBhZ2UsIHRhcmdldENvbnRyb2xJZCk7XG5cdFx0XHRcdHJldHVybjsgLy8gUmVxdWlyZWQgYnkgbGludGVyIHJ1bGUgcHJvbWlzZS9hbHdheXMtcmV0dXJuXG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Ly8gYXBwbHlBcHBTdGF0ZSBmYWlsZWQgLSBza2lwIHRhcmdldENvbnRyb2xJZCBuYXZpZ2F0aW9uXG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSB0YXJnZXQgc2VjdGlvbiB3aXRoIGF1dG9tYXRpYyByZS1uYXZpZ2F0aW9uIGlmIFVYIHJ1bGVzIHJlc2V0IHRoZSBzZWxlY3Rpb24uXG5cdCAqIFBvbGxzIHRoZSBzZWN0aW9uIHN0YXRlIHNpbmNlIHNldFNlbGVjdGVkU2VjdGlvbigpIGRvZXNuJ3QgZmlyZSB0aGUgbmF2aWdhdGUgZXZlbnQuXG5cdCAqIEBwYXJhbSBvT2JqZWN0UGFnZSBUaGUgT2JqZWN0UGFnZUxheW91dCBjb250cm9sLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Q29udHJvbElkIFRoZSBsb2NhbCBJRCBvZiB0aGUgdGFyZ2V0IHNlY3Rpb24gb3Igc3Vic2VjdGlvbi5cblx0ICovXG5cdHByaXZhdGUgbmF2aWdhdGVUb1RhcmdldFNlY3Rpb24ob09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsIHRhcmdldENvbnRyb2xJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Ly8gRGV0ZXJtaW5lIHRhcmdldCBzZWN0aW9uIElEIGZvciBjb21wYXJpc29uXG5cdFx0Y29uc3QgdGFyZ2V0Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQodGFyZ2V0Q29udHJvbElkKTtcblx0XHRjb25zdCBpc1NlY3Rpb24gPSB0YXJnZXRDb250cm9sPy5pc0EoXCJzYXAudXhhcC5PYmplY3RQYWdlU2VjdGlvblwiKTtcblx0XHRjb25zdCB0YXJnZXRTZWN0aW9uSWQgPSBpc1NlY3Rpb24gPyB0YXJnZXRDb250cm9sPy5nZXRJZCgpIDogKHRhcmdldENvbnRyb2w/LmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKT8uZ2V0SWQoKTtcblxuXHRcdC8vIE5hdmlnYXRlIGZ1bmN0aW9uIHdpdGggZ3VhcmQgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgd2hlbiBhbHJlYWR5IG9uIHRhcmdldFxuXHRcdGNvbnN0IG5hdmlnYXRlVG9UYXJnZXQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkgPT09IHRhcmdldFNlY3Rpb25JZCkge1xuXHRcdFx0XHRyZXR1cm47IC8vIEFscmVhZHkgb24gdGFyZ2V0IHNlY3Rpb25cblx0XHRcdH1cblx0XHRcdHRoaXMubmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uKHRhcmdldENvbnRyb2xJZCk7XG5cdFx0fTtcblxuXHRcdC8vIE5hdmlnYXRlIGltbWVkaWF0ZWx5XG5cdFx0bmF2aWdhdGVUb1RhcmdldCgpO1xuXG5cdFx0Ly8gU2tpcCBwb2xsaW5nIGlmIGFscmVhZHkgb24gdGFyZ2V0IHNlY3Rpb24gKG5hdmlnYXRpb24gd2FzIG5vLW9wIG9yIHN1Y2NlZWRlZCBpbW1lZGlhdGVseSlcblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkgPT09IHRhcmdldFNlY3Rpb25JZCkge1xuXHRcdFx0dGhpcy5za2lwVmlld1N0YXRlU2VjdGlvblJlc3RvcmUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFBvbGwgdG8gZGV0ZWN0IFVYIHJ1bGVzIHJlc2V0IG9ubHkgb24gbmV3IGVudGl0eSBiaW5kaW5nLlxuXHRcdC8vIF9hZGp1c3RTZWxlY3RlZFNlY3Rpb25CeVVYUnVsZXMoKSBvbmx5IHJ1bnMgd2hlbiBPYmplY3RQYWdlTGF5b3V0IHJlLWluaXRpYWxpemVzIHdpdGggYSBuZXcgZW50aXR5LlxuXHRcdGlmICh0aGlzLmlzTmV3QmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHBvbGxGb3JTZWN0aW9uU3RhYmlsaXR5KHtcblx0XHRcdFx0Z2V0U2VsZWN0ZWRTZWN0aW9uOiAoKSA9PiBvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSxcblx0XHRcdFx0dGFyZ2V0U2VjdGlvbklkLFxuXHRcdFx0XHRvblJlc2V0RGV0ZWN0ZWQ6IG5hdmlnYXRlVG9UYXJnZXRcblx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnNraXBWaWV3U3RhdGVTZWN0aW9uUmVzdG9yZSA9IHRydWU7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBSZXF1aXJlZCBieSBsaW50ZXIgcnVsZSBwcm9taXNlL2Fsd2F5cy1yZXR1cm5cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHQvLyBSZXF1aXJlZCBieSBsaW50ZXIgcnVsZSBwcm9taXNlL2NhdGNoLW9yLXJldHVybiAtIHBvbGxpbmcgZmFpbHVyZXMgYXJlIG5vbi1jcml0aWNhbFxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0YXJnZXRTdWJTZWN0aW9uIGJhc2VkIG9uIHRoZSB0YXJnZXQgY29udHJvbCBJRCBmb3IgYXBwIHN0YXRlIHBlcnNpc3RlbmNlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Q29udHJvbElkIFRoZSBsb2NhbCBJRCBvZiB0aGUgdGFyZ2V0IHNlY3Rpb24gb3Igc3Vic2VjdGlvbi5cblx0ICovXG5cdHByaXZhdGUgc2V0VGFyZ2V0U3ViU2VjdGlvbih0YXJnZXRDb250cm9sSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKHRhcmdldENvbnRyb2xJZCk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2w/LmlzQTxPYmplY3RQYWdlU3ViU2VjdGlvbj4oXCJzYXAudXhhcC5PYmplY3RQYWdlU3ViU2VjdGlvblwiKSkge1xuXHRcdFx0dGhpcy50YXJnZXRTdWJTZWN0aW9uID0gdGFyZ2V0Q29udHJvbDtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENvbnRyb2w/LmlzQTxPYmplY3RQYWdlU2VjdGlvbj4oXCJzYXAudXhhcC5PYmplY3RQYWdlU2VjdGlvblwiKSkge1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSB0YXJnZXRDb250cm9sLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLnRhcmdldFN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1swXTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgbmF2aWdhdGlvbiB0byB0aGUgdGFyZ2V0IHNlY3Rpb24gYW5kIHRoZW4gdXBkYXRlcyB0aGUgYXBwIHN0YXRlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Q29udHJvbElkIFRoZSBsb2NhbCBJRCBvZiB0aGUgdGFyZ2V0IHNlY3Rpb24gb3Igc3Vic2VjdGlvbi5cblx0ICovXG5cdHByaXZhdGUgbmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uKHRhcmdldENvbnRyb2xJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Ly8gU2V0IHRhcmdldFN1YlNlY3Rpb24gQkVGT1JFIG5hdmlnYXRpb24gZm9yIGFwcCBzdGF0ZSBzYXZpbmcuXG5cdFx0Ly8gc2Nyb2xsVG9TZWN0aW9uKCkgZG9lc24ndCBmaXJlIHRoZSBuYXZpZ2F0ZSBldmVudCwgc28gb25OYXZpZ2F0ZUNoYW5nZSB3b24ndCBiZSBjYWxsZWQuXG5cdFx0dGhpcy5zZXRUYXJnZXRTdWJTZWN0aW9uKHRhcmdldENvbnRyb2xJZCk7XG5cblx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLm5hdmlnYXRlVG9TdWJTZWN0aW9uKHRhcmdldENvbnRyb2xJZCk7XG5cblx0XHQvLyBXYWl0IGZvciBFeHRlbnNpb25BUEkgcG9sbGluZyB0byBjb21wbGV0ZSAofjEwMG1zKSBwbHVzIHNjcm9sbCB0byBmaW5pc2hcblx0XHQvLyBiZWZvcmUgdXBkYXRpbmcgYXBwIHN0YXRlIGFuZCBzZXR0aW5nIGZvY3VzLlxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy52aWV3U3RhdGUudXBkYXRlQXBwU3RhdGVEZWJvdW5jZWQoKTtcblxuXHRcdFx0Ly8gU2V0IGZvY3VzIGlmIGluIGVkaXQgbW9kZSAoZm9yIGluLWFwcCBuYXZpZ2F0aW9uIHRvIHN1Yi1vYmplY3QgcGFnZSBpbiBlZGl0IG1vZGUpXG5cdFx0XHQvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNjcm9sbFRvU2VjdGlvbigpIGRvZXNuJ3QgZmlyZSBvbk5hdmlnYXRlQ2hhbmdlLFxuXHRcdFx0Ly8gc28gd2UgbmVlZCB0byBtYW51YWxseSB0cmlnZ2VyIGZvY3VzIHNldHRpbmcgaGVyZVxuXHRcdFx0Y29uc3QgaXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRpZiAoaXNJbkVkaXRNb2RlICYmIHRoaXMudGFyZ2V0U3ViU2VjdGlvbikge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW3RoaXMudGFyZ2V0U3ViU2VjdGlvbl0sIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9LCAxNTApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlY29ubmVjdCB0aGUgdmlzaWJpbGl0eSBvYnNlcnZlcnMgb2YgYWxsIEZFIHN1YnNlY3Rpb25zIGFmdGVyIHRoZSBzdWJzZWN0aW9uIHZpc2liaWxpdHkgYmluZGluZ3MgYXJlIHJlc29sdmVkIGFuZCB0aGUgYXBwIHN0YXRlIGlzIGFwcGxpZWQuXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2FpdCBmb3IgdGhlIGFwcFNhdGUgdG8gYmUgYXBwbGllZCBiZWZvcmUgcmVjb25uZWN0aW5nIHRoZSBvYnNlcnZlcnMgYW5kIHRoZSBzY3JvbGxpbmcgdG8gdGhlIHNlbGVjdGVkIHNlY3Rpb24gaWYgaXQgY2hhbmdlZCBkdXJpbmcgdGhlIGFwcFN0YXRlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbkluZm8gU3Vic2VjdGlvbnMgaW5mb3JtYXRpb24gcmV0cmlldmVkIGR1cmluZyBkaXNjb25uZWN0aW9uXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlTGF5b3V0IE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEBwYXJhbSB3YWl0Rm9yQXBwbHlBcHBzdGF0ZSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXBwIHN0YXRlIGlzIGFwcGxpZWRcblx0ICogQHBhcmFtIHdhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gd2FpdCBmb3IgdmlzaWJpbGl0eSBiaW5kaW5ncyB0byBiZSByZXNvbHZlZCBiZWZvcmUgcmVjb25uZWN0aW5nIG9ic2VydmVyc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSBvYnNlcnZlcnMgd2VyZSByZWNvbm5lY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRhc3luYyByZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhcblx0XHRzdWJTZWN0aW9uSW5mbzogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfSB8IHVuZGVmaW5lZCxcblx0XHRvYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHdhaXRGb3JBcHBseUFwcHN0YXRlOiBQcm9taXNlPHVua25vd24+LFxuXHRcdHdhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MgPSB0cnVlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSAmJiBzdWJTZWN0aW9uSW5mbykge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwod2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyA/IHRoaXMud2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyA6IFtdKVxuXHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHQvL3dhaXRpbmcgZm9yIHRoZSBhcHAgc3RhdGUgdG8gYmUgYXBwbGllZCBidG8gZW5zdXJlIGZvY3VzaW5nIG9uIHRoZSBjb3JyZWN0IHNlY3Rpb24gaWYgcmVxdWlyZWRcblx0XHRcdFx0XHRcdGF3YWl0IHdhaXRGb3JBcHBseUFwcHN0YXRlO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBhcHBseWluZyBhcHAgc3RhdGVcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN1YlNlY3Rpb25JbmZvLmZlLmZvckVhY2goKHN1YlNlY3Rpb24pID0+IHN1YlNlY3Rpb24ub2JzZXJ2ZUN1cnJlbnRTZWN0aW9uKCkpO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25JbmZvLm90aGVyc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigoc3Vic2VjdGlvbikgPT4gc3Vic2VjdGlvbi5nZXRWaXNpYmxlKCkpXG5cdFx0XHRcdFx0XHQuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4gc3ViU2VjdGlvbi5maXJlRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHsgc3ViU2VjdGlvbjogc3ViU2VjdGlvbiB9KSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGU6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBhcHBseWluZyBhcHAgc3RhdGVcIiwgZSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIGNhcmRzIEFycmF5IG9mIGNhcmRzIHRvIGJlIHVwZGF0ZWRcblx0ICovXG5cdGFzeW5jIF91cGRhdGVBdmFpbGFibGVDYXJkcyhjYXJkczogV3JhcHBlZENhcmRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCk7XG5cdFx0Ly8gT25seSBjb2xsZWN0IGNhcmRzIHdoZW4gY29uc3VtZXJzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGNhcmRzIGNoYW5uZWxcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlLmhhc0NvbGxhYm9yYXRpb25NYW5hZ2VyQ29ubmVjdGVkKCkpIHtcblx0XHRcdGF3YWl0IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGNhcmRPYmplY3QgPSB0aGlzLmNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldElkKCk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZS5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2Uuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTWVzc2FnZXN0cmlwIE9QLlxuXHQgKi9cblx0X3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIsIHsgLi4uaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIpIH0pO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0KG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHQ/LmZpbmRFbGVtZW50cyh0cnVlLCAoZWxlbTogQ29udHJvbCkgPT4gZWxlbS5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpXG5cdFx0XHRcdC5mb3JFYWNoKChtZXNzYWdlU3RyaXA6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlU3RyaXAuc2V0QmluZGluZ0NvbnRleHQoXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSEsXG5cdFx0XHRcdFx0XHRcImludGVybmFsXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIElmIHRoZSB2aWV3J3MgYmluZGluZyBjb250ZXh0IGFscmVhZHkgaGFkIG1lc3NhZ2VzIHRoYXQgd2VyZSBub3QgY2xlYXJlZCwgd2Ugd291bGQgbmVlZCB0byByZS1ldmFsdWF0ZSB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0dGhpcy5fZm5TaG93T1BNZXNzYWdlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgYSBtZXNzYWdlIHN0cmlwIGlmIGEgcmVkaXJlY3Rpb24gdG8gYSBub24tZHJhZnQgZWxlbWVudCBoYXMgYmVlbiBkb25lLlxuXHQgKiBSZW1vdmUgdGhlIG1lc3NhZ2Ugc3RyaXAgaW4gY2FzZSB3ZSBuYXZpZ2F0ZSB0byBhbm90aGVyIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlXG5cdCAqL1xuXHRkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UoZW50aXR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UpIHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdFx0ZGVsZXRlIHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2U7XG5cdFx0fVxuXG5cdFx0aWYgKGVudGl0eU5hbWUpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJSRVJPVVRFRF9OQVZJR0FUSU9OX1RPX1NBVkVEX1ZFUlNJT05cIiwgW2VudGl0eU5hbWVdKSxcblx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24sXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBjdHh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvLyBzZXR0aW5nIHRoaXMgbW9kZWwgZGF0YSB0byBiZSB1c2VkIGZvciByZWNvbW1lbmRhdGlvbnMgYmluZGluZ1xuXHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvY3VycmVudEN0eHRcIiwgY3R4dCk7XG5cblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRvIG5vdCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBhY3Rpb24gaWYgd2UgYXJlIGluIERpc3BsYXkgbW9kZVxuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRpZiAoaXNFZGl0YWJsZSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoW3sgY29udGV4dDogb0JpbmRpbmdDb250ZXh0IH1dKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmZvcmNlRm9jdXMpIHtcblx0XHRcdHNldEZvY3VzKCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RoZSBmb2xsb3dpbmcgY29kaW5nIGlzIGRvbmUgdG8gbWVyZ2UgYW4gb3BlbiBQQVRDSCBhbmQgdGhlIGRyYWZ0cHJlcGFyZS9kcmFmdGFjdGl2YXRlXG5cdFx0Ly9yZXF1ZXN0IGludG8gb25lICRiYXRjaCByZXF1ZXN0XG5cdFx0Ly9UbyBhY2hpZXZlIHRoaXMgdGhlICRhdXRvIHF1ZXVlIGlzIGxvY2tlZCBhdCB0aGUgbW91c2Vkb3duIGV2ZW50IChiZWZvcmUgZm9jdXNvdXQpIGluXG5cdFx0Ly9vcmRlciB0byB3YWl0IGZvciB0aGUgZHJhZnQgcmVxdWVzdCBpc3N1ZWQgaW4gdGhlIHNhdmUgYnV0dG9ucyBwcmVzcyBldmVudCBoYW5kbGVyLlxuXHRcdC8vVGhlIHF1ZXVlIGlzIHJlbGVhc2VkIGFnYWluIGR1cmluZyBtb3VzZXVwIChiZWZvcmUgcHJlc3MpLlxuXHRcdC8vVGhpcyBpcyBvbmx5IHBvc3NpYmxlIG9uIG5vbiB0b3VjaCBkZXZpY2VzIGJlY2F1c2Ugb24gdG91Y2ggZGV2aWNlcyB0aGUgZm9jdXNvdXQgYW5kIHByZXNzXG5cdFx0Ly9ldmVudHMgYXJlIGJvdGggaW5pdGlhdGVkIGF0IHRvdWNoZW5kIGJ5IHNhcC5tLkJ1dHRvbi5cblx0XHQvL21vdXNlSGFuZGxlclNldCBpcyB1c2VkIHRvIGVuc3VyZXMgdGhhdCB0aGUgZXZlbnQgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIG9ubHkgb25lIHRpbWUuXG5cdFx0Ly9UaGVyZSBjYW4gYmUgbXVsdGlwbGUgb25QYWdlUmVhZHkgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQvZGlzcGxheSBtb2RlXG5cdFx0aWYgKCF0aGlzLm1lcmdlUGF0Y2hEcmFmdCAmJiAhRGV2aWNlLnN1cHBvcnQudG91Y2gpIHtcblx0XHRcdGNvbnN0IHNhdmVCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OlNhdmVcIikgYXMgQnV0dG9uO1xuXHRcdFx0Y29uc3QgYXV0b1F1ZXVlVW5sb2NrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrLnVubG9jaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdH07XG5cblx0XHRcdHNhdmVCdXR0b24/LmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlZG93blwiLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5sb2NrKFwiJGF1dG9cIik7XG5cdFx0XHRcdFx0Ly93aGVuIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGF3YXkgZnJvbSB0aGUgc2F2ZSBidXR0b24gd2hpbGUgcHJlc3NlZCB0aGVuIHRoZXJlIHdpbGwgYmUgbm9cblx0XHRcdFx0XHQvL21vdXNldXAgZXZlbnQgb24gdGhlIHNhdmUgYnV0dG9uLiBUaGVyZWZvcmUsIHRoZSB1bmxvY2tpbmcgaXMgZG9uZSBvbiBcIm1vdXNldXBcIiBhbmQgXCJibHVyXCJcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVyZ2VQYXRjaERyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk6IE9iamVjdFBhZ2VMYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0YXN5bmMgX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IFByb21pc2U8eyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlRGVzY3JpcHRpb24gPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlRGVzY3JpcHRpb25cIjtcblx0XHR9KTtcblx0XHRjb25zdCBleHRyYWN0UGF0aHMgPSAoYmluZGluZ0luZm8/OiB7IHBhcnRzPzogeyBwYXRoPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9W10gfSk6IHN0cmluZ1tdID0+XG5cdFx0XHRBcnJheS5mcm9tKFxuXHRcdFx0XHRuZXcgU2V0KFxuXHRcdFx0XHRcdChiaW5kaW5nSW5mbz8ucGFydHMgfHwgW10pXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChwYXJ0KSA9PiAhcGFydC5tb2RlbClcblx0XHRcdFx0XHRcdC5tYXAoKHBhcnQpID0+IHBhcnQucGF0aCB8fCBcIlwiKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGNvbnN0IHN1YnRpdGxlUGF0aHMgPSBleHRyYWN0UGF0aHMob09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSk7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBwYXRoc1RvUmVzb2x2ZSA9IFsuLi5zdWJ0aXRsZVBhdGhzLCAuLi5kZXNjcmlwdGlvblBhdGhzXTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBmbkNsZWFyQ2FjaGVUaXRsZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmICgob09iamVjdFBhZ2VEZXNjcmlwdGlvbiB8fCBvT2JqZWN0UGFnZVN1YnRpdGxlKSAmJiAhdGhpcy5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHRvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHR0aGlzLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBvT2JqZWN0UGFnZUNvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJ1aWxkID0gKCk6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9ID0+ICh7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSA/PyBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGU/LmdldFZhbHVlKCkgPz8gXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0VmFsdWUoKSA/PyBcIlwiXG5cdFx0fSk7XG5cdFx0Ly9pZiBubyBjb250ZXh0IG9yIG5vdGhpbmcgdG8gcmVzb2x2ZSwgZGlyZWN0IHJldHVyblxuXHRcdGlmICghb09iamVjdFBhZ2VDb250ZXh0IHx8IHBhdGhzVG9SZXNvbHZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZCgpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRwYXRoc1RvUmVzb2x2ZS5tYXAoYXN5bmMgKHApID0+IChvT2JqZWN0UGFnZUNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLnJlcXVlc3RQcm9wZXJ0eShwKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpKVxuXHRcdCk7XG5cdFx0cmV0dXJuIGJ1aWxkKCk7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gKG9FeGVjdXRpb24uZ2V0U291cmNlKCkgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uKS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkhKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBpc0Vycm9yTWVzc2FnZSA9IG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VWYWxpZGF0aW9uID0gaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0XHQ/IGlzRXJyb3JNZXNzYWdlXG5cdFx0XHRcdFx0OiBpc0Vycm9yTWVzc2FnZSAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaW5jbHVkZXMoc1ZpZXdJZCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZVZhbGlkYXRpb24pIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcigpOiB2b2lkIHtcblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoZ2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMsIGNvbnRleHQpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IChhd2FpdCBDb21tb25VdGlscy5jcmVhdGVSb290Q29udGV4dChcblx0XHRcdFByb2dyYW1taW5nTW9kZWwuRHJhZnQsXG5cdFx0XHR0aGlzLmdldFZpZXcoKSxcblx0XHRcdGFwcENvbXBvbmVudFxuXHRcdCkpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzIChpZ25vcmUgRVRhZ3MgaW4gY29sbGFib3JhdGlvbiBkcmFmdClcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50LCB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIElmIGRhdGEgaGFzIGJlZW4gcHJvdmlkZWQgb24gdGhlIGNyZWF0aW9uIHJvd3MsIHRoZSByZWxhdGVkIGRvY3VtZW50cyBhcmUgY3JlYXRlZFxuXHQgKiBiZWZvcmUgc2F2aW5nIHRoZSBkcmFmdCB2ZXJzaW9uLlxuXHQgKiBAcGFyYW0gc2tpcEJpbmRpbmdUb1ZpZXcgSW5kaWNhdGVzIGlmIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3IHNob3VsZCBiZSBza2lwcGVkXG5cdCAqIEBwYXJhbSB1c2VTYXZlQW5kTGVhdmUgSW5kaWNhdGVzIGlmIHRoZSBzYXZlIGlzIHRyaWdnZXJlZCBmcm9tIGEgc2F2ZSBhbmQgbGVhdmUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQoc2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLCB1c2VTYXZlQW5kTGVhdmU/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHM6IFByb21pc2U8dm9pZCB8IE9EYXRhTGlzdEJpbmRpbmc+W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdGxldCBtZXNzYWdlUG9wb3ZlckVycjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhtb2RlbCk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIHRydWUpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29sbGFib3JhdGlvbiBkaXNjYXJkOiAke2Vycn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgodGFibGU6IFRhYmxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKHRhYmxlKTtcblxuXHRcdFx0XHRjb25zdCBjb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKChjcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldE9iamVjdCgpIHx8IHt9KTtcblx0XHRcdFx0aWYgKGNvbnRleHRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJAJHVpNS5cIikpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93XG5cdFx0XHRcdFx0XHRcdC5jcmVhdGVEb2N1bWVudCh0YWJsZUJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Sb3c6IGNyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0XHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEFnZ3JlZ2F0aW9uKFwiY3JlYXRpb25Nb2RlXCIpIGFzIFRhYmxlQ3JlYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdFx0XHQpPy5nZXRQcm9wZXJ0eShcImNyZWF0ZUF0RW5kXCIpID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHNraXBTaWRlRWZmZWN0czogdHJ1ZSAvLyB0aGUgc2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5LCB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRhYmxlQmluZGluZylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGxldCBpc1N0YW5kYXJkU2F2ZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChza2lwQmluZGluZ1RvVmlldyAmJiB0eXBlb2Ygc2tpcEJpbmRpbmdUb1ZpZXcgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Y29uc3QgY29tbWFuZCA9IChza2lwQmluZGluZ1RvVmlldyBhcyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCk/LmdldFNvdXJjZT8uKCk/LmdldENvbW1hbmQ/LigpO1xuXHRcdFx0XHRpc1N0YW5kYXJkU2F2ZSA9IGNvbW1hbmQgPT09IFwiU2F2ZVwiO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhd2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChjb250ZXh0LCB7XG5cdFx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdFx0YmluZGluZ3M6IGJpbmRpbmdzIGFzIHVua25vd24gYXMgT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdFx0XHRcdG1lcmdlUGF0Y2hEcmFmdDogdGhpcy5tZXJnZVBhdGNoRHJhZnQsXG5cdFx0XHRcdFx0c2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdFx0aXNTdGFuZGFyZFNhdmUsXG5cdFx0XHRcdFx0dXNlU2F2ZUFuZExlYXZlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0aWYgKGVycm9yICE9PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZVBvcG92ZXJFcnIgPSAoZXJyb3IgYXMgc3RyaW5nKSA/PyBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG1vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhtb2RlbCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVzc2FnZVBvcG92ZXJFcnIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAobWVzc2FnZVBvcG92ZXJFcnIubGVuZ3RoKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKG1lc3NhZ2VQb3BvdmVyRXJyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfY2FuY2VsRG9jdW1lbnQobVBhcmFtZXRlcnM6IHsgY2FuY2VsQnV0dG9uOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGV4dCB8IHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0Y29uc3QgbGFzdEZvY3VzZWRDb250cm9sSWQgPSBVSTVFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKT8uZ2V0SWQoKTtcblx0XHRsZXQgc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gZmFsc2U7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCBmYWxzZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBoYXZlIGRpc3BsYXllZCB0aGUgZGlhbG9nIGFuZCB0aGUgdXNlciBjb25maXJtZWQgdGhlIGRpc2NhcmQgLT4gV2Ugc2tpcCB0aGUgZGlzY2FyZCBjb25maXJtYXRpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJkaXNjYXJkQ29uZmlybWVkXCIpIHtcblx0XHRcdFx0XHRzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGdldCBjb2xsYWJvcmF0aXZlIHVzZXJzXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBpc0RvY3VtZW50TW9kaWZpZWQgPVxuXHRcdFx0ISF0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCkgfHxcblx0XHRcdCghdGhpcy5nZXRTdGlja3lFZGl0TW9kZSgpICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKTtcblx0XHRjb25zdCBhZnRlckNhbmNlbDogRnVuY3Rpb24gPSAocHJvbWlzZVJlc3VsdDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRcdC8vIGZvY3VzIGlzIHJldGFpbmVkIG9uIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxuXHRcdFx0aWYgKGxhc3RGb2N1c2VkQ29udHJvbElkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0VUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChsYXN0Rm9jdXNlZENvbnRyb2xJZCk/LmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJvbWlzZVJlc3VsdDtcblx0XHR9O1xuXHRcdGlmIChcblx0XHRcdCh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkICYmXG5cdFx0XHRpc0RvY3VtZW50TW9kaWZpZWRcblx0XHQpIHtcblx0XHRcdHJldHVybiBkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0YWZ0ZXJDYW5jZWwsXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvd1xuXHRcdFx0LmNhbmNlbERvY3VtZW50KGNvbnRleHQsIHsgY29udHJvbDogY2FuY2VsQnV0dG9uLCBza2lwRGlzY2FyZFBvcG92ZXI6IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciB9KVxuXHRcdFx0LnRoZW4oKHByb21pc2VSZXN1bHQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFmdGVyQ2FuY2VsKHByb21pc2VSZXN1bHQpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBfYXBwbHlEb2N1bWVudChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKTtcblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpOiB2b2lkIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgc2hvd1JlbGF0ZWRBcHBzID0gb09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKTtcblx0XHRpZiAoc2hvd1JlbGF0ZWRBcHBzID09PSBcInRydWVcIiB8fCBzaG93UmVsYXRlZEFwcHMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UsIGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBDb250cm9sW10sIGFTdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgYUNvbnRyb2xzOiBDb250cm9sW10sIGJJc0NoYXJ0PzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbTEgb2YgYVBhcmVudEVsZW1lbnQpIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IChpdGVtMSBhcyBNYWNyb0FQSSkuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoYklzQ2hhcnQpIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50Py5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpIGFzIENvbnRyb2xbXTtcblx0XHRcdFx0XHRpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbS5pc0E8Q2hhcnRCbG9jaz4oXCJzYXAuZmUubWFjcm9zLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0Q29udHJvbCA9IGl0ZW0uZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKGNoYXJ0Q29udHJvbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBPER5bmFtaWNTaWRlQ29udGVudD4oXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJFbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9FbGVtZW50LmdldE1haW5Db250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9FbGVtZW50ID0gb1N1YkVsZW1lbnRbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgb0VsZW1lbnQuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJFbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvU3ViRWxlbWVudCAmJiBvU3ViRWxlbWVudC5pc0EgJiYgb1N1YkVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9TdWJFbGVtZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10ge1xuXHRcdGxldCBhQmxvY2tzOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpOiBUYWJsZVtdIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IFRhYmxlW10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpOiBDaGFydFtdIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IENoYXJ0W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDaGFydHM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBDb250ZXh0LCBzQ2hhcnRQYXRoOiBzdHJpbmcpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coaXRlbSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMoXG5cdFx0b1BhZ2VDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFMaW5lQ29udGV4dDogT0RhdGFWNENvbnRleHRbXSxcblx0XHRzQ2hhcnRQYXRoOiBzdHJpbmdcblx0KTogeyBzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50OyBhdHRyaWJ1dGVzOiB1bmtub3duW10gfSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiB1bmtub3duW10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5mb3JFYWNoKChvU2luZ2xlQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TdWJDaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogYCR7c01ldGFQYXRoUGFnZX0vJHtzQ2hhcnRQYXRofWBcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoTGluZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0Y29udGV4dERhdGE6IG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZVxuXHRcdH0pO1xuXHRcdC8vIEFkZGluZyBQYWdlIENvbnRleHQgdG8gc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRhUGFnZUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGluaXRpYWxpemUgcGFnaW5hdGlvbi5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBvYmplY3QgcGFnZVxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgUGFyZW50IGxpc3QgYmluZGluZyB0byB1c2Vcblx0ICovXG5cdF9pbml0aWFsaXplUGFnaW5hdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbDtcblx0XHRpZiAodmlld0xldmVsID4gMSkge1xuXHRcdFx0Y29uc3QgcGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHBhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdUb1VzZSA9IHBhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShiaW5kaW5nVG9Vc2UsIHBhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAobGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShsaXN0QmluZGluZywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBvYmplY3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IHsgc3VwcG9ydGVkPzogYm9vbGVhbiB9W10pOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKFxuXHRcdFx0b1N1YkRhdGFQb2ludHM6IFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHRcdFx0fVxuXHRcdFx0Pixcblx0XHRcdG9QYWdlRGF0YTogb2JqZWN0XG5cdFx0KTogdm9pZCB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0Y29uc3Qgb0xpbmsgPSBvVmlldy5ieUlkKHNJZCk7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBmb3IgZGF0YSBwb2ludHMgY29uZmlndXJlZCBpbiBhcHAgZGVzY3JpcHRvciBidXQgbm90IGFubm90YXRlZCBpbiB0aGUgaGVhZGVyXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0xpbmtDb250ZXh0ID0gb0xpbmsuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgb0xpbmtEYXRhOiBvYmplY3QgPSBvTGlua0NvbnRleHQgJiYgb0xpbmtDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgb01peGVkQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl0hW1wiJFByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYXBwZWRQcm9wZXJ0eSA9IG9NYXBwaW5nW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSE7XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdFx0XHRcdFx0b05ld01hcHBpbmdbc01hcHBlZFByb3BlcnR5XSA9IG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdFx0b01peGVkQ29udGV4dCA9IG1lcmdlKHt9LCBvTWl4ZWRDb250ZXh0LCBvTmV3TWFwcGluZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAoIXNLZXkuc3RhcnRzV2l0aChcIl9cIikgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRTdW1tYXJpemVCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvYmplY3RQYWdlVGl0bGUgPSBvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZVRpdGxlPy5nZXRBY3Rpb25zKCk7XG5cdFx0bGV0IHN1bW1hcml6ZUJ1dHRvbjogQnV0dG9uIHwgdW5kZWZpbmVkO1xuXG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xuXHRcdFx0aWYgKGFjdGlvbi5pc0E8U3VtbWFyaXphdGlvbkJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIikpIHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gYWN0aW9uLmdldENvbnRlbnQoKSBhcyBCdXR0b24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChidXR0b24gJiYgYnV0dG9uLmdldElkKCkuZW5kc1dpdGgoXCI6OlN1bW1hcml6ZTo6YnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0c3VtbWFyaXplQnV0dG9uID0gYnV0dG9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1bW1hcml6ZUJ1dHRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmFsdWF0ZXMgc3RhcnR1cCBwYXJhbWV0ZXJzIGFuZCB0cmlnZ2VycyB0aGUgc21hcnQgc3VtbWFyeSBhY3Rpb24gb24gdGhlIE9iamVjdCBQYWdlIGlmIHJlcXVpcmVkLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGluZGljYXRlIHRoYXQgYSBzbWFydCBzdW1tYXJ5IHNob3VsZCBiZSBwZXJmb3JtZWQgZm9yIHRoZSBjdXJyZW50IE9iamVjdCBQYWdlIGxldmVsLlxuXHQgKiBUaGUgbGV2ZWwgcGFyYW1ldGVyIGRldGVybWluZXMgd2hpY2ggT2JqZWN0IFBhZ2Ugc2hvdWxkIGJlIHN1bW1hcml6ZWQsIHdoaWNoIGlzIHJlbGV2YW50IGluIEZsZXhpYmxlIENvbHVtbiBMYXlvdXQgKEZDTCkgc2NlbmFyaW9zIHdoZXJlXG5cdCAqIG11bHRpcGxlIE9iamVjdCBQYWdlcyBtYXkgYmUgZGlzcGxheWVkIHNpbXVsdGFuZW91c2x5LlxuXHQgKiBJZiBubyBsZXZlbCBpcyBwcm92aWRlZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLCB0aGUgbWV0aG9kIGRlZmF1bHRzIHRoZSBsZXZlbCB0byAxLlxuXHQgKiBJZiB0aGUgc3VtbWFyeSBhY3Rpb24gaXMgYWxsb3dlZCBhbmQgdGhlIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlLCBpdCBsb2NhdGVzIHRoZSBzdW1tYXJpemUgYnV0dG9uIGFuZCB0cmlnZ2VycyBpdHMgcHJlc3MgZXZlbnQuXG5cdCAqIFRoZSBtZXRob2QgZW5zdXJlcyB0aGUgc3VtbWFyeSBpcyBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIG5hdmlnYXRpb24gYW5kIGxvZ3MgZXJyb3JzIGlmIHByZXJlcXVpc2l0ZXMgYXJlIG5vdCBtZXQgb3IgdGhlIGJ1dHRvbiBpcyB1bmF2YWlsYWJsZS5cblx0ICogQWxsIGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHByb2Nlc3MgYXJlIGNhdWdodCBhbmQgbG9nZ2VkLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24oKTogdm9pZCB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRhcHBDb21wb25lbnRcblx0XHRcdD8uZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKVxuXHRcdFx0Py50aGVuKChzdGFydHVwUGFyYW1zOiBTdGFydHVwUGFyYW1ldGVycykgPT4ge1xuXHRcdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uIHx8ICFzdGFydHVwUGFyYW1zLnByZWZlcnJlZEFjdGlvblswXS5zdGFydHNXaXRoKFwic3VtbWFyeVwiKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNoZWNrIGlmIHdlIGFyZSBvbiB0aGUgY29ycmVjdCBPUCBieSBjaGVja2luZyB0aGUgbGV2ZWwgcHJvdmlkZWQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdFx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbDtcblx0XHRcdFx0Y29uc3QgcHJlZmVycmVkQWN0aW9uTGV2ZWwgPVxuXHRcdFx0XHRcdHN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdID09PSBcInN1bW1hcnlcIiA/IDEgOiBwYXJzZUludChzdGFydHVwUGFyYW1zLnByZWZlcnJlZEFjdGlvblswXS5zcGxpdChcIi1cIilbMV0sIDEwKTtcblx0XHRcdFx0aWYgKGlzTmFOKHByZWZlcnJlZEFjdGlvbkxldmVsKSB8fCB2aWV3TGV2ZWwgIT09IHByZWZlcnJlZEFjdGlvbkxldmVsKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc3VtbWFyeSBhY3Rpb24gc2hhbGwgYmUgZXhlY3V0ZWQgbm93IChpdCBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBleGVjdXRlZCBieSBhIGhpZ2hlciBsZXZlbCBPUClcblx0XHRcdFx0aWYgKGFwcENvbXBvbmVudC5nZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoKSA9PT0gUHJlZmVycmVkQWN0aW9uU3RhdHVzLkNhblBlcmZvcm0pIHtcblx0XHRcdFx0XHRhcHBDb21wb25lbnQuc2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzKFByZWZlcnJlZEFjdGlvblN0YXR1cy5BbHJlYWR5UGVyZm9ybWVkKTsgLy8gdG8gcHJldmVudCBvdGhlciBPUHMgb24gaGlnaGVyIGxldmVscyB0byBleGVjdXRlIHRoZSBzdW1tYXJ5IGFnYWluXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGVcblx0XHRcdFx0Y29uc3QgZW52aXJvbm1lbnRTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0XHRcdGlmICghZW52aXJvbm1lbnRTZXJ2aWNlPy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5TbWFydFN1bW1hcml6ZSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIlNtYXJ0IFN1bW1hcml6YXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYmVjYXVzZSBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIG5vdCBhdmFpbGFibGVcIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgU3VtbWFyeSBidXR0b25cblx0XHRcdFx0Y29uc3Qgc3VtbWFyaXplQnV0dG9uID0gdGhpcy5fZmluZFN1bW1hcml6ZUJ1dHRvbigpO1xuXG5cdFx0XHRcdGlmIChzdW1tYXJpemVCdXR0b24gJiYgc3VtbWFyaXplQnV0dG9uLmdldFZpc2libGUoKSAmJiBzdW1tYXJpemVCdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0c3VtbWFyaXplQnV0dG9uLmZpcmVQcmVzcygpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdFx0XHRcIlNtYXJ0IFN1bW1hcml6YXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgU3VtbWFyaXplIGJ1dHRvbiBpcyBlaXRoZXIgbm90IHZpc2libGUgb3Igbm90IGVuYWJsZWQgb3Igbm90IGZvdW5kLlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgc3RhcnR1cCBwYXJhbWV0ZXJzIG9yIHRyaWdnZXJpbmcgc21hcnQgc3VtbWFyeTpcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25QcmltYXJ5QWN0aW9uKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9LFxuXHRcdFx0bUNvbmRpdGlvbnM6IHtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW52b2tlcyB0aGUgcGFnZSBwcmltYXJ5IGFjdGlvbiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgQ3RybCtFbnRlciAoQ21kK0VudGVyIG9uIG1hY09TKS5cblx0XHRcdCAqL1xuXG5cdFx0XHRjb25zdCBwcmltYXJ5Q2FuZGlkYXRlID0gb0NvbnRyb2xsZXIuX2dldFByaW1hcnlBY3Rpb25TaG9ydGN1dENhbmRpZGF0ZXMob1ZpZXcpWzBdO1xuXG5cdFx0XHQvKiBCeSBkZXNpZ24sIHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgY2FuZGlkYXRlIGR1ZSB0byB0aGUgXCJzaW5nbGUgZW1waGFzaXMgcGVyIHBhZ2VcIiBydWxlLlxuXHRcdFx0ICAgSWYgYSBwcmltYXJ5LWVudGVyIHRhcmdldCBpcyBmb3VuZCwgaXQgbXVzdCBmdWxseSB0YWtlIG92ZXIgQ3RybC9DbWQrRW50ZXIuKi9cblxuXHRcdFx0aWYgKHByaW1hcnlDYW5kaWRhdGUpIHtcblx0XHRcdFx0aWYgKCFwcmltYXJ5Q2FuZGlkYXRlLmdldEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdC8vIFRha2Ugb3ZlciBDdHJsL0NtZCtFbnRlciwgYnV0IGRvIG5vdCB0cmlnZ2VyIGFueXRoaW5nIHdoZW4gdGhlIHByaW1hcnkgYWN0aW9uIGlzIGRpc2FibGVkLlxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJpbWFyeUNhbmRpZGF0ZS5pc0EoXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdFx0XHQocHJpbWFyeUNhbmRpZGF0ZSBhcyBCdXR0b24pLmZpcmVQcmVzcygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgocHJpbWFyeUNhbmRpZGF0ZSBhcyBNZW51QnV0dG9uKS5pc0EoXCJzYXAubS5NZW51QnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0KHByaW1hcnlDYW5kaWRhdGUgYXMgTWVudUJ1dHRvbikuZmlyZURlZmF1bHRBY3Rpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpVmlld0xldmVsID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuaGFuZGxlcnMub25DYWxsQWN0aW9uKG9WaWV3LCBzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0RG9jdW1lbnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob1ZpZXcpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQoKTtcblx0XHRcdH0gZWxzZSBpZiAoQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNYW5hZ2VzIHRoZSBjb250ZXh0IGNoYW5nZSBldmVudCBvbiB0aGUgdGFibGVzLlxuXHRcdCAqIFRoZSBmb2N1cyBpcyBzZXQgaWYgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBhbiBlZGl0RmxvdyBhY3Rpb24gYW5kXG5cdFx0ICogYW4gZXZlbnQgaXMgZmlyZWQgb24gdGhlIG9iamVjdFBhZ2UgbWVzc2FnZUJ1dHRvbi5cblx0XHQgKiBAcGFyYW0gdGhpcyBUaGUgb2JqZWN0UGFnZSBjb250cm9sbGVyXG5cdFx0ICogQHBhcmFtIGV2ZW50IFRoZSBVSTUgZXZlbnRcblx0XHQgKi9cblx0XHRhc3luYyBvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgZXZlbnQ6IFVJNUV2ZW50PHt9LCBUYWJsZUFQST4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlQ29udGV4dHMgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpPy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKTtcblxuXHRcdFx0aWYgKGN1cnJlbnRBY3Rpb25Qcm9taXNlICYmIHRhYmxlQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvblJlc3BvbnNlID0gYXdhaXQgY3VycmVudEFjdGlvblByb21pc2U7XG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3BvbnNlPy5jb250cm9sSWQgPT09IHRhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbkRhdGEgPSBhY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGtleXMgPSBhY3Rpb25SZXNwb25zZS5rZXlzO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbSA9XG5cdFx0XHRcdFx0XHRcdHRhYmxlQ29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHQuZmluZCgodGFibGVDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5cy5ldmVyeSgoa2V5OiBzdHJpbmcpID0+IHRhYmxlRGF0YVtrZXldID09PSBhY3Rpb25EYXRhW2tleV0pO1xuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0Py5nZXRJbmRleCgpID8/IC0xO1xuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW0gIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRpYWxvZyA9IEluc3RhbmNlTWFuYWdlci5nZXRPcGVuRGlhbG9ncygpLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKTtcblx0XHRcdFx0XHRcdFx0aWYgKGRpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZWQgYmVmb3JlIHNldCB0aGUgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cobmV3SXRlbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cobmV3SXRlbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2V9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHRvblRhYmxlQmluZGluZ1VwZGF0ZWQodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdGFzeW5jIG9uQ2FsbEFjdGlvbihcblx0XHRcdG9WaWV3OiBGRVZpZXcsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzPzogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcblx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRtb2RlbD86IE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJlcXVpcmVzTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHRcdGJTdGF0aWNBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cblx0XHRcdC8vIFdhaXQgZm9yIFZIIHZhbHVlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyB0aGUgYWN0aW9uXG5cdFx0XHRhd2FpdCBvQ29udHJvbGxlci5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKChyZXMpID0+IHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlcztcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvU291cmNlOiBDb250cm9sLFxuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQ6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4sXG5cdFx0XHRzQ29udHJvbENvbmZpZzogc3RyaW5nLFxuXHRcdFx0c0NvbGxlY3Rpb25QYXRoOiBzdHJpbmdcblx0XHQpOiB2b2lkIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpISxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0YU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKSxcblx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IHVua25vd24pIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIGltcGxpY2l0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIG5lZWRlZFxuXHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IGN1c3RvbURhdGEgPSBvU291cmNlLmdldEN1c3RvbURhdGEoKS5maW5kKChkYXRhKSA9PiBkYXRhLmdldEtleSgpID09PSBcIlZhbHVlUHJvcGVydHlQYXRoXCIpO1xuXHRcdFx0XHRpZiAoY3VzdG9tRGF0YSkge1xuXHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvQ29udHJvbGxlci5fZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YS5nZXRWYWx1ZSgpLFxuXHRcdFx0XHRcdFx0b1RhcmdldEluZm8uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBQcmV2ZW50IFZpZXdTdGF0ZSBmcm9tIG92ZXJyaWRpbmcgdGhlIHVzZXIncyBtYW51YWwgdGFiIHNlbGVjdGlvbi5cblx0XHRcdC8vIFRoaXMgaXMgaW1wb3J0YW50IGFmdGVyIGRpc2NhcmQgd2hlbiBWaWV3U3RhdGUuYXBwbHkgbWlnaHQgdHJ5IHRvIHJlc3RvcmUgdGhlIHByZXZpb3VzIHNlY3Rpb24uXG5cdFx0XHR0aGlzLnNraXBWaWV3U3RhdGVTZWN0aW9uUmVzdG9yZSA9IHRydWU7XG5cblx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdHRoaXMudGFyZ2V0U3ViU2VjdGlvbiA9IHN1YlNlY3Rpb247XG5cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKSAmJlxuXHRcdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbc3ViU2VjdGlvbl0sIHRydWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cblx0XHRcdC8vIERldGVybWluZSB0aGUgdGFyZ2V0IElEIGJhc2VkIG9uIGlucHV0IHR5cGVcblx0XHRcdGxldCB0YXJnZXRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHR5cGVvZiBvRGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHRhcmdldElkID0gb0RldGFpbENvbmZpZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFByaW9yaXR5OiBzdWJTZWN0aW9uSWQgPiBzZWN0aW9uSWRcblx0XHRcdFx0dGFyZ2V0SWQgPSBvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCA/PyBvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRhcmdldElkKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLmdldEV4dGVuc2lvbkFQSSgpLm5hdmlnYXRlVG9TdWJTZWN0aW9uKHRhcmdldElkKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2xvc2VDb2xsYWJvcmF0aW9uU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9zaG93Q29sbGFib3JhdGlvblN0cmlwXCIsIGZhbHNlKTtcblx0XHR9LFxuXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IGludGVybmFsTW9kZWxcblx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhO1xuXHRcdFx0Ly8gUmVtb3ZlIGNvbnRleHQgYm91bmQgbWVzc2FnZXMgYW5kIHNldCB0aGUgcHJvcGVydHkgdG8gZmFsc2UgZm9yIHRoZSBiYWNrZW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaW4gZWRpdCBtb2RlLlxuXHRcdFx0aWYgKCFiSXNJbkVkaXRNb2RlICYmIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dEJvdW5kTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcihcblx0XHRcdFx0XHRcdChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpICYmIG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGNvbnRleHRCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhjb250ZXh0Qm91bmRNZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlIQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBZ0I7RUFDbkQsTUFBTUUscUJBQXFCLEdBQUdELFNBQVMsQ0FBQ0UseUJBQXlCOztFQUVqRTtBQUNBO0FBQ0E7RUFGQSxJQUlNQyxvQkFBb0IsSUFBQUMsSUFBQSxHQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVB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