@sapui5/sap.fe.core 1.124.8 → 1.124.9

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.
@@ -1551,6 +1551,10 @@ class EditFlow extends BaseControllerExtension {
1551
1551
  );
1552
1552
  }
1553
1553
 
1554
+ // Execute the registered deferred SideEffects which have not be executed yet for the page context
1555
+ // Can occur when shortcut is used to save the document.
1556
+ await this.base._sideEffects.handlePageChangeContext(oContext);
1557
+
1554
1558
  // The $auto queue can only have pending changes at this point when SAVE was clicked immediately after changing a field.
1555
1559
  // In this case the $auto queue is locked therefore the following submit batch should not create a separate batch request.
1556
1560
  // It is done in order to make sure that patch, draftprepare, draftactivate each have their own changeset
@@ -2120,7 +2124,7 @@ class EditFlow extends BaseControllerExtension {
2120
2124
  if (!mParameters.entitySetName && mParameters.contexts && mParameters.model) {
2121
2125
  mParameters.entitySetName = mParameters.model
2122
2126
  .getMetaModel()
2123
- .getMetaContext((mParameters.contexts as Context).getPath())
2127
+ .getMetaContext((Array.isArray(mParameters.contexts) ? mParameters.contexts[0] : mParameters.contexts).getPath())
2124
2128
  .getObject("@sapui.name");
2125
2129
  }
2126
2130
  let oControl: Control | undefined;
@@ -81,32 +81,33 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/pageReady/DataQ
81
81
  const mainObjectBinding = mainBindingContext.getBinding();
82
82
  this.queryWatcher.registerBinding(mainObjectBinding);
83
83
  }
84
- const aPromises = [];
85
- const aControls = this.getView().findAggregatedObjects(true);
86
- aControls.forEach(oElement => {
87
- const oObjectBinding = oElement.getObjectBinding();
88
- if (oObjectBinding) {
84
+ const promises = [];
85
+ const controls = this.getView().findAggregatedObjects(true);
86
+ controls.forEach(element => {
87
+ const objectBinding = element.getObjectBinding();
88
+ if (objectBinding) {
89
89
  // Register on all object binding (mostly used on object pages)
90
- this.queryWatcher.registerBinding(oObjectBinding);
90
+ this.queryWatcher.registerBinding(objectBinding);
91
91
  } else {
92
- const aBindingKeys = Object.keys((oElement === null || oElement === void 0 ? void 0 : oElement.mBindingInfos) ?? {});
93
- aBindingKeys.forEach(sPropertyName => {
94
- var _oElement$mBindingInf;
95
- const oListBinding = oElement === null || oElement === void 0 ? void 0 : (_oElement$mBindingInf = oElement.mBindingInfos) === null || _oElement$mBindingInf === void 0 ? void 0 : _oElement$mBindingInf[sPropertyName].binding;
96
- if (oListBinding && oListBinding.isA("sap.ui.model.odata.v4.ODataListBinding")) {
97
- this.queryWatcher.registerBinding(oListBinding);
92
+ const aBindingKeys = Object.keys((element === null || element === void 0 ? void 0 : element.mBindingInfos) ?? {});
93
+ aBindingKeys.forEach(propertyName => {
94
+ var _element$mBindingInfo;
95
+ const listBinding = element === null || element === void 0 ? void 0 : (_element$mBindingInfo = element.mBindingInfos) === null || _element$mBindingInfo === void 0 ? void 0 : _element$mBindingInfo[propertyName].binding;
96
+ if (listBinding && listBinding.isA("sap.ui.model.odata.v4.ODataListBinding")) {
97
+ this.queryWatcher.registerBinding(listBinding);
98
98
  }
99
99
  });
100
100
  }
101
101
  // This is dirty but MDCTables and MDCCharts have a weird loading lifecycle
102
- if (oElement.isA("sap.ui.mdc.Table") || oElement.isA("sap.ui.mdc.Chart")) {
102
+ if (element.isA("sap.fe.macros.table.TableAPI") || element.isA("sap.fe.macros.chart.ChartAPI")) {
103
+ const tableOrChart = element.getContent();
103
104
  this.bTablesChartsLoaded = false;
104
- aPromises.push(this.queryWatcher.registerTableOrChart(oElement));
105
- } else if (oElement.isA("sap.fe.macros.controls.FilterBar")) {
106
- this.queryWatcher.registerFilterBar(oElement);
105
+ promises.push(this.queryWatcher.registerTableOrChart(tableOrChart));
106
+ } else if (element.isA("sap.fe.macros.controls.FilterBar")) {
107
+ this.queryWatcher.registerFilterBar(element);
107
108
  }
108
109
  });
109
- return aPromises;
110
+ return promises;
110
111
  };
111
112
  _proto.onAfterBinding = function onAfterBinding(oBindingContext) {
112
113
  // In case the page is rebind we need to clear the timer (eg: in FCL, the user can select 2 items successively in the list report)
@@ -268,4 +269,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/pageReady/DataQ
268
269
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitFor", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "waitFor"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatched", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatched"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatchedFinished", [_dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatchedFinished"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isPageReady", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "isPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitPageReady", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "waitPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "attachEventOnce", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "attachEventOnce"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "attachEvent", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "attachEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "detachEvent", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "detachEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isContextExpected", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "isContextExpected"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "checkPageReadyDebounced", [_dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "checkPageReadyDebounced"), _class2.prototype)), _class2)) || _class);
269
270
  return PageReadyControllerExtension;
270
271
  }, false);
271
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwYWdlUmVhZHlUaW1lb3V0RGVmYXVsdCIsIm9uSW5pdCIsIl9uYldhaXRzIiwiX29FdmVudFByb3ZpZGVyIiwiRXZlbnRQcm92aWRlciIsInZpZXciLCJnZXRWaWV3IiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJtYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsInBhZ2VSZWFkeVRpbWVvdXQiLCJhdHRhY2hDb250YWluZXJEZWZpbmVkIiwib0V2ZW50IiwicmVnaXN0ZXJDb250YWluZXIiLCJnZXRQYXJhbWV0ZXIiLCJyb290Q29udHJvbENvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJwbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckRlYnVnRW5hYmxlZCIsImF0dGFjaEV2ZW50IiwiZ2V0UGxhY2Vob2xkZXJEZWJ1Z1N0YXRzIiwiaVBhZ2VSZWFkeUV2ZW50VGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImlIZXJvZXNCYXRjaFJlY2VpdmVkRXZlbnRUaW1lc3RhbXAiLCJxdWVyeVdhdGNoZXIiLCJEYXRhUXVlcnlXYXRjaGVyIiwiY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQiLCJiaW5kIiwib25FeGl0IiwiX29BcHBDb21wb25lbnQiLCJfb0NvbnRhaW5lciIsIl9mbkNvbnRhaW5lckRlbGVnYXRlIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIndhaXRGb3IiLCJvUHJvbWlzZSIsImZpbmFsbHkiLCJzZXRUaW1lb3V0IiwiY2F0Y2giLCJvblJvdXRlTWF0Y2hlZCIsIl9iSXNQYWdlUmVhZHkiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25BZnRlckJpbmRpbmdQcm9taXNlIiwicmVnaXN0ZXJBZ2dyZWdhdGVkQ29udHJvbHMiLCJtYWluQmluZGluZ0NvbnRleHQiLCJtYWluT2JqZWN0QmluZGluZyIsImdldEJpbmRpbmciLCJyZWdpc3RlckJpbmRpbmciLCJhUHJvbWlzZXMiLCJhQ29udHJvbHMiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJmb3JFYWNoIiwib0VsZW1lbnQiLCJvT2JqZWN0QmluZGluZyIsImdldE9iamVjdEJpbmRpbmciLCJhQmluZGluZ0tleXMiLCJPYmplY3QiLCJrZXlzIiwibUJpbmRpbmdJbmZvcyIsInNQcm9wZXJ0eU5hbWUiLCJvTGlzdEJpbmRpbmciLCJiaW5kaW5nIiwiaXNBIiwiYlRhYmxlc0NoYXJ0c0xvYWRlZCIsInB1c2giLCJyZWdpc3RlclRhYmxlT3JDaGFydCIsInJlZ2lzdGVyRmlsdGVyQmFyIiwib25BZnRlckJpbmRpbmciLCJvQmluZGluZ0NvbnRleHQiLCJwYWdlUmVhZHlUaW1lb3V0VGltZXIiLCJjbGVhclRpbWVvdXQiLCJMb2ciLCJlcnJvciIsImZpcmVFdmVudCIsImlzQ29udGV4dEV4cGVjdGVkIiwiYkhhc0NvbnRleHQiLCJfYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkIiwiYXR0YWNoRXZlbnRPbmNlIiwidW5kZWZpbmVkIiwicmVzZXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFUYWJsZUNoYXJ0SW5pdGlhbGl6ZWRQcm9taXNlcyIsImxlbmd0aCIsImFsbCIsImlzUGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsInNFdmVudElkIiwib0RhdGEiLCJmbkZ1bmN0aW9uIiwib0xpc3RlbmVyIiwiZGV0YWNoRXZlbnQiLCJvQ29udGFpbmVyIiwib25CZWZvcmVTaG93IiwiYlNob3duIiwib25CZWZvcmVIaWRlIiwib25BZnRlclNob3ciLCJ0aGVuIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImJGcm9tTmF2IiwicGFnZVJlYWR5VGltZXIiLCJtb2RlbCIsImdldE1vZGVsIiwidGltZU91dCIsImdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJfY2hlY2tQYWdlUmVhZHkiLCJmblVJVXBkYXRlZCIsIlJlbmRlcmluZyIsImlzUGVuZGluZyIsIkNvcmUiLCJfYldhaXRpbmdGb3JSZWZyZXNoIiwiY2hlY2tVSVVwZGF0ZWQiLCJpc0RhdGFSZWNlaXZlZCIsInJlc2V0RGF0YVJlY2VpdmVkIiwiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IiwiZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSIsImlzU2VhcmNoUGVuZGluZyIsImZvcmNlUGFnZVJlYWR5IiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUGFnZVJlYWR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IERhdGFRdWVyeVdhdGNoZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3BhZ2VSZWFkeS9EYXRhUXVlcnlXYXRjaGVyXCI7XG5pbXBvcnQge1xuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXh0ZW5zaWJsZSxcblx0ZmluYWxFeHRlbnNpb24sXG5cdG1ldGhvZE92ZXJyaWRlLFxuXHRwcml2YXRlRXh0ZW5zaW9uLFxuXHRwdWJsaWNFeHRlbnNpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgUmVuZGVyaW5nIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJpbmdcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlBhZ2VSZWFkeVwiKVxuY2xhc3MgUGFnZVJlYWR5Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX29FdmVudFByb3ZpZGVyITogRXZlbnRQcm92aWRlcjtcblxuXHRwcml2YXRlIHZpZXchOiBWaWV3O1xuXG5cdHByaXZhdGUgYXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgcGFnZUNvbXBvbmVudCE6IENvbXBvbmVudDtcblxuXHRwcml2YXRlIF9vQ29udGFpbmVyITogQ29udHJvbDtcblxuXHRwcml2YXRlIF9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX2ZuQ29udGFpbmVyRGVsZWdhdGU/OiBvYmplY3Q7XG5cblx0cHJpdmF0ZSBfbmJXYWl0cyE6IG51bWJlcjtcblxuXHRwcml2YXRlIF9iSXNQYWdlUmVhZHkhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX2JXYWl0aW5nRm9yUmVmcmVzaCE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBiU2hvd24hOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYkhhc0NvbnRleHQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYlRhYmxlc0NoYXJ0c0xvYWRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcXVlcnlXYXRjaGVyITogRGF0YVF1ZXJ5V2F0Y2hlcjtcblxuXHRwcml2YXRlIG9uQWZ0ZXJCaW5kaW5nUHJvbWlzZSE6IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lb3V0RGVmYXVsdCA9IDcwMDA7XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lb3V0VGltZXI/OiBudW1iZXI7XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lb3V0PzogbnVtYmVyO1xuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fbmJXYWl0cyA9IDA7XG5cdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIgPSB0aGlzLl9vRXZlbnRQcm92aWRlciA/IHRoaXMuX29FdmVudFByb3ZpZGVyIDogbmV3IEV2ZW50UHJvdmlkZXIoKTtcblx0XHR0aGlzLnZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblxuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudmlldyk7XG5cdFx0dGhpcy5wYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMudmlldykgYXMgQ29tcG9uZW50O1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudCA9IHRoaXMuYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0dGhpcy5wYWdlUmVhZHlUaW1lb3V0ID0gbWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXT8ucGFnZVJlYWR5VGltZW91dCA/PyB0aGlzLnBhZ2VSZWFkeVRpbWVvdXREZWZhdWx0O1xuXG5cdFx0aWYgKHRoaXMucGFnZUNvbXBvbmVudD8uYXR0YWNoQ29udGFpbmVyRGVmaW5lZCkge1xuXHRcdFx0dGhpcy5wYWdlQ29tcG9uZW50LmF0dGFjaENvbnRhaW5lckRlZmluZWQoKG9FdmVudDogRXZlbnQ8eyBjb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lciB9PikgPT5cblx0XHRcdFx0dGhpcy5yZWdpc3RlckNvbnRhaW5lcihvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGFpbmVyXCIpKVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZWdpc3RlckNvbnRhaW5lcih0aGlzLnZpZXcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvb3RDb250cm9sQ29udHJvbGxlciA9IHRoaXMuYXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gcm9vdENvbnRyb2xDb250cm9sbGVyPy5nZXRQbGFjZWhvbGRlcj8uKCk7XG5cdFx0aWYgKHBsYWNlaG9sZGVyPy5pc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXG5cdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRwbGFjZWhvbGRlci5nZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMoKS5pUGFnZVJlYWR5RXZlbnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hdHRhY2hFdmVudChcblx0XHRcdFx0XCJoZXJvZXNCYXRjaFJlY2VpdmVkXCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRwbGFjZWhvbGRlci5nZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMoKS5pSGVyb2VzQmF0Y2hSZWNlaXZlZEV2ZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0aGlzLnF1ZXJ5V2F0Y2hlciA9IG5ldyBEYXRhUXVlcnlXYXRjaGVyKHRoaXMuX29FdmVudFByb3ZpZGVyLCB0aGlzLmNoZWNrUGFnZVJlYWR5RGVib3VuY2VkLmJpbmQodGhpcykpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uRXhpdCgpOiB2b2lkIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwQ29tcG9uZW50O1xuXHRcdGlmICh0aGlzLl9vQ29udGFpbmVyICYmIHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuX29Db250YWluZXIucmVtb3ZlRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRGb3Iob1Byb21pc2U6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHR0aGlzLl9uYldhaXRzKys7XG5cdFx0b1Byb21pc2Vcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fbmJXYWl0cy0tO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2gobnVsbCk7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvblJvdXRlTWF0Y2hlZCgpOiB2b2lkIHtcblx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdGFzeW5jIG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vbkFmdGVyQmluZGluZ1Byb21pc2U7XG5cdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQWdncmVnYXRlZENvbnRyb2xzKG1haW5CaW5kaW5nQ29udGV4dD86IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+W10ge1xuXHRcdGlmIChtYWluQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IG1haW5PYmplY3RCaW5kaW5nID0gbWFpbkJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdHRoaXMucXVlcnlXYXRjaGVyLnJlZ2lzdGVyQmluZGluZyhtYWluT2JqZWN0QmluZGluZyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLmdldFZpZXcoKS5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSk7XG5cblx0XHRhQ29udHJvbHMuZm9yRWFjaCgob0VsZW1lbnQ6IE1hbmFnZWRPYmplY3QgJiB7IG1CaW5kaW5nSW5mb3M/OiBSZWNvcmQ8c3RyaW5nLCB7IGJpbmRpbmc/OiBCaW5kaW5nIH0+IH0pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9PYmplY3RCaW5kaW5nID0gb0VsZW1lbnQuZ2V0T2JqZWN0QmluZGluZygpO1xuXHRcdFx0aWYgKG9PYmplY3RCaW5kaW5nKSB7XG5cdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIGFsbCBvYmplY3QgYmluZGluZyAobW9zdGx5IHVzZWQgb24gb2JqZWN0IHBhZ2VzKVxuXHRcdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5yZWdpc3RlckJpbmRpbmcob09iamVjdEJpbmRpbmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUJpbmRpbmdLZXlzID0gT2JqZWN0LmtleXMob0VsZW1lbnQ/Lm1CaW5kaW5nSW5mb3MgPz8ge30pO1xuXHRcdFx0XHRhQmluZGluZ0tleXMuZm9yRWFjaCgoc1Byb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9FbGVtZW50Py5tQmluZGluZ0luZm9zPy5bc1Byb3BlcnR5TmFtZV0uYmluZGluZztcblxuXHRcdFx0XHRcdGlmIChvTGlzdEJpbmRpbmcgJiYgb0xpc3RCaW5kaW5nLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5yZWdpc3RlckJpbmRpbmcob0xpc3RCaW5kaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gVGhpcyBpcyBkaXJ0eSBidXQgTURDVGFibGVzIGFuZCBNRENDaGFydHMgaGF2ZSBhIHdlaXJkIGxvYWRpbmcgbGlmZWN5Y2xlXG5cdFx0XHRpZiAob0VsZW1lbnQuaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPENoYXJ0PihcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0dGhpcy5iVGFibGVzQ2hhcnRzTG9hZGVkID0gZmFsc2U7XG5cdFx0XHRcdGFQcm9taXNlcy5wdXNoKHRoaXMucXVlcnlXYXRjaGVyLnJlZ2lzdGVyVGFibGVPckNoYXJ0KG9FbGVtZW50KSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9FbGVtZW50LmlzQTxGaWx0ZXJCYXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdFx0dGhpcy5xdWVyeVdhdGNoZXIucmVnaXN0ZXJGaWx0ZXJCYXIob0VsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGFQcm9taXNlcztcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dD86IENvbnRleHQpOiB2b2lkIHtcblx0XHQvLyBJbiBjYXNlIHRoZSBwYWdlIGlzIHJlYmluZCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSB0aW1lciAoZWc6IGluIEZDTCwgdGhlIHVzZXIgY2FuIHNlbGVjdCAyIGl0ZW1zIHN1Y2Nlc3NpdmVseSBpbiB0aGUgbGlzdCByZXBvcnQpXG5cdFx0aWYgKHRoaXMucGFnZVJlYWR5VGltZW91dFRpbWVyKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5wYWdlUmVhZHlUaW1lb3V0VGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnBhZ2VSZWFkeVRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRgVGhlIFBhZ2VSZWFkeSBFdmVudCB3YXMgbm90IGZpcmVkIHdpdGhpbiB0aGUgJHt0aGlzLnBhZ2VSZWFkeVRpbWVvdXR9IG1zIHRpbWVvdXQgLiBJdCBoYXMgYmVlbiBmb3JjZWQuIFBsZWFzZSBjb250YWN0IHlvdXIgYXBwbGljYXRpb24gZGV2ZWxvcGVyIGZvciBmdXJ0aGVyIGFuYWx5c2lzYFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcInBhZ2VSZWFkeVwiKTtcblx0XHR9LCB0aGlzLnBhZ2VSZWFkeVRpbWVvdXQpO1xuXG5cdFx0aWYgKHRoaXMuaXNDb250ZXh0RXhwZWN0ZWQoKSAmJiAhb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHQvLyBGb3JjZSB0byBtZW50aW9uIHdlIGFyZSBleHBlY3RpbmcgZGF0YVxuXHRcdFx0dGhpcy5iSGFzQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJIYXNDb250ZXh0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkID0gdHJ1ZTtcblxuXHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIG51bGwsICgpID0+IHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnBhZ2VSZWFkeVRpbWVvdXRUaW1lcik7XG5cdFx0XHR0aGlzLnBhZ2VSZWFkeVRpbWVvdXRUaW1lciA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWVyeVdhdGNoZXIucmVzZXQoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMub25BZnRlckJpbmRpbmdQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdGNvbnN0IGFUYWJsZUNoYXJ0SW5pdGlhbGl6ZWRQcm9taXNlcyA9IHRoaXMucmVnaXN0ZXJBZ2dyZWdhdGVkQ29udHJvbHMob0JpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0aWYgKGFUYWJsZUNoYXJ0SW5pdGlhbGl6ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGFUYWJsZUNoYXJ0SW5pdGlhbGl6ZWRQcm9taXNlcyk7XG5cdFx0XHRcdHRoaXMuYlRhYmxlc0NoYXJ0c0xvYWRlZCA9IHRydWU7XG5cdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGlzUGFnZVJlYWR5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9iSXNQYWdlUmVhZHk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGFzeW5jIHdhaXRQYWdlUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZShzRXZlbnRJZDogc3RyaW5nLCBvRGF0YTogb2JqZWN0IHwgbnVsbCwgZm5GdW5jdGlvbj86IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiBFdmVudFByb3ZpZGVyIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG5cdFx0cmV0dXJuIHRoaXMuX29FdmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50T25jZShzRXZlbnRJZCwgb0RhdGEgYXMgb2JqZWN0LCBmbkZ1bmN0aW9uIGFzIEZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBhdHRhY2hFdmVudChzRXZlbnRJZDogc3RyaW5nLCBvRGF0YTogb2JqZWN0IHwgbnVsbCwgZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcjogb2JqZWN0KTogRXZlbnRQcm92aWRlciB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuXHRcdHJldHVybiB0aGlzLl9vRXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChzRXZlbnRJZCwgb0RhdGEgYXMgb2JqZWN0LCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBkZXRhY2hFdmVudChzRXZlbnRJZDogc3RyaW5nLCBmbkZ1bmN0aW9uOiBGdW5jdGlvbik6IEV2ZW50UHJvdmlkZXIge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoc0V2ZW50SWQsIGZuRnVuY3Rpb24pO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckNvbnRhaW5lcihvQ29udGFpbmVyOiBDb250cm9sKTogdm9pZCB7XG5cdFx0dGhpcy5fb0NvbnRhaW5lciA9IG9Db250YWluZXI7XG5cdFx0dGhpcy5fZm5Db250YWluZXJEZWxlZ2F0ZSA9IHtcblx0XHRcdG9uQmVmb3JlU2hvdzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRvbkJlZm9yZUhpZGU6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy5iU2hvd24gPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5fYklzUGFnZVJlYWR5ID0gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0b25BZnRlclNob3c6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy5iU2hvd24gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLm9uQWZ0ZXJCaW5kaW5nUHJvbWlzZT8udGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQodHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fb0NvbnRhaW5lcj8uYWRkRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlLCB0aGlzKTtcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0cHVibGljIGlzQ29udGV4dEV4cGVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoYkZyb21OYXYgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnBhZ2VSZWFkeVRpbWVyKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5wYWdlUmVhZHlUaW1lcik7XG5cdFx0fVxuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdGxldCB0aW1lT3V0OiBudW1iZXI7XG5cdFx0Ly8gaXNDb250ZXh0RXhwZWN0ZWQgPSB0cnVlIHdoZW4gT2JqZWN0IFBhZ2UgaXMgZGlzcGxheWVkXG5cdFx0aWYgKChtb2RlbCAmJiBtb2RlbC5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyKCkgPT09IG51bGwpIHx8IHRoaXMuaXNDb250ZXh0RXhwZWN0ZWQoKSkge1xuXHRcdFx0dGltZU91dCA9IDIwMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgYXJlIHdhaXRpbmcgbGVzcyB0aW1lIGJlY2F1c2UgZGF0YSBpcyBhbHJlYWR5IHRoZXJlIChvcHRpbWlzdGljQmF0Y2gpXG5cdFx0XHR0aW1lT3V0ID0gMjA7XG5cdFx0fVxuXHRcdHRoaXMucGFnZVJlYWR5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KGJGcm9tTmF2KTtcblx0XHR9LCB0aW1lT3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdHB1YmxpYyBfY2hlY2tQYWdlUmVhZHkoYkZyb21OYXYgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGZuVUlVcGRhdGVkID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Ly8gV2FpdCB1bnRpbCB0aGUgVUkgaXMgbm8gbG9uZ2VyIGRpcnR5XG5cdFx0XHRpZiAoIVJlbmRlcmluZy5pc1BlbmRpbmcoKSkge1xuXHRcdFx0XHRDb3JlLmRldGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gSW4gY2FzZSBVSVVwZGF0ZSBkb2VzIG5vdCBnZXQgY2FsbGVkLCBjaGVjayBpZiBVSSBpcyBub3QgZGlydHkgYW5kIHRoZW4gY2FsbCBfY2hlY2tQYWdlUmVhZHlcblx0XHRjb25zdCBjaGVja1VJVXBkYXRlZCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGlmIChSZW5kZXJpbmcuaXNQZW5kaW5nKCkpIHtcblx0XHRcdFx0c2V0VGltZW91dChjaGVja1VJVXBkYXRlZCwgNTAwKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoKSB7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0XHRDb3JlLmRldGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJTaG93biAmJlxuXHRcdFx0dGhpcy5xdWVyeVdhdGNoZXIuaXNEYXRhUmVjZWl2ZWQoKSAhPT0gZmFsc2UgJiZcblx0XHRcdHRoaXMuYlRhYmxlc0NoYXJ0c0xvYWRlZCAhPT0gZmFsc2UgJiZcblx0XHRcdCghdGhpcy5pc0NvbnRleHRFeHBlY3RlZCgpIHx8IHRoaXMuYkhhc0NvbnRleHQpIC8vIEVpdGhlciBubyBjb250ZXh0IGlzIGV4cGVjdGVkIG9yIHRoZXJlIGlzIG9uZVxuXHRcdCkge1xuXHRcdFx0aWYgKHRoaXMucXVlcnlXYXRjaGVyLmlzRGF0YVJlY2VpdmVkKCkgPT09IHRydWUgJiYgIWJGcm9tTmF2ICYmICF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggJiYgUmVuZGVyaW5nLmlzUGVuZGluZygpKSB7XG5cdFx0XHRcdC8vIElmIHdlIHJlcXVlc3RlZCBkYXRhIHdlIGdldCBub3RpZmllZCBhcyBzb29uIGFzIHRoZSBkYXRhIGFycml2ZWQsIHNvIGJlZm9yZSB0aGUgbmV4dCByZW5kZXJpbmcgdGlja1xuXHRcdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5yZXNldERhdGFSZWNlaXZlZCgpO1xuXHRcdFx0XHR0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggPSB0cnVlO1xuXHRcdFx0XHRDb3JlLmF0dGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0c2V0VGltZW91dChjaGVja1VJVXBkYXRlZCwgNTAwKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdCghdGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoICYmIFJlbmRlcmluZy5pc1BlbmRpbmcoKSkgfHxcblx0XHRcdFx0dGhpcy5fbmJXYWl0cyAhPT0gMCB8fFxuXHRcdFx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSgpID4gMCB8fFxuXHRcdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5pc1NlYXJjaFBlbmRpbmcoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IHRydWU7XG5cdFx0XHRcdENvcmUuYXR0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoKSB7XG5cdFx0XHRcdC8vIEluIHRoZSBjYXNlIHdlJ3JlIG5vdCB3YWl0aW5nIGZvciBhbnkgZGF0YSAobmF2aWdhdGluZyBiYWNrIHRvIGEgcGFnZSB3ZSBhbHJlYWR5IGhhdmUgbG9hZGVkKVxuXHRcdFx0XHQvLyBqdXN0IHdhaXQgZm9yIGEgZnJhbWUgdG8gZmlyZSB0aGUgZXZlbnQuXG5cdFx0XHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcInBhZ2VSZWFkeVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9yY2VzIHRoZSAncGFnZVJlYWR5JyBldmVudCB0byBiZSBzZW50LlxuXHQgKi9cblx0Zm9yY2VQYWdlUmVhZHkoKTogdm9pZCB7XG5cdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VSZWFkeUNvbnRyb2xsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7O01Ba0NNQSw0QkFBNEIsV0FEakNDLGNBQWMsQ0FBQyw0Q0FBNEMsQ0FBQyxVQTBDM0RDLGNBQWMsRUFBRSxVQTJDaEJBLGNBQWMsRUFBRSxVQVVoQkMsZUFBZSxFQUFFLFVBQ2pCQyxjQUFjLEVBQUUsVUFZaEJGLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFLMUJBLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUEwQzFCQSxjQUFjLENBQUMsVUFBVSxDQUFDLFVBaUQxQkMsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0FLaEJELGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBa0JoQkQsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0FNaEJELGVBQWUsRUFBRSxXQUNqQkMsY0FB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
272
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwYWdlUmVhZHlUaW1lb3V0RGVmYXVsdCIsIm9uSW5pdCIsIl9uYldhaXRzIiwiX29FdmVudFByb3ZpZGVyIiwiRXZlbnRQcm92aWRlciIsInZpZXciLCJnZXRWaWV3IiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJtYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsInBhZ2VSZWFkeVRpbWVvdXQiLCJhdHRhY2hDb250YWluZXJEZWZpbmVkIiwib0V2ZW50IiwicmVnaXN0ZXJDb250YWluZXIiLCJnZXRQYXJhbWV0ZXIiLCJyb290Q29udHJvbENvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJwbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckRlYnVnRW5hYmxlZCIsImF0dGFjaEV2ZW50IiwiZ2V0UGxhY2Vob2xkZXJEZWJ1Z1N0YXRzIiwiaVBhZ2VSZWFkeUV2ZW50VGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImlIZXJvZXNCYXRjaFJlY2VpdmVkRXZlbnRUaW1lc3RhbXAiLCJxdWVyeVdhdGNoZXIiLCJEYXRhUXVlcnlXYXRjaGVyIiwiY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQiLCJiaW5kIiwib25FeGl0IiwiX29BcHBDb21wb25lbnQiLCJfb0NvbnRhaW5lciIsIl9mbkNvbnRhaW5lckRlbGVnYXRlIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIndhaXRGb3IiLCJvUHJvbWlzZSIsImZpbmFsbHkiLCJzZXRUaW1lb3V0IiwiY2F0Y2giLCJvblJvdXRlTWF0Y2hlZCIsIl9iSXNQYWdlUmVhZHkiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25BZnRlckJpbmRpbmdQcm9taXNlIiwicmVnaXN0ZXJBZ2dyZWdhdGVkQ29udHJvbHMiLCJtYWluQmluZGluZ0NvbnRleHQiLCJtYWluT2JqZWN0QmluZGluZyIsImdldEJpbmRpbmciLCJyZWdpc3RlckJpbmRpbmciLCJwcm9taXNlcyIsImNvbnRyb2xzIiwiZmluZEFnZ3JlZ2F0ZWRPYmplY3RzIiwiZm9yRWFjaCIsImVsZW1lbnQiLCJvYmplY3RCaW5kaW5nIiwiZ2V0T2JqZWN0QmluZGluZyIsImFCaW5kaW5nS2V5cyIsIk9iamVjdCIsImtleXMiLCJtQmluZGluZ0luZm9zIiwicHJvcGVydHlOYW1lIiwibGlzdEJpbmRpbmciLCJiaW5kaW5nIiwiaXNBIiwidGFibGVPckNoYXJ0IiwiZ2V0Q29udGVudCIsImJUYWJsZXNDaGFydHNMb2FkZWQiLCJwdXNoIiwicmVnaXN0ZXJUYWJsZU9yQ2hhcnQiLCJyZWdpc3RlckZpbHRlckJhciIsIm9uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwicGFnZVJlYWR5VGltZW91dFRpbWVyIiwiY2xlYXJUaW1lb3V0IiwiTG9nIiwiZXJyb3IiLCJmaXJlRXZlbnQiLCJpc0NvbnRleHRFeHBlY3RlZCIsImJIYXNDb250ZXh0IiwiX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCIsImF0dGFjaEV2ZW50T25jZSIsInVuZGVmaW5lZCIsInJlc2V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJhVGFibGVDaGFydEluaXRpYWxpemVkUHJvbWlzZXMiLCJsZW5ndGgiLCJhbGwiLCJpc1BhZ2VSZWFkeSIsIndhaXRQYWdlUmVhZHkiLCJzRXZlbnRJZCIsIm9EYXRhIiwiZm5GdW5jdGlvbiIsIm9MaXN0ZW5lciIsImRldGFjaEV2ZW50Iiwib0NvbnRhaW5lciIsIm9uQmVmb3JlU2hvdyIsImJTaG93biIsIm9uQmVmb3JlSGlkZSIsIm9uQWZ0ZXJTaG93IiwidGhlbiIsImFkZEV2ZW50RGVsZWdhdGUiLCJiRnJvbU5hdiIsInBhZ2VSZWFkeVRpbWVyIiwibW9kZWwiLCJnZXRNb2RlbCIsInRpbWVPdXQiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwiX2NoZWNrUGFnZVJlYWR5IiwiZm5VSVVwZGF0ZWQiLCJSZW5kZXJpbmciLCJpc1BlbmRpbmciLCJDb3JlIiwiX2JXYWl0aW5nRm9yUmVmcmVzaCIsImNoZWNrVUlVcGRhdGVkIiwiaXNEYXRhUmVjZWl2ZWQiLCJyZXNldERhdGFSZWNlaXZlZCIsIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSIsImdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUiLCJpc1NlYXJjaFBlbmRpbmciLCJmb3JjZVBhZ2VSZWFkeSIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlBhZ2VSZWFkeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBEYXRhUXVlcnlXYXRjaGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9wYWdlUmVhZHkvRGF0YVF1ZXJ5V2F0Y2hlclwiO1xuaW1wb3J0IHtcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV4dGVuc2libGUsXG5cdGZpbmFsRXh0ZW5zaW9uLFxuXHRtZXRob2RPdmVycmlkZSxcblx0cHJpdmF0ZUV4dGVuc2lvbixcblx0cHVibGljRXh0ZW5zaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydEFQSVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgUmVuZGVyaW5nIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJpbmdcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlBhZ2VSZWFkeVwiKVxuY2xhc3MgUGFnZVJlYWR5Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX29FdmVudFByb3ZpZGVyITogRXZlbnRQcm92aWRlcjtcblxuXHRwcml2YXRlIHZpZXchOiBWaWV3O1xuXG5cdHByaXZhdGUgYXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgcGFnZUNvbXBvbmVudCE6IENvbXBvbmVudDtcblxuXHRwcml2YXRlIF9vQ29udGFpbmVyITogQ29udHJvbDtcblxuXHRwcml2YXRlIF9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX2ZuQ29udGFpbmVyRGVsZWdhdGU/OiBvYmplY3Q7XG5cblx0cHJpdmF0ZSBfbmJXYWl0cyE6IG51bWJlcjtcblxuXHRwcml2YXRlIF9iSXNQYWdlUmVhZHkhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX2JXYWl0aW5nRm9yUmVmcmVzaCE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBiU2hvd24hOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYkhhc0NvbnRleHQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYlRhYmxlc0NoYXJ0c0xvYWRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcXVlcnlXYXRjaGVyITogRGF0YVF1ZXJ5V2F0Y2hlcjtcblxuXHRwcml2YXRlIG9uQWZ0ZXJCaW5kaW5nUHJvbWlzZSE6IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lb3V0RGVmYXVsdCA9IDcwMDA7XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lb3V0VGltZXI/OiBudW1iZXI7XG5cblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lb3V0PzogbnVtYmVyO1xuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fbmJXYWl0cyA9IDA7XG5cdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIgPSB0aGlzLl9vRXZlbnRQcm92aWRlciA/IHRoaXMuX29FdmVudFByb3ZpZGVyIDogbmV3IEV2ZW50UHJvdmlkZXIoKTtcblx0XHR0aGlzLnZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblxuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudmlldyk7XG5cdFx0dGhpcy5wYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMudmlldykgYXMgQ29tcG9uZW50O1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudCA9IHRoaXMuYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0dGhpcy5wYWdlUmVhZHlUaW1lb3V0ID0gbWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXT8ucGFnZVJlYWR5VGltZW91dCA/PyB0aGlzLnBhZ2VSZWFkeVRpbWVvdXREZWZhdWx0O1xuXG5cdFx0aWYgKHRoaXMucGFnZUNvbXBvbmVudD8uYXR0YWNoQ29udGFpbmVyRGVmaW5lZCkge1xuXHRcdFx0dGhpcy5wYWdlQ29tcG9uZW50LmF0dGFjaENvbnRhaW5lckRlZmluZWQoKG9FdmVudDogRXZlbnQ8eyBjb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lciB9PikgPT5cblx0XHRcdFx0dGhpcy5yZWdpc3RlckNvbnRhaW5lcihvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGFpbmVyXCIpKVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZWdpc3RlckNvbnRhaW5lcih0aGlzLnZpZXcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvb3RDb250cm9sQ29udHJvbGxlciA9IHRoaXMuYXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gcm9vdENvbnRyb2xDb250cm9sbGVyPy5nZXRQbGFjZWhvbGRlcj8uKCk7XG5cdFx0aWYgKHBsYWNlaG9sZGVyPy5pc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXG5cdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRwbGFjZWhvbGRlci5nZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMoKS5pUGFnZVJlYWR5RXZlbnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hdHRhY2hFdmVudChcblx0XHRcdFx0XCJoZXJvZXNCYXRjaFJlY2VpdmVkXCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRwbGFjZWhvbGRlci5nZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMoKS5pSGVyb2VzQmF0Y2hSZWNlaXZlZEV2ZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0aGlzLnF1ZXJ5V2F0Y2hlciA9IG5ldyBEYXRhUXVlcnlXYXRjaGVyKHRoaXMuX29FdmVudFByb3ZpZGVyLCB0aGlzLmNoZWNrUGFnZVJlYWR5RGVib3VuY2VkLmJpbmQodGhpcykpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uRXhpdCgpOiB2b2lkIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwQ29tcG9uZW50O1xuXHRcdGlmICh0aGlzLl9vQ29udGFpbmVyICYmIHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuX29Db250YWluZXIucmVtb3ZlRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRGb3Iob1Byb21pc2U6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHR0aGlzLl9uYldhaXRzKys7XG5cdFx0b1Byb21pc2Vcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fbmJXYWl0cy0tO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2gobnVsbCk7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvblJvdXRlTWF0Y2hlZCgpOiB2b2lkIHtcblx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdGFzeW5jIG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vbkFmdGVyQmluZGluZ1Byb21pc2U7XG5cdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQWdncmVnYXRlZENvbnRyb2xzKG1haW5CaW5kaW5nQ29udGV4dD86IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+W10ge1xuXHRcdGlmIChtYWluQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IG1haW5PYmplY3RCaW5kaW5nID0gbWFpbkJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdHRoaXMucXVlcnlXYXRjaGVyLnJlZ2lzdGVyQmluZGluZyhtYWluT2JqZWN0QmluZGluZyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXHRcdGNvbnN0IGNvbnRyb2xzID0gdGhpcy5nZXRWaWV3KCkuZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUpO1xuXG5cdFx0Y29udHJvbHMuZm9yRWFjaCgoZWxlbWVudDogTWFuYWdlZE9iamVjdCAmIHsgbUJpbmRpbmdJbmZvcz86IFJlY29yZDxzdHJpbmcsIHsgYmluZGluZz86IEJpbmRpbmcgfT4gfSk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgb2JqZWN0QmluZGluZyA9IGVsZW1lbnQuZ2V0T2JqZWN0QmluZGluZygpO1xuXHRcdFx0aWYgKG9iamVjdEJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gUmVnaXN0ZXIgb24gYWxsIG9iamVjdCBiaW5kaW5nIChtb3N0bHkgdXNlZCBvbiBvYmplY3QgcGFnZXMpXG5cdFx0XHRcdHRoaXMucXVlcnlXYXRjaGVyLnJlZ2lzdGVyQmluZGluZyhvYmplY3RCaW5kaW5nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFCaW5kaW5nS2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQ/Lm1CaW5kaW5nSW5mb3MgPz8ge30pO1xuXHRcdFx0XHRhQmluZGluZ0tleXMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBlbGVtZW50Py5tQmluZGluZ0luZm9zPy5bcHJvcGVydHlOYW1lXS5iaW5kaW5nO1xuXG5cdFx0XHRcdFx0aWYgKGxpc3RCaW5kaW5nICYmIGxpc3RCaW5kaW5nLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5yZWdpc3RlckJpbmRpbmcobGlzdEJpbmRpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGlzIGRpcnR5IGJ1dCBNRENUYWJsZXMgYW5kIE1EQ0NoYXJ0cyBoYXZlIGEgd2VpcmQgbG9hZGluZyBsaWZlY3ljbGVcblx0XHRcdGlmIChlbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpIHx8IGVsZW1lbnQuaXNBPENoYXJ0QVBJPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0Y29uc3QgdGFibGVPckNoYXJ0ID0gZWxlbWVudC5nZXRDb250ZW50KCkgYXMgQ2hhcnQgfCBUYWJsZTtcblx0XHRcdFx0dGhpcy5iVGFibGVzQ2hhcnRzTG9hZGVkID0gZmFsc2U7XG5cdFx0XHRcdHByb21pc2VzLnB1c2godGhpcy5xdWVyeVdhdGNoZXIucmVnaXN0ZXJUYWJsZU9yQ2hhcnQodGFibGVPckNoYXJ0KSk7XG5cdFx0XHR9IGVsc2UgaWYgKChlbGVtZW50IGFzIE1hbmFnZWRPYmplY3QpLmlzQTxGaWx0ZXJCYXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdFx0dGhpcy5xdWVyeVdhdGNoZXIucmVnaXN0ZXJGaWx0ZXJCYXIoZWxlbWVudCBhcyBGaWx0ZXJCYXIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHByb21pc2VzO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKFwiX3JvdXRpbmdcIilcblx0b25BZnRlckJpbmRpbmcob0JpbmRpbmdDb250ZXh0PzogQ29udGV4dCk6IHZvaWQge1xuXHRcdC8vIEluIGNhc2UgdGhlIHBhZ2UgaXMgcmViaW5kIHdlIG5lZWQgdG8gY2xlYXIgdGhlIHRpbWVyIChlZzogaW4gRkNMLCB0aGUgdXNlciBjYW4gc2VsZWN0IDIgaXRlbXMgc3VjY2Vzc2l2ZWx5IGluIHRoZSBsaXN0IHJlcG9ydClcblx0XHRpZiAodGhpcy5wYWdlUmVhZHlUaW1lb3V0VGltZXIpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnBhZ2VSZWFkeVRpbWVvdXRUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMucGFnZVJlYWR5VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdGBUaGUgUGFnZVJlYWR5IEV2ZW50IHdhcyBub3QgZmlyZWQgd2l0aGluIHRoZSAke3RoaXMucGFnZVJlYWR5VGltZW91dH0gbXMgdGltZW91dCAuIEl0IGhhcyBiZWVuIGZvcmNlZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgZm9yIGZ1cnRoZXIgYW5hbHlzaXNgXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHRcdH0sIHRoaXMucGFnZVJlYWR5VGltZW91dCk7XG5cblx0XHRpZiAodGhpcy5pc0NvbnRleHRFeHBlY3RlZCgpICYmICFvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdC8vIEZvcmNlIHRvIG1lbnRpb24gd2UgYXJlIGV4cGVjdGluZyBkYXRhXG5cdFx0XHR0aGlzLmJIYXNDb250ZXh0ID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYkhhc0NvbnRleHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgbnVsbCwgKCkgPT4ge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucGFnZVJlYWR5VGltZW91dFRpbWVyKTtcblx0XHRcdHRoaXMucGFnZVJlYWR5VGltZW91dFRpbWVyID0gdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5yZXNldCgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbkFmdGVyQmluZGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Y29uc3QgYVRhYmxlQ2hhcnRJbml0aWFsaXplZFByb21pc2VzID0gdGhpcy5yZWdpc3RlckFnZ3JlZ2F0ZWRDb250cm9scyhvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHRpZiAoYVRhYmxlQ2hhcnRJbml0aWFsaXplZFByb21pc2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoYVRhYmxlQ2hhcnRJbml0aWFsaXplZFByb21pc2VzKTtcblx0XHRcdFx0dGhpcy5iVGFibGVzQ2hhcnRzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmNoZWNrUGFnZVJlYWR5RGVib3VuY2VkKCk7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgaXNQYWdlUmVhZHkoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JJc1BhZ2VSZWFkeTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgYXN5bmMgd2FpdFBhZ2VSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGlmICh0aGlzLmlzUGFnZVJlYWR5KCkpIHtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5hdHRhY2hFdmVudE9uY2UoXG5cdFx0XHRcdFx0XCJwYWdlUmVhZHlcIixcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgYXR0YWNoRXZlbnRPbmNlKHNFdmVudElkOiBzdHJpbmcsIG9EYXRhOiBvYmplY3QgfCBudWxsLCBmbkZ1bmN0aW9uPzogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IG9iamVjdCk6IEV2ZW50UHJvdmlkZXIge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnRPbmNlKHNFdmVudElkLCBvRGF0YSBhcyBvYmplY3QsIGZuRnVuY3Rpb24gYXMgRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50KHNFdmVudElkOiBzdHJpbmcsIG9EYXRhOiBvYmplY3QgfCBudWxsLCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyOiBvYmplY3QpOiBFdmVudFByb3ZpZGVyIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG5cdFx0cmV0dXJuIHRoaXMuX29FdmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KHNFdmVudElkLCBvRGF0YSBhcyBvYmplY3QsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGRldGFjaEV2ZW50KHNFdmVudElkOiBzdHJpbmcsIGZuRnVuY3Rpb246IEZ1bmN0aW9uKTogRXZlbnRQcm92aWRlciB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuXHRcdHJldHVybiB0aGlzLl9vRXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChzRXZlbnRJZCwgZm5GdW5jdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyQ29udGFpbmVyKG9Db250YWluZXI6IENvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLl9vQ29udGFpbmVyID0gb0NvbnRhaW5lcjtcblx0XHR0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlID0ge1xuXHRcdFx0b25CZWZvcmVTaG93OiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMuYlNob3duID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdG9uQmVmb3JlSGlkZTogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRvbkFmdGVyU2hvdzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IHRydWU7XG5cdFx0XHRcdHRoaXMub25BZnRlckJpbmRpbmdQcm9taXNlPy50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCh0cnVlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLl9vQ29udGFpbmVyPy5hZGRFdmVudERlbGVnYXRlKHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUsIHRoaXMpO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgaXNDb250ZXh0RXhwZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjaGVja1BhZ2VSZWFkeURlYm91bmNlZChiRnJvbU5hdiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucGFnZVJlYWR5VGltZXIpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnBhZ2VSZWFkeVRpbWVyKTtcblx0XHR9XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0bGV0IHRpbWVPdXQ6IG51bWJlcjtcblx0XHQvLyBpc0NvbnRleHRFeHBlY3RlZCA9IHRydWUgd2hlbiBPYmplY3QgUGFnZSBpcyBkaXNwbGF5ZWRcblx0XHRpZiAoKG1vZGVsICYmIG1vZGVsLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoKSA9PT0gbnVsbCkgfHwgdGhpcy5pc0NvbnRleHRFeHBlY3RlZCgpKSB7XG5cdFx0XHR0aW1lT3V0ID0gMjAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXZSBhcmUgd2FpdGluZyBsZXNzIHRpbWUgYmVjYXVzZSBkYXRhIGlzIGFscmVhZHkgdGhlcmUgKG9wdGltaXN0aWNCYXRjaClcblx0XHRcdHRpbWVPdXQgPSAyMDtcblx0XHR9XG5cdFx0dGhpcy5wYWdlUmVhZHlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hlY2tQYWdlUmVhZHkoYkZyb21OYXYpO1xuXHRcdH0sIHRpbWVPdXQpIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0cHVibGljIF9jaGVja1BhZ2VSZWFkeShiRnJvbU5hdiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3QgZm5VSVVwZGF0ZWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBXYWl0IHVudGlsIHRoZSBVSSBpcyBubyBsb25nZXIgZGlydHlcblx0XHRcdGlmICghUmVuZGVyaW5nLmlzUGVuZGluZygpKSB7XG5cdFx0XHRcdENvcmUuZGV0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHR0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBJbiBjYXNlIFVJVXBkYXRlIGRvZXMgbm90IGdldCBjYWxsZWQsIGNoZWNrIGlmIFVJIGlzIG5vdCBkaXJ0eSBhbmQgdGhlbiBjYWxsIF9jaGVja1BhZ2VSZWFkeVxuXHRcdGNvbnN0IGNoZWNrVUlVcGRhdGVkID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKFJlbmRlcmluZy5pc1BlbmRpbmcoKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdENvcmUuZGV0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHR0aGlzLmNoZWNrUGFnZVJlYWR5RGVib3VuY2VkKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMuYlNob3duICYmXG5cdFx0XHR0aGlzLnF1ZXJ5V2F0Y2hlci5pc0RhdGFSZWNlaXZlZCgpICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iVGFibGVzQ2hhcnRzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0KCF0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgfHwgdGhpcy5iSGFzQ29udGV4dCkgLy8gRWl0aGVyIG5vIGNvbnRleHQgaXMgZXhwZWN0ZWQgb3IgdGhlcmUgaXMgb25lXG5cdFx0KSB7XG5cdFx0XHRpZiAodGhpcy5xdWVyeVdhdGNoZXIuaXNEYXRhUmVjZWl2ZWQoKSA9PT0gdHJ1ZSAmJiAhYkZyb21OYXYgJiYgIXRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCAmJiBSZW5kZXJpbmcuaXNQZW5kaW5nKCkpIHtcblx0XHRcdFx0Ly8gSWYgd2UgcmVxdWVzdGVkIGRhdGEgd2UgZ2V0IG5vdGlmaWVkIGFzIHNvb24gYXMgdGhlIGRhdGEgYXJyaXZlZCwgc28gYmVmb3JlIHRoZSBuZXh0IHJlbmRlcmluZyB0aWNrXG5cdFx0XHRcdHRoaXMucXVlcnlXYXRjaGVyLnJlc2V0RGF0YVJlY2VpdmVkKCk7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IHRydWU7XG5cdFx0XHRcdENvcmUuYXR0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggJiYgUmVuZGVyaW5nLmlzUGVuZGluZygpKSB8fFxuXHRcdFx0XHR0aGlzLl9uYldhaXRzICE9PSAwIHx8XG5cdFx0XHRcdFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5nZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlKCkgPiAwIHx8XG5cdFx0XHRcdHRoaXMucXVlcnlXYXRjaGVyLmlzU2VhcmNoUGVuZGluZygpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gdHJ1ZTtcblx0XHRcdFx0Q29yZS5hdHRhY2hFdmVudChcIlVJVXBkYXRlZFwiLCBmblVJVXBkYXRlZCk7XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tVSVVwZGF0ZWQsIDUwMCk7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugd2UncmUgbm90IHdhaXRpbmcgZm9yIGFueSBkYXRhIChuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2FkZWQpXG5cdFx0XHRcdC8vIGp1c3Qgd2FpdCBmb3IgYSBmcmFtZSB0byBmaXJlIHRoZSBldmVudC5cblx0XHRcdFx0dGhpcy5fYklzUGFnZVJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb3JjZXMgdGhlICdwYWdlUmVhZHknIGV2ZW50IHRvIGJlIHNlbnQuXG5cdCAqL1xuXHRmb3JjZVBhZ2VSZWFkeSgpOiB2b2lkIHtcblx0XHR0aGlzLl9vRXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJwYWdlUmVhZHlcIik7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFnZVJlYWR5Q29udHJvbGxlckV4dGVuc2lvbjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7TUFvQ01BLDRCQUE0QixXQURqQ0MsY0FBYyxDQUFDLDRDQUE0QyxDQUFDLFVBMEMzREMsY0FBYyxFQUFFLFVBMkNoQkEsY0FBYyxF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
@@ -11,7 +11,9 @@ import {
11
11
  publicExtension
12
12
  } from "sap/fe/core/helpers/ClassSupport";
13
13
  import TemplatedViewServiceFactory from "sap/fe/core/services/TemplatedViewServiceFactory";
14
+ import type ChartAPI from "sap/fe/macros/chart/ChartAPI";
14
15
  import type FilterBar from "sap/fe/macros/controls/FilterBar";
16
+ import type TableAPI from "sap/fe/macros/table/TableAPI";
15
17
  import type Event from "sap/ui/base/Event";
16
18
  import EventProvider from "sap/ui/base/EventProvider";
17
19
  import type ManagedObject from "sap/ui/base/ManagedObject";
@@ -24,7 +26,7 @@ import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
24
26
  import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
25
27
  import type View from "sap/ui/core/mvc/View";
26
28
  import type Chart from "sap/ui/mdc/Chart";
27
- import type MDCTable from "sap/ui/mdc/Table";
29
+ import type Table from "sap/ui/mdc/Table";
28
30
  import type Binding from "sap/ui/model/Binding";
29
31
  import type Context from "sap/ui/model/odata/v4/Context";
30
32
  import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
@@ -156,34 +158,35 @@ class PageReadyControllerExtension extends ControllerExtension {
156
158
  this.queryWatcher.registerBinding(mainObjectBinding);
157
159
  }
158
160
 
159
- const aPromises: Promise<void>[] = [];
160
- const aControls = this.getView().findAggregatedObjects(true);
161
+ const promises: Promise<void>[] = [];
162
+ const controls = this.getView().findAggregatedObjects(true);
161
163
 
162
- aControls.forEach((oElement: ManagedObject & { mBindingInfos?: Record<string, { binding?: Binding }> }): void => {
163
- const oObjectBinding = oElement.getObjectBinding();
164
- if (oObjectBinding) {
164
+ controls.forEach((element: ManagedObject & { mBindingInfos?: Record<string, { binding?: Binding }> }): void => {
165
+ const objectBinding = element.getObjectBinding();
166
+ if (objectBinding) {
165
167
  // Register on all object binding (mostly used on object pages)
166
- this.queryWatcher.registerBinding(oObjectBinding);
168
+ this.queryWatcher.registerBinding(objectBinding);
167
169
  } else {
168
- const aBindingKeys = Object.keys(oElement?.mBindingInfos ?? {});
169
- aBindingKeys.forEach((sPropertyName) => {
170
- const oListBinding = oElement?.mBindingInfos?.[sPropertyName].binding;
170
+ const aBindingKeys = Object.keys(element?.mBindingInfos ?? {});
171
+ aBindingKeys.forEach((propertyName) => {
172
+ const listBinding = element?.mBindingInfos?.[propertyName].binding;
171
173
 
172
- if (oListBinding && oListBinding.isA<ODataListBinding>("sap.ui.model.odata.v4.ODataListBinding")) {
173
- this.queryWatcher.registerBinding(oListBinding);
174
+ if (listBinding && listBinding.isA<ODataListBinding>("sap.ui.model.odata.v4.ODataListBinding")) {
175
+ this.queryWatcher.registerBinding(listBinding);
174
176
  }
175
177
  });
176
178
  }
177
179
  // This is dirty but MDCTables and MDCCharts have a weird loading lifecycle
178
- if (oElement.isA<MDCTable>("sap.ui.mdc.Table") || oElement.isA<Chart>("sap.ui.mdc.Chart")) {
180
+ if (element.isA<TableAPI>("sap.fe.macros.table.TableAPI") || element.isA<ChartAPI>("sap.fe.macros.chart.ChartAPI")) {
181
+ const tableOrChart = element.getContent() as Chart | Table;
179
182
  this.bTablesChartsLoaded = false;
180
- aPromises.push(this.queryWatcher.registerTableOrChart(oElement));
181
- } else if (oElement.isA<FilterBar>("sap.fe.macros.controls.FilterBar")) {
182
- this.queryWatcher.registerFilterBar(oElement);
183
+ promises.push(this.queryWatcher.registerTableOrChart(tableOrChart));
184
+ } else if ((element as ManagedObject).isA<FilterBar>("sap.fe.macros.controls.FilterBar")) {
185
+ this.queryWatcher.registerFilterBar(element as FilterBar);
183
186
  }
184
187
  });
185
188
 
186
- return aPromises;
189
+ return promises;
187
190
  }
188
191
 
189
192
  @methodOverride("_routing")