@sapui5/sap.fe.templates 1.96.0 → 1.97.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/package.json +6 -3
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/ListReport/ListReport.view.xml +2 -2
  4. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +91 -60
  5. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +31 -5
  6. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +2 -2
  7. package/src/sap/fe/templates/ObjectPage/Component.js +18 -1
  8. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +114 -85
  9. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +8 -0
  10. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +23 -3
  11. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +6 -5
  12. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +6 -4
  13. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPointTitle.fragment.xml +26 -16
  14. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +5 -5
  15. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +63 -9
  16. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +54 -32
  17. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +24 -21
  18. package/src/sap/fe/templates/RootContainer/view/Fcl.view.xml +2 -1
  19. package/src/sap/fe/templates/RootContainer/view/NavContainer.view.xml +1 -1
  20. package/src/sap/fe/templates/controls/Table.fragment.xml +2 -0
  21. package/src/sap/fe/templates/library.js +1 -1
  22. package/src/sap/fe/templates/controls/OverflowToolbarButtonHover.js +0 -25
@@ -315,7 +315,7 @@ sap.ui.define(
315
315
  var aActions = oObjectPage.getHeaderTitle() && oObjectPage.getHeaderTitle().getActions();
316
316
  if (aActions && aActions.length) {
317
317
  oFirstClickableElement = aActions.find(function(oAction) {
318
- return oAction.getVisible();
318
+ return oAction.getVisible() && oAction.getEnabled();
319
319
  });
320
320
  }
321
321
  return oFirstClickableElement;
@@ -354,37 +354,28 @@ sap.ui.define(
354
354
  return undefined;
355
355
  },
356
356
 
357
- initialTab: {
358
- value: true
357
+ _updateFocusInEditMode: function(aSubSections) {
358
+ var oObjectPage = this.byId("fe::ObjectPage");
359
+
360
+ var oMandatoryField = this._getFirstEmptyMandatoryFieldFromSubSection(aSubSections);
361
+ var oFieldToFocus;
362
+ if (oMandatoryField) {
363
+ oFieldToFocus = oMandatoryField.content.getContentEdit()[0];
364
+ } else {
365
+ oFieldToFocus = oObjectPage._getFirstEditableInput() || this._getFirstClickableElement(oObjectPage);
366
+ }
367
+
368
+ if (oFieldToFocus) {
369
+ setTimeout(function() {
370
+ // We set the focus in a timeeout, otherwise the focus sometimes goes to the TabBar
371
+ oFieldToFocus.focus();
372
+ }, 0);
373
+ }
359
374
  },
360
375
 
361
376
  _handleSubSectionEnteredViewPort: function(oEvent) {
362
377
  var oSubSection = oEvent.getParameter("subSection");
363
- var oInternalModelContext = this.getView().getBindingContext("internal");
364
378
  oSubSection.setBindingContext(undefined);
365
- var oObjectPage = this.byId("fe::ObjectPage");
366
- if (oObjectPage.getModel("ui").getProperty("/editMode") !== "Display") {
367
- if (
368
- this.getView().getViewData().sectionLayout === "Tabs" &&
369
- this.initialTab.value === false &&
370
- oInternalModelContext.getProperty("errorNavigationSectionFlag") === false
371
- ) {
372
- var oFieldToFocus = this._getFirstEmptyMandatoryFieldFromSubSection([oSubSection]);
373
- if (oFieldToFocus) {
374
- oFieldToFocus.content.getContentEdit()[0].focus();
375
- } else {
376
- var oFirstEditableInput = oObjectPage._getFirstEditableInput();
377
- if (oFirstEditableInput) {
378
- oFirstEditableInput.focus();
379
- } else {
380
- var oFirstClickableElement = this._getFirstClickableElement(oObjectPage);
381
- if (oFirstClickableElement) {
382
- oFirstClickableElement.focus();
383
- }
384
- }
385
- }
386
- }
387
- }
388
379
  },
389
380
 
390
381
  _onBackNavigationInDraft: function(oContext) {
@@ -402,7 +393,8 @@ sap.ui.define(
402
393
  _onAfterBinding: function(oBindingContext, mParameters) {
403
394
  var oObjectPage = this.byId("fe::ObjectPage"),
404
395
  that = this,
405
- aTables = this._findTables();
396
+ aTables = this._findTables(),
397
+ aFormContainers = this._findFormContainers();
406
398
 
407
399
  this.sideEffects.clearPropertiesStatus();
408
400
 
@@ -416,6 +408,32 @@ sap.ui.define(
416
408
  aIBNActions = CommonUtils.getIBNActions(oSubSection, aIBNActions);
417
409
  });
418
410
  });
411
+
412
+ // Assign internal binding contexts to oFormContainer:
413
+ // 1. It is not possible to assign the internal binding context to the XML fragment
414
+ // (FormContainer.fragment.xml) yet - it is used already for the data-structure.
415
+ // 2. Another problem is, that FormContainers assigned to a 'MoreBlock' does not have an
416
+ // internal model context at all.
417
+
418
+ aFormContainers.forEach(function(oFormContainer) {
419
+ var oInternalModelContext,
420
+ oInternalModel = oObjectPage.getModel("internal"),
421
+ sPageContextPath = "/pages/" + that.getView().getId(),
422
+ sFormContainerContextPath = "controls/" + that.getView().getLocalId(oFormContainer.getId()),
423
+ SHOW_DETAILS = "showDetails";
424
+ if (oFormContainer.getModel("internal") === undefined) {
425
+ oFormContainer.setModel(oInternalModel, "internal");
426
+ oFormContainer.setBindingContext(
427
+ oInternalModel.createBindingContext(sPageContextPath + "/" + sFormContainerContextPath),
428
+ "internal"
429
+ );
430
+ oFormContainer.bindElement({ path: "", model: "internal" });
431
+ } else {
432
+ oFormContainer.bindElement({ path: sFormContainerContextPath, model: "internal" });
433
+ }
434
+ oInternalModelContext = oFormContainer.getBindingContext("internal");
435
+ oInternalModelContext.setProperty(SHOW_DETAILS, false);
436
+ });
419
437
  aTables.forEach(function(oTable) {
420
438
  var oInternalModelContext = oTable.getBindingContext("internal");
421
439
  oInternalModelContext.setProperty("creationRowFieldValidity", {});
@@ -562,16 +580,6 @@ sap.ui.define(
562
580
  },
563
581
  onPageReady: function(mParameters) {
564
582
  // Apply app state only after the page is ready with the first section selected
565
- function getVisibleSections(oObjectPage) {
566
- var aVisibleSections;
567
- var aSections = oObjectPage.getSections();
568
- if (aSections && aSections.length) {
569
- aVisibleSections = aSections.filter(function(oSection) {
570
- return oSection.getVisible() === true;
571
- });
572
- }
573
- return aVisibleSections;
574
- }
575
583
  var that = this;
576
584
  var oView = this.getView();
577
585
  var oInternalModelContext = oView.getBindingContext("internal");
@@ -587,60 +595,39 @@ sap.ui.define(
587
595
  this.getAppComponent()
588
596
  .getAppStateHandler()
589
597
  .applyAppState();
590
- var oLastFocusedControl = mParameters.lastFocusedControl;
591
- if (oLastFocusedControl && oLastFocusedControl.controlId && oLastFocusedControl.focusInfo) {
592
- var oFocusControl = oView.byId(oLastFocusedControl.controlId);
593
- if (oFocusControl) {
594
- oFocusControl.applyFocusInfo(oLastFocusedControl.focusInfo);
595
- return;
596
- }
597
- }
598
- var oObjectPage = this.byId("fe::ObjectPage");
599
- // set the focus to the first action button, or to the first editable input if in editable mode
600
- var isInDisplayMode = oObjectPage.getModel("ui").getProperty("/editMode") === "Display";
601
- var oFirstClickableElement;
602
- var aVisibleSections = getVisibleSections(oObjectPage);
603
598
 
604
- if (isInDisplayMode) {
605
- //Focus on the first visible section if page OP is in Display Mode
606
- oObjectPage.setSelectedSection(aVisibleSections[0].getId());
607
- oFirstClickableElement = this._getFirstClickableElement(oObjectPage);
608
- if (oFirstClickableElement) {
609
- oFirstClickableElement.focus();
610
- }
611
- } else {
612
- //Focus on first mandatory empty field
599
+ if (mParameters.forceFocus) {
600
+ var oObjectPage = this.byId("fe::ObjectPage");
601
+ // set the focus to the first action button, or to the first editable input if in editable mode
602
+ var isInDisplayMode = oObjectPage.getModel("ui").getProperty("/editMode") === "Display";
603
+ var aVisibleSections = oObjectPage.getSections().filter(function(oSection) {
604
+ return oSection.getVisible() === true;
605
+ });
606
+ // Select the first visible section
613
607
  oObjectPage.setSelectedSection(aVisibleSections[0].getId());
614
- if (
615
- oView.getViewData().sectionLayout === "Page" ||
616
- (oView.getViewData().sectionLayout === "Tabs" && this.initialTab.value === true)
617
- ) {
618
- var oFieldToFocus;
619
- var aSubSections = [];
620
- for (var section = 0; section < aVisibleSections.length; section++) {
621
- aSubSections = aVisibleSections[section].getSubSections();
622
- oFieldToFocus = this._getFirstEmptyMandatoryFieldFromSubSection(aSubSections);
623
- if (oFieldToFocus) {
624
- oFieldToFocus.content.getContentEdit()[0].focus();
625
- break;
626
- }
627
- }
628
608
 
629
- //this.initialTab.value = false;
630
- }
631
- if (!oFieldToFocus) {
632
- var oFirstEditableInput = oObjectPage._getFirstEditableInput();
633
- if (oFirstEditableInput) {
634
- oFirstEditableInput.focus();
609
+ if (isInDisplayMode) {
610
+ var oFirstClickableElement = this._getFirstClickableElement(oObjectPage);
611
+ if (oFirstClickableElement) {
612
+ oFirstClickableElement.focus();
613
+ }
614
+ } else {
615
+ var aVisibleSubSections;
616
+ if (oView.getViewData().sectionLayout === "Tabs") {
617
+ // In a tabbed layout, only the subsections of the selected section are visible on the screen
618
+ aVisibleSubSections = aVisibleSections[0].getSubSections();
635
619
  } else {
636
- oFirstClickableElement = this._getFirstClickableElement(oObjectPage);
637
- if (oFirstClickableElement) {
638
- oFirstClickableElement.focus();
639
- }
620
+ // In a paged layout, all subsections of the visible sections are visible on the screen
621
+ aVisibleSubSections = aVisibleSections
622
+ .map(function(oSection) {
623
+ return oSection.getSubSections();
624
+ })
625
+ .flat();
640
626
  }
627
+ this._updateFocusInEditMode(aVisibleSubSections);
641
628
  }
642
- this.initialTab.value = false;
643
629
  }
630
+
644
631
  oInternalModelContext.setProperty("errorNavigationSectionFlag", false);
645
632
  this._checkDataPointTitleForExternalNavigation();
646
633
  },
@@ -899,6 +886,37 @@ sap.ui.define(
899
886
  return aBlocks;
900
887
  },
901
888
 
889
+ _findFormContainers: function() {
890
+ var aSubSections = this._getAllSubSections(),
891
+ aFormContainers = [];
892
+
893
+ function _collectFormContainersInBlocks(aBlocks) {
894
+ for (var i = 0; i < aBlocks.length; i++) {
895
+ var oElement = aBlocks[i].getContent instanceof Function && aBlocks[i].getContent();
896
+ if (oElement && oElement.isA && oElement.isA("sap.ui.layout.DynamicSideContent")) {
897
+ oElement = oElement.getMainContent instanceof Function && oElement.getMainContent();
898
+ if (oElement && oElement.length > 0) {
899
+ oElement = oElement[0];
900
+ }
901
+ }
902
+ if (
903
+ oElement &&
904
+ oElement.isA &&
905
+ oElement.isA("sap.ui.layout.form.Form") &&
906
+ oElement.getFormContainers instanceof Function
907
+ ) {
908
+ aFormContainers = aFormContainers.concat(oElement.getFormContainers());
909
+ }
910
+ }
911
+ }
912
+
913
+ for (var i = 0; i < aSubSections.length; i++) {
914
+ _collectFormContainersInBlocks(aSubSections[i].getBlocks());
915
+ _collectFormContainersInBlocks(aSubSections[i].getMoreBlocks());
916
+ }
917
+ return aFormContainers;
918
+ },
919
+
902
920
  //TODO: This is needed for two workarounds - to be removed again
903
921
  _findTables: function() {
904
922
  var aSubSections = this._getAllSubSections(),
@@ -1349,6 +1367,17 @@ sap.ui.define(
1349
1367
  //will be called always when we click on a section tab
1350
1368
  this.getExtensionAPI().updateAppState();
1351
1369
  this.bSectionNavigated = true;
1370
+
1371
+ var oInternalModelContext = this.getView().getBindingContext("internal");
1372
+ var oObjectPage = this.byId("fe::ObjectPage");
1373
+ if (
1374
+ oObjectPage.getModel("ui").getProperty("/editMode") !== "Display" &&
1375
+ this.getView().getViewData().sectionLayout === "Tabs" &&
1376
+ oInternalModelContext.getProperty("errorNavigationSectionFlag") === false
1377
+ ) {
1378
+ var oSubSection = oEvent.getParameter("subSection");
1379
+ this._updateFocusInEditMode([oSubSection]);
1380
+ }
1352
1381
  },
1353
1382
  onVariantSelected: function(oEvent) {
1354
1383
  this.getExtensionAPI().updateAppState();
@@ -67,6 +67,7 @@ sap.ui.define(
67
67
  */
68
68
  StashableHBox.prototype.getTitleControl = function() {
69
69
  var aItems = [],
70
+ content,
70
71
  i;
71
72
  if (this.getItems && this.getItems()[0] && this.getItems()[0].getItems) {
72
73
  aItems = this.getItems()[0].getItems();
@@ -75,6 +76,13 @@ sap.ui.define(
75
76
  }
76
77
  for (i = 0; i < aItems.length; i++) {
77
78
  if (aItems[i].isA("sap.m.Title") || aItems[i].isA("sap.m.Link")) {
79
+ if (aItems[i].isA("sap.m.Title")) {
80
+ // If a title was found, check if there is a link in the content aggregation
81
+ content = aItems[i].getContent();
82
+ if (content && content.isA("sap.m.Link")) {
83
+ return content;
84
+ }
85
+ }
78
86
  return aItems[i];
79
87
  }
80
88
  }
@@ -2,7 +2,7 @@
2
2
  * SAPUI5
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved.
4
4
  */
5
- sap.ui.define(["sap/fe/core/library", "sap/fe/core/CommonUtils"], function(CoreLibrary, CommonUtils) {
5
+ sap.ui.define(["sap/fe/core/library", "sap/fe/core/helpers/KeepAliveHelper"], function(CoreLibrary, KeepAliveHelper) {
6
6
  "use strict";
7
7
 
8
8
  var VariantManagement = CoreLibrary.VariantManagement;
@@ -40,9 +40,29 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/core/CommonUtils"], function(CoreL
40
40
 
41
41
  aStateControls.push(oView.byId("fe::ObjectPage"));
42
42
  },
43
+ adaptControlStateHandler: function(oControl, aControlHandler) {
44
+ if (oControl.isA("sap.ui.fl.variants.VariantManagement")) {
45
+ aControlHandler.push({
46
+ retrieve: function(oVM) {
47
+ return {
48
+ "variantId": oVM.getCurrentVariantKey()
49
+ };
50
+ },
51
+ apply: function(oVM, oControlState) {
52
+ if (
53
+ oControlState &&
54
+ oControlState.variantId !== undefined &&
55
+ !(oControlState.variantId === oVM.getId() && oVM.getModified() === false)
56
+ ) {
57
+ oVM.setModified(true);
58
+ }
59
+ }
60
+ });
61
+ }
62
+ },
43
63
  adaptBindingRefreshControls: function(aControls) {
44
64
  var oView = this.getView(),
45
- sRefreshStrategy = CommonUtils.getViewRefreshInfo(oView),
65
+ sRefreshStrategy = KeepAliveHelper.getViewRefreshInfo(oView),
46
66
  oController = oView.getController(),
47
67
  aControlsToRefresh = [];
48
68
 
@@ -52,7 +72,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/core/CommonUtils"], function(CoreL
52
72
  }
53
73
  if (sRefreshStrategy !== "includingDependents") {
54
74
  var aViewControls = oController._findTables();
55
- aControlsToRefresh = aControlsToRefresh.concat(CommonUtils.getControlsForRefresh(oView, aViewControls) || []);
75
+ aControlsToRefresh = aControlsToRefresh.concat(KeepAliveHelper.getControlsForRefresh(oView, aViewControls) || []);
56
76
  }
57
77
  return aControlsToRefresh.reduce(function(aPrevControls, oControl) {
58
78
  if (aPrevControls.indexOf(oControl) === -1) {
@@ -43,14 +43,15 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
43
43
  * @returns The binding expression for the object page title
44
44
  */
45
45
  var getExpressionForTitle = function (oHeaderInfo, oViewData, fullContextPath, oDraftRoot) {
46
- var _oHeaderInfo$Title, _oHeaderInfo$Title2, _oHeaderInfo$Title2$V, _oHeaderInfo$Title2$V2, _oHeaderInfo$Title2$V3, _oHeaderInfo$Title2$V4, _oHeaderInfo$Title2$V5, _oHeaderInfo$Title2$V6, _oHeaderInfo$Title2$V7;
46
+ var _oHeaderInfo$Title, _oHeaderInfo$Title2, _oHeaderInfo$Title3, _oHeaderInfo$Title3$V, _oHeaderInfo$Title3$V2, _oHeaderInfo$Title3$V3, _oHeaderInfo$Title3$V4, _oHeaderInfo$Title3$V5, _oHeaderInfo$Title3$V6, _oHeaderInfo$Title3$V7;
47
47
 
48
48
  var titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, undefined, oViewData.entitySet);
49
49
  var titleWithHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE", oViewData.resourceBundle, undefined, oViewData.entitySet);
50
- var titleForActiveHeaderNoHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle);
51
- var titleValueExpression = annotationExpression(oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title = oHeaderInfo.Title) === null || _oHeaderInfo$Title === void 0 ? void 0 : _oHeaderInfo$Title.Value);
50
+ var oEmptyHeaderInfoTitle = (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === undefined || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === "" || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title = oHeaderInfo.Title) === null || _oHeaderInfo$Title === void 0 ? void 0 : _oHeaderInfo$Title.Value) === "";
51
+ var titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle) : "";
52
+ var titleValueExpression = annotationExpression(oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title2 = oHeaderInfo.Title) === null || _oHeaderInfo$Title2 === void 0 ? void 0 : _oHeaderInfo$Title2.Value);
52
53
 
53
- if (oHeaderInfo !== null && oHeaderInfo !== void 0 && (_oHeaderInfo$Title2 = oHeaderInfo.Title) !== null && _oHeaderInfo$Title2 !== void 0 && (_oHeaderInfo$Title2$V = _oHeaderInfo$Title2.Value) !== null && _oHeaderInfo$Title2$V !== void 0 && (_oHeaderInfo$Title2$V2 = _oHeaderInfo$Title2$V.$target) !== null && _oHeaderInfo$Title2$V2 !== void 0 && (_oHeaderInfo$Title2$V3 = _oHeaderInfo$Title2$V2.annotations) !== null && _oHeaderInfo$Title2$V3 !== void 0 && (_oHeaderInfo$Title2$V4 = _oHeaderInfo$Title2$V3.Common) !== null && _oHeaderInfo$Title2$V4 !== void 0 && (_oHeaderInfo$Title2$V5 = _oHeaderInfo$Title2$V4.Text) !== null && _oHeaderInfo$Title2$V5 !== void 0 && (_oHeaderInfo$Title2$V6 = _oHeaderInfo$Title2$V5.annotations) !== null && _oHeaderInfo$Title2$V6 !== void 0 && (_oHeaderInfo$Title2$V7 = _oHeaderInfo$Title2$V6.UI) !== null && _oHeaderInfo$Title2$V7 !== void 0 && _oHeaderInfo$Title2$V7.TextArrangement) {
54
+ if (oHeaderInfo !== null && oHeaderInfo !== void 0 && (_oHeaderInfo$Title3 = oHeaderInfo.Title) !== null && _oHeaderInfo$Title3 !== void 0 && (_oHeaderInfo$Title3$V = _oHeaderInfo$Title3.Value) !== null && _oHeaderInfo$Title3$V !== void 0 && (_oHeaderInfo$Title3$V2 = _oHeaderInfo$Title3$V.$target) !== null && _oHeaderInfo$Title3$V2 !== void 0 && (_oHeaderInfo$Title3$V3 = _oHeaderInfo$Title3$V2.annotations) !== null && _oHeaderInfo$Title3$V3 !== void 0 && (_oHeaderInfo$Title3$V4 = _oHeaderInfo$Title3$V3.Common) !== null && _oHeaderInfo$Title3$V4 !== void 0 && (_oHeaderInfo$Title3$V5 = _oHeaderInfo$Title3$V4.Text) !== null && _oHeaderInfo$Title3$V5 !== void 0 && (_oHeaderInfo$Title3$V6 = _oHeaderInfo$Title3$V5.annotations) !== null && _oHeaderInfo$Title3$V6 !== void 0 && (_oHeaderInfo$Title3$V7 = _oHeaderInfo$Title3$V6.UI) !== null && _oHeaderInfo$Title3$V7 !== void 0 && _oHeaderInfo$Title3$V7.TextArrangement) {
54
55
  // In case an explicit text arrangement was set we make use of it in the description as well
55
56
  titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
56
57
  }
@@ -116,4 +117,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
116
117
  _exports.getExpressionForSaveButton = getExpressionForSaveButton;
117
118
  return _exports;
118
119
  }, false);
119
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwib0RyYWZ0Um9vdCIsInRpdGxlTm9IZWFkZXJJbmZvIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInJlc291cmNlQnVuZGxlIiwidW5kZWZpbmVkIiwiZW50aXR5U2V0IiwidGl0bGVXaXRoSGVhZGVySW5mbyIsInRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvIiwidGl0bGVWYWx1ZUV4cHJlc3Npb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlRpdGxlIiwiVmFsdWUiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsImNyZWF0ZU1vZGVUaXRsZSIsIlR5cGVOYW1lIiwiY29uY2F0IiwidG9TdHJpbmciLCJhY3RpdmVFeHByZXNzaW9uIiwiRW50aXR5IiwiSXNBY3RpdmUiLCJjb21waWxlQmluZGluZyIsImlmRWxzZSIsImFuZCIsIklzQ3JlYXRlTW9kZSIsImlzRW1wdHkiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJiaW5kaW5nRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24iLCJzYXZlQnV0dG9uVGV4dCIsImNyZWF0ZUJ1dHRvblRleHQiLCJzYXZlRXhwcmVzc2lvbiIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiSXNDcmVhdGVNb2RlU3RpY2t5IiwiRHJhZnQiLCJJc05ld09iamVjdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7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QUFDQSxHQVpNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXR0ZXJzIGZvciB0aGUgT2JqZWN0IFBhZ2VcbmltcG9ydCB7XG5cdGFuZCxcblx0aWZFbHNlLFxuXHRpc0VtcHR5LFxuXHRjb25jYXQsXG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0QmluZGluZ0V4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IFVJLCBEcmFmdCwgRW50aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBDb21tb25VdGlscyB9IGZyb20gXCJzYXAvZmUvY29yZVwiO1xuaW1wb3J0IHsgSGVhZGVySW5mb1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLCBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9VSVwiO1xuaW1wb3J0IHsgaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZUJ1bmRsZSB9IGZyb20gXCJzYXAvYmFzZS9pMThuXCI7XG5cbnR5cGUgVmlld0RhdGEgPSB7XG5cdHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZTtcblx0ZW50aXR5U2V0OiBzdHJpbmc7XG59O1xuXG4vL2BgYG1lcm1haWRcbi8vIGdyYXBoIFREXG4vLyBBW09iamVjdCBQYWdlIFRpdGxlXSAtLT58R2V0IERhdGFGaWVsZCBWYWx1ZXwgQ3tFdmFsdWF0ZSBDcmVhdGUgTW9kZX1cbi8vIEMgLS0+fEluIENyZWF0ZSBNb2RlfCBEe0lzIERhdGFGaWVsZCBWYWx1ZSBlbXB0eX1cbi8vIEQgLS0+fFllc3wgRntJcyB0aGVyZSBhIFR5cGVOYW1lfVxuLy8gRiAtLT58WWVzfCBHW0lzIHRoZXJlIGFuIGN1c3RvbSB0aXRsZV1cbi8vIEcgLS0+fFllc3wgRzFbU2hvdyB0aGUgY3VzdG9tIHRpdGxlICsgJ1R5cGVOYW1lJ11cbi8vIEcgLS0+fE5vfCBHMltEaXNwbGF5IHRoZSBkZWZhdWx0IHRpdGxlICdOZXcgKyBUeXBlTmFtZSddXG4vLyBGIC0tPnxOb3wgSFtJcyB0aGVyZSBhIGN1c3RvbSB0aXRsZV1cbi8vIEggLS0+fFllc3wgSVtTaG93IHRoZSBjdXN0b20gdGl0bGVdXG4vLyBIIC0tPnxOb3wgSltTaG93IHRoZSBkZWZhdWx0ICdVbmFtbmVkIE9iamVjdCddXG4vLyBEIC0tPnxOb3wgRVxuLy8gQyAtLT58Tm90IGluIGNyZWF0ZSBtb2RlfCBFW1Nob3cgRGF0YUZpZWxkIFZhbHVlXVxuLy8gYGBgXG4vKipcbiAqIENvbXB1dGUgdGhlIHRpdGxlIGZvciB0aGUgb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgdmlldyBkYXRhIG9iamVjdCB3ZSdyZSBjdXJyZW50bHkgb25cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHBhcmFtIG9EcmFmdFJvb3RcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSB0aXRsZVxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvclRpdGxlID0gZnVuY3Rpb24oXG5cdG9IZWFkZXJJbmZvOiBIZWFkZXJJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRvRHJhZnRSb290OiBPYmplY3QgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0aXRsZU5vSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9ORVdfT0JKRUNUXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSwgdW5kZWZpbmVkLCBvVmlld0RhdGEuZW50aXR5U2V0KTtcblxuXHRjb25zdCB0aXRsZVdpdGhIZWFkZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfT0JKRUNUX1BBR0VfSEVBREVSX1RJVExFXCIsXG5cdFx0b1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRvVmlld0RhdGEuZW50aXR5U2V0XG5cdCk7XG5cblx0Y29uc3QgdGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8gPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIixcblx0XHRvVmlld0RhdGEucmVzb3VyY2VCdW5kbGVcblx0KTtcblxuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgVHlwZU5hbWUgZGVmaW5lZCwgc2hvdyB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnLCBvdGhlcndpc2Ugc2hvdyB0aGUgY3VzdG9tIHRpdGxlIG9yIHRoZSBkZWZhdWx0ICdOZXcgb2JqZWN0J1xuXHRjb25zdCBjcmVhdGVNb2RlVGl0bGUgPSBvSGVhZGVySW5mbz8uVHlwZU5hbWVcblx0XHQ/IGNvbmNhdCh0aXRsZVdpdGhIZWFkZXJJbmZvLCBcIjogXCIsIGFubm90YXRpb25FeHByZXNzaW9uKG9IZWFkZXJJbmZvLlR5cGVOYW1lLnRvU3RyaW5nKCkpKVxuXHRcdDogdGl0bGVOb0hlYWRlckluZm87XG5cdGNvbnN0IGFjdGl2ZUV4cHJlc3Npb24gPSBvRHJhZnRSb290ID8gRW50aXR5LklzQWN0aXZlIDogdHJ1ZTtcblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0aWZFbHNlKFxuXHRcdFx0Ly8gSWYgQ3JlYXRlIE1vZGUgJiYgRW1wdHkgZXhwcmVzc2lvblxuXHRcdFx0YW5kKFVJLklzQ3JlYXRlTW9kZSwgdGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbikpLFxuXG5cdFx0XHRjcmVhdGVNb2RlVGl0bGUsXG5cdFx0XHQvLyBPdGhlcndpc2Ugc2hvdyB0aGUgZGVmYXVsdCBleHByZXNzaW9uXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChhY3RpdmVFeHByZXNzaW9uLCB0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0VtcHR5KHRpdGxlVmFsdWVFeHByZXNzaW9uKSksXG5cdFx0XHRcdHRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvLFxuXHRcdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvblxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBleHByZXNzaW9uIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9IZWFkZXJJbmZvIFRoZSBAVUkuSGVhZGVySW5mbyBhbm5vdGF0aW9uIGNvbnRlbnRcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIGRlc2NyaXB0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24gPSBmdW5jdGlvbihcblx0b0hlYWRlckluZm86IEhlYWRlckluZm9UeXBlIHwgdW5kZWZpbmVkLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRsZXQgYmluZGluZ0V4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbigob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0YmluZGluZ0V4cHJlc3Npb24gPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKGJpbmRpbmdFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBzYXZlIGJ1dHRvbi5cbiAqXG4gKiBAcGFyYW0gb1ZpZXdEYXRhIFRoZSBjdXJyZW50IHZpZXcgZGF0YVxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgcGF0aCB1c2VkIHVwIHVudGlsIGhlcmVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCBzaG93cyB0aGUgcmlnaHQgc2F2ZSBidXR0b24gdGV4dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24gPSBmdW5jdGlvbihvVmlld0RhdGE6IFZpZXdEYXRhLCBmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgc2F2ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfU0FWRVwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpO1xuXHRjb25zdCBjcmVhdGVCdXR0b25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX0NSRUFURVwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpO1xuXHRsZXQgc2F2ZUV4cHJlc3Npb247XG5cdGlmIChpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoZnVsbENvbnRleHRQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdC8vIElmIHdlJ3JlIGluIHN0aWNreSBtb2RlIEFORCB0aGUgdWkgaXMgaW4gY3JlYXRlIG1vZGUsIHNob3cgQ3JlYXRlLCBlbHNlIHNob3cgU2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKFVJLklzQ3JlYXRlTW9kZVN0aWNreSwgY3JlYXRlQnV0dG9uVGV4dCwgc2F2ZUJ1dHRvblRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHdlJ3JlIGluIGRyYWZ0IEFORCB0aGUgZHJhZnQgaXMgYSBuZXcgb2JqZWN0ICghSXNBY3RpdmVFbnRpdHkgJiYgIUhhc0FjdGl2ZUVudGl0eSksIHNob3cgY3JlYXRlLCBlbHNlIHNob3cgc2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKERyYWZ0LklzTmV3T2JqZWN0LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKHNhdmVFeHByZXNzaW9uKTtcbn07XG4iXX0=
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwib0RyYWZ0Um9vdCIsInRpdGxlTm9IZWFkZXJJbmZvIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInJlc291cmNlQnVuZGxlIiwidW5kZWZpbmVkIiwiZW50aXR5U2V0IiwidGl0bGVXaXRoSGVhZGVySW5mbyIsIm9FbXB0eUhlYWRlckluZm9UaXRsZSIsIlRpdGxlIiwiVmFsdWUiLCJ0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyIsInRpdGxlVmFsdWVFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsImNyZWF0ZU1vZGVUaXRsZSIsIlR5cGVOYW1lIiwiY29uY2F0IiwidG9TdHJpbmciLCJhY3RpdmVFeHByZXNzaW9uIiwiRW50aXR5IiwiSXNBY3RpdmUiLCJjb21waWxlQmluZGluZyIsImlmRWxzZSIsImFuZCIsIklzQ3JlYXRlTW9kZSIsImlzRW1wdHkiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJiaW5kaW5nRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24iLCJzYXZlQnV0dG9uVGV4dCIsImNyZWF0ZUJ1dHRvblRleHQiLCJzYXZlRXhwcmVzc2lvbiIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiSXNDcmVhdGVNb2RlU3RpY2t5IiwiRHJhZnQiLCJJc05ld09iamVjdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLHFCQUFxQixHQUFHLFVBQ3BDQyxXQURvQyxFQUVwQ0MsU0FGb0MsRUFHcENDLGVBSG9DLEVBSXBDQyxVQUpvQyxFQUtSO0FBQUE7O0FBQzVCLFFBQU1DLGlCQUFpQixHQUFHQyxXQUFXLENBQUNDLGlCQUFaLENBQThCLGNBQTlCLEVBQThDTCxTQUFTLENBQUNNLGNBQXhELEVBQXdFQyxTQUF4RSxFQUFtRlAsU0FBUyxDQUFDUSxTQUE3RixDQUExQjtBQUVBLFFBQU1DLG1CQUFtQixHQUFHTCxXQUFXLENBQUNDLGlCQUFaLENBQzNCLHNEQUQyQixFQUUzQkwsU0FBUyxDQUFDTSxjQUZpQixFQUczQkMsU0FIMkIsRUFJM0JQLFNBQVMsQ0FBQ1EsU0FKaUIsQ0FBNUI7QUFPQSxRQUFNRSxxQkFBcUIsR0FDMUIsQ0FBQVgsV0FBVyxTQUFYLElBQUFBLFdBQVcsV0FBWCxZQUFBQSxXQUFXLENBQUVZLEtBQWIsTUFBdUJKLFNBQXZCLElBQW9DLENBQUFSLFdBQVcsU0FBWCxJQUFBQSxXQUFXLFdBQVgsWUFBQUEsV0FBVyxDQUFFWSxLQUFiLE1BQXVCLEVBQTNELElBQWlFLENBQUNaLFdBQUQsYUFBQ0EsV0FBRCw2Q0FBQ0EsV0FBVyxDQUFFWSxLQUFkLDBFQUF3Q0MsS0FBeEMsTUFBa0QsRUFEcEg7QUFHQSxRQUFNQyxnQ0FBZ0MsR0FBRyxDQUFDSCxxQkFBRCxHQUN0Q04sV0FBVyxDQUFDQyxpQkFBWixDQUE4QixxRUFBOUIsRUFBcUdMLFNBQVMsQ0FBQ00sY0FBL0csQ0FEc0MsR0FFdEMsRUFGSDtBQUlBLFFBQUlRLG9CQUFvQixHQUFHQyxvQkFBb0IsQ0FBRWhCLFdBQUYsYUFBRUEsV0FBRiw4Q0FBRUEsV0FBVyxDQUFFWSxLQUFmLHdEQUFDLG9CQUF3Q0MsS0FBekMsQ0FBL0M7O0FBQ0EsUUFBS2IsV0FBTCxhQUFLQSxXQUFMLHNDQUFLQSxXQUFXLENBQUVZLEtBQWxCLHlFQUFJLG9CQUF3Q0MsS0FBNUMsNEVBQUksc0JBQStDSSxPQUFuRCw2RUFBSSx1QkFBd0RDLFdBQTVELDZFQUFJLHVCQUFxRUMsTUFBekUsNkVBQUksdUJBQTZFQyxJQUFqRiw2RUFBSSx1QkFBbUZGLFdBQXZGLDZFQUFJLHVCQUFnR0csRUFBcEcsbURBQUksdUJBQW9HQyxlQUF4RyxFQUF5SDtBQUN4SDtBQUNBUCxNQUFBQSxvQkFBb0IsR0FBR1EscUNBQXFDLENBQUNSLG9CQUFELEVBQXVCYixlQUF2QixDQUE1RDtBQUNBOztBQUVEYSxJQUFBQSxvQkFBb0IsR0FBR1Msc0JBQXNCLENBQUNULG9CQUFELEVBQXVCYixlQUF2QixDQUE3QyxDQXZCNEIsQ0F5QjVCOztBQUNBLFFBQU11QixlQUFlLEdBQUd6QixXQUFXLFNBQVgsSUFBQUEsV0FBVyxXQUFYLElBQUFBLFdBQVcsQ0FBRTBCLFFBQWIsR0FDckJDLE1BQU0sQ0FBQ2pCLG1CQUFELEVBQXNCLElBQXRCLEVBQTRCTSxvQkFBb0IsQ0FBQ2hCLFdBQVcsQ0FBQzBCLFFBQVosQ0FBcUJFLFFBQXJCLEVBQUQsQ0FBaEQsQ0FEZSxHQUVyQnhCLGlCQUZIO0FBR0EsUUFBTXlCLGdCQUFnQixHQUFHMUIsVUFBVSxHQUFHMkIsTUFBTSxDQUFDQyxRQUFWLEdBQXFCLElBQXhEO0FBRUEsV0FBT0MsY0FBYyxDQUNwQkMsTUFBTSxFQUNMO0FBQ0FDLElBQUFBLEdBQUcsQ0FBQ2IsRUFBRSxDQUFDYyxZQUFKLEVBQWtCcEIsb0JBQW9CLElBQUlxQixPQUFPLENBQUNyQixvQkFBRCxDQUFqRCxDQUZFLEVBSUxVLGVBSkssRUFLTDtBQUNBUSxJQUFBQSxNQUFNLENBQ0xDLEdBQUcsQ0FBQ0wsZ0JBQUQsRUFBbUJkLG9CQUFvQixJQUFJcUIsT0FBTyxDQUFDckIsb0JBQUQsQ0FBbEQsQ0FERSxFQUVMRCxnQ0FGSyxFQUdMQyxvQkFISyxDQU5ELENBRGMsQ0FBckI7QUFjQSxHQWxETTtBQW9EUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNc0IsMkJBQTJCLEdBQUcsVUFDMUNyQyxXQUQwQyxFQUUxQ0UsZUFGMEMsRUFHZDtBQUFBOztBQUM1QixRQUFJb0MsaUJBQWlCLEdBQUd0QixvQkFBb0IsQ0FBRWhCLFdBQUYsYUFBRUEsV0FBRixnREFBRUEsV0FBVyxDQUFFdUMsV0FBZiwwREFBQyxzQkFBOEMxQixLQUEvQyxDQUE1Qzs7QUFDQSxRQUFLYixXQUFMLGFBQUtBLFdBQUwseUNBQUtBLFdBQVcsQ0FBRXVDLFdBQWxCLDZFQUFJLHVCQUE4QzFCLEtBQWxELDZFQUFJLHVCQUFxREksT0FBekQsNkVBQUksdUJBQThEQyxXQUFsRSw2RUFBSSx1QkFBMkVDLE1BQS9FLDZFQUFJLHVCQUFtRkMsSUFBdkYsNkVBQUksdUJBQXlGRixXQUE3Riw2RUFBSSx1QkFBc0dHLEVBQTFHLG1EQUFJLHVCQUEwR0MsZUFBOUcsRUFBK0g7QUFDOUg7QUFDQWdCLE1BQUFBLGlCQUFpQixHQUFHZixxQ0FBcUMsQ0FBQ2UsaUJBQUQsRUFBb0JwQyxlQUFwQixDQUF6RDtBQUNBOztBQUVELFdBQU84QixjQUFjLENBQUNSLHNCQUFzQixDQUFDYyxpQkFBRCxFQUFvQnBDLGVBQXBCLENBQXZCLENBQXJCO0FBQ0EsR0FYTTtBQWFQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1zQywwQkFBMEIsR0FBRyxVQUFTdkMsU0FBVCxFQUE4QkMsZUFBOUIsRUFBK0Y7QUFDeEksUUFBTXVDLGNBQWMsR0FBR3BDLFdBQVcsQ0FBQ0MsaUJBQVosQ0FBOEIsdUJBQTlCLEVBQXVETCxTQUFTLENBQUNNLGNBQWpFLENBQXZCO0FBQ0EsUUFBTW1DLGdCQUFnQixHQUFHckMsV0FBVyxDQUFDQyxpQkFBWixDQUE4Qix5QkFBOUIsRUFBeURMLFNBQVMsQ0FBQ00sY0FBbkUsQ0FBekI7QUFDQSxRQUFJb0MsY0FBSjs7QUFDQSxRQUFJQyx3QkFBd0IsQ0FBQzFDLGVBQWUsQ0FBQzJDLGlCQUFqQixDQUE1QixFQUFpRTtBQUNoRTtBQUNBRixNQUFBQSxjQUFjLEdBQUdWLE1BQU0sQ0FBQ1osRUFBRSxDQUFDeUIsa0JBQUosRUFBd0JKLGdCQUF4QixFQUEwQ0QsY0FBMUMsQ0FBdkI7QUFDQSxLQUhELE1BR087QUFDTjtBQUNBRSxNQUFBQSxjQUFjLEdBQUdWLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDQyxXQUFQLEVBQW9CTixnQkFBcEIsRUFBc0NELGNBQXRDLENBQXZCO0FBQ0E7O0FBQ0QsV0FBT1QsY0FBYyxDQUFDVyxjQUFELENBQXJCO0FBQ0EsR0FaTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0dGVycyBmb3IgdGhlIE9iamVjdCBQYWdlXG5pbXBvcnQge1xuXHRhbmQsXG5cdGlmRWxzZSxcblx0aXNFbXB0eSxcblx0Y29uY2F0LFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdEJpbmRpbmdFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBVSSwgRHJhZnQsIEVudGl0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmVcIjtcbmltcG9ydCB7IEhlYWRlckluZm9UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbiwgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHsgRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VCdW5kbGUgfSBmcm9tIFwic2FwL2Jhc2UvaTE4blwiO1xuXG50eXBlIFZpZXdEYXRhID0ge1xuXHRyZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGU7XG5cdGVudGl0eVNldDogc3RyaW5nO1xufTtcblxuLy9gYGBtZXJtYWlkXG4vLyBncmFwaCBURFxuLy8gQVtPYmplY3QgUGFnZSBUaXRsZV0gLS0+fEdldCBEYXRhRmllbGQgVmFsdWV8IEN7RXZhbHVhdGUgQ3JlYXRlIE1vZGV9XG4vLyBDIC0tPnxJbiBDcmVhdGUgTW9kZXwgRHtJcyBEYXRhRmllbGQgVmFsdWUgZW1wdHl9XG4vLyBEIC0tPnxZZXN8IEZ7SXMgdGhlcmUgYSBUeXBlTmFtZX1cbi8vIEYgLS0+fFllc3wgR1tJcyB0aGVyZSBhbiBjdXN0b20gdGl0bGVdXG4vLyBHIC0tPnxZZXN8IEcxW1Nob3cgdGhlIGN1c3RvbSB0aXRsZSArICdUeXBlTmFtZSddXG4vLyBHIC0tPnxOb3wgRzJbRGlzcGxheSB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnXVxuLy8gRiAtLT58Tm98IEhbSXMgdGhlcmUgYSBjdXN0b20gdGl0bGVdXG4vLyBIIC0tPnxZZXN8IElbU2hvdyB0aGUgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58Tm98IEpbU2hvdyB0aGUgZGVmYXVsdCAnVW5hbW5lZCBPYmplY3QnXVxuLy8gRCAtLT58Tm98IEVcbi8vIEMgLS0+fE5vdCBpbiBjcmVhdGUgbW9kZXwgRVtTaG93IERhdGFGaWVsZCBWYWx1ZV1cbi8vIGBgYFxuLyoqXG4gKiBDb21wdXRlIHRoZSB0aXRsZSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIG9IZWFkZXJJbmZvIFRoZSBAVUkuSGVhZGVySW5mbyBhbm5vdGF0aW9uIGNvbnRlbnRcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIHZpZXcgZGF0YSBvYmplY3Qgd2UncmUgY3VycmVudGx5IG9uXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEBwYXJhbSBvRHJhZnRSb290XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgdGl0bGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JUaXRsZSA9IGZ1bmN0aW9uKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0b0RyYWZ0Um9vdDogT2JqZWN0IHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGl0bGVOb0hlYWRlckluZm8gPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfTkVXX09CSkVDVFwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUsIHVuZGVmaW5lZCwgb1ZpZXdEYXRhLmVudGl0eVNldCk7XG5cblx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSxcblx0XHR1bmRlZmluZWQsXG5cdFx0b1ZpZXdEYXRhLmVudGl0eVNldFxuXHQpO1xuXG5cdGNvbnN0IG9FbXB0eUhlYWRlckluZm9UaXRsZSA9XG5cdFx0b0hlYWRlckluZm8/LlRpdGxlID09PSB1bmRlZmluZWQgfHwgb0hlYWRlckluZm8/LlRpdGxlID09PSBcIlwiIHx8IChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSA9PT0gXCJcIjtcblxuXHRjb25zdCB0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyA9ICFvRW1wdHlIZWFkZXJJbmZvVGl0bGVcblx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRV9OT19IRUFERVJfSU5GT1wiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpXG5cdFx0OiBcIlwiO1xuXG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24odGl0bGVWYWx1ZUV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblxuXHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkodGl0bGVWYWx1ZUV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cblx0Ly8gSWYgdGhlcmUgaXMgYSBUeXBlTmFtZSBkZWZpbmVkLCBzaG93IHRoZSBkZWZhdWx0IHRpdGxlICdOZXcgKyBUeXBlTmFtZScsIG90aGVyd2lzZSBzaG93IHRoZSBjdXN0b20gdGl0bGUgb3IgdGhlIGRlZmF1bHQgJ05ldyBvYmplY3QnXG5cdGNvbnN0IGNyZWF0ZU1vZGVUaXRsZSA9IG9IZWFkZXJJbmZvPy5UeXBlTmFtZVxuXHRcdD8gY29uY2F0KHRpdGxlV2l0aEhlYWRlckluZm8sIFwiOiBcIiwgYW5ub3RhdGlvbkV4cHJlc3Npb24ob0hlYWRlckluZm8uVHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0OiB0aXRsZU5vSGVhZGVySW5mbztcblx0Y29uc3QgYWN0aXZlRXhwcmVzc2lvbiA9IG9EcmFmdFJvb3QgPyBFbnRpdHkuSXNBY3RpdmUgOiB0cnVlO1xuXG5cdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRpZkVsc2UoXG5cdFx0XHQvLyBJZiBDcmVhdGUgTW9kZSAmJiBFbXB0eSBleHByZXNzaW9uXG5cdFx0XHRhbmQoVUkuSXNDcmVhdGVNb2RlLCB0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0VtcHR5KHRpdGxlVmFsdWVFeHByZXNzaW9uKSksXG5cblx0XHRcdGNyZWF0ZU1vZGVUaXRsZSxcblx0XHRcdC8vIE90aGVyd2lzZSBzaG93IHRoZSBkZWZhdWx0IGV4cHJlc3Npb25cblx0XHRcdGlmRWxzZShcblx0XHRcdFx0YW5kKGFjdGl2ZUV4cHJlc3Npb24sIHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pKSxcblx0XHRcdFx0dGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8sXG5cdFx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGxldCBiaW5kaW5nRXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRiaW5kaW5nRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24oYmluZGluZ0V4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZm9ybWF0VmFsdWVSZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHNhdmUgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uKG9WaWV3RGF0YTogVmlld0RhdGEsIGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBzYXZlQnV0dG9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGNvbnN0IGNyZWF0ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfQ1JFQVRFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGxldCBzYXZlRXhwcmVzc2lvbjtcblx0aWYgKGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlU3RpY2t5LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoc2F2ZUV4cHJlc3Npb24pO1xufTtcbiJdfQ==
@@ -59,10 +59,12 @@ export const getExpressionForTitle = function(
59
59
  oViewData.entitySet
60
60
  );
61
61
 
62
- const titleForActiveHeaderNoHeaderInfo = CommonUtils.getTranslatedText(
63
- "T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO",
64
- oViewData.resourceBundle
65
- );
62
+ const oEmptyHeaderInfoTitle =
63
+ oHeaderInfo?.Title === undefined || oHeaderInfo?.Title === "" || (oHeaderInfo?.Title as DataFieldTypes)?.Value === "";
64
+
65
+ const titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle
66
+ ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle)
67
+ : "";
66
68
 
67
69
  let titleValueExpression = annotationExpression((oHeaderInfo?.Title as DataFieldTypes)?.Value);
68
70
  if ((oHeaderInfo?.Title as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
@@ -19,15 +19,22 @@
19
19
  text="{sap.fe.i18n>T_HEADER_DATAPOINT_TITLE_LINK_EXTERNAL_ARIA}"
20
20
  id="{= ID.generate(['fe', ${converterHeaderFacet>targetAnnotationValue}, 'AriaText']) }"
21
21
  />
22
- <Link
23
- unittest:id="headerDataPointLinkTest"
24
- id="{= ID.generate(['fe', 'HeaderDPLink', ${converterHeaderFacet>targetAnnotationValue}]) }"
25
- text="{dataPoint>Title@@MODEL.value}"
22
+ <Title
23
+ unittest:id="headerDataPointLinkTitleTest"
24
+ level="H3"
26
25
  visible="{= COMMON.getHeaderDataPointLinkVisibility(ID.generate(['fe', 'HeaderDPLink', ${converterHeaderFacet>targetAnnotationValue}]), true, ${dataPoint>@@FIELD.isNotAlwaysHidden}) }"
27
- press="{= OP.getPressExpressionForLink(${viewData>controlConfiguration}[${converterHeaderFacet>targetAnnotationValue}]['navigation'], ${manifest>/sap.app/crossNavigation/outbounds})}"
28
- ariaDescribedBy="{= ID.generate(['fe', ${converterHeaderFacet>targetAnnotationValue}, 'AriaText']) }"
29
- class="sapUiTinyMarginBottom"
30
- />
26
+ >
27
+ <content>
28
+ <Link
29
+ unittest:id="headerDataPointLinkInsideTitleTest"
30
+ id="{= ID.generate(['fe', 'HeaderDPLink', ${converterHeaderFacet>targetAnnotationValue}]) }"
31
+ text="{dataPoint>Title@@MODEL.value}"
32
+ press="{= OP.getPressExpressionForLink(${viewData>controlConfiguration}[${converterHeaderFacet>targetAnnotationValue}]['navigation'], ${manifest>/sap.app/crossNavigation/outbounds})}"
33
+ ariaDescribedBy="{= ID.generate(['fe', ${converterHeaderFacet>targetAnnotationValue}, 'AriaText']) }"
34
+ class="sapUiTinyMarginBottom"
35
+ />
36
+ </content>
37
+ </Title>
31
38
 
32
39
  <Title
33
40
  unittest:id="headerDataPointTitleTest"
@@ -47,14 +54,17 @@
47
54
  text="{sap.fe.i18n>T_COMMON_HEADERDP_TITLE_LINK_INPAGE_ARIA}"
48
55
  id="{= ID.generate(['fe', ${converterHeaderFacet>targetAnnotationValue}, 'AriaText']) }"
49
56
  />
50
- <Link
51
- unittest:id="HeaderDataPointInternalLinkTest"
52
- id="{= ID.generate(['fe', 'HeaderDPLink', ${headerFacet>Target/$AnnotationPath}]) }"
53
- text="{dataPoint>Title@@MODEL.value}"
54
- visible="{= !!${dataPoint>Title}}"
55
- press="{= OP.getPressExpressionForLink(${viewData>controlConfiguration}[${converterHeaderFacet>targetAnnotationValue}]['navigation']) }"
56
- ariaDescribedBy="{= ID.generate(['fe', ${converterHeaderFacet>targetAnnotationValue}, 'AriaText']) }"
57
- />
57
+ <Title level="H3" visible="{= !!${dataPoint>Title}}">
58
+ <content>
59
+ <Link
60
+ unittest:id="HeaderDataPointInternalLinkTest"
61
+ id="{= ID.generate(['fe', 'HeaderDPLink', ${headerFacet>Target/$AnnotationPath}]) }"
62
+ text="{dataPoint>Title@@MODEL.value}"
63
+ press="{= OP.getPressExpressionForLink(${viewData>controlConfiguration}[${converterHeaderFacet>targetAnnotationValue}]['navigation']) }"
64
+ ariaDescribedBy="{= ID.generate(['fe', ${converterHeaderFacet>targetAnnotationValue}, 'AriaText']) }"
65
+ />
66
+ </content>
67
+ </Title>
58
68
  </template:elseif>
59
69
  <template:else>
60
70
  <Title
@@ -3,12 +3,12 @@
3
3
  xmlns="sap.m"
4
4
  xmlns:internalMacro="sap.fe.macros.internal"
5
5
  xmlns:core="sap.ui.core"
6
- xmlns:l="sap.ui.layout"
7
6
  xmlns:unittest="http://schemas.sap.com/sapui5/preprocessorextension/sap.fe.unittesting/1"
8
7
  template:require="{
9
8
  MODEL: 'sap/ui/model/odata/v4/AnnotationHelper',
10
9
  ID: 'sap/fe/core/helpers/StableIdHelper',
11
- OP: 'sap/fe/templates/ObjectPage/AnnotationHelper'
10
+ OP: 'sap/fe/templates/ObjectPage/AnnotationHelper',
11
+ FIELD: 'sap/fe/macros/field/FieldHelper'
12
12
  }"
13
13
  >
14
14
  <VBox id="{= ${converterHeaderFacet>headerFormData/id} }" displayInline="true">
@@ -38,10 +38,10 @@
38
38
  <Label
39
39
  unittest:id="ObjectPageHeaderLabelTest"
40
40
  id="{= ID.generate([ ${formElement>idPrefix}, 'Label'])}"
41
- text="{formElement>label}:"
42
- visible="{= ${formElement>label} ? 'true':'false'}"
41
+ text="{= ${dataField>@@FIELD.computeLabelText} + ':' }"
42
+ visible="{= !!${dataField>@@FIELD.computeLabelText} }"
43
43
  class="sapUiTinyMarginEnd"
44
- vAlign="{= ${formElement>isValueMultilineText} === true ? 'Middle' : 'Bottom' }"
44
+ vAlign="{= ${formElement>isValueMultilineText} === true ? 'Middle' : 'Inherit' }"
45
45
  />
46
46
  <internalMacro:Field
47
47
  idPrefix="{formElement>idPrefix}"
@@ -9,7 +9,7 @@ sap.ui.define(
9
9
  "./RootContainerBaseController",
10
10
  "sap/f/FlexibleColumnLayoutSemanticHelper",
11
11
  "sap/ui/core/Component",
12
- "sap/fe/core/CommonUtils",
12
+ "sap/fe/core/helpers/KeepAliveHelper",
13
13
  "sap/fe/core/controllerextensions/ViewState",
14
14
  "sap/m/Link",
15
15
  "sap/m/MessagePage",
@@ -21,7 +21,7 @@ sap.ui.define(
21
21
  BaseController,
22
22
  FlexibleColumnLayoutSemanticHelper,
23
23
  Component,
24
- CommonUtils,
24
+ KeepAliveHelper,
25
25
  ViewState,
26
26
  Link,
27
27
  MessagePage,
@@ -536,9 +536,11 @@ sap.ui.define(
536
536
  if (FCLLevel >= this._oFCLConfig.maxColumnsCount) {
537
537
  // The view is on a level > max number of columns. It's always fullscreen without close/exit buttons
538
538
  viewColumn = oFclColName[this._oFCLConfig.maxColumnsCount - 1];
539
+ oUIState.actionButtonsInfo.midColumn.fullScreen = null;
539
540
  oUIState.actionButtonsInfo.midColumn.exitFullScreen = null;
540
541
  oUIState.actionButtonsInfo.midColumn.closeColumn = null;
541
542
  oUIState.actionButtonsInfo.endColumn.exitFullScreen = null;
543
+ oUIState.actionButtonsInfo.endColumn.fullScreen = null;
542
544
  oUIState.actionButtonsInfo.endColumn.closeColumn = null;
543
545
  } else {
544
546
  viewColumn = oFclColName[FCLLevel];
@@ -558,7 +560,13 @@ sap.ui.define(
558
560
  // so we have to add this info manually
559
561
  oUIState.actionButtonsInfo.beginColumn = { fullScreen: null, exitFullScreen: null, closeColumn: null };
560
562
 
561
- oView.getModel("fclhelper").setProperty("/actionButtonsInfo", Object.assign({}, oUIState.actionButtonsInfo[viewColumn]));
563
+ var oActionButtonInfos = Object.assign({}, oUIState.actionButtonsInfo[viewColumn]);
564
+ oActionButtonInfos.switchVisible = oActionButtonInfos.fullScreen !== null || oActionButtonInfos.exitFullScreen !== null;
565
+ oActionButtonInfos.switchIcon =
566
+ oActionButtonInfos.fullScreen !== null ? "sap-icon://full-screen" : "sap-icon://exit-full-screen";
567
+ oActionButtonInfos.isFullScreen = oActionButtonInfos.fullScreen === null;
568
+
569
+ oView.getModel("fclhelper").setProperty("/actionButtonsInfo", oActionButtonInfos);
562
570
 
563
571
  oView.getModel("fclhelper").setProperty("/showShareIcon", this._updateShareButtonVisibility(viewColumn, sLayout));
564
572
  },
@@ -589,11 +597,7 @@ sap.ui.define(
589
597
 
590
598
  // Update the layout of the FlexibleColumnLayout
591
599
  if (sLayout) {
592
- if (!this.getFclControl().getModel("fcl")) {
593
- this.getFclControl().setModel(new JSONModel(), "fcl");
594
- this.getFclControl().bindProperty("layout", "fcl>/layout");
595
- }
596
- this.getFclControl().setProperty("layout", sLayout);
600
+ this.getFclControl().setLayout(sLayout);
597
601
  }
598
602
  }
599
603
  },
@@ -749,13 +753,63 @@ sap.ui.define(
749
753
  },
750
754
 
751
755
  onContainerReady: function() {
756
+ // Restore views if neccessary.
752
757
  var aViews = this._getAllVisibleViews();
753
758
  var aRestorePromises = [];
754
759
  aViews.reduce(function(aPromises, oTargetView) {
755
- aPromises.push(CommonUtils.restoreView(oTargetView));
760
+ aPromises.push(KeepAliveHelper.restoreView(oTargetView));
756
761
  return aPromises;
757
762
  }, aRestorePromises);
758
763
  return Promise.all(aRestorePromises);
764
+ },
765
+
766
+ getRightmostContext: function() {
767
+ var oContext;
768
+ switch (this.getFclControl().getLayout()) {
769
+ case sap.f.LayoutType.OneColumn:
770
+ if (this.getFclControl().getCurrentBeginColumnPage()) {
771
+ oContext = _getViewFromContainer(this.getFclControl().getCurrentBeginColumnPage()).getBindingContext();
772
+ }
773
+ break;
774
+
775
+ case sap.f.LayoutType.TwoColumnsBeginExpanded:
776
+ case sap.f.LayoutType.TwoColumnsMidExpanded:
777
+ if (this.getFclControl().getCurrentMidColumnPage()) {
778
+ oContext = _getViewFromContainer(this.getFclControl().getCurrentMidColumnPage()).getBindingContext();
779
+ }
780
+ break;
781
+
782
+ case sap.f.LayoutType.ThreeColumnsEndExpanded:
783
+ case sap.f.LayoutType.ThreeColumnsMidExpanded:
784
+ case sap.f.LayoutType.ThreeColumnsMidExpandedEndHidden:
785
+ case sap.f.LayoutType.ThreeColumnsBeginExpandedEndHidden:
786
+ case sap.f.LayoutType.EndColumnFullScreen:
787
+ if (this.getFclControl().getCurrentEndColumnPage()) {
788
+ oContext = _getViewFromContainer(this.getFclControl().getCurrentEndColumnPage()).getBindingContext();
789
+ }
790
+ break;
791
+
792
+ case sap.f.LayoutType.MidColumnFullScreen:
793
+ // In this case we need to determine if this mid column fullscreen comes from a 2 or a 3 column layout
794
+ var sLayoutWhenExitFullScreen = this.getHelper().getCurrentUIState().actionButtonsInfo.midColumn.exitFullScreen;
795
+ if (sLayoutWhenExitFullScreen.indexOf("ThreeColumn") >= 0) {
796
+ // We come from a 3 column layout
797
+ if (this.getFclControl().getCurrentEndColumnPage()) {
798
+ oContext = _getViewFromContainer(this.getFclControl().getCurrentEndColumnPage()).getBindingContext();
799
+ }
800
+ } else {
801
+ // We come from a 2 column layout
802
+ if (this.getFclControl().getCurrentMidColumnPage()) {
803
+ oContext = _getViewFromContainer(this.getFclControl().getCurrentMidColumnPage()).getBindingContext();
804
+ }
805
+ }
806
+ break;
807
+
808
+ default:
809
+ Log.error("Unhandled switch case for " + this.getFclControl().getLayout());
810
+ }
811
+
812
+ return oContext;
759
813
  }
760
814
  });
761
815
  },