@sapui5/sap.fe.templates 1.103.0 → 1.104.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 (80) hide show
  1. package/package.json +3 -4
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -2
  4. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +60 -296
  5. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +52 -264
  6. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +367 -0
  7. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +259 -0
  8. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +16 -9
  9. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +15 -9
  10. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +19 -27
  11. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +23 -27
  12. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +1 -1
  13. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +19 -3
  14. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +75 -47
  15. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +1 -1
  16. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +149 -108
  17. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +56 -62
  18. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +132 -0
  19. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
  20. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +1 -1
  21. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +55 -29
  22. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +28 -29
  23. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +2 -14
  24. package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +5 -3
  25. package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
  26. package/src/sap/fe/templates/controls/Table.fragment.xml +1 -1
  27. package/src/sap/fe/templates/library.js +4 -3
  28. package/src/sap/fe/templates/library.ts +2 -0
  29. package/src/sap/fe/templates/messagebundle.properties +2 -5
  30. package/src/sap/fe/templates/messagebundle_ar.properties +3 -12
  31. package/src/sap/fe/templates/messagebundle_bg.properties +0 -9
  32. package/src/sap/fe/templates/messagebundle_ca.properties +2 -11
  33. package/src/sap/fe/templates/messagebundle_cs.properties +3 -12
  34. package/src/sap/fe/templates/messagebundle_cy.properties +0 -9
  35. package/src/sap/fe/templates/messagebundle_da.properties +3 -12
  36. package/src/sap/fe/templates/messagebundle_de.properties +2 -11
  37. package/src/sap/fe/templates/messagebundle_el.properties +2 -11
  38. package/src/sap/fe/templates/messagebundle_en.properties +2 -11
  39. package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -11
  40. package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -11
  41. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -11
  42. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -5
  43. package/src/sap/fe/templates/messagebundle_es.properties +0 -9
  44. package/src/sap/fe/templates/messagebundle_es_MX.properties +2 -11
  45. package/src/sap/fe/templates/messagebundle_et.properties +0 -9
  46. package/src/sap/fe/templates/messagebundle_fi.properties +2 -11
  47. package/src/sap/fe/templates/messagebundle_fr.properties +3 -12
  48. package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -11
  49. package/src/sap/fe/templates/messagebundle_hi.properties +2 -11
  50. package/src/sap/fe/templates/messagebundle_hr.properties +2 -11
  51. package/src/sap/fe/templates/messagebundle_hu.properties +2 -11
  52. package/src/sap/fe/templates/messagebundle_id.properties +2 -11
  53. package/src/sap/fe/templates/messagebundle_it.properties +2 -11
  54. package/src/sap/fe/templates/messagebundle_iw.properties +2 -11
  55. package/src/sap/fe/templates/messagebundle_ja.properties +2 -11
  56. package/src/sap/fe/templates/messagebundle_kk.properties +2 -11
  57. package/src/sap/fe/templates/messagebundle_ko.properties +2 -11
  58. package/src/sap/fe/templates/messagebundle_lt.properties +2 -11
  59. package/src/sap/fe/templates/messagebundle_lv.properties +0 -9
  60. package/src/sap/fe/templates/messagebundle_ms.properties +2 -11
  61. package/src/sap/fe/templates/messagebundle_nl.properties +2 -11
  62. package/src/sap/fe/templates/messagebundle_no.properties +0 -9
  63. package/src/sap/fe/templates/messagebundle_pl.properties +0 -9
  64. package/src/sap/fe/templates/messagebundle_pt.properties +2 -11
  65. package/src/sap/fe/templates/messagebundle_pt_PT.properties +2 -11
  66. package/src/sap/fe/templates/messagebundle_ro.properties +0 -9
  67. package/src/sap/fe/templates/messagebundle_ru.properties +2 -11
  68. package/src/sap/fe/templates/messagebundle_sh.properties +2 -11
  69. package/src/sap/fe/templates/messagebundle_sk.properties +2 -11
  70. package/src/sap/fe/templates/messagebundle_sl.properties +2 -11
  71. package/src/sap/fe/templates/messagebundle_sv.properties +2 -11
  72. package/src/sap/fe/templates/messagebundle_th.properties +1 -10
  73. package/src/sap/fe/templates/messagebundle_tr.properties +2 -11
  74. package/src/sap/fe/templates/messagebundle_uk.properties +2 -11
  75. package/src/sap/fe/templates/messagebundle_vi.properties +0 -9
  76. package/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -9
  77. package/src/sap/fe/templates/messagebundle_zh_TW.properties +2 -11
  78. package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.js +0 -103
  79. package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.ts +0 -97
  80. package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +0 -27
@@ -45,11 +45,11 @@ import ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
45
45
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
46
46
  import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
47
47
  import type ResourceModel from "sap/ui/model/resource/ResourceModel";
48
+ import type BreadCrumbs from "sap/uxap/BreadCrumbs";
48
49
  import type ObjectPageDynamicHeaderTitle from "sap/uxap/ObjectPageDynamicHeaderTitle";
49
50
  import type ObjectPageLayout from "sap/uxap/ObjectPageLayout";
50
51
  import type ObjectPageSection from "sap/uxap/ObjectPageSection";
51
52
  import type ObjectPageSubSection from "sap/uxap/ObjectPageSubSection";
52
- import DraftHandler from "./handler/DraftHandler";
53
53
  import IntentBasedNavigationOverride from "./overrides/IntentBasedNavigation";
54
54
  import InternalRoutingOverride from "./overrides/InternalRouting";
55
55
  import MessageHandlerOverride from "./overrides/MessageHandler";
@@ -477,40 +477,35 @@ class ObjectPageController extends PageController {
477
477
  * @param oTable
478
478
  * @param oListBinding
479
479
  */
480
- function enableFastCreationRow(oTable: any, oListBinding: any) {
480
+ async function enableFastCreationRow(oTable: any, oListBinding: any) {
481
481
  const oFastCreationRow = oTable.getCreationRow();
482
482
  let oFastCreationListBinding, oFastCreationContext;
483
483
 
484
484
  if (oFastCreationRow) {
485
- oFinalUIState
486
- .then(function () {
487
- if (oFastCreationRow.getModel("ui").getProperty("/isEditable")) {
488
- oFastCreationListBinding = oModel.bindList(oListBinding.getPath(), oListBinding.getContext(), [], [], {
489
- $$updateGroupId: "doNotSubmit",
490
- $$groupId: "doNotSubmit"
491
- });
492
- // Workaround suggested by OData model v4 colleagues
493
- oFastCreationListBinding.refreshInternal = function () {
494
- /* do nothing */
495
- };
496
- /*
497
- oFastCreationListBinding.hasPendingChanges = function() {
498
- return false;
499
- };
500
- */
501
-
502
- oFastCreationContext = oFastCreationListBinding.create();
503
- oFastCreationRow.setBindingContext(oFastCreationContext);
504
-
505
- // this is needed to avoid console error
506
- oFastCreationContext.created().catch(function () {
507
- Log.trace("transient fast creation context deleted");
508
- });
485
+ try {
486
+ await oFinalUIState;
487
+ if (oFastCreationRow.getModel("ui").getProperty("/isEditable")) {
488
+ oFastCreationListBinding = oModel.bindList(oListBinding.getPath(), oListBinding.getContext(), [], [], {
489
+ $$updateGroupId: "doNotSubmit",
490
+ $$groupId: "doNotSubmit"
491
+ });
492
+ // Workaround suggested by OData model v4 colleagues
493
+ oFastCreationListBinding.refreshInternal = function () {
494
+ /* do nothing */
495
+ };
496
+ oFastCreationContext = oFastCreationListBinding.create();
497
+ oFastCreationRow.setBindingContext(oFastCreationContext);
498
+
499
+ // this is needed to avoid console error
500
+ try {
501
+ await oFastCreationContext.created();
502
+ } catch (e) {
503
+ Log.trace("transient fast creation context deleted");
509
504
  }
510
- })
511
- .catch(function (oError: any) {
512
- Log.error("Error while computing the final UI state", oError);
513
- });
505
+ }
506
+ } catch (oError: any) {
507
+ Log.error("Error while computing the final UI state", oError);
508
+ }
514
509
  }
515
510
  }
516
511
 
@@ -763,7 +758,7 @@ class ObjectPageController extends PageController {
763
758
  });
764
759
  }
765
760
 
766
- _saveDocument(oContext: any) {
761
+ async _saveDocument(oContext: any) {
767
762
  const oModel = this.getView().getModel("ui"),
768
763
  aWaitCreateDocuments: any[] = [];
769
764
  // indicates if we are creating a new row in the OP
@@ -792,31 +787,33 @@ class ObjectPageController extends PageController {
792
787
  );
793
788
  }
794
789
  });
795
- return Promise.all(aWaitCreateDocuments)
796
- .then((aBindings: any[]) => {
797
- const mParameters = {
798
- bExecuteSideEffectsOnError: bExecuteSideEffectsOnError,
799
- bindings: aBindings
800
- };
801
- // We need to either reject or resolve a promise here and return it since this save
802
- // function is not only called when pressing the save button in the footer, but also
803
- // when the user selects create or save in a dataloss popup.
804
- // The logic of the dataloss popup needs to detect if the save had errors or not in order
805
- // to decide if the subsequent action - like a back navigation - has to be executed or not.
806
- return this.editFlow.saveDocument(oContext, mParameters).catch((...args) => {
807
- // If the saveDocument in editFlow returns errors we need
808
- // to show the message popover here and ensure that the
809
- // dataloss logic does not perform the follow up function
810
- // like e.g. a back navigation hence we return a promise and reject it
811
- this._showMessagePopover(...args);
812
- return Promise.reject(...args);
813
- });
814
- })
815
- .finally(function () {
816
- if (BusyLocker.isLocked(oModel)) {
817
- BusyLocker.unlock(oModel);
818
- }
819
- });
790
+
791
+ try {
792
+ const aBindings = await Promise.all(aWaitCreateDocuments);
793
+ const mParameters = {
794
+ bExecuteSideEffectsOnError: bExecuteSideEffectsOnError,
795
+ bindings: aBindings
796
+ };
797
+ // We need to either reject or resolve a promise here and return it since this save
798
+ // function is not only called when pressing the save button in the footer, but also
799
+ // when the user selects create or save in a dataloss popup.
800
+ // The logic of the dataloss popup needs to detect if the save had errors or not in order
801
+ // to decide if the subsequent action - like a back navigation - has to be executed or not.
802
+ try {
803
+ await this.editFlow.saveDocument(oContext, mParameters);
804
+ } catch (error: any) {
805
+ // If the saveDocument in editFlow returns errors we need
806
+ // to show the message popover here and ensure that the
807
+ // dataloss logic does not perform the follow up function
808
+ // like e.g. a back navigation hence we return a promise and reject it
809
+ this._showMessagePopover(error);
810
+ throw error;
811
+ }
812
+ } finally {
813
+ if (BusyLocker.isLocked(oModel)) {
814
+ BusyLocker.unlock(oModel);
815
+ }
816
+ }
820
817
  }
821
818
 
822
819
  _manageCollaboration() {
@@ -836,9 +833,6 @@ class ObjectPageController extends PageController {
836
833
  return this.editFlow.applyDocument(oContext).catch(() => this._showMessagePopover());
837
834
  }
838
835
 
839
- _showSwitchDraftAndActivePopover = DraftHandler.showSwitchDraftAndActivePopover;
840
- _switchDraftAndActivePopoverListSelect = DraftHandler.switchDraftAndActivePopoverListSelect;
841
-
842
836
  _updateRelatedApps() {
843
837
  const oObjectPage = this._getObjectPageLayoutControl();
844
838
  if (CommonUtils.resolveStringtoBoolean(oObjectPage.data("showRelatedApps"))) {
@@ -1053,13 +1047,13 @@ class ObjectPageController extends PageController {
1053
1047
  * @ui5-restricted
1054
1048
  * @experimental
1055
1049
  */
1056
- async _setBreadcrumbLinks(oSource: any) {
1050
+ async _setBreadcrumbLinks(oSource: BreadCrumbs) {
1057
1051
  const oContext = oSource.getBindingContext(),
1058
1052
  oAppComponent = this.getAppComponent(),
1059
1053
  aPromises: Promise<void>[] = [],
1060
1054
  aSkipParameterized: any[] = [],
1061
- sNewPath = oContext && oContext.getPath(),
1062
- aPathParts = sNewPath && sNewPath.split("/"),
1055
+ sNewPath = oContext?.getPath(),
1056
+ aPathParts = sNewPath?.split("/") ?? [],
1063
1057
  oMetaModel = oAppComponent && oAppComponent.getMetaModel();
1064
1058
  let sPath = "";
1065
1059
  aPathParts.shift();
@@ -0,0 +1,132 @@
1
+ import { BuildingBlockBase, defineBuildingBlock, xmlAttribute } from "sap/fe/core/buildingBlocks/BuildingBlock";
2
+ import CommonUtils from "sap/fe/core/CommonUtils";
3
+ import { Entity, UI } from "sap/fe/core/converters/helpers/BindingHelper";
4
+ import { and, ifElse, not, pathInModel } from "sap/fe/core/helpers/BindingToolkit";
5
+ import { defineReference, PropertiesOf } from "sap/fe/core/helpers/ClassSupport";
6
+ import { Ref } from "sap/fe/core/jsx-runtime/jsx";
7
+ import PageController from "sap/fe/core/PageController";
8
+ import { getSwitchDraftAndActiveVisibility } from "sap/fe/templates/ObjectPage/ObjectPageTemplating";
9
+ import Button from "sap/m/Button";
10
+ import ResponsivePopover from "sap/m/ResponsivePopover";
11
+ import SelectList from "sap/m/SelectList";
12
+ import Event from "sap/ui/base/Event";
13
+ import { PropertyBindingInfo } from "sap/ui/base/ManagedObject";
14
+ import InvisibleText from "sap/ui/core/InvisibleText";
15
+ import Item from "sap/ui/core/Item";
16
+ import View from "sap/ui/core/mvc/View";
17
+ import Context from "sap/ui/model/Context";
18
+ import type { V4Context } from "types/extension_types";
19
+
20
+ @defineBuildingBlock({ name: "DraftHandlerButton", namespace: "sap.fe.templates.ObjectPage.components", isRuntime: true })
21
+ export default class DraftHandlerButton extends BuildingBlockBase {
22
+ private _containingView!: View;
23
+ private popover?: ResponsivePopover;
24
+
25
+ private readonly SWITCH_TO_DRAFT_KEY = "switchToDraft";
26
+ private readonly SWITCH_TO_ACTIVE_KEY = "switchToActive";
27
+
28
+ constructor(oProps: PropertiesOf<DraftHandlerButton>) {
29
+ super(oProps);
30
+ }
31
+
32
+ @xmlAttribute({ type: "string" })
33
+ public id!: string;
34
+
35
+ @xmlAttribute({ type: "sap.ui.model.Context" })
36
+ public contextPath!: Context;
37
+
38
+ @defineReference()
39
+ public switchToActiveRef!: Ref<Item>;
40
+ @defineReference()
41
+ public switchToDraftRef!: Ref<Item>;
42
+
43
+ private initialSelectedKey: string = this.SWITCH_TO_ACTIVE_KEY;
44
+
45
+ handleSelectedItemChange = (event: Event) => {
46
+ const selectedItemKey = event.getParameter("item").getProperty("key");
47
+ if (selectedItemKey !== this.initialSelectedKey) {
48
+ (this._containingView.getController() as PageController).editFlow.toggleDraftActive(
49
+ this._containingView.getBindingContext() as V4Context
50
+ );
51
+ }
52
+ if (this.popover) {
53
+ this.popover.close();
54
+ this.popover.destroy();
55
+ delete this.popover;
56
+ }
57
+ };
58
+
59
+ openSwitchActivePopover = (event: Event) => {
60
+ const sourceControl = event.getSource();
61
+ const containingView = CommonUtils.getTargetView(sourceControl);
62
+
63
+ const context: V4Context = containingView.getBindingContext();
64
+ const isActiveEntity = context.getObject().IsActiveEntity;
65
+ this.initialSelectedKey = isActiveEntity ? this.SWITCH_TO_ACTIVE_KEY : this.SWITCH_TO_DRAFT_KEY;
66
+ this.popover = this.createPopover();
67
+
68
+ this._containingView = containingView;
69
+ containingView.addDependent(this.popover);
70
+ this.popover.openBy(sourceControl);
71
+ this.popover.attachEventOnce("afterOpen", () => {
72
+ if (isActiveEntity) {
73
+ this.switchToDraftRef.current?.focus();
74
+ } else {
75
+ this.switchToActiveRef.current?.focus();
76
+ }
77
+ });
78
+ return this.popover;
79
+ };
80
+
81
+ createPopover(): ResponsivePopover {
82
+ return (
83
+ <ResponsivePopover
84
+ showHeader={false}
85
+ contentWidth={"15.625rem"}
86
+ verticalScrolling={false}
87
+ class={"sapUiNoContentPadding"}
88
+ placement={"Bottom"}
89
+ >
90
+ <SelectList selectedKey={this.initialSelectedKey} itemPress={this.handleSelectedItemChange}>
91
+ <Item
92
+ text={"{sap.fe.i18n>C_COMMON_OBJECT_PAGE_DISPLAY_DRAFT_MIT}"}
93
+ key={this.SWITCH_TO_DRAFT_KEY}
94
+ ref={this.switchToDraftRef}
95
+ />
96
+ <Item
97
+ text={"{sap.fe.i18n>C_COMMON_OBJECT_PAGE_DISPLAY_SAVED_VERSION_MIT}"}
98
+ key={this.SWITCH_TO_ACTIVE_KEY}
99
+ ref={this.switchToActiveRef}
100
+ />
101
+ </SelectList>
102
+ </ResponsivePopover>
103
+ );
104
+ }
105
+
106
+ render() {
107
+ const textValue = ifElse(
108
+ and(not(UI.IsEditable), not(UI.IsCreateMode), Entity.HasDraft),
109
+ pathInModel("C_COMMON_OBJECT_PAGE_SAVED_VERSION_BUT", "sap.fe.i18n"),
110
+ pathInModel("C_COMMON_OBJECT_PAGE_DRAFT_BUT", "sap.fe.i18n")
111
+ ) as PropertyBindingInfo;
112
+ const visible = getSwitchDraftAndActiveVisibility(this.contextPath.getObject("@"));
113
+ return (
114
+ <>
115
+ <Button
116
+ id="fe::StandardAction::SwitchDraftAndActiveObject"
117
+ text={textValue}
118
+ visible={visible}
119
+ icon="sap-icon://navigation-down-arrow"
120
+ iconFirst={false}
121
+ type="Transparent"
122
+ press={this.openSwitchActivePopover}
123
+ ariaDescribedBy={["fe::StandardAction::SwitchDraftAndActiveObject::AriaTextDraftSwitcher"]}
124
+ ></Button>
125
+ <InvisibleText
126
+ text="{sap.fe.i18n>T_HEADER_DATAPOINT_TITLE_DRAFT_SWITCHER_ARIA_BUTTON}"
127
+ id="fe::StandardAction::SwitchDraftAndActiveObject::AriaTextDraftSwitcher"
128
+ />
129
+ </>
130
+ );
131
+ }
132
+ }
@@ -55,4 +55,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/navigation/SelectionVariant"],
55
55
  };
56
56
  return IntentBasedNavigationOverride;
57
57
  }, false);
58
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVudEJhc2VkTmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6WyJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm9UYXJnZXRJbmZvIiwib1ZpZXciLCJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvRXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dCIsImdldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicGFnZSIsIm9QYWdlQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsIm9QYWdlQ29udGV4dERhdGEiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsImdldE9iamVjdCIsIm9QYWdlRGF0YSIsInByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwib1BhZ2VQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwicHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsIm9QYWdlU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZW1hbnRpY0F0dHJpYnV0ZXMiLCJvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsImFTZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwic1Byb3BlcnR5TmFtZSIsImdldFNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJzZXRQcm9wZXJ0eSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7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cyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5cbmNvbnN0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlID0ge1xuXHRhZGFwdE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAodGhpczogSW50ZW50QmFzZWROYXZpZ2F0aW9uLCBvU2VsZWN0aW9uVmFyaWFudDogYW55LCBvVGFyZ2V0SW5mbzogYW55KSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKSxcblx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9FeHRlcm5hbE5hdmlnYXRpb25Db250ZXh0ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdGlmIChvRXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dC5wYWdlKSB7XG5cdFx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob1BhZ2VDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBvUGFnZUNvbnRleHREYXRhID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSwgc01ldGFQYXRoKSxcblx0XHRcdFx0b1BhZ2VEYXRhID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5wcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihvUGFnZUNvbnRleHREYXRhLCBvUGFnZUNvbnRleHQpLFxuXHRcdFx0XHRvUGFnZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvUGFnZURhdGEucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCxcblx0XHRcdFx0Ly8gVE9ETzogbW92ZSB0aGlzIGFsc28gaW50byB0aGUgaW50ZW50IGJhc2VkIG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cblx0XHRcdFx0b1BhZ2VTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIG9QYWdlRGF0YS5zZW1hbnRpY0F0dHJpYnV0ZXMsIG9WaWV3KSxcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdFx0Y29uc3QgYVNlbGVjdE9wdGlvblByb3BlcnR5TmFtZXMgPSBvUGFnZVNWLmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHRhU2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlOYW1lOiBhbnkpIHtcblx0XHRcdFx0aWYgKCFvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1Byb3BlcnR5TmFtZSkpIHtcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUsIG9QYWdlU1YuZ2V0U2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPbmx5IHdoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgZG8gd2UgbmVlZCB0byBhZGQgc29tZXRoaW5nXG5cdFx0XHRcdFx0Ly8gaW4gYWxsIG90aGVyIGNhc2UgdGhlIGNvbmZsaWN0ZWQgcGF0aHMgYXJlIGFscmVhZHkgYWRkZWQgaW4gcHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb25cblx0XHRcdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBpbmNvbWluZyBjb250ZXh0IHRoZW4gYWRkIHBhdGggZnJvbSBpbmNvbWluZyBjb250ZXh0IHRvIFNWXG5cdFx0XHRcdFx0Ly8gVE8tRE8uIFJlbW92ZSB0aGUgY2hlY2sgZm9yIG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IG9uY2Ugc2VtYW50aWMgbGlua3MgZnVuY3Rpb25hbGl0eSBpcyBjb3ZlcmVkXG5cdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ICYmIHNQcm9wZXJ0eU5hbWUgaW4gb1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oXG5cdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NQcm9wZXJ0eU5hbWVdLFxuXHRcdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1Byb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIHBhZ2UgY29udGV4dCB0aGVuIGFkZCBwYXRoIGZyb20gcGFnZSBjb250ZXh0IHRvIFNWXG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eU5hbWUgaW4gb1BhZ2VQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdFx0XHRvUGFnZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc1Byb3BlcnR5TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9QYWdlU1YuZ2V0U2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvLyByZW1vdmUgbm9uIHB1YmxpYyBwcm9wZXJ0aWVzIGZyb20gdGFyZ2V0SW5mb1xuXHRcdFx0ZGVsZXRlIG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBcInBhZ2VcIjogdHJ1ZSB9KTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGU7XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVudEJhc2VkTmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6WyJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm9UYXJnZXRJbmZvIiwib1ZpZXciLCJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvRXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dCIsImdldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicGFnZSIsIm9QYWdlQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsIm9QYWdlQ29udGV4dERhdGEiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsImdldE9iamVjdCIsIm9QYWdlRGF0YSIsInByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwib1BhZ2VQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwicHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsIm9QYWdlU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZW1hbnRpY0F0dHJpYnV0ZXMiLCJvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsImFTZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwic1Byb3BlcnR5TmFtZSIsImdldFNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJzZXRQcm9wZXJ0eSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7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bHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSA9IHtcblx0YWRhcHROYXZpZ2F0aW9uQ29udGV4dDogZnVuY3Rpb24gKHRoaXM6IEludGVudEJhc2VkTmF2aWdhdGlvbiwgb1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgb1RhcmdldEluZm86IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcixcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvRXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIik7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRpZiAob0V4dGVybmFsTmF2aWdhdGlvbkNvbnRleHQucGFnZSkge1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0LFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9QYWdlQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0RGF0YSA9IG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksIHNNZXRhUGF0aCksXG5cdFx0XHRcdG9QYWdlRGF0YSA9IG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb24ob1BhZ2VDb250ZXh0RGF0YSwgb1BhZ2VDb250ZXh0KSxcblx0XHRcdFx0b1BhZ2VQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID0gb1BhZ2VEYXRhLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QsXG5cdFx0XHRcdC8vIFRPRE86IG1vdmUgdGhpcyBhbHNvIGludG8gdGhlIGludGVudCBiYXNlZCBuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdFx0XHRcdG9QYWdlU1Y6IGFueSA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIG9QYWdlRGF0YS5zZW1hbnRpY0F0dHJpYnV0ZXMsIG9WaWV3KSxcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdFx0Y29uc3QgYVNlbGVjdE9wdGlvblByb3BlcnR5TmFtZXMgPSBvUGFnZVNWLmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHRhU2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlOYW1lOiBhbnkpIHtcblx0XHRcdFx0aWYgKCFvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1Byb3BlcnR5TmFtZSkpIHtcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUsIG9QYWdlU1YuZ2V0U2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPbmx5IHdoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgZG8gd2UgbmVlZCB0byBhZGQgc29tZXRoaW5nXG5cdFx0XHRcdFx0Ly8gaW4gYWxsIG90aGVyIGNhc2UgdGhlIGNvbmZsaWN0ZWQgcGF0aHMgYXJlIGFscmVhZHkgYWRkZWQgaW4gcHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb25cblx0XHRcdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBpbmNvbWluZyBjb250ZXh0IHRoZW4gYWRkIHBhdGggZnJvbSBpbmNvbWluZyBjb250ZXh0IHRvIFNWXG5cdFx0XHRcdFx0Ly8gVE8tRE8uIFJlbW92ZSB0aGUgY2hlY2sgZm9yIG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IG9uY2Ugc2VtYW50aWMgbGlua3MgZnVuY3Rpb25hbGl0eSBpcyBjb3ZlcmVkXG5cdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ICYmIHNQcm9wZXJ0eU5hbWUgaW4gb1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oXG5cdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NQcm9wZXJ0eU5hbWVdLFxuXHRcdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1Byb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIHBhZ2UgY29udGV4dCB0aGVuIGFkZCBwYXRoIGZyb20gcGFnZSBjb250ZXh0IHRvIFNWXG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eU5hbWUgaW4gb1BhZ2VQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdFx0XHRvUGFnZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc1Byb3BlcnR5TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9QYWdlU1YuZ2V0U2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvLyByZW1vdmUgbm9uIHB1YmxpYyBwcm9wZXJ0aWVzIGZyb20gdGFyZ2V0SW5mb1xuXHRcdFx0ZGVsZXRlIG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBcInBhZ2VcIjogdHJ1ZSB9KTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGU7XG4iXX0=
@@ -21,7 +21,7 @@ const IntentBasedNavigationOverride = {
21
21
  oPageData = oController._intentBasedNavigation.prepareContextForExternalNavigation(oPageContextData, oPageContext),
22
22
  oPagePropertiesWithoutConflict = oPageData.propertiesWithoutConflict,
23
23
  // TODO: move this also into the intent based navigation controller extension
24
- oPageSV = CommonUtils.addPageContextToSelectionVariant(new SelectionVariant(), oPageData.semanticAttributes, oView),
24
+ oPageSV: any = CommonUtils.addPageContextToSelectionVariant(new SelectionVariant(), oPageData.semanticAttributes, oView),
25
25
  oPropertiesWithoutConflict = oTargetInfo.propertiesWithoutConflict;
26
26
  const aSelectOptionPropertyNames = oPageSV.getSelectOptionsPropertyNames();
27
27
  aSelectOptionPropertyNames.forEach(function (sPropertyName: any) {
@@ -5,6 +5,20 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticKeyHelper", "sap/ui/core/routing/HashChanger", "sap/ui/model/Filter", "sap/ui/model/FilterOperator"], function (Log, ModelHelper, SemanticKeyHelper, HashChanger, Filter, FilterOperator) {
6
6
  "use strict";
7
7
 
8
+ function _catch(body, recover) {
9
+ try {
10
+ var result = body();
11
+ } catch (e) {
12
+ return recover(e);
13
+ }
14
+
15
+ if (result && result.then) {
16
+ return result.then(void 0, recover);
17
+ }
18
+
19
+ return result;
20
+ }
21
+
8
22
  var bGlobalIsStickySupported;
9
23
 
10
24
  function createFilterToFetchActiveContext(mKeyValues, bIsActiveEntityDefined) {
@@ -276,38 +290,50 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/h
276
290
 
277
291
  var ShareExtensionOverride = {
278
292
  adaptShareMetadata: function (oShareMetadata) {
279
- var _this = this;
280
-
281
- var oContext = this.base.getView().getBindingContext(),
282
- oUIModel = this.base.getView().getModel("ui"),
283
- bIsEditable = oUIModel.getProperty("/isEditable");
284
- return fetchActiveContextPaths(oContext, this.base.getView().getController()).then(function (aActiveContextPaths) {
285
- var oPageTitleInfo = _this.base.getView().getController()._getPageTitleInformation();
286
-
287
- return Promise.all([getJamUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths), getShareUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths), getShareEmailUrl()]).then(function (oData) {
288
- var sTitle = oPageTitleInfo.title;
289
- var sObjectSubtitle = oPageTitleInfo.subtitle ? oPageTitleInfo.subtitle.toString() : "";
290
-
291
- if (sObjectSubtitle) {
292
- sTitle = "".concat(sTitle, " - ").concat(sObjectSubtitle);
293
- }
294
-
295
- oShareMetadata.tile = {
296
- title: oPageTitleInfo.title,
297
- subtitle: sObjectSubtitle
298
- };
299
- oShareMetadata.email.title = sTitle;
300
- oShareMetadata.title = sTitle;
301
- oShareMetadata.jam.url = oData[0];
302
- oShareMetadata.url = oData[1];
303
- oShareMetadata.email.url = oData[2];
304
- return oShareMetadata;
305
- }).catch(function (error) {
293
+ try {
294
+ var _this2 = this;
295
+
296
+ var oContext = _this2.base.getView().getBindingContext();
297
+
298
+ var oUIModel = _this2.base.getView().getModel("ui");
299
+
300
+ var bIsEditable = oUIModel.getProperty("/isEditable");
301
+
302
+ var _temp2 = _catch(function () {
303
+ return Promise.resolve(fetchActiveContextPaths(oContext, _this2.base.getView().getController())).then(function (aActiveContextPaths) {
304
+ var oPageTitleInfo = _this2.base.getView().getController()._getPageTitleInformation();
305
+
306
+ return Promise.resolve(Promise.all([getJamUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths), getShareUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths), getShareEmailUrl()])).then(function (oData) {
307
+ var sTitle = oPageTitleInfo.title;
308
+ var sObjectSubtitle = oPageTitleInfo.subtitle ? oPageTitleInfo.subtitle.toString() : "";
309
+
310
+ if (sObjectSubtitle) {
311
+ sTitle = "".concat(sTitle, " - ").concat(sObjectSubtitle);
312
+ }
313
+
314
+ oShareMetadata.tile = {
315
+ title: oPageTitleInfo.title,
316
+ subtitle: sObjectSubtitle
317
+ };
318
+ oShareMetadata.email.title = sTitle;
319
+ oShareMetadata.title = sTitle;
320
+ oShareMetadata.jam.url = oData[0];
321
+ oShareMetadata.url = oData[1];
322
+ oShareMetadata.email.url = oData[2];
323
+ });
324
+ });
325
+ }, function (error) {
306
326
  Log.error(error);
307
327
  });
308
- });
328
+
329
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {
330
+ return oShareMetadata;
331
+ }) : oShareMetadata);
332
+ } catch (e) {
333
+ return Promise.reject(e);
334
+ }
309
335
  }
310
336
  };
311
337
  return ShareExtensionOverride;
312
338
  }, false);
313
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNoYXJlLnRzIl0sIm5hbWVzIjpbImJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCIsImNyZWF0ZUZpbHRlclRvRmV0Y2hBY3RpdmVDb250ZXh0IiwibUtleVZhbHVlcyIsImJJc0FjdGl2ZUVudGl0eURlZmluZWQiLCJhS2V5cyIsIk9iamVjdCIsImtleXMiLCJhRmlsdGVycyIsIm1hcCIsInNLZXkiLCJzVmFsdWUiLCJ1bmRlZmluZWQiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwib0FjdGl2ZUZpbHRlciIsImZpbHRlcnMiLCJhbmQiLCJwdXNoIiwiZ2V0QWN0aXZlQ29udGV4dFBhdGgiLCJvQ29udHJvbGxlciIsInNQYWdlRW50aXR5TmFtZSIsIm9GaWx0ZXIiLCJvTGlzdEJpbmRpbmciLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRNb2RlbCIsImJpbmRMaXN0IiwicmVxdWVzdENvbnRleHRzIiwidGhlbiIsIm9Db250ZXh0cyIsImxlbmd0aCIsImdldFBhdGgiLCJnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzIiwib0NvbnRleHQiLCJvRW50aXR5U2V0IiwiYUFjdGl2ZUNvbnRleHRwcm9taXNlcyIsImFQYWdlcyIsInNNZXRhUGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImFNZXRhUGF0aEFycmF5Iiwic3BsaXQiLCJzQ3VycmVudEhhc2hOb1BhcmFtcyIsIkhhc2hDaGFuZ2VyIiwiZ2V0SW5zdGFuY2UiLCJnZXRIYXNoIiwiYUN1cnJlbnRIYXNoQXJyYXkiLCJvUGFnZU1hcCIsImFQYWdlSGFzaEFycmF5IiwiZm9yRWFjaCIsInNQYWdlSGFzaCIsImFLZXlWYWx1ZXMiLCJzUGFnZUhhc2hOYW1lIiwiaSIsInNLZXlBc3NpZ25tZW50IiwiYVBhcnRzIiwic0tleVZhbHVlIiwib01ldGFNb2RlbCIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwiam9pbiIsImxhc3RJbmRleE9mIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwib1BhZ2VFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblBhdGgiLCJvUGFnZUluZm8iLCJzUGFnZUVudGl0eVNldE5hbWUiLCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsInBhZ2VFbnRpdHlOYW1lIiwiZ2V0QWN0aXZlQ29udGV4dFBhdGhzIiwic1Jvb3RFbnRpdHlOYW1lIiwic3Vic3RyIiwib1BhZ2VDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImFEYXRhIiwiYUFjdGl2ZUNvbnRleHRQYXRocyIsInNBY3RpdmVDb250ZXh0UGF0aCIsInNOYXZpZ2F0aW9Qcm9wZXJ0eSIsInNFbnRpdHlTZXROYW1lIiwidmFsdWVzIiwicmVwbGFjZSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiaW5mbyIsInJlc29sdmUiLCJmZXRjaEFjdGl2ZUNvbnRleHRQYXRocyIsIm9Qcm9taXNlIiwiYVNlbWFudGljS2V5cyIsIm9Nb2RlbCIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY0tleXMiLCJvVmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImdldFNoYXJlVXJsIiwiYklzRWRpdGFibGUiLCJiSXNTdGlja3lTdXBwb3J0ZWQiLCJzU2hhcmVVcmwiLCJzSGFzaCIsInNCYXNlUGF0aCIsImhyZWZGb3JBcHBTcGVjaWZpY0hhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJnZXRTaGFyZUVtYWlsVXJsIiwib1VTaGVsbENvbnRhaW5lciIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsImdldEZMUFVybEFzeW5jIiwic0ZMUFVybCIsInNFcnJvciIsImVycm9yIiwiZG9jdW1lbnQiLCJVUkwiLCJnZXRKYW1VcmwiLCJiSXNFZGl0TW9kZSIsInNKYW1VcmwiLCJydW5uaW5nSW5JZnJhbWUiLCJnZXRGTFBVcmwiLCJzVXJsIiwib3JpZ2luIiwicGF0aG5hbWUiLCJTaGFyZUV4dGVuc2lvbk92ZXJyaWRlIiwiYWRhcHRTaGFyZU1ldGFkYXRhIiwib1NoYXJlTWV0YWRhdGEiLCJiYXNlIiwib1VJTW9kZWwiLCJnZXRQcm9wZXJ0eSIsImdldENvbnRyb2xsZXIiLCJvUGFnZVRpdGxlSW5mbyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9EYXRhIiwic1RpdGxlIiwidGl0bGUiLCJzT2JqZWN0U3VidGl0bGUiLCJzdWJ0aXRsZSIsInRvU3RyaW5nIiwidGlsZSIsImVtYWlsIiwiamFtIiwidXJsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBT0EsTUFBSUEsd0JBQUo7O0FBRUEsV0FBU0MsZ0NBQVQsQ0FBMENDLFVBQTFDLEVBQTJEQyxzQkFBM0QsRUFBd0Y7QUFDdkYsUUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWUosVUFBWixDQUFkO0FBRUEsUUFBTUssUUFBUSxHQUFHSCxLQUFLLENBQUNJLEdBQU4sQ0FBVSxVQUFVQyxJQUFWLEVBQXdCO0FBQ2xELFVBQU1DLE1BQU0sR0FBR1IsVUFBVSxDQUFDTyxJQUFELENBQXpCOztBQUNBLFVBQUlDLE1BQU0sS0FBS0MsU0FBZixFQUEwQjtBQUN6QixlQUFPLElBQUlDLE1BQUosQ0FBV0gsSUFBWCxFQUFpQkksY0FBYyxDQUFDQyxFQUFoQyxFQUFvQ0osTUFBcEMsQ0FBUDtBQUNBO0FBQ0QsS0FMZ0IsQ0FBakI7O0FBT0EsUUFBSVAsc0JBQUosRUFBNEI7QUFDM0IsVUFBTVksYUFBYSxHQUFHLElBQUlILE1BQUosQ0FBVztBQUNoQ0ksUUFBQUEsT0FBTyxFQUFFLENBQUMsSUFBSUosTUFBSixDQUFXLDhCQUFYLEVBQTJDQyxjQUFjLENBQUNDLEVBQTFELEVBQThELElBQTlELENBQUQsQ0FEdUI7QUFFaENHLFFBQUFBLEdBQUcsRUFBRTtBQUYyQixPQUFYLENBQXRCO0FBS0FWLE1BQUFBLFFBQVEsQ0FBQ1csSUFBVCxDQUFjSCxhQUFkO0FBQ0E7O0FBRUQsV0FBTyxJ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LGVBQUosRUFBcUI7QUFDcEJGLFlBQUFBLE1BQU0sYUFBTUEsTUFBTixnQkFBa0JFLGVBQWxCLENBQU47QUFDQTs7QUFDRFYsVUFBQUEsY0FBYyxDQUFDYSxJQUFmLEdBQXNCO0FBQ3JCSixZQUFBQSxLQUFLLEVBQUVKLGNBQWMsQ0FBQ0ksS0FERDtBQUVyQkUsWUFBQUEsUUFBUSxFQUFFRDtBQUZXLFdBQXRCO0FBSUFWLFVBQUFBLGNBQWMsQ0FBQ2MsS0FBZixDQUFxQkwsS0FBckIsR0FBNkJELE1BQTdCO0FBQ0FSLFVBQUFBLGNBQWMsQ0FBQ1MsS0FBZixHQUF1QkQsTUFBdkI7QUFDQVIsVUFBQUEsY0FBYyxDQUFDZSxHQUFmLENBQW1CQyxHQUFuQixHQUF5QlQsS0FBSyxDQUFDLENBQUQsQ0FBOUI7QUFDQVAsVUFBQUEsY0FBYyxDQUFDZ0IsR0FBZixHQUFxQlQsS0FBSyxDQUFDLENBQUQsQ0FBMUI7QUFDQVAsVUFBQUEsY0FBYyxDQUFDYyxLQUFmLENBQXFCRSxHQUFyQixHQUEyQlQsS0FBSyxDQUFDLENBQUQsQ0FBaEM7QUFFQSxpQkFBT1AsY0FBUDtBQUNBLFNBdEJLLEVBdUJML0MsS0F2QkssQ0F1QkMsVUFBVWtDLEtBQVYsRUFBc0I7QUFDNUJoQyxVQUFBQSxHQUFHLENBQUNnQyxLQUFKLENBQVVBLEtBQVY7QUFDQSxTQXpCSyxDQUFQO0FBMEJBLE9BN0JNLENBQVA7QUE4QkE7QUFuQzZCLEdBQS9CO1NBc0NlVyxzQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcblxubGV0IGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbjtcblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQobUtleVZhbHVlczogYW55LCBiSXNBY3RpdmVFbnRpdHlEZWZpbmVkOiBhbnkpIHtcblx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhtS2V5VmFsdWVzKTtcblxuXHRjb25zdCBhRmlsdGVycyA9IGFLZXlzLm1hcChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc1ZhbHVlID0gbUtleVZhbHVlc1tzS2V5XTtcblx0XHRpZiAoc1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHNLZXksIEZpbHRlck9wZXJhdG9yLkVRLCBzVmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGJJc0FjdGl2ZUVudGl0eURlZmluZWQpIHtcblx0XHRjb25zdCBvQWN0aXZlRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBbbmV3IEZpbHRlcihcIlNpYmxpbmdFbnRpdHkvSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpXSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdGFGaWx0ZXJzLnB1c2gob0FjdGl2ZUZpbHRlcik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IEZpbHRlcihhRmlsdGVycyBhcyBhbnksIHRydWUpO1xufVxuZnVuY3Rpb24gZ2V0QWN0aXZlQ29udGV4dFBhdGgob0NvbnRyb2xsZXI6IGFueSwgc1BhZ2VFbnRpdHlOYW1lOiBhbnksIG9GaWx0ZXI6IGFueSkge1xuXHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvQ29udHJvbGxlclxuXHRcdC5nZXRWaWV3KClcblx0XHQuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdC5nZXRNb2RlbCgpXG5cdFx0LmJpbmRMaXN0KGAvJHtzUGFnZUVudGl0eU5hbWV9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9GaWx0ZXIsIHsgXCIkJGdyb3VwSWRcIjogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0cmV0dXJuIG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMikudGhlbihmdW5jdGlvbiAob0NvbnRleHRzOiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHRzICYmIG9Db250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dHNbMF0uZ2V0UGF0aCgpO1xuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0OiBhbnksIG9Db250cm9sbGVyOiBhbnksIG9FbnRpdHlTZXQ6IGFueSkge1xuXHRjb25zdCBhQWN0aXZlQ29udGV4dHByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBhUGFnZXM6IGFueVtdID0gW107XG5cdGxldCBzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGlmIChzTWV0YVBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzTWV0YVBhdGggPSBzTWV0YVBhdGguc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IGFNZXRhUGF0aEFycmF5ID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGNvbnN0IGFDdXJyZW50SGFzaEFycmF5ID0gc0N1cnJlbnRIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXG5cdC8vIG9QYWdlTWFwIC0gY3JlYXRpbmcgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgbWFwIG9mIG1ldGFwYXRoIG5hbWUgYW5kIGl0J3MgdGVjaG5pY2FsIGRldGFpbHNcblx0Ly8gd2hpY2ggaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgZmlsdGVyIHRvIGZldGNoIHRoZSByZWxhdmFudC9jb3JyZWN0IGFjdGl2ZSBjb250ZXh0XG5cdC8vIEV4YW1wbGU6IHtTYWxlc09yZGVyTWFuYWdlOnt0ZWNobmljYWxJRDp0ZWNobmljYWxJRFZhbHVlfSwgX0l0ZW06e3RlY2huaWNhbElEOnRlY2huaWNhbElEVmFsdWV9fSBldGMuLFxuXHRjb25zdCBvUGFnZU1hcDogYW55ID0ge307XG5cdGNvbnN0IGFQYWdlSGFzaEFycmF5OiBhbnlbXSA9IFtdO1xuXHRhQ3VycmVudEhhc2hBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzUGFnZUhhc2g6IGFueSkge1xuXHRcdGNvbnN0IGFLZXlWYWx1ZXMgPSBzUGFnZUhhc2guc3Vic3RyaW5nKHNQYWdlSGFzaC5pbmRleE9mKFwiKFwiKSArIDEsIHNQYWdlSGFzaC5sZW5ndGggLSAxKS5zcGxpdChcIixcIik7XG5cdFx0Y29uc3QgbUtleVZhbHVlczogYW55ID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VIYXNoTmFtZSA9IHNQYWdlSGFzaC5zcGxpdChcIihcIilbMF07XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV0gPSB7fTtcblx0XHRhUGFnZUhhc2hBcnJheS5wdXNoKHNQYWdlSGFzaE5hbWUpO1xuXHRcdG9QYWdlTWFwW3NQYWdlSGFzaE5hbWVdW1wiYklzQWN0aXZlRW50aXR5RGVmaW5lZFwiXSA9IHRydWU7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBzS2V5QXNzaWdubWVudCA9IGFLZXlWYWx1ZXNbaV07XG5cdFx0XHRjb25zdCBhUGFydHMgPSBzS2V5QXNzaWdubWVudC5zcGxpdChcIj1cIik7XG5cdFx0XHRsZXQgc0tleVZhbHVlID0gYVBhcnRzWzFdO1xuXHRcdFx0bGV0IHNLZXkgPSBhUGFydHNbMF07XG5cdFx0XHQvLyBJbiBjYXNlIGlmIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgaXMgZGVmaW5lZCB0aGVuIHRoZSB1cmwganVzdCBjb250YWlucyB0aGUgdGVjaG5pY2FsSURWYWx1ZSBidXQgbm90IHRoZSB0ZWNobmljYWxJRFxuXHRcdFx0Ly8gRXhhbXBsZTogU2FsZXNPcmRlck1hbmFnZShJRD0xMTExMTEyOS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL19JdGVtKDExMTExMTI5LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHRcdC8vIEluIGFib3ZlIGV4YW1wbGUgU2FsZXNPcmRlckl0ZW0gaGFzIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgZGVmaW5lZCwgaGVuY2UgdGVjaG5pY2FsSUQgaW5mbyBpcyBub3QgcHJlc2VudCBpbiB0aGUgdXJsXG5cdFx0XHQvLyBIZW5jZSBpbiBzdWNoIGNhc2VzIHdlIGdldCB0ZWNobmljYWwga2V5IGFuZCB1c2UgdGhlbSB0byBmZXRjaCBhY3RpdmUgY29udGV4dFxuXHRcdFx0aWYgKHNLZXlBc3NpZ25tZW50LmluZGV4T2YoXCI9XCIpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7YVBhZ2VIYXNoQXJyYXkuam9pbihcIi9cIil9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0c0tleVZhbHVlID0gYVBhcnRzWzBdO1xuXHRcdFx0XHRzS2V5ID0gYVRlY2huaWNhbEtleXNbMF07XG5cdFx0XHRcdG9QYWdlTWFwW3NQYWdlSGFzaC5zcGxpdChcIihcIilbMF1dW1wiYklzQWN0aXZlRW50aXR5RGVmaW5lZFwiXSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0tleSAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGlmIChzS2V5VmFsdWUuaW5kZXhPZihcIidcIikgPT09IDAgJiYgc0tleVZhbHVlLmxhc3RJbmRleE9mKFwiJ1wiKSA9PT0gc0tleVZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIHF1b3RlcyBmcm9tIHRoZSB2YWx1ZSBhbmQgZGVjb2RlIHNwZWNpYWwgY2hhcnNcblx0XHRcdFx0XHRzS2V5VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoc0tleVZhbHVlLnN1YnN0cmluZygxLCBzS2V5VmFsdWUubGVuZ3RoIC0gMSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1LZXlWYWx1ZXNbc0tleV0gPSBzS2V5VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9QYWdlTWFwW3NQYWdlSGFzaE5hbWVdLm1LZXlWYWx1ZXMgPSBtS2V5VmFsdWVzO1xuXHR9KTtcblxuXHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRhTWV0YVBhdGhBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRcdGNvbnN0IG9QYWdlSW5mbzogYW55ID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VFbnRpdHlTZXROYW1lID0gb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgJiYgb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdmlnYXRpb25QYXRoXTtcblx0XHRpZiAoc1BhZ2VFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHRvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUgPSBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0b1BhZ2VFbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1BhZ2VFbnRpdHlTZXROYW1lfWApIHx8IG9FbnRpdHlTZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSA9IHNOYXZpZ2F0aW9uUGF0aDtcblx0XHR9XG5cdFx0b1BhZ2VJbmZvLm1LZXlWYWx1ZXMgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdLm1LZXlWYWx1ZXM7XG5cdFx0b1BhZ2VJbmZvLmJJc0FjdGl2ZUVudGl0eURlZmluZWQgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdLmJJc0FjdGl2ZUVudGl0eURlZmluZWQ7XG5cdFx0YVBhZ2VzLnB1c2gob1BhZ2VJbmZvKTtcblx0fSk7XG5cblx0YVBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9QYWdlSW5mbzogYW55KSB7XG5cdFx0Y29uc3Qgb0ZpbHRlciA9IGNyZWF0ZUZpbHRlclRvRmV0Y2hBY3RpdmVDb250ZXh0KG9QYWdlSW5mby5tS2V5VmFsdWVzLCBvUGFnZUluZm8uYklzQWN0aXZlRW50aXR5RGVmaW5lZCk7XG5cdFx0YUFjdGl2ZUNvbnRleHRwcm9taXNlcy5wdXNoKGdldEFjdGl2ZUNvbnRleHRQYXRoKG9Db250cm9sbGVyLCBvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUsIG9GaWx0ZXIpKTtcblx0fSk7XG5cblx0cmV0dXJuIGFBY3RpdmVDb250ZXh0cHJvbWlzZXM7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGZldGNoIGFjdGl2ZSBjb250ZXh0IHBhdGgncy5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIFBhZ2UgQ29udGV4dFxuICogQHBhcmFtIG9Db250cm9sbGVyXG4gKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIGFjdGl2ZSBjb250ZXh0J3MgYXJlIGZldGNoZWRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0OiBhbnksIG9Db250cm9sbGVyOiBhbnkpIHtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGxldCBzUm9vdEVudGl0eU5hbWUgPSBzQ3VycmVudEhhc2hOb1BhcmFtcyAmJiBzQ3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHIoMCwgc0N1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRpZiAoc1Jvb3RFbnRpdHlOYW1lLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0c1Jvb3RFbnRpdHlOYW1lID0gc1Jvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXHRjb25zdCBvRW50aXR5U2V0ID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3NSb290RW50aXR5TmFtZX1gKTtcblx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnRleHQ7XG5cdGNvbnN0IGFBY3RpdmVDb250ZXh0cHJvbWlzZXMgPSBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0LCBvQ29udHJvbGxlciwgb0VudGl0eVNldCk7XG5cdGlmIChhQWN0aXZlQ29udGV4dHByb21pc2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYUFjdGl2ZUNvbnRleHRwcm9taXNlcylcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhRGF0YTogYW55W10pIHtcblx0XHRcdFx0Y29uc3QgYUFjdGl2ZUNvbnRleHRQYXRocyA9IFtdO1xuXHRcdFx0XHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRcdFx0XHRpZiAoYURhdGFbMF0uaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goYURhdGFbMF0uc3Vic3RyaW5nKDEpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goYURhdGFbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEluIHRoZSBhY3RpdmUgY29udGV4dCBwYXRocyBpZGVudGlmeSBhbmQgcmVwbGFjZSB0aGUgZW50aXR5U2V0IE5hbWUgd2l0aCBjb3JyZXNwb25kaW5nIG5hdmlnYXRpb24gcHJvcGVydHkgbmFtZVxuXHRcdFx0XHQvLyBSZXF1aXJlZCB0byBmb3JtIHRoZSB1cmwgcG9pbnRpbmcgdG8gYWN0aXZlIGNvbnRleHRcblx0XHRcdFx0Ly8gRXhhbXBsZSA6IFNhbGVzT3JkZXJJdGVtIC0tPiBfSXRlbSwgTWF0ZXJpYWxEZXRhaWxzIC0tPiBfTWF0ZXJpYWxEZXRhaWxzIGV0Yy4sXG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYURhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsZXQgc0FjdGl2ZUNvbnRleHRQYXRoID0gYURhdGFbaV07XG5cdFx0XHRcdFx0bGV0IHNOYXZpZ2F0aW9Qcm9wZXJ0eSA9IFwiXCI7XG5cdFx0XHRcdFx0bGV0IHNFbnRpdHlTZXROYW1lID0gc0FjdGl2ZUNvbnRleHRQYXRoICYmIHNBY3RpdmVDb250ZXh0UGF0aC5zdWJzdHIoMCwgc0FjdGl2ZUNvbnRleHRQYXRoLmluZGV4T2YoXCIoXCIpKTtcblx0XHRcdFx0XHRpZiAoc0VudGl0eVNldE5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRcdHNFbnRpdHlTZXROYW1lID0gc0VudGl0eVNldE5hbWUuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc0FjdGl2ZUNvbnRleHRQYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRzQWN0aXZlQ29udGV4dFBhdGggPSBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzTmF2aWdhdGlvUHJvcGVydHkgPSBPYmplY3Qua2V5cyhvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZylbXG5cdFx0XHRcdFx0XHRPYmplY3QudmFsdWVzKG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKS5pbmRleE9mKHNFbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKHNOYXZpZ2F0aW9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aC5yZXBsYWNlKHNFbnRpdHlTZXROYW1lLCBzTmF2aWdhdGlvUHJvcGVydHkpKTtcblx0XHRcdFx0XHRcdG9QYWdlRW50aXR5U2V0ID0gb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0TmFtZX1gKSB8fCBvRW50aXR5U2V0O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goc0FjdGl2ZUNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFBY3RpdmVDb250ZXh0UGF0aHM7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkZhaWxlZCB0byByZXRyaWV2ZSBvbmUgb3IgbW9yZSBhY3RpdmUgY29udGV4dCBwYXRoJ3NcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuZnVuY3Rpb24gZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMob0NvbnRleHQ6IGFueSwgb0NvbnRyb2xsZXI6IGFueSkge1xuXHRsZXQgb1Byb21pc2UsIGFTZW1hbnRpY0tleXM7XG5cdGNvbnN0IHNDdXJyZW50SGFzaE5vUGFyYW1zID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCkuc3BsaXQoXCI/XCIpWzBdO1xuXHRpZiAob0NvbnRleHQpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Ykdsb2JhbElzU3RpY2t5U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpO1xuXHRcdGxldCBzUm9vdEVudGl0eU5hbWUgPSBzQ3VycmVudEhhc2hOb1BhcmFtcyAmJiBzQ3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHIoMCwgc0N1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRcdGlmIChzUm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdHNSb290RW50aXR5TmFtZSA9IHNSb290RW50aXR5TmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHRcdGFTZW1hbnRpY0tleXMgPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc1Jvb3RFbnRpdHlOYW1lKTtcblx0fVxuXHQvLyBGZXRjaCBhY3RpdmUgY29udGV4dCBkZXRhaWxzIGluY2FzZSBvZiBiZWxvdyBzY2VuYXJpbydzKHdoZXJlIHBhZ2UgaXMgbm90IHN0aWNreSBzdXBwb3J0ZWQod2UgZG8gbm90IGhhdmUgZHJhZnQgaW5zdGFuY2UpKVxuXHQvLyAxLiBJbiBjYXNlIG9mIGRyYWZ0IGVuYWJsZWQgT2JqZWN0IHBhZ2Ugd2hlcmUgc2VtYW50aWMga2V5IGJhc2VkIFVSTCBpcyBub3QgcG9zc2libGUobGlrZSBzZW1hbnRpYyBrZXlzIGFyZSBub3QgbW9kZWxlZCBpbiB0aGUgZW50aXR5IHNldClcblx0Ly8gMi4gSW4gY2FzZSBvZiBkcmFmdCBlbmFibGVkIFN1YiBPYmplY3QgUGFnZXMgKHdoZXJlIHNlbWFudGljIGJvb2ttYXJraW5nIGlzIG5vdCBzdXBwb3J0ZWQpXG5cdGNvbnN0IG9WaWV3RGF0YSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpO1xuXHRpZiAob0NvbnRleHQgJiYgIWJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCAmJiAoKG9WaWV3RGF0YS52aWV3TGV2ZWwgPT09IDEgJiYgIWFTZW1hbnRpY0tleXMpIHx8IG9WaWV3RGF0YS52aWV3TGV2ZWwgPj0gMikpIHtcblx0XHRvUHJvbWlzZSA9IGdldEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dCwgb0NvbnRyb2xsZXIpO1xuXHRcdHJldHVybiBvUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cblxuLy8gLyoqXG4vLyAgKiBHZXQgc2hhcmUgVVJMLlxuLy8gICogQHBhcmFtIGJJc0VkaXRhYmxlXG4vLyAgKiBAcGFyYW0gYklzU3RpY2t5U3VwcG9ydGVkXG4vLyAgKiBAcGFyYW0gYUFjdGl2ZUNvbnRleHRQYXRoc1xuLy8gICogQHJldHVybnMge3N0cmluZ30gVGhlIHNoYXJlIFVSTFxuLy8gICogQHByb3RlY3RlZFxuLy8gICogQHN0YXRpY1xuLy8gICovXG5mdW5jdGlvbiBnZXRTaGFyZVVybChiSXNFZGl0YWJsZTogYW55LCBiSXNTdGlja3lTdXBwb3J0ZWQ6IGFueSwgYUFjdGl2ZUNvbnRleHRQYXRoczogYW55KSB7XG5cdGxldCBzU2hhcmVVcmw7XG5cdGNvbnN0IHNIYXNoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdGNvbnN0IHNCYXNlUGF0aCA9IChIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpIGFzIGFueSkuaHJlZkZvckFwcFNwZWNpZmljSGFzaFxuXHRcdD8gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpXG5cdFx0OiBcIlwiO1xuXHRpZiAoYklzRWRpdGFibGUgJiYgIWJJc1N0aWNreVN1cHBvcnRlZCAmJiBhQWN0aXZlQ29udGV4dFBhdGhzKSB7XG5cdFx0c1NoYXJlVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzU2hhcmVVcmwgPSBzSGFzaCA/IHNCYXNlUGF0aCArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdH1cblx0cmV0dXJuIHNTaGFyZVVybDtcbn1cbmZ1bmN0aW9uIGdldFNoYXJlRW1haWxVcmwoKSB7XG5cdGNvbnN0IG9VU2hlbGxDb250YWluZXIgPSBzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyO1xuXHRpZiAob1VTaGVsbENvbnRhaW5lcikge1xuXHRcdHJldHVybiBvVVNoZWxsQ29udGFpbmVyXG5cdFx0XHQuZ2V0RkxQVXJsQXN5bmModHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzRkxQVXJsOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHNGTFBVcmw7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9jdW1lbnQuVVJMKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRKYW1VcmwoYklzRWRpdE1vZGU6IGJvb2xlYW4sIGJJc1N0aWNreVN1cHBvcnRlZDogYW55LCBhQWN0aXZlQ29udGV4dFBhdGhzOiBhbnkpIHtcblx0bGV0IHNKYW1Vcmw6IHN0cmluZztcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoXG5cdFx0PyAoSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKSBhcyBhbnkpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIilcblx0XHQ6IFwiXCI7XG5cdGlmIChiSXNFZGl0TW9kZSAmJiAhYklzU3RpY2t5U3VwcG9ydGVkICYmIGFBY3RpdmVDb250ZXh0UGF0aHMpIHtcblx0XHRzSmFtVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzSmFtVXJsID0gc0hhc2ggPyBzQmFzZVBhdGggKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHR9XG5cdC8vIGluIGNhc2Ugd2UgYXJlIGluIGNGTFAgc2NlbmFyaW8sIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG5cdC8vIGluc2lkZSBhbiBpZnJhbWUsIGFuZCB0aGVyZSBmb3Igd2UgbmVlZCB0byBnZXQgdGhlIGNGTFAgVVJMXG5cdC8vIGFuZCBub3QgJ2RvY3VtZW50LlVSTCcgdGhhdCByZXByZXNlbnRzIHRoZSBpZnJhbWUgVVJMXG5cdGlmIChzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyICYmIHNhcC51c2hlbGwuQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSAmJiBzYXAudXNoZWxsLkNvbnRhaW5lci5ydW5uaW5nSW5JZnJhbWUoKSkge1xuXHRcdHNhcC51c2hlbGwuQ29udGFpbmVyLmdldEZMUFVybCh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNVcmw6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gc1VybC5zdWJzdHIoMCwgc1VybC5pbmRleE9mKFwiI1wiKSkgKyBzSmFtVXJsO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoc0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ291bGQgbm90IHJldHJpZXZlIGNGTFAgVVJMIGZvciB0aGUgc2hhcmluZyBkaWFsb2cgKGRpYWxvZyB3aWxsIG5vdCBiZSBvcGVuZWQpXCIsIHNFcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBzSmFtVXJsKTtcblx0fVxufVxuXG5jb25zdCBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlID0ge1xuXHRhZGFwdFNoYXJlTWV0YWRhdGE6IGZ1bmN0aW9uICh0aGlzOiBTaGFyZSwgb1NoYXJlTWV0YWRhdGE6IGFueSkge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b1VJTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRiSXNFZGl0YWJsZSA9IG9VSU1vZGVsLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0cmV0dXJuIGZldGNoQWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSkudGhlbigoYUFjdGl2ZUNvbnRleHRQYXRocykgPT4ge1xuXHRcdFx0Y29uc3Qgb1BhZ2VUaXRsZUluZm8gPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRnZXRKYW1VcmwoYklzRWRpdGFibGUsIGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCwgYUFjdGl2ZUNvbnRleHRQYXRocyksXG5cdFx0XHRcdGdldFNoYXJlVXJsKGJJc0VkaXRhYmxlLCBiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQsIGFBY3RpdmVDb250ZXh0UGF0aHMpLFxuXHRcdFx0XHRnZXRTaGFyZUVtYWlsVXJsKClcblx0XHRcdF0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YSkge1xuXHRcdFx0XHRcdGxldCBzVGl0bGUgPSBvUGFnZVRpdGxlSW5mby50aXRsZTtcblx0XHRcdFx0XHRjb25zdCBzT2JqZWN0U3VidGl0bGUgPSBvUGFnZVRpdGxlSW5mby5zdWJ0aXRsZSA/IG9QYWdlVGl0bGVJbmZvLnN1YnRpdGxlLnRvU3RyaW5nKCkgOiBcIlwiO1xuXHRcdFx0XHRcdGlmIChzT2JqZWN0U3VidGl0bGUpIHtcblx0XHRcdFx0XHRcdHNUaXRsZSA9IGAke3NUaXRsZX0gLSAke3NPYmplY3RTdWJ0aXRsZX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvU2hhcmVNZXRhZGF0YS50aWxlID0ge1xuXHRcdFx0XHRcdFx0dGl0bGU6IG9QYWdlVGl0bGVJbmZvLnRpdGxlLFxuXHRcdFx0XHRcdFx0c3VidGl0bGU6IHNPYmplY3RTdWJ0aXRsZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0b1NoYXJlTWV0YWRhdGEuZW1haWwudGl0bGUgPSBzVGl0bGU7XG5cdFx0XHRcdFx0b1NoYXJlTWV0YWRhdGEudGl0bGUgPSBzVGl0bGU7XG5cdFx0XHRcdFx0b1NoYXJlTWV0YWRhdGEuamFtLnVybCA9IG9EYXRhWzBdO1xuXHRcdFx0XHRcdG9TaGFyZU1ldGFkYXRhLnVybCA9IG9EYXRhWzFdO1xuXHRcdFx0XHRcdG9TaGFyZU1ldGFkYXRhLmVtYWlsLnVybCA9IG9EYXRhWzJdO1xuXG5cdFx0XHRcdFx0cmV0dXJuIG9TaGFyZU1ldGFkYXRhO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hhcmVFeHRlbnNpb25PdmVycmlkZTtcbiJdfQ==
339
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNoYXJlLnRzIl0sIm5hbWVzIjpbImJvZHkiLCJyZWNvdmVyIiwicmVzdWx0IiwiZSIsInRoZW4iLCJiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQiLCJjcmVhdGVGaWx0ZXJUb0ZldGNoQWN0aXZlQ29udGV4dCIsIm1LZXlWYWx1ZXMiLCJiSXNBY3RpdmVFbnRpdHlEZWZpbmVkIiwiYUtleXMiLCJPYmplY3QiLCJrZXlzIiwiYUZpbHRlcnMiLCJtYXAiLCJzS2V5Iiwic1ZhbHVlIiwidW5kZWZpbmVkIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsIm9BY3RpdmVGaWx0ZXIiLCJmaWx0ZXJzIiwiYW5kIiwicHVzaCIsImdldEFjdGl2ZUNvbnRleHRQYXRoIiwib0NvbnRyb2xsZXIiLCJzUGFnZUVudGl0eU5hbWUiLCJvRmlsdGVyIiwib0xpc3RCaW5kaW5nIiwiZ2V0VmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0TW9kZWwiLCJiaW5kTGlzdCIsInJlcXVlc3RDb250ZXh0cyIsIm9Db250ZXh0cyIsImxlbmd0aCIsImdldFBhdGgiLCJnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzIiwib0NvbnRleHQiLCJvRW50aXR5U2V0IiwiYUFjdGl2ZUNvbnRleHRwcm9taXNlcyIsImFQYWdlcyIsInNNZXRhUGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImFNZXRhUGF0aEFycmF5Iiwic3BsaXQiLCJzQ3VycmVudEhhc2hOb1BhcmFtcyIsIkhhc2hDaGFuZ2VyIiwiZ2V0SW5zdGFuY2UiLCJnZXRIYXNoIiwiYUN1cnJlbnRIYXNoQXJyYXkiLCJvUGFnZU1hcCIsImFQYWdlSGFzaEFycmF5IiwiZm9yRWFjaCIsInNQYWdlSGFzaCIsImFLZXlWYWx1ZXMiLCJzUGFnZUhhc2hOYW1lIiwiaSIsInNLZXlBc3NpZ25tZW50IiwiYVBhcnRzIiwic0tleVZhbHVlIiwib01ldGFNb2RlbCIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwiam9pbiIsImxhc3RJbmRleE9mIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwib1BhZ2VFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblBhdGgiLCJvUGFnZUluZm8iLCJzUGFnZUVudGl0eVNldE5hbWUiLCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsInBhZ2VFbnRpdHlOYW1lIiwiZ2V0QWN0aXZlQ29udGV4dFBhdGhzIiwic1Jvb3RFbnRpdHlOYW1lIiwic3Vic3RyIiwib1BhZ2VDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImFEYXRhIiwiYUFjdGl2ZUNvbnRleHRQYXRocyIsInNBY3RpdmVDb250ZXh0UGF0aCIsInNOYXZpZ2F0aW9Qcm9wZXJ0eSIsInNFbnRpdHlTZXROYW1lIiwidmFsdWVzIiwicmVwbGFjZSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiaW5mbyIsInJlc29sdmUiLCJmZXRjaEFjdGl2ZUNvbnRleHRQYXRocyIsIm9Qcm9taXNlIiwiYVNlbWFudGljS2V5cyIsIm9Nb2RlbCIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY0tleXMiLCJvVmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImdldFNoYXJlVXJsIiwiYklzRWRpdGFibGUiLCJiSXNTdGlja3lTdXBwb3J0ZWQiLCJzU2hhcmVVcmwiLCJzSGFzaCIsInNCYXNlUGF0aCIsImhyZWZGb3JBcHBTcGVjaWZpY0hhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJnZXRTaGFyZUVtYWlsVXJsIiwib1VTaGVsbENvbnRhaW5lciIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsImdldEZMUFVybEFzeW5jIiwic0ZMUFVybCIsInNFcnJvciIsImVycm9yIiwiZG9jdW1lbnQiLCJVUkwiLCJnZXRKYW1VcmwiLCJiSXNFZGl0TW9kZSIsInNKYW1VcmwiLCJydW5uaW5nSW5JZnJhbWUiLCJnZXRGTFBVcmwiLCJzVXJsIiwib3JpZ2luIiwicGF0aG5hbWUiLCJTaGFyZUV4dGVuc2lvbk92ZXJyaWRlIiwiYWRhcHRTaGFyZU1ldGFkYXRhIiwib1NoYXJlTWV0YWRhdGEiLCJiYXNlIiwib1VJTW9kZWwiLCJnZXRQcm9wZXJ0eSIsImdldENvbnRyb2xsZXIiLCJvUGFnZVRpdGxlSW5mbyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9EYXRhIiwic1RpdGxlIiwidGl0bGUiLCJzT2JqZWN0U3VidGl0bGUiLCJzdWJ0aXRsZSIsInRvU3RyaW5nIiwidGlsZSIsImVtYWlsIiwiamFtIiwidXJsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBZ2pCTyxrQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtBQUNyQyxRQUFJO0FBQ0gsVUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0FBQ0EsS0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztBQUNWLGFBQU9GLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFkO0FBQ0E7O0FBQ0QsUUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQXJCLEVBQTJCO0FBQzFCLGFBQU9GLE1BQU0sQ0FBQ0UsSUFBUCxDQUFZLEtBQUssQ0FBakIsRUFBb0JILE9BQXBCLENBQVA7QUFDQTs7QUFDRCxXQUFPQyxNQUFQO0FBQ0E7O0FBbmpCRCxNQUFJRyx3QkFBSjs7QUFFQSxXQUFTQyxnQ0FBVCxDQUEwQ0MsVUFBMUMsRUFBMkRDLHNCQUEzRCxFQUF3RjtBQUN2RixRQUFNQyxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixVQUFaLENBQWQ7QUFFQSxRQUFNSyxRQUFRLEdBQUdILEtBQUssQ0FBQ0ksR0FBTixDQUFVLFVBQVVDLElBQVYsRUFBd0I7QUFDbEQsVUFBTUMsTUFBTSxHQUFHUixVQUFVLENBQUNPLElBQUQsQ0FBekI7O0FBQ0EsVUFBSUMsTUFBTSxLQUFLQyxTQUFmLEVBQTBCO0FBQ3pCLGVBQU8sSUFBSUMsTUFBSixDQUFXSCxJQUFY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QUFPYSxjQUFQO0FBaENxRSxhQWdDOURBLGNBaEM4RDtBQWlDckUsT0FqQ2lCO0FBQUE7QUFBQTtBQUFBO0FBRFksR0FBL0I7U0FxQ2VGLHNCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuXG5sZXQgYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJUb0ZldGNoQWN0aXZlQ29udGV4dChtS2V5VmFsdWVzOiBhbnksIGJJc0FjdGl2ZUVudGl0eURlZmluZWQ6IGFueSkge1xuXHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG1LZXlWYWx1ZXMpO1xuXG5cdGNvbnN0IGFGaWx0ZXJzID0gYUtleXMubWFwKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBzVmFsdWUgPSBtS2V5VmFsdWVzW3NLZXldO1xuXHRcdGlmIChzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoc0tleSwgRmlsdGVyT3BlcmF0b3IuRVEsIHNWYWx1ZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAoYklzQWN0aXZlRW50aXR5RGVmaW5lZCkge1xuXHRcdGNvbnN0IG9BY3RpdmVGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiU2libGluZ0VudGl0eS9Jc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSldLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0YUZpbHRlcnMucHVzaChvQWN0aXZlRmlsdGVyKTtcblx0fVxuXG5cdHJldHVybiBuZXcgRmlsdGVyKGFGaWx0ZXJzIGFzIGFueSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0UGF0aChvQ29udHJvbGxlcjogYW55LCBzUGFnZUVudGl0eU5hbWU6IGFueSwgb0ZpbHRlcjogYW55KSB7XG5cdGNvbnN0IG9MaXN0QmluZGluZyA9IG9Db250cm9sbGVyXG5cdFx0LmdldFZpZXcoKVxuXHRcdC5nZXRCaW5kaW5nQ29udGV4dCgpXG5cdFx0LmdldE1vZGVsKClcblx0XHQuYmluZExpc3QoYC8ke3NQYWdlRW50aXR5TmFtZX1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwgeyBcIiQkZ3JvdXBJZFwiOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAyKS50aGVuKGZ1bmN0aW9uIChvQ29udGV4dHM6IGFueSkge1xuXHRcdGlmIChvQ29udGV4dHMgJiYgb0NvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0c1swXS5nZXRQYXRoKCk7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFjdGl2ZUNvbnRleHRJbnN0YW5jZXMob0NvbnRleHQ6IGFueSwgb0NvbnRyb2xsZXI6IGFueSwgb0VudGl0eVNldDogYW55KSB7XG5cdGNvbnN0IGFBY3RpdmVDb250ZXh0cHJvbWlzZXM6IGFueVtdID0gW107XG5cdGNvbnN0IGFQYWdlczogYW55W10gPSBbXTtcblx0bGV0IHNNZXRhUGF0aCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0aWYgKHNNZXRhUGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdHNNZXRhUGF0aCA9IHNNZXRhUGF0aC5zdWJzdHJpbmcoMSk7XG5cdH1cblx0Y29uc3QgYU1ldGFQYXRoQXJyYXkgPSBzTWV0YVBhdGguc3BsaXQoXCIvXCIpO1xuXHRjb25zdCBzQ3VycmVudEhhc2hOb1BhcmFtcyA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblx0Y29uc3QgYUN1cnJlbnRIYXNoQXJyYXkgPSBzQ3VycmVudEhhc2hOb1BhcmFtcy5zcGxpdChcIi9cIik7XG5cblx0Ly8gb1BhZ2VNYXAgLSBjcmVhdGluZyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBtYXAgb2YgbWV0YXBhdGggbmFtZSBhbmQgaXQncyB0ZWNobmljYWwgZGV0YWlsc1xuXHQvLyB3aGljaCBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSBmaWx0ZXIgdG8gZmV0Y2ggdGhlIHJlbGF2YW50L2NvcnJlY3QgYWN0aXZlIGNvbnRleHRcblx0Ly8gRXhhbXBsZToge1NhbGVzT3JkZXJNYW5hZ2U6e3RlY2huaWNhbElEOnRlY2huaWNhbElEVmFsdWV9LCBfSXRlbTp7dGVjaG5pY2FsSUQ6dGVjaG5pY2FsSURWYWx1ZX19IGV0Yy4sXG5cdGNvbnN0IG9QYWdlTWFwOiBhbnkgPSB7fTtcblx0Y29uc3QgYVBhZ2VIYXNoQXJyYXk6IGFueVtdID0gW107XG5cdGFDdXJyZW50SGFzaEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHNQYWdlSGFzaDogYW55KSB7XG5cdFx0Y29uc3QgYUtleVZhbHVlcyA9IHNQYWdlSGFzaC5zdWJzdHJpbmcoc1BhZ2VIYXNoLmluZGV4T2YoXCIoXCIpICsgMSwgc1BhZ2VIYXNoLmxlbmd0aCAtIDEpLnNwbGl0KFwiLFwiKTtcblx0XHRjb25zdCBtS2V5VmFsdWVzOiBhbnkgPSB7fTtcblx0XHRjb25zdCBzUGFnZUhhc2hOYW1lID0gc1BhZ2VIYXNoLnNwbGl0KFwiKFwiKVswXTtcblx0XHRvUGFnZU1hcFtzUGFnZUhhc2hOYW1lXSA9IHt9O1xuXHRcdGFQYWdlSGFzaEFycmF5LnB1c2goc1BhZ2VIYXNoTmFtZSk7XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV1bXCJiSXNBY3RpdmVFbnRpdHlEZWZpbmVkXCJdID0gdHJ1ZTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFLZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHNLZXlBc3NpZ25tZW50ID0gYUtleVZhbHVlc1tpXTtcblx0XHRcdGNvbnN0IGFQYXJ0cyA9IHNLZXlBc3NpZ25tZW50LnNwbGl0KFwiPVwiKTtcblx0XHRcdGxldCBzS2V5VmFsdWUgPSBhUGFydHNbMV07XG5cdFx0XHRsZXQgc0tleSA9IGFQYXJ0c1swXTtcblx0XHRcdC8vIEluIGNhc2UgaWYgb25seSBvbmUgdGVjaG5pY2FsIGtleSBpcyBkZWZpbmVkIHRoZW4gdGhlIHVybCBqdXN0IGNvbnRhaW5zIHRoZSB0ZWNobmljYWxJRFZhbHVlIGJ1dCBub3QgdGhlIHRlY2huaWNhbElEXG5cdFx0XHQvLyBFeGFtcGxlOiBTYWxlc09yZGVyTWFuYWdlKElEPTExMTExMTI5LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZixJc0FjdGl2ZUVudGl0eT1mYWxzZSkvX0l0ZW0oMTExMTExMjktYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmKVxuXHRcdFx0Ly8gSW4gYWJvdmUgZXhhbXBsZSBTYWxlc09yZGVySXRlbSBoYXMgb25seSBvbmUgdGVjaG5pY2FsIGtleSBkZWZpbmVkLCBoZW5jZSB0ZWNobmljYWxJRCBpbmZvIGlzIG5vdCBwcmVzZW50IGluIHRoZSB1cmxcblx0XHRcdC8vIEhlbmNlIGluIHN1Y2ggY2FzZXMgd2UgZ2V0IHRlY2huaWNhbCBrZXkgYW5kIHVzZSB0aGVtIHRvIGZldGNoIGFjdGl2ZSBjb250ZXh0XG5cdFx0XHRpZiAoc0tleUFzc2lnbm1lbnQuaW5kZXhPZihcIj1cIikgPT09IC0xKSB7XG5cdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHthUGFnZUhhc2hBcnJheS5qb2luKFwiL1wiKX0vJFR5cGUvJEtleWApO1xuXHRcdFx0XHRzS2V5VmFsdWUgPSBhUGFydHNbMF07XG5cdFx0XHRcdHNLZXkgPSBhVGVjaG5pY2FsS2V5c1swXTtcblx0XHRcdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoLnNwbGl0KFwiKFwiKVswXV1bXCJiSXNBY3RpdmVFbnRpdHlEZWZpbmVkXCJdID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0aWYgKHNLZXlWYWx1ZS5pbmRleE9mKFwiJ1wiKSA9PT0gMCAmJiBzS2V5VmFsdWUubGFzdEluZGV4T2YoXCInXCIpID09PSBzS2V5VmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgcXVvdGVzIGZyb20gdGhlIHZhbHVlIGFuZCBkZWNvZGUgc3BlY2lhbCBjaGFyc1xuXHRcdFx0XHRcdHNLZXlWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChzS2V5VmFsdWUuc3Vic3RyaW5nKDEsIHNLZXlWYWx1ZS5sZW5ndGggLSAxKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bUtleVZhbHVlc1tzS2V5XSA9IHNLZXlWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV0ubUtleVZhbHVlcyA9IG1LZXlWYWx1ZXM7XG5cdH0pO1xuXG5cdGxldCBvUGFnZUVudGl0eVNldCA9IG9FbnRpdHlTZXQ7XG5cdGFNZXRhUGF0aEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHNOYXZpZ2F0aW9uUGF0aDogYW55KSB7XG5cdFx0Y29uc3Qgb1BhZ2VJbmZvOiBhbnkgPSB7fTtcblx0XHRjb25zdCBzUGFnZUVudGl0eVNldE5hbWUgPSBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyAmJiBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2aWdhdGlvblBhdGhdO1xuXHRcdGlmIChzUGFnZUVudGl0eVNldE5hbWUpIHtcblx0XHRcdG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSA9IG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3NOYXZpZ2F0aW9uUGF0aF07XG5cdFx0XHRvUGFnZUVudGl0eVNldCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHtzUGFnZUVudGl0eVNldE5hbWV9YCkgfHwgb0VudGl0eVNldDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1BhZ2VJbmZvLnBhZ2VFbnRpdHlOYW1lID0gc05hdmlnYXRpb25QYXRoO1xuXHRcdH1cblx0XHRvUGFnZUluZm8ubUtleVZhbHVlcyA9IG9QYWdlTWFwW3NOYXZpZ2F0aW9uUGF0aF0ubUtleVZhbHVlcztcblx0XHRvUGFnZUluZm8uYklzQWN0aXZlRW50aXR5RGVmaW5lZCA9IG9QYWdlTWFwW3NOYXZpZ2F0aW9uUGF0aF0uYklzQWN0aXZlRW50aXR5RGVmaW5lZDtcblx0XHRhUGFnZXMucHVzaChvUGFnZUluZm8pO1xuXHR9KTtcblxuXHRhUGFnZXMuZm9yRWFjaChmdW5jdGlvbiAob1BhZ2VJbmZvOiBhbnkpIHtcblx0XHRjb25zdCBvRmlsdGVyID0gY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQob1BhZ2VJbmZvLm1LZXlWYWx1ZXMsIG9QYWdlSW5mby5iSXNBY3RpdmVFbnRpdHlEZWZpbmVkKTtcblx0XHRhQWN0aXZlQ29udGV4dHByb21pc2VzLnB1c2goZ2V0QWN0aXZlQ29udGV4dFBhdGgob0NvbnRyb2xsZXIsIG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSwgb0ZpbHRlcikpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUFjdGl2ZUNvbnRleHRwcm9taXNlcztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZmV0Y2ggYWN0aXZlIGNvbnRleHQgcGF0aCdzLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgUGFnZSBDb250ZXh0XG4gKiBAcGFyYW0gb0NvbnRyb2xsZXJcbiAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgYWN0aXZlIGNvbnRleHQncyBhcmUgZmV0Y2hlZFxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0UGF0aHMob0NvbnRleHQ6IGFueSwgb0NvbnRyb2xsZXI6IGFueSkge1xuXHRjb25zdCBzQ3VycmVudEhhc2hOb1BhcmFtcyA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblx0bGV0IHNSb290RW50aXR5TmFtZSA9IHNDdXJyZW50SGFzaE5vUGFyYW1zICYmIHNDdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cigwLCBzQ3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdGlmIChzUm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzUm9vdEVudGl0eU5hbWUgPSBzUm9vdEVudGl0eU5hbWUuc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IG9FbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1Jvb3RFbnRpdHlOYW1lfWApO1xuXHRjb25zdCBvUGFnZUNvbnRleHQgPSBvQ29udGV4dDtcblx0Y29uc3QgYUFjdGl2ZUNvbnRleHRwcm9taXNlcyA9IGdldEFjdGl2ZUNvbnRleHRJbnN0YW5jZXMob0NvbnRleHQsIG9Db250cm9sbGVyLCBvRW50aXR5U2V0KTtcblx0aWYgKGFBY3RpdmVDb250ZXh0cHJvbWlzZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhQWN0aXZlQ29udGV4dHByb21pc2VzKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFEYXRhOiBhbnlbXSkge1xuXHRcdFx0XHRjb25zdCBhQWN0aXZlQ29udGV4dFBhdGhzID0gW107XG5cdFx0XHRcdGxldCBvUGFnZUVudGl0eVNldCA9IG9FbnRpdHlTZXQ7XG5cdFx0XHRcdGlmIChhRGF0YVswXS5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFBY3RpdmVDb250ZXh0UGF0aHMucHVzaChhRGF0YVswXS5zdWJzdHJpbmcoMSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBY3RpdmVDb250ZXh0UGF0aHMucHVzaChhRGF0YVswXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSW4gdGhlIGFjdGl2ZSBjb250ZXh0IHBhdGhzIGlkZW50aWZ5IGFuZCByZXBsYWNlIHRoZSBlbnRpdHlTZXQgTmFtZSB3aXRoIGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiBwcm9wZXJ0eSBuYW1lXG5cdFx0XHRcdC8vIFJlcXVpcmVkIHRvIGZvcm0gdGhlIHVybCBwb2ludGluZyB0byBhY3RpdmUgY29udGV4dFxuXHRcdFx0XHQvLyBFeGFtcGxlIDogU2FsZXNPcmRlckl0ZW0gLS0+IF9JdGVtLCBNYXRlcmlhbERldGFpbHMgLS0+IF9NYXRlcmlhbERldGFpbHMgZXRjLixcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhRGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxldCBzQWN0aXZlQ29udGV4dFBhdGggPSBhRGF0YVtpXTtcblx0XHRcdFx0XHRsZXQgc05hdmlnYXRpb1Byb3BlcnR5ID0gXCJcIjtcblx0XHRcdFx0XHRsZXQgc0VudGl0eVNldE5hbWUgPSBzQWN0aXZlQ29udGV4dFBhdGggJiYgc0FjdGl2ZUNvbnRleHRQYXRoLnN1YnN0cigwLCBzQWN0aXZlQ29udGV4dFBhdGguaW5kZXhPZihcIihcIikpO1xuXHRcdFx0XHRcdGlmIChzRW50aXR5U2V0TmFtZS5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0c0VudGl0eVNldE5hbWUgPSBzRW50aXR5U2V0TmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzQWN0aXZlQ29udGV4dFBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRcdHNBY3RpdmVDb250ZXh0UGF0aCA9IHNBY3RpdmVDb250ZXh0UGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNOYXZpZ2F0aW9Qcm9wZXJ0eSA9IE9iamVjdC5rZXlzKG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVtcblx0XHRcdFx0XHRcdE9iamVjdC52YWx1ZXMob1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpLmluZGV4T2Yoc0VudGl0eVNldE5hbWUpXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRpZiAoc05hdmlnYXRpb1Byb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goc0FjdGl2ZUNvbnRleHRQYXRoLnJlcGxhY2Uoc0VudGl0eVNldE5hbWUsIHNOYXZpZ2F0aW9Qcm9wZXJ0eSkpO1xuXHRcdFx0XHRcdFx0b1BhZ2VFbnRpdHlTZXQgPSBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3NFbnRpdHlTZXROYW1lfWApIHx8IG9FbnRpdHlTZXQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFBY3RpdmVDb250ZXh0UGF0aHMucHVzaChzQWN0aXZlQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUFjdGl2ZUNvbnRleHRQYXRocztcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRmFpbGVkIHRvIHJldHJpZXZlIG9uZSBvciBtb3JlIGFjdGl2ZSBjb250ZXh0IHBhdGgnc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG59XG5mdW5jdGlvbiBmZXRjaEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dDogYW55LCBvQ29udHJvbGxlcjogYW55KSB7XG5cdGxldCBvUHJvbWlzZSwgYVNlbWFudGljS2V5cztcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGlmIChvQ29udGV4dCkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCk7XG5cdFx0bGV0IHNSb290RW50aXR5TmFtZSA9IHNDdXJyZW50SGFzaE5vUGFyYW1zICYmIHNDdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cigwLCBzQ3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdFx0aWYgKHNSb290RW50aXR5TmFtZS5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0c1Jvb3RFbnRpdHlOYW1lID0gc1Jvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0YVNlbWFudGljS2V5cyA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhvTWV0YU1vZGVsLCBzUm9vdEVudGl0eU5hbWUpO1xuXHR9XG5cdC8vIEZldGNoIGFjdGl2ZSBjb250ZXh0IGRldGFpbHMgaW5jYXNlIG9mIGJlbG93IHNjZW5hcmlvJ3Mod2hlcmUgcGFnZSBpcyBub3Qgc3RpY2t5IHN1cHBvcnRlZCh3ZSBkbyBub3QgaGF2ZSBkcmFmdCBpbnN0YW5jZSkpXG5cdC8vIDEuIEluIGNhc2Ugb2YgZHJhZnQgZW5hYmxlZCBPYmplY3QgcGFnZSB3aGVyZSBzZW1hbnRpYyBrZXkgYmFzZWQgVVJMIGlzIG5vdCBwb3NzaWJsZShsaWtlIHNlbWFudGljIGtleXMgYXJlIG5vdCBtb2RlbGVkIGluIHRoZSBlbnRpdHkgc2V0KVxuXHQvLyAyLiBJbiBjYXNlIG9mIGRyYWZ0IGVuYWJsZWQgU3ViIE9iamVjdCBQYWdlcyAod2hlcmUgc2VtYW50aWMgYm9va21hcmtpbmcgaXMgbm90IHN1cHBvcnRlZClcblx0Y29uc3Qgb1ZpZXdEYXRhID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk7XG5cdGlmIChvQ29udGV4dCAmJiAhYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkICYmICgob1ZpZXdEYXRhLnZpZXdMZXZlbCA9PT0gMSAmJiAhYVNlbWFudGljS2V5cykgfHwgb1ZpZXdEYXRhLnZpZXdMZXZlbCA+PSAyKSkge1xuXHRcdG9Qcm9taXNlID0gZ2V0QWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCBvQ29udHJvbGxlcik7XG5cdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuXG4vLyAvKipcbi8vICAqIEdldCBzaGFyZSBVUkwuXG4vLyAgKiBAcGFyYW0gYklzRWRpdGFibGVcbi8vICAqIEBwYXJhbSBiSXNTdGlja3lTdXBwb3J0ZWRcbi8vICAqIEBwYXJhbSBhQWN0aXZlQ29udGV4dFBhdGhzXG4vLyAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2hhcmUgVVJMXG4vLyAgKiBAcHJvdGVjdGVkXG4vLyAgKiBAc3RhdGljXG4vLyAgKi9cbmZ1bmN0aW9uIGdldFNoYXJlVXJsKGJJc0VkaXRhYmxlOiBhbnksIGJJc1N0aWNreVN1cHBvcnRlZDogYW55LCBhQWN0aXZlQ29udGV4dFBhdGhzOiBhbnkpIHtcblx0bGV0IHNTaGFyZVVybDtcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoXG5cdFx0PyAoSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKSBhcyBhbnkpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIilcblx0XHQ6IFwiXCI7XG5cdGlmIChiSXNFZGl0YWJsZSAmJiAhYklzU3RpY2t5U3VwcG9ydGVkICYmIGFBY3RpdmVDb250ZXh0UGF0aHMpIHtcblx0XHRzU2hhcmVVcmwgPSBzQmFzZVBhdGggKyBhQWN0aXZlQ29udGV4dFBhdGhzLmpvaW4oXCIvXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHNTaGFyZVVybCA9IHNIYXNoID8gc0Jhc2VQYXRoICsgc0hhc2ggOiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0fVxuXHRyZXR1cm4gc1NoYXJlVXJsO1xufVxuZnVuY3Rpb24gZ2V0U2hhcmVFbWFpbFVybCgpIHtcblx0Y29uc3Qgb1VTaGVsbENvbnRhaW5lciA9IHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXI7XG5cdGlmIChvVVNoZWxsQ29udGFpbmVyKSB7XG5cdFx0cmV0dXJuIG9VU2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmxBc3luYyh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNGTFBVcmw6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gc0ZMUFVybDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkIG5vdCByZXRyaWV2ZSBjRkxQIFVSTCBmb3IgdGhlIHNoYXJpbmcgZGlhbG9nIChkaWFsb2cgd2lsbCBub3QgYmUgb3BlbmVkKVwiLCBzRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb2N1bWVudC5VUkwpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEphbVVybChiSXNFZGl0TW9kZTogYm9vbGVhbiwgYklzU3RpY2t5U3VwcG9ydGVkOiBhbnksIGFBY3RpdmVDb250ZXh0UGF0aHM6IGFueSkge1xuXHRsZXQgc0phbVVybDogc3RyaW5nO1xuXHRjb25zdCBzSGFzaCA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHRjb25zdCBzQmFzZVBhdGggPSAoSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKSBhcyBhbnkpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2hcblx0XHQ/IChIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpIGFzIGFueSkuaHJlZkZvckFwcFNwZWNpZmljSGFzaChcIlwiKVxuXHRcdDogXCJcIjtcblx0aWYgKGJJc0VkaXRNb2RlICYmICFiSXNTdGlja3lTdXBwb3J0ZWQgJiYgYUFjdGl2ZUNvbnRleHRQYXRocykge1xuXHRcdHNKYW1VcmwgPSBzQmFzZVBhdGggKyBhQWN0aXZlQ29udGV4dFBhdGhzLmpvaW4oXCIvXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHNKYW1VcmwgPSBzSGFzaCA/IHNCYXNlUGF0aCArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdH1cblx0Ly8gaW4gY2FzZSB3ZSBhcmUgaW4gY0ZMUCBzY2VuYXJpbywgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmdcblx0Ly8gaW5zaWRlIGFuIGlmcmFtZSwgYW5kIHRoZXJlIGZvciB3ZSBuZWVkIHRvIGdldCB0aGUgY0ZMUCBVUkxcblx0Ly8gYW5kIG5vdCAnZG9jdW1lbnQuVVJMJyB0aGF0IHJlcHJlc2VudHMgdGhlIGlmcmFtZSBVUkxcblx0aWYgKHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXIgJiYgc2FwLnVzaGVsbC5Db250YWluZXIucnVubmluZ0luSWZyYW1lICYmIHNhcC51c2hlbGwuQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSgpKSB7XG5cdFx0c2FwLnVzaGVsbC5Db250YWluZXIuZ2V0RkxQVXJsKHRydWUpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoc1VybDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBzVXJsLnN1YnN0cigwLCBzVXJsLmluZGV4T2YoXCIjXCIpKSArIHNKYW1Vcmw7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHNKYW1VcmwpO1xuXHR9XG59XG5cbmNvbnN0IFNoYXJlRXh0ZW5zaW9uT3ZlcnJpZGUgPSB7XG5cdGFkYXB0U2hhcmVNZXRhZGF0YTogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFNoYXJlLCBvU2hhcmVNZXRhZGF0YTogYW55KSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb1VJTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0Y29uc3QgYklzRWRpdGFibGUgPSBvVUlNb2RlbC5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFBY3RpdmVDb250ZXh0UGF0aHMgPSBhd2FpdCBmZXRjaEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dCwgdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VUaXRsZUluZm8gPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpO1xuXHRcdFx0Y29uc3Qgb0RhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGdldEphbVVybChiSXNFZGl0YWJsZSwgYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkLCBhQWN0aXZlQ29udGV4dFBhdGhzKSxcblx0XHRcdFx0Z2V0U2hhcmVVcmwoYklzRWRpdGFibGUsIGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCwgYUFjdGl2ZUNvbnRleHRQYXRocyksXG5cdFx0XHRcdGdldFNoYXJlRW1haWxVcmwoKVxuXHRcdFx0XSk7XG5cblx0XHRcdGxldCBzVGl0bGUgPSBvUGFnZVRpdGxlSW5mby50aXRsZTtcblx0XHRcdGNvbnN0IHNPYmplY3RTdWJ0aXRsZSA9IG9QYWdlVGl0bGVJbmZvLnN1YnRpdGxlID8gb1BhZ2VUaXRsZUluZm8uc3VidGl0bGUudG9TdHJpbmcoKSA6IFwiXCI7XG5cdFx0XHRpZiAoc09iamVjdFN1YnRpdGxlKSB7XG5cdFx0XHRcdHNUaXRsZSA9IGAke3NUaXRsZX0gLSAke3NPYmplY3RTdWJ0aXRsZX1gO1xuXHRcdFx0fVxuXHRcdFx0b1NoYXJlTWV0YWRhdGEudGlsZSA9IHtcblx0XHRcdFx0dGl0bGU6IG9QYWdlVGl0bGVJbmZvLnRpdGxlLFxuXHRcdFx0XHRzdWJ0aXRsZTogc09iamVjdFN1YnRpdGxlXG5cdFx0XHR9O1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEuZW1haWwudGl0bGUgPSBzVGl0bGU7XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS50aXRsZSA9IHNUaXRsZTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLmphbS51cmwgPSBvRGF0YVswXTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLnVybCA9IG9EYXRhWzFdO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEuZW1haWwudXJsID0gb0RhdGFbMl07XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb1NoYXJlTWV0YWRhdGE7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNoYXJlRXh0ZW5zaW9uT3ZlcnJpZGU7XG4iXX0=