@sapui5/sap.fe.core 1.121.0 → 1.121.2

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.121.0",
3
+ "version": "1.121.2",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.121.0</version>
9
+ <version>1.121.2</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -260,7 +260,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
260
260
  return [{
261
261
  /* app data */
262
262
  }, aErrorData[1], aErrorData[2]];
263
- }).then(aResults => {
263
+ }).then(async aResults => {
264
264
  var _oAppData$appState;
265
265
  Log.info("APPSTATE: Parse Navigation done");
266
266
 
@@ -276,16 +276,22 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
276
276
  ...this._mCurrentAppState,
277
277
  ...appStateData
278
278
  } : {};
279
+ let shouldApplyState = true;
279
280
  if (!oRootController.viewState) {
280
281
  throw new Error(`viewState extension required for controller ${oRootController.getMetadata().getName()}`);
281
282
  }
282
- if ((!oAppData || Object.keys(oAppData).length === 0) && sNavType == NavType.iAppState) {
283
+ if (oRootController.viewState._isStateEmptyForIAppStateNavType(oAppData, sNavType)) {
283
284
  if (!oRootController.viewState._getInitialStateApplied()) {
284
285
  oRootController.viewState._setInitialStateApplied();
285
286
  }
287
+ shouldApplyState = false;
288
+ }
289
+ const applyViewState = await oRootController.viewState.applyViewState(this._mCurrentAppState, this._createNavigationParameters(oAppData, sNavType), skipMerge);
290
+ if (!shouldApplyState) {
286
291
  return {};
292
+ } else {
293
+ return applyViewState;
287
294
  }
288
- return oRootController.viewState.applyViewState(this._mCurrentAppState, this._createNavigationParameters(oAppData, sNavType), skipMerge);
289
295
  }).catch(function (oError) {
290
296
  Log.error("appState could not be applied", oError);
291
297
  throw oError;
@@ -319,4 +325,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
319
325
  */
320
326
  return AppStateHandler;
321
327
  }, true);
322
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsImRlZmluZVVJNUNsYXNzIiwib0FwcENvbXBvbmVudCIsIl9tQ3VycmVudEFwcFN0YXRlIiwic0lkIiwiZ2V0SWQiLCJzaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0IiwiYk5vUm91dGVDaGFuZ2UiLCJMb2ciLCJpbmZvIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwibmV3SGFzaCIsInJlcGxhY2VJbm5lckFwcFN0YXRlS2V5IiwiZ2V0RnVsbEhhc2giLCJuYXZUb0hhc2giLCJ1bmRlZmluZWQiLCJfY3JlYXRlQXBwU3RhdGVLZXkiLCJhcHBTdGF0ZURhdGEiLCJzdG9yZUlubmVyQXBwU3RhdGVBc3luYyIsIl9nZXRBcHBTdGF0ZUluZm8iLCJjcmVhdGVBcHBQYXJhbWV0ZXJzIiwicmVwbGFjZUhhc2giLCJ2aWV3SWQiLCJhcHBTdGF0ZSIsImN1cnJlbnRTdGF0ZVRvVXBkYXRlIiwiZGVlcEVxdWFsIiwib0Vycm9yIiwiZXJyb3IiLCJmaW5kQXBwU3RhdGVJbkhhc2giLCJjcmVhdGVBcHBTdGF0ZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiQXBwU3RhdGUiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJza2lwTWVyZ2UiLCJyb290Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsIkVycm9yIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwicm91dGluZ0lzQ29tcGxldGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwiX2NoZWNrSWZMYXN0U2VlblJlY29yZCIsInZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJ0ZWNobmljYWxLZXlzT2JqZWN0IiwiYmluZGluZ0NvbnRleHQiLCJwYXRoIiwiZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsInRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJlbGVtZW50Iiwia2V5VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIl9nZXRBcHBTdGF0ZURhdGEiLCJuYXZUeXBlIiwia2V5IiwiaSIsImh5YnJpZCIsImlBcHBTdGF0ZSIsImtleXMiLCJsZW5ndGgiLCJhcHBseUFwcFN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0lmTGFzdFNlZW5SZWNvcmQiLCJsb2NrIiwib05hdmlnYXRpb25TZXJ2aWNlIiwidG9FUzZQcm9taXNlIiwicGFyc2VOYXZpZ2F0aW9uIiwiY2F0Y2giLCJhRXJyb3JEYXRhIiwid2FybmluZyIsInRoZW4iLCJhUmVzdWx0cyIsImluaXRpYWwiLCJvUm9vdENvbnRyb2xsZXIiLCJfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiYXBwbHlWaWV3U3RhdGUiLCJmaW5hbGx5IiwidW5sb2NrIiwiY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiQmFzZU9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbm5lckFwcERhdGEgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vTmF2aWdhdGlvbkhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgbGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuXG5jb25zdCBOYXZUeXBlID0gbGlicmFyeS5OYXZUeXBlO1xudHlwZSBBcHBTdGF0ZSA9IHtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBcHBEYXRhID0ge1xuXHRvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdGJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk6IGJvb2xlYW47XG5cdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0aUFwcFN0YXRlPzoge1xuXHRcdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0fTtcbn07XG5jb25zdCBTS0lQX01FUkdFX0tFWSA9IFwic2tpcE1lcmdlXCI7XG5leHBvcnQgdHlwZSBJQXBwU3RhdGUgPSB7XG5cdGFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERhdGFJbmZvID0ge1xuXHRhcHBTdGF0ZURhdGE6IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9O1xuXHRhcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcFBhcmFtZXRlcnMgPSB7XG5cdHJlcGxhY2VIYXNoPzogYm9vbGVhbjtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0dmlld0lkPzogc3RyaW5nO1xufTtcblxuY29uc3QgUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSA9IFwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURVwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBTdGF0ZUhhbmRsZXJcIilcbmNsYXNzIEFwcFN0YXRlSGFuZGxlciBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHRwdWJsaWMgc0lkOiBzdHJpbmc7XG5cblx0cHVibGljIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblxuXHRwdWJsaWMgYk5vUm91dGVDaGFuZ2U6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBfbUN1cnJlbnRBcHBTdGF0ZT86IEFwcFN0YXRlID0ge307XG5cblx0c2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcblxuXHRjb25zdHJ1Y3RvcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5zSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldElkKCl9L0FwcFN0YXRlSGFuZGxlcmA7XG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0ID0ge307XG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cblx0Z2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zSWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbm5lckFwcFN0YXRlIE92ZXJhbGwgYXBwc3RhdGVcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKiBAcmV0dXJucyBJbm5lciBhcHBzdGF0ZVxuXHQgKi9cblx0X2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgc3RhdGVJZGVudGlmaWVyOiBzdHJpbmcpOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzdGF0ZUlkZW50aWZpZXIgPT09IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfHwgIWlubmVyQXBwU3RhdGUpIHtcblx0XHRcdC8vIG92ZXJhbGwgYXBwIHN0YXRlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cdFx0XHRyZXR1cm4gaW5uZXJBcHBTdGF0ZTtcblx0XHR9XG5cblx0XHQvLyB3ZSB0YWtlIHRoZSBzdWJzZXQgb2YgdGhlIGFwcCBzdGF0ZSB3cnQgdG8gdGhlIGxvY2FsIHZpZXcgaWQuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtzdGF0ZUlkZW50aWZpZXJdOiBpbm5lckFwcFN0YXRlW3N0YXRlSWRlbnRpZmllciBhcyBrZXlvZiB0eXBlb2YgaW5uZXJBcHBTdGF0ZV0gfHwge31cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhcHBzdGF0ZSBpbiBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVLZXkgQXBwc3RhdGUga2V5XG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICovXG5cdF9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleTogc3RyaW5nLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudCxcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKSxcblx0XHRcdGlzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0bmV3SGFzaCA9IG5hdmlnYXRpb25TZXJ2aWNlLnJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHJvdXRlclByb3h5LmdldEZ1bGxIYXNoKCksIGFwcFN0YXRlS2V5KTtcblxuXHRcdGlmIChuZXdIYXNoICYmIHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdID09PSAwICYmIG5ld0hhc2ggIT09IGhhc2gpIHtcblx0XHRcdHJvdXRlclByb3h5Lm5hdlRvSGFzaChuZXdIYXNoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAhaXNTdGlja3lNb2RlKTtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSB0cnVlO1xuXHRcdH1cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIEFwcHN0YXRlIEtleS5cblx0ICpcblx0ICogQHBhcmFtIGFwcFN0YXRlRGF0YSBBcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIEFwcHN0YXRlIEtleVxuXHQgKi9cblx0YXN5bmMgX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YTogSW5uZXJBcHBEYXRhLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblxuXHRcdGlmICh0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSkge1xuXHRcdFx0Ly8gYW55IG90aGVyIHZhbHVlXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSsrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAwIG9yIHVuZGVmaW5lZFxuXHRcdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPSAxO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFwcFN0YXRlS2V5ID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2Uuc3RvcmVJbm5lckFwcFN0YXRlQXN5bmMoYXBwU3RhdGVEYXRhLCB0cnVlLCB0cnVlKTtcblxuXHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdLS07XG5cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBBcHBzdGF0ZSBzdG9yZWRcIik7XG5cdFx0cmV0dXJuIGFwcFN0YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYXBwc3RhdGUgaW5mby5cblx0ICpcblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgbmV3IGFwcHN0YXRlXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnJlcGxhY2VIYXNoIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byByZXBsYWNlIHRoZSBoYXNoIHdpdGggdGhlIG5ldyBnZW5lcmF0ZWQga2V5XG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhIG9yIGFwcHN0YXRlIGtleVxuXHQgKi9cblx0YXN5bmMgX2dldEFwcFN0YXRlSW5mbyhpbm5lckFwcFN0YXRlOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQsIGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTxBcHBEYXRhSW5mbz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudDtcblx0XHRjb25zdCB7IHJlcGxhY2VIYXNoID0gdHJ1ZSwgdmlld0lkOiBzdGF0ZUlkZW50aWZpZXIgPSBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFIH0gPSBjcmVhdGVBcHBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0bGV0IGFwcFN0YXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgYXBwU3RhdGVEYXRhID0geyBhcHBTdGF0ZTogdGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSB9O1xuXG5cdFx0Y29uc3QgY3VycmVudFN0YXRlVG9VcGRhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyh0aGlzLl9tQ3VycmVudEFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChpbm5lckFwcFN0YXRlICYmICFkZWVwRXF1YWwoY3VycmVudFN0YXRlVG9VcGRhdGUsIGlubmVyQXBwU3RhdGUpKSB7XG5cdFx0XHQvL1xuXHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHsgLi4udGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgLi4uKGlubmVyQXBwU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG5cdFx0XHRhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhcHBTdGF0ZUtleSA9IGF3YWl0IHRoaXMuX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0aWYgKHJlcGxhY2VIYXNoID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fYWRkQXBwU3RhdGVJbkhhc2goYXBwU3RhdGVLZXksIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cdFx0XHRhcHBTdGF0ZUtleSA9IHJvdXRlclByb3h5LmZpbmRBcHBTdGF0ZUluSGFzaChoYXNoKSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhcHBTdGF0ZURhdGEsXG5cdFx0XHRhcHBTdGF0ZUtleVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICogUmVwbGFjZXMgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGFwcHN0YXRlIGJhc2VkIG9uIHJlcGxhY2VIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMuc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVBcHBTdGF0ZShjcmVhdGVBcHBQYXJhbWV0ZXJzPzogQ3JlYXRlQXBwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZCB8IEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGlmICghYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHNraXBNZXJnZSA9IGZhbHNlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRyb290Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGlmICghcm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBjb250cm9sbGVyIGV4dGVuc2lvbiBub3QgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyOiAke3Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblxuXHRcdC8vIEluIGNhc2UsIG9uIGxvYWQgb2YgRkNMIGFwcCB3ZSBoYXZlIG11bHRpcGxlIHZpZXdzKExSLCBPUCwgc3ViLU9QLi4uKSBhbmQgdXJsIGhhcyBpQXBwU3RhdGUoMSkuXG5cdFx0Ly8gVGhlIExSIHZpZXcgbG9hZHMgd2l0aCBhcHBsaWVkIGlBcHBTdGF0ZSgxKSBhbmQgY2FsbHMgY3JlYXRlQXBwU3RhdGUoZXhhbXBsZTogb25TZWFyY2ggZXZlbnQgaW4gTFIpIGJlZm9yZSBPUCBpcyBsb2FkZWQuXG5cdFx0Ly8gVGhpcyBjcmVhdGVzIGlBcHBTdGF0ZSgyKSBiZWZvcmUgaUFwcFN0YXRlKDEpIGlzIGFwcGxpZWQgdG8gT1AuXG5cdFx0Ly8gU28sIHdlIHRyeSB0byB3YWl0IHRpbGwgdGhlIHJvdXRpbmcgaXMgY29tcGxldGUuXG5cdFx0YXdhaXQgcm9vdENvbnRyb2xsZXIucm91dGluZ0lzQ29tcGxldGUoKTtcblxuXHRcdC8vIEdldCBhcHBTdGF0ZSB0byB1cGRhdGVcblx0XHRsZXQgaW5uZXJBcHBTdGF0ZSA9IChhd2FpdCByb290Q29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKSkgYXMgSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGlubmVyQXBwU3RhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyhpbm5lckFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChza2lwTWVyZ2UpIHtcblx0XHRcdGlubmVyQXBwU3RhdGUgPSB7IC4uLmlubmVyQXBwU3RhdGUsIC4uLnsgc2tpcE1lcmdlIH0gfTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGUsIGNyZWF0ZUFwcFBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhOiBBcHBEYXRhLCBzTmF2VHlwZTogc3RyaW5nKTogTmF2aWdhdGlvblBhcmFtZXRlciB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldz86IFZpZXcpOiBib29sZWFuIHtcblx0XHQvL2dldHRpbmcgdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgaW4gb3JkZXIgdG8gZmV0Y2ggdGhlIHRlY2huaWNhbGtleXMgb2YgbGFzdCBzZWVuIHJlY29yZCBhbmQgY2xvc2UgY29sdW1uIGZsYWcgc2V0IGluIHRoZSBpbnRlcm5hbHJvdXRpbmcgZm9yIHJldGFpbmluZyBzZXR0aW5ncyBpbiBwZXJzaXN0ZW5jZSBtb2RlXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3ICYmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImZjbENvbHVtbkNsb3NlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsS2V5c09iamVjdCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwidGVjaG5pY2FsS2V5c09mTGFzdFNlZW5SZWNvcmRcIik7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IHBhdGggPSAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYmluZGluZ0NvbnRleHQ/LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7bWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdGNvbnN0IGtleVZhbHVlID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KClbZWxlbWVudF07XG5cdFx0XHRcdGlmIChrZXlWYWx1ZSAhPT0gdGVjaG5pY2FsS2V5c09iamVjdFtlbGVtZW50XSkge1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly90aGUgcmVjb3JkIG9wZW5lZCBpcyBub3QgdGhlIGxhc3Qgc2VlbiBvbmUgOiBubyBuZWVkIHRvIHBlcnNpc3QgdGhlIGNoYW5nZXMsIHJlc2V0IHRvIGRlZmF1bHQgaW5zdGVhZFxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhOiBBcHBEYXRhLCB2aWV3SWQ/OiBzdHJpbmcsIG5hdlR5cGU/OiBzdHJpbmcpIHtcblx0XHRsZXQga2V5ID0gXCJcIixcblx0XHRcdGkgPSAwO1xuXHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IG5hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8gb0FwcERhdGEuaUFwcFN0YXRlIDogb0FwcERhdGE7XG5cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0Zm9yIChpOyBpIDwgT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXSA9PT0gdmlld0lkKSB7XG5cdFx0XHRcdFx0a2V5ID0gT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W09iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV1dOiBhcHBTdGF0ZURhdGEuYXBwU3RhdGVba2V5XSB8fCB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhcHBzdGF0ZSBieSBmZXRjaGluZyBhcHBkYXRhIGFuZCBwYXNzaW5nIGl0IHRvIF9hcHBseUFwcHN0YXRlVG9QYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmlld0lkXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIGFwcGx5QXBwU3RhdGUodmlld0lkPzogc3RyaW5nLCB2aWV3PzogVmlldyk6IFByb21pc2U8dm9pZCB8IHt9PiB7XG5cdFx0aWYgKCF0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hlY2tJZkxhc3RTZWVuUmVjb3JkID0gdGhpcy5fY2hlY2tJZkxhc3RTZWVuUmVjb3JkKHZpZXcpO1xuXHRcdGlmIChjaGVja0lmTGFzdFNlZW5SZWNvcmQgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcyk7XG5cdFx0Ly8gRG9uZSBmb3IgYnVzeSBpbmRpY2F0b3Jcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdC8vIFRPRE8gb05hdmlnYXRpb25TZXJ2aWNlLnBhcnNlTmF2aWdhdGlvbigpIHNob3VsZCByZXR1cm4gRVM2IHByb21pc2UgaW5zdGVhZCBqUXVlcnkucHJvbWlzZVxuXHRcdHJldHVybiB0b0VTNlByb21pc2U8dW5rbm93bltdPihvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGFFcnJvckRhdGE6IHVua25vd25bXSkge1xuXHRcdFx0XHRpZiAoIWFFcnJvckRhdGEpIHtcblx0XHRcdFx0XHRhRXJyb3JEYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLndhcm5pbmcoXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBmYWlsZWRcIiwgYUVycm9yRGF0YVswXSBhcyBzdHJpbmcpO1xuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8qIGFwcCBkYXRhICovXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzFdLFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMl1cblx0XHRcdFx0XTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYVJlc3VsdHM6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGRvbmVcIik7XG5cblx0XHRcdFx0Ly8gYVJlc3VsdHNbMV0gPT4gb1N0YXJ0dXBQYXJhbWV0ZXJzIChub3QgZXZhbHVhdGVkKVxuXHRcdFx0XHRjb25zdCBvQXBwRGF0YSA9IChhUmVzdWx0c1swXSB8fCB7fSkgYXMgQXBwRGF0YSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IChhUmVzdWx0c1syXSBhcyBzdHJpbmcpIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdC8vIGFwcGx5IHRoZSBhcHBzdGF0ZSBkZXBlbmRpbmcgdXBvbiB0aGUgdmlldyAoTFIvT1ApXG5cdFx0XHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IHRoaXMuX2dldEFwcFN0YXRlRGF0YShvQXBwRGF0YSwgdmlld0lkLCBzTmF2VHlwZSk7XG5cdFx0XHRcdC8vIGZldGNoIHRoZSBza2lwTWVyZ2UgZmxhZyBmcm9tIGFwcFN0YXRlIGZvciBzYXZlIGFzIHRpbGVcblx0XHRcdFx0Y29uc3Qgc2tpcE1lcmdlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb0FwcERhdGE/LmFwcFN0YXRlPy5bU0tJUF9NRVJHRV9LRVldO1xuXHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID1cblx0XHRcdFx0XHRzTmF2VHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgc05hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi5hcHBTdGF0ZURhdGEgfSA6IHt9O1xuXG5cdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdmlld1N0YXRlIGV4dGVuc2lvbiByZXF1aXJlZCBmb3IgY29udHJvbGxlciAke29Sb290Q29udHJvbGxlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoKCFvQXBwRGF0YSB8fCBPYmplY3Qua2V5cyhvQXBwRGF0YSkubGVuZ3RoID09PSAwKSAmJiBzTmF2VHlwZSA9PSBOYXZUeXBlLmlBcHBTdGF0ZSkge1xuXHRcdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5hcHBseVZpZXdTdGF0ZShcblx0XHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0XHRcdHRoaXMuX2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhLCBzTmF2VHlwZSksXG5cdFx0XHRcdFx0c2tpcE1lcmdlXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiYXBwU3RhdGUgY291bGQgbm90IGJlIGFwcGxpZWRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMpO1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBjaGVjayBpcyByb3V0ZSBpcyBjaGFuZ2VkIGJ5IGNoYW5nZSBpbiB0aGUgaUFQUFN0YXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJvdXRlIGhhcyBjaG5hZ2VkXG5cdCAqL1xuXHRjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJOb1JvdXRlQ2hhbmdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSByb3V0ZSBjaGFuZ2VkIGJ5IGlBUFBTdGF0ZS5cblx0ICovXG5cdHJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJOb1JvdXRlQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQGdsb2JhbFxuICovXG5leHBvcnQgZGVmYXVsdCBBcHBTdGF0ZUhhbmRsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7O0VBZ0JBLE1BQU1BLE9BQU8sR0FBR0MsT0FBTyxDQUFDRCxPQUFPO0VBYy9CLE1BQU1FLGNBQWMsR0FBRyxXQUFXO0VBZ0JsQyxNQUFNQyx5QkFBeUIsR0FBRywyQkFBMkI7RUFBQyxJQUd4REMsZUFBZSxXQURwQkMsY0FBYyxDQUFDLDZCQUE2QixDQUFDO0lBQUE7SUFZN0MseUJBQVlDLGFBQTJCLEVBQUU7TUFBQTtNQUN4Qyw4QkFBTztNQUFDLE1BTERDLGlCQUFpQixHQUFjLENBQUMsQ0FBQztNQU14QyxNQUFLRCxhQUFhLEdBQUdBLGFBQWE7TUFDbEMsTUFBS0UsR0FBRyxHQUFJLEdBQUVGLGFBQWEsQ0FBQ0csS0FBSyxFQUFHLGtCQUFpQjtNQUNyRCxNQUFLQyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7TUFDbkMsTUFBS0MsY0FBYyxHQUFHLEtBQUs7TUFDM0JDLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLHlDQUF5QyxDQUFDO01BQUM7SUFDckQ7SUFBQztJQUFBLE9BRURKLEtBQUssR0FBTCxpQkFBZ0I7TUFDZixPQUFPLElBQUksQ0FBQ0QsR0FBRztJQUNoQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxP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
328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsImRlZmluZVVJNUNsYXNzIiwib0FwcENvbXBvbmVudCIsIl9tQ3VycmVudEFwcFN0YXRlIiwic0lkIiwiZ2V0SWQiLCJzaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0IiwiYk5vUm91dGVDaGFuZ2UiLCJMb2ciLCJpbmZvIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwibmV3SGFzaCIsInJlcGxhY2VJbm5lckFwcFN0YXRlS2V5IiwiZ2V0RnVsbEhhc2giLCJuYXZUb0hhc2giLCJ1bmRlZmluZWQiLCJfY3JlYXRlQXBwU3RhdGVLZXkiLCJhcHBTdGF0ZURhdGEiLCJzdG9yZUlubmVyQXBwU3RhdGVBc3luYyIsIl9nZXRBcHBTdGF0ZUluZm8iLCJjcmVhdGVBcHBQYXJhbWV0ZXJzIiwicmVwbGFjZUhhc2giLCJ2aWV3SWQiLCJhcHBTdGF0ZSIsImN1cnJlbnRTdGF0ZVRvVXBkYXRlIiwiZGVlcEVxdWFsIiwib0Vycm9yIiwiZXJyb3IiLCJmaW5kQXBwU3RhdGVJbkhhc2giLCJjcmVhdGVBcHBTdGF0ZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiQXBwU3RhdGUiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJza2lwTWVyZ2UiLCJyb290Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsIkVycm9yIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwicm91dGluZ0lzQ29tcGxldGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwiX2NoZWNrSWZMYXN0U2VlblJlY29yZCIsInZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJ0ZWNobmljYWxLZXlzT2JqZWN0IiwiYmluZGluZ0NvbnRleHQiLCJwYXRoIiwiZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsInRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJlbGVtZW50Iiwia2V5VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIl9nZXRBcHBTdGF0ZURhdGEiLCJuYXZUeXBlIiwia2V5IiwiaSIsImh5YnJpZCIsImlBcHBTdGF0ZSIsImtleXMiLCJsZW5ndGgiLCJhcHBseUFwcFN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0lmTGFzdFNlZW5SZWNvcmQiLCJsb2NrIiwib05hdmlnYXRpb25TZXJ2aWNlIiwidG9FUzZQcm9taXNlIiwicGFyc2VOYXZpZ2F0aW9uIiwiY2F0Y2giLCJhRXJyb3JEYXRhIiwid2FybmluZyIsInRoZW4iLCJhUmVzdWx0cyIsImluaXRpYWwiLCJvUm9vdENvbnRyb2xsZXIiLCJzaG91bGRBcHBseVN0YXRlIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiYXBwbHlWaWV3U3RhdGUiLCJmaW5hbGx5IiwidW5sb2NrIiwiY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiQmFzZU9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbm5lckFwcERhdGEgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vTmF2aWdhdGlvbkhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgbGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuXG5jb25zdCBOYXZUeXBlID0gbGlicmFyeS5OYXZUeXBlO1xudHlwZSBBcHBTdGF0ZSA9IHtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBcHBEYXRhID0ge1xuXHRvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdGJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk6IGJvb2xlYW47XG5cdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0aUFwcFN0YXRlPzoge1xuXHRcdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0fTtcbn07XG5jb25zdCBTS0lQX01FUkdFX0tFWSA9IFwic2tpcE1lcmdlXCI7XG5leHBvcnQgdHlwZSBJQXBwU3RhdGUgPSB7XG5cdGFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERhdGFJbmZvID0ge1xuXHRhcHBTdGF0ZURhdGE6IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9O1xuXHRhcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcFBhcmFtZXRlcnMgPSB7XG5cdHJlcGxhY2VIYXNoPzogYm9vbGVhbjtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0dmlld0lkPzogc3RyaW5nO1xufTtcblxuY29uc3QgUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSA9IFwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURVwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBTdGF0ZUhhbmRsZXJcIilcbmNsYXNzIEFwcFN0YXRlSGFuZGxlciBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHRwdWJsaWMgc0lkOiBzdHJpbmc7XG5cblx0cHVibGljIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblxuXHRwdWJsaWMgYk5vUm91dGVDaGFuZ2U6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBfbUN1cnJlbnRBcHBTdGF0ZT86IEFwcFN0YXRlID0ge307XG5cblx0c2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcblxuXHRjb25zdHJ1Y3RvcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5zSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldElkKCl9L0FwcFN0YXRlSGFuZGxlcmA7XG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0ID0ge307XG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cblx0Z2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zSWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbm5lckFwcFN0YXRlIE92ZXJhbGwgYXBwc3RhdGVcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKiBAcmV0dXJucyBJbm5lciBhcHBzdGF0ZVxuXHQgKi9cblx0X2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgc3RhdGVJZGVudGlmaWVyOiBzdHJpbmcpOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzdGF0ZUlkZW50aWZpZXIgPT09IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfHwgIWlubmVyQXBwU3RhdGUpIHtcblx0XHRcdC8vIG92ZXJhbGwgYXBwIHN0YXRlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cdFx0XHRyZXR1cm4gaW5uZXJBcHBTdGF0ZTtcblx0XHR9XG5cblx0XHQvLyB3ZSB0YWtlIHRoZSBzdWJzZXQgb2YgdGhlIGFwcCBzdGF0ZSB3cnQgdG8gdGhlIGxvY2FsIHZpZXcgaWQuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtzdGF0ZUlkZW50aWZpZXJdOiBpbm5lckFwcFN0YXRlW3N0YXRlSWRlbnRpZmllciBhcyBrZXlvZiB0eXBlb2YgaW5uZXJBcHBTdGF0ZV0gfHwge31cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhcHBzdGF0ZSBpbiBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVLZXkgQXBwc3RhdGUga2V5XG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICovXG5cdF9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleTogc3RyaW5nLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudCxcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKSxcblx0XHRcdGlzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0bmV3SGFzaCA9IG5hdmlnYXRpb25TZXJ2aWNlLnJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHJvdXRlclByb3h5LmdldEZ1bGxIYXNoKCksIGFwcFN0YXRlS2V5KTtcblxuXHRcdGlmIChuZXdIYXNoICYmIHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdID09PSAwICYmIG5ld0hhc2ggIT09IGhhc2gpIHtcblx0XHRcdHJvdXRlclByb3h5Lm5hdlRvSGFzaChuZXdIYXNoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAhaXNTdGlja3lNb2RlKTtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSB0cnVlO1xuXHRcdH1cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIEFwcHN0YXRlIEtleS5cblx0ICpcblx0ICogQHBhcmFtIGFwcFN0YXRlRGF0YSBBcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIEFwcHN0YXRlIEtleVxuXHQgKi9cblx0YXN5bmMgX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YTogSW5uZXJBcHBEYXRhLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblxuXHRcdGlmICh0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSkge1xuXHRcdFx0Ly8gYW55IG90aGVyIHZhbHVlXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSsrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAwIG9yIHVuZGVmaW5lZFxuXHRcdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPSAxO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFwcFN0YXRlS2V5ID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2Uuc3RvcmVJbm5lckFwcFN0YXRlQXN5bmMoYXBwU3RhdGVEYXRhLCB0cnVlLCB0cnVlKTtcblxuXHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdLS07XG5cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBBcHBzdGF0ZSBzdG9yZWRcIik7XG5cdFx0cmV0dXJuIGFwcFN0YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYXBwc3RhdGUgaW5mby5cblx0ICpcblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgbmV3IGFwcHN0YXRlXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnJlcGxhY2VIYXNoIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byByZXBsYWNlIHRoZSBoYXNoIHdpdGggdGhlIG5ldyBnZW5lcmF0ZWQga2V5XG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhIG9yIGFwcHN0YXRlIGtleVxuXHQgKi9cblx0YXN5bmMgX2dldEFwcFN0YXRlSW5mbyhpbm5lckFwcFN0YXRlOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQsIGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTxBcHBEYXRhSW5mbz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudDtcblx0XHRjb25zdCB7IHJlcGxhY2VIYXNoID0gdHJ1ZSwgdmlld0lkOiBzdGF0ZUlkZW50aWZpZXIgPSBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFIH0gPSBjcmVhdGVBcHBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0bGV0IGFwcFN0YXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgYXBwU3RhdGVEYXRhID0geyBhcHBTdGF0ZTogdGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSB9O1xuXG5cdFx0Y29uc3QgY3VycmVudFN0YXRlVG9VcGRhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyh0aGlzLl9tQ3VycmVudEFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChpbm5lckFwcFN0YXRlICYmICFkZWVwRXF1YWwoY3VycmVudFN0YXRlVG9VcGRhdGUsIGlubmVyQXBwU3RhdGUpKSB7XG5cdFx0XHQvL1xuXHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHsgLi4udGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgLi4uKGlubmVyQXBwU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG5cdFx0XHRhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhcHBTdGF0ZUtleSA9IGF3YWl0IHRoaXMuX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0aWYgKHJlcGxhY2VIYXNoID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fYWRkQXBwU3RhdGVJbkhhc2goYXBwU3RhdGVLZXksIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cdFx0XHRhcHBTdGF0ZUtleSA9IHJvdXRlclByb3h5LmZpbmRBcHBTdGF0ZUluSGFzaChoYXNoKSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhcHBTdGF0ZURhdGEsXG5cdFx0XHRhcHBTdGF0ZUtleVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICogUmVwbGFjZXMgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGFwcHN0YXRlIGJhc2VkIG9uIHJlcGxhY2VIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMuc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVBcHBTdGF0ZShjcmVhdGVBcHBQYXJhbWV0ZXJzPzogQ3JlYXRlQXBwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZCB8IEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGlmICghYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHNraXBNZXJnZSA9IGZhbHNlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRyb290Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGlmICghcm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBjb250cm9sbGVyIGV4dGVuc2lvbiBub3QgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyOiAke3Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblxuXHRcdC8vIEluIGNhc2UsIG9uIGxvYWQgb2YgRkNMIGFwcCB3ZSBoYXZlIG11bHRpcGxlIHZpZXdzKExSLCBPUCwgc3ViLU9QLi4uKSBhbmQgdXJsIGhhcyBpQXBwU3RhdGUoMSkuXG5cdFx0Ly8gVGhlIExSIHZpZXcgbG9hZHMgd2l0aCBhcHBsaWVkIGlBcHBTdGF0ZSgxKSBhbmQgY2FsbHMgY3JlYXRlQXBwU3RhdGUoZXhhbXBsZTogb25TZWFyY2ggZXZlbnQgaW4gTFIpIGJlZm9yZSBPUCBpcyBsb2FkZWQuXG5cdFx0Ly8gVGhpcyBjcmVhdGVzIGlBcHBTdGF0ZSgyKSBiZWZvcmUgaUFwcFN0YXRlKDEpIGlzIGFwcGxpZWQgdG8gT1AuXG5cdFx0Ly8gU28sIHdlIHRyeSB0byB3YWl0IHRpbGwgdGhlIHJvdXRpbmcgaXMgY29tcGxldGUuXG5cdFx0YXdhaXQgcm9vdENvbnRyb2xsZXIucm91dGluZ0lzQ29tcGxldGUoKTtcblxuXHRcdC8vIEdldCBhcHBTdGF0ZSB0byB1cGRhdGVcblx0XHRsZXQgaW5uZXJBcHBTdGF0ZSA9IChhd2FpdCByb290Q29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKSkgYXMgSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGlubmVyQXBwU3RhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyhpbm5lckFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChza2lwTWVyZ2UpIHtcblx0XHRcdGlubmVyQXBwU3RhdGUgPSB7IC4uLmlubmVyQXBwU3RhdGUsIC4uLnsgc2tpcE1lcmdlIH0gfTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGUsIGNyZWF0ZUFwcFBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhOiBBcHBEYXRhLCBzTmF2VHlwZTogc3RyaW5nKTogTmF2aWdhdGlvblBhcmFtZXRlciB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldz86IFZpZXcpOiBib29sZWFuIHtcblx0XHQvL2dldHRpbmcgdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgaW4gb3JkZXIgdG8gZmV0Y2ggdGhlIHRlY2huaWNhbGtleXMgb2YgbGFzdCBzZWVuIHJlY29yZCBhbmQgY2xvc2UgY29sdW1uIGZsYWcgc2V0IGluIHRoZSBpbnRlcm5hbHJvdXRpbmcgZm9yIHJldGFpbmluZyBzZXR0aW5ncyBpbiBwZXJzaXN0ZW5jZSBtb2RlXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3ICYmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImZjbENvbHVtbkNsb3NlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsS2V5c09iamVjdCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwidGVjaG5pY2FsS2V5c09mTGFzdFNlZW5SZWNvcmRcIik7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IHBhdGggPSAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYmluZGluZ0NvbnRleHQ/LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7bWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdGNvbnN0IGtleVZhbHVlID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KClbZWxlbWVudF07XG5cdFx0XHRcdGlmIChrZXlWYWx1ZSAhPT0gdGVjaG5pY2FsS2V5c09iamVjdFtlbGVtZW50XSkge1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly90aGUgcmVjb3JkIG9wZW5lZCBpcyBub3QgdGhlIGxhc3Qgc2VlbiBvbmUgOiBubyBuZWVkIHRvIHBlcnNpc3QgdGhlIGNoYW5nZXMsIHJlc2V0IHRvIGRlZmF1bHQgaW5zdGVhZFxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhOiBBcHBEYXRhLCB2aWV3SWQ/OiBzdHJpbmcsIG5hdlR5cGU/OiBzdHJpbmcpIHtcblx0XHRsZXQga2V5ID0gXCJcIixcblx0XHRcdGkgPSAwO1xuXHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IG5hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8gb0FwcERhdGEuaUFwcFN0YXRlIDogb0FwcERhdGE7XG5cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0Zm9yIChpOyBpIDwgT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXSA9PT0gdmlld0lkKSB7XG5cdFx0XHRcdFx0a2V5ID0gT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W09iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV1dOiBhcHBTdGF0ZURhdGEuYXBwU3RhdGVba2V5XSB8fCB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhcHBzdGF0ZSBieSBmZXRjaGluZyBhcHBkYXRhIGFuZCBwYXNzaW5nIGl0IHRvIF9hcHBseUFwcHN0YXRlVG9QYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmlld0lkXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIGFwcGx5QXBwU3RhdGUodmlld0lkPzogc3RyaW5nLCB2aWV3PzogVmlldyk6IFByb21pc2U8dm9pZCB8IHt9PiB7XG5cdFx0aWYgKCF0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hlY2tJZkxhc3RTZWVuUmVjb3JkID0gdGhpcy5fY2hlY2tJZkxhc3RTZWVuUmVjb3JkKHZpZXcpO1xuXHRcdGlmIChjaGVja0lmTGFzdFNlZW5SZWNvcmQgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcyk7XG5cdFx0Ly8gRG9uZSBmb3IgYnVzeSBpbmRpY2F0b3Jcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdC8vIFRPRE8gb05hdmlnYXRpb25TZXJ2aWNlLnBhcnNlTmF2aWdhdGlvbigpIHNob3VsZCByZXR1cm4gRVM2IHByb21pc2UgaW5zdGVhZCBqUXVlcnkucHJvbWlzZVxuXHRcdHJldHVybiB0b0VTNlByb21pc2U8dW5rbm93bltdPihvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGFFcnJvckRhdGE6IHVua25vd25bXSkge1xuXHRcdFx0XHRpZiAoIWFFcnJvckRhdGEpIHtcblx0XHRcdFx0XHRhRXJyb3JEYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLndhcm5pbmcoXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBmYWlsZWRcIiwgYUVycm9yRGF0YVswXSBhcyBzdHJpbmcpO1xuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8qIGFwcCBkYXRhICovXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzFdLFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMl1cblx0XHRcdFx0XTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhc3luYyAoYVJlc3VsdHM6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGRvbmVcIik7XG5cblx0XHRcdFx0Ly8gYVJlc3VsdHNbMV0gPT4gb1N0YXJ0dXBQYXJhbWV0ZXJzIChub3QgZXZhbHVhdGVkKVxuXHRcdFx0XHRjb25zdCBvQXBwRGF0YSA9IChhUmVzdWx0c1swXSB8fCB7fSkgYXMgQXBwRGF0YSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IChhUmVzdWx0c1syXSBhcyBzdHJpbmcpIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdC8vIGFwcGx5IHRoZSBhcHBzdGF0ZSBkZXBlbmRpbmcgdXBvbiB0aGUgdmlldyAoTFIvT1ApXG5cdFx0XHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IHRoaXMuX2dldEFwcFN0YXRlRGF0YShvQXBwRGF0YSwgdmlld0lkLCBzTmF2VHlwZSk7XG5cdFx0XHRcdC8vIGZldGNoIHRoZSBza2lwTWVyZ2UgZmxhZyBmcm9tIGFwcFN0YXRlIGZvciBzYXZlIGFzIHRpbGVcblx0XHRcdFx0Y29uc3Qgc2tpcE1lcmdlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb0FwcERhdGE/LmFwcFN0YXRlPy5bU0tJUF9NRVJHRV9LRVldO1xuXHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID1cblx0XHRcdFx0XHRzTmF2VHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgc05hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi5hcHBTdGF0ZURhdGEgfSA6IHt9O1xuXHRcdFx0XHRsZXQgc2hvdWxkQXBwbHlTdGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0aWYgKCFvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB2aWV3U3RhdGUgZXh0ZW5zaW9uIHJlcXVpcmVkIGZvciBjb250cm9sbGVyICR7b1Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9BcHBEYXRhLCBzTmF2VHlwZSkpIHtcblx0XHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSkge1xuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzaG91bGRBcHBseVN0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXBwbHlWaWV3U3RhdGUgPSBhd2FpdCBvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKFxuXHRcdFx0XHRcdHRoaXMuX21DdXJyZW50QXBwU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRcdFx0dGhpcy5fY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGEsIHNOYXZUeXBlKSxcblx0XHRcdFx0XHRza2lwTWVyZ2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFzaG91bGRBcHBseVN0YXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhcHBseVZpZXdTdGF0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcImFwcFN0YXRlIGNvdWxkIG5vdCBiZSBhcHBsaWVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzKTtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gY2hlY2sgaXMgcm91dGUgaXMgY2hhbmdlZCBieSBjaGFuZ2UgaW4gdGhlIGlBUFBTdGF0ZS5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByb3V0ZSBoYXMgY2huYWdlZFxuXHQgKi9cblx0Y2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5iTm9Sb3V0ZUNoYW5nZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgcm91dGUgY2hhbmdlZCBieSBpQVBQU3RhdGUuXG5cdCAqL1xuXHRyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5iTm9Sb3V0ZUNoYW5nZSkge1xuXHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBnbG9iYWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgQXBwU3RhdGVIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQWdCQSxNQUFNQSxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0QsT0FBTztFQWMvQixNQUFNRSxjQUFjLEdBQUcsV0FBVztFQWdCbEMsTUFBTUMseUJBQXlCLEdBQUcsMkJBQTJCO0VBQUMsSUFHeERDLGVBQWUsV0FEcEJDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQztJQUFBO0lBWTdDLHlCQUFZQyxhQUEyQixFQUFFO01BQUE7TUFDeEMsOEJBQU87TUFBQyxNQUxEQyxpQkFBaUIsR0FBYyxDQUFDLENBQUM7TUFNeEMsTUFBS0QsYUFBYSxHQUFHQSxhQUFhO01BQ2xDLE1BQUtFLEdBQUcsR0FB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
@@ -303,7 +303,7 @@ class AppStateHandler extends BaseObject {
303
303
  aErrorData[2]
304
304
  ];
305
305
  })
306
- .then((aResults: unknown[]) => {
306
+ .then(async (aResults: unknown[]) => {
307
307
  Log.info("APPSTATE: Parse Navigation done");
308
308
 
309
309
  // aResults[1] => oStartupParameters (not evaluated)
@@ -316,21 +316,27 @@ class AppStateHandler extends BaseObject {
316
316
  const skipMerge: boolean | undefined = oAppData?.appState?.[SKIP_MERGE_KEY];
317
317
  this._mCurrentAppState =
318
318
  sNavType === NavType.iAppState || sNavType === NavType.hybrid ? { ...this._mCurrentAppState, ...appStateData } : {};
319
+ let shouldApplyState = true;
319
320
 
320
321
  if (!oRootController.viewState) {
321
322
  throw new Error(`viewState extension required for controller ${oRootController.getMetadata().getName()}`);
322
323
  }
323
- if ((!oAppData || Object.keys(oAppData).length === 0) && sNavType == NavType.iAppState) {
324
+ if (oRootController.viewState._isStateEmptyForIAppStateNavType(oAppData, sNavType)) {
324
325
  if (!oRootController.viewState._getInitialStateApplied()) {
325
326
  oRootController.viewState._setInitialStateApplied();
326
327
  }
327
- return {};
328
+ shouldApplyState = false;
328
329
  }
329
- return oRootController.viewState.applyViewState(
330
+ const applyViewState = await oRootController.viewState.applyViewState(
330
331
  this._mCurrentAppState as Record<string, unknown>,
331
332
  this._createNavigationParameters(oAppData, sNavType),
332
333
  skipMerge
333
334
  );
335
+ if (!shouldApplyState) {
336
+ return {};
337
+ } else {
338
+ return applyViewState;
339
+ }
334
340
  })
335
341
  .catch(function (oError: unknown) {
336
342
  Log.error("appState could not be applied", oError as string);
@@ -212,17 +212,24 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Hook
212
212
  return renderedControl;
213
213
  }, {
214
214
  id: function (sId) {
215
- return containingView.createId(sId);
215
+ return mSettings.containingView.createId(sId);
216
216
  },
217
217
  settings: function (controlSettings) {
218
- const allAssociations = this.getMetadata().getAssociations();
218
+ const allAssociations = this.getMetadata().getAllAssociations();
219
219
  for (const associationDetailName of Object.keys(allAssociations)) {
220
220
  if (controlSettings[associationDetailName] !== undefined) {
221
- // The associated elements are indicated via local IDs; we need to change the references to global ones
222
- const associations = Array.isArray(controlSettings[associationDetailName]) ? controlSettings[associationDetailName] : [controlSettings[associationDetailName]];
221
+ if (allAssociations[associationDetailName].multiple) {
222
+ // Multiple association
223
+ // The associated elements are indicated via local IDs; we need to change the references to global ones
224
+ const associations = Array.isArray(controlSettings[associationDetailName]) ? controlSettings[associationDetailName] : [controlSettings[associationDetailName]];
223
225
 
224
- // Create global IDs for associations given as strings, not for already resolved ManagedObjects
225
- controlSettings[associationDetailName] = associations.map(association => typeof association === "string" ? mSettings.containingView.createId(association) : association);
226
+ // Create global IDs for associations given as strings, not for already resolved ManagedObjects
227
+ controlSettings[associationDetailName] = associations.map(association => typeof association === "string" ? mSettings.containingView.createId(association) : association);
228
+ } else {
229
+ // Single association
230
+ const singleAssociationValue = controlSettings[associationDetailName];
231
+ controlSettings[associationDetailName] = typeof singleAssociationValue === "string" ? mSettings.containingView.createId(singleAssociationValue) : singleAssociationValue;
232
+ }
226
233
  }
227
234
  }
228
235
  return controlSettings;
@@ -232,4 +239,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Hook
232
239
  });
233
240
  return _exports;
234
241
  }, false);
235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50IiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiRnJhZ21lbnQiLCJSVU5USU1FX0JMT0NLUyIsInN0b3JlUnVudGltZUJsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJuYW1lIiwicmVnaXN0ZXJUeXBlIiwibG9hZCIsIm1TZXR0aW5ncyIsImJ1aWxkaW5nQmxvY2tEZXRhaWwiLCJmcmFnbWVudE5hbWUiLCJlIiwibG9hZEVycm9yTWVzc2FnZSIsImluaXQiLCJMYWJlbCIsInRleHQiLCJmcmFnbWVudENvbnRlbnQiLCJ1bmRlZmluZWQiLCJFcnJvciIsImNsYXNzU2V0dGluZ3MiLCJmZUN1c3RvbURhdGEiLCJjdXN0b21EYXRhIiwibVByb3BlcnRpZXMiLCJ2YWx1ZSIsImZ1bmN0aW9uSG9sZGVyIiwiY29udGFpbmluZ1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0VmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicGFnZU1vZGVsIiwiZ2V0TW9kZWwiLCJmdW5jdGlvblN0cmluZ0luT3JkZXIiLCJzcGxpdCIsInByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24iLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlNZXRhZGF0YSIsInBhZ2VNb2RlbENvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImJpbmRhYmxlIiwiTnVtYmVyIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJmdW5jdGlvbkluZGV4IiwiaW5kZXhPZiIsImZ1bmN0aW9uU3RyaW5nIiwidGFyZ2V0RnVuY3Rpb24iLCJmaW5kIiwiZnVuY3Rpb25EZWYiLCJfc2FwdWlfaGFuZGxlck5hbWUiLCJsZW5ndGgiLCJiaW5kIiwiZ2V0T2JqZWN0IiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyZWRDb250cm9sIiwianN4Iiwid2l0aENvbnRleHQiLCJ2aWV3IiwidGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiSlNPTk1vZGVsIiwiaXNSdW50aW1lSW5zdGFudGlhdGlvbiIsImJ1aWxkaW5nQmxvY2tJbnN0YW5jZSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiZnJhZ21lbnRYTUwiLCJkZXBlbmRlbnRzIiwiZGVwZW5kZW50IiwiYWRkRGVwZW5kZW50IiwiY3VzdG9tRGF0YUhvbGRlciIsImFkZEN1c3RvbURhdGEiLCJsYXlvdXREYXRhIiwic2V0QWdncmVnYXRpb24iLCJnZXRDb250ZW50IiwiX2JBc3luYyIsIl9hQ29udGVudCIsImlkIiwic0lkIiwiY3JlYXRlSWQiLCJzZXR0aW5ncyIsImNvbnRyb2xTZXR0aW5ncyIsImFsbEFzc29jaWF0aW9ucyIsImdldE1ldGFkYXRhIiwiZ2V0QXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25EZXRhaWxOYW1lIiwiT2JqZWN0Iiwia2V5cyIsImFzc29jaWF0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImFzc29jaWF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBSdW50aW1lQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9SdW50aW1lQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHsgaW5pdENvbnRyb2xsZXJFeHRlbnNpb25Ib29rSGFuZGxlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSG9va1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9jb3JlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgTGF5b3V0RGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgZXh0ZW5zaW9uIHRvIHRoZSBGcmFnbWVudCBjbGFzcyBpbiBvcmRlciB0byBhZGQgc29tZSBwbGFjZSB0byBob2xkIGZ1bmN0aW9ucyBmb3IgcnVudGltZSBidWlsZGluZyBibG9ja3NcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZy5SdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50XCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50IGV4dGVuZHMgRnJhZ21lbnQge1xuXHQvKlxuXHQgKiBFdmVudCB0byBob2xkIGFuZCByZXNvbHZlIGZ1bmN0aW9ucyBmb3IgcnVudGltZSBidWlsZGluZyBibG9ja3Ncblx0ICovXG5cdEBldmVudCgpXG5cdGZ1bmN0aW9uSG9sZGVyITogRnVuY3Rpb247XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIgfSlcblx0ZnJhZ21lbnRYTUw/OiBDb250cm9sO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFtdXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGRlcGVuZGVudHMhOiBDb250cm9sW107XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5DdXN0b21EYXRhW11cIiwgbXVsdGlwbGU6IHRydWUgfSlcblx0Y3VzdG9tRGF0YUhvbGRlciE6IEN1c3RvbURhdGFbXTtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkxheW91dERhdGFcIiB9KVxuXHRsYXlvdXREYXRhITogTGF5b3V0RGF0YTtcbn1cblxudHlwZSBGcmFnbWVudEN1c3RvbURhdGEgPSB7XG5cdG1Qcm9wZXJ0aWVzOiB7XG5cdFx0dmFsdWU6IHtcblx0XHRcdFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFNldHRpbmdzID0ge1xuXHRmcmFnbWVudE5hbWU6IHN0cmluZztcblx0ZnJhZ21lbnRDb250ZW50PzogdHlwZW9mIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrO1xuXHRjb250YWluaW5nVmlldzogVmlldztcblx0Y3VzdG9tRGF0YT86IEZyYWdtZW50Q3VzdG9tRGF0YVtdO1xuXHRkZXBlbmRlbnRzPzogVUk1RWxlbWVudFtdO1xuXHRjdXN0b21EYXRhSG9sZGVyPzogQ3VzdG9tRGF0YVtdO1xuXHRsYXlvdXREYXRhPzogTGF5b3V0RGF0YTtcblx0ZnJhZ21lbnRYTUw/OiBDb250cm9sO1xuXHRmdW5jdGlvbkhvbGRlcj86IEZ1bmN0aW9uV2l0aEhhbmRsZXJbXVtdO1xuXHRsb2FkRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufTtcblxudHlwZSBGdW5jdGlvbldpdGhIYW5kbGVyID0gRnVuY3Rpb24gJiB7XG5cdF9zYXB1aV9oYW5kbGVyTmFtZT86IHN0cmluZztcbn07XG50eXBlIEZyYWdtZW50V2l0aEludGVybmFscyA9IHtcblx0X2JBc3luYzogYm9vbGVhbjtcblx0X2FDb250ZW50OiBDb250cm9sIHwgQ29udHJvbFtdO1xufTtcblxuY29uc3QgUlVOVElNRV9CTE9DS1M6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBSdW50aW1lQnVpbGRpbmdCbG9jaz4gPSB7fTtcbi8qKlxuICogU3RvcmVzIHRoZSBjbGFzcyBvZiBhIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2sgdG8gYmUgbG9hZGVkIHdoZW5ldmVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogQHBhcmFtIEJ1aWxkaW5nQmxvY2tDbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVSdW50aW1lQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spOiB2b2lkIHtcblx0UlVOVElNRV9CTE9DS1NbXG5cdFx0YCR7QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSA/PyBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlfS4ke0J1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lfWBcblx0XSA9IEJ1aWxkaW5nQmxvY2tDbGFzcztcbn1cblxuUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudC5yZWdpc3RlclR5cGUoXCJGRV9DT01QT05FTlRTXCIsIHtcblx0bG9hZDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFNldHRpbmdzKSB7XG5cdFx0bGV0IGJ1aWxkaW5nQmxvY2tEZXRhaWw7XG5cdFx0dHJ5IHtcblx0XHRcdGJ1aWxkaW5nQmxvY2tEZXRhaWwgPSBhd2FpdCBSVU5USU1FX0JMT0NLU1ttU2V0dGluZ3MuZnJhZ21lbnROYW1lXS5sb2FkKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bVNldHRpbmdzLmxvYWRFcnJvck1lc3NhZ2UgPSBlIGFzIHN0cmluZztcblx0XHR9XG5cdFx0cmV0dXJuIGJ1aWxkaW5nQmxvY2tEZXRhaWw7XG5cdH0sXG5cdGluaXQ6IGZ1bmN0aW9uICh0aGlzOiBGcmFnbWVudFdpdGhJbnRlcm5hbHMsIG1TZXR0aW5nczogUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFNldHRpbmdzKSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MsIGV4aXQgZWFybHlcblx0XHRpZiAobVNldHRpbmdzLmxvYWRFcnJvck1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBuZXcgTGFiZWwoeyB0ZXh0OiBtU2V0dGluZ3MubG9hZEVycm9yTWVzc2FnZSB9KTtcblx0XHR9XG5cdFx0bGV0IEJ1aWxkaW5nQmxvY2tDbGFzcyA9IG1TZXR0aW5ncy5mcmFnbWVudENvbnRlbnQ7XG5cdFx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBzb21lIGNhc2Ugd2UgbWlnaHQgaGF2ZSBiZWVuIGNhbGxlZCBoZXJlIHN5bmNocm9ub3VzbHkgKHVuc3Rhc2ggY2FzZSBmb3IgaW5zdGFuY2UpLCB3aGljaCBtZWFucyB3ZSBkaWRuJ3QgZ28gdGhyb3VnaCB0aGUgbG9hZCBmdW5jdGlvblxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzID0gUlVOVElNRV9CTE9DS1NbbVNldHRpbmdzLmZyYWdtZW50TmFtZV07XG5cdFx0fVxuXHRcdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBObyBidWlsZGluZyBibG9jayBjbGFzcyBmb3IgcnVudGltZSBidWlsZGluZyBibG9jayAke21TZXR0aW5ncy5mcmFnbWVudE5hbWV9IGZvdW5kYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xhc3NTZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRjb25zdCBmZUN1c3RvbURhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuXHRcdFx0bVNldHRpbmdzLmN1c3RvbURhdGE/LlswXT8ubVByb3BlcnRpZXM/LnZhbHVlPy5bXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nXCJdIHx8IHt9O1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuY3VzdG9tRGF0YTtcblx0XHRjb25zdCBmdW5jdGlvbkhvbGRlcjogRnVuY3Rpb25XaXRoSGFuZGxlcltdW10gPSBtU2V0dGluZ3MuZnVuY3Rpb25Ib2xkZXIgPz8gW107XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5mdW5jdGlvbkhvbGRlcjtcblxuXHRcdC8vIGNvbnRhaW5pbmdWaWV3IGNhbiBhbHNvIGJlIGEgZnJhZ21lbnQsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBjb250cm9sbGVyICh3aGljaCBjb3VsZCBhbHNvIGJlIGFuIEV4dGVuc2lvbkFQSSkgZ2V0IHRoZSBhY3R1YWwgdmlld1xuXHRcdGNvbnN0IGNvbnRhaW5pbmdWaWV3ID1cblx0XHRcdG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyPy4oKT8uZ2V0Vmlldz8uKCkgPz9cblx0XHRcdChtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcj8uKCkgYXMgdW5rbm93biBhcyBFeHRlbnNpb25BUEkpPy5bXCJfdmlld1wiXSA/P1xuXHRcdFx0bVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3O1xuXHRcdGNvbnN0IHBhZ2VDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IoY29udGFpbmluZ1ZpZXcpIGFzIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250YWluaW5nVmlldyk7XG5cblx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgcGFnZU1vZGVsID0gcGFnZUNvbXBvbmVudC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cblx0XHRjb25zdCBmdW5jdGlvblN0cmluZ0luT3JkZXI6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gZmVDdXN0b21EYXRhLmZ1bmN0aW9uU3RyaW5nSW5PcmRlcj8uc3BsaXQoXCIsXCIpO1xuXHRcdGNvbnN0IHByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb246IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gZmVDdXN0b21EYXRhLnByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRjb25zdCBwYWdlTW9kZWxDb250ZXh0ID0gcGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdKTtcblxuXHRcdFx0aWYgKHBhZ2VNb2RlbENvbnRleHQgPT09IG51bGwpIHtcblx0XHRcdFx0Ly8gdmFsdWUgY2Fubm90IGJlIHJlc29sdmVkLCBzbyBpdCBpcyBlaXRoZXIgYSBydW50aW1lIGJpbmRpbmcgb3IgYSBjb25zdGFudFxuXHRcdFx0XHRsZXQgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcj4gfCB1bmRlZmluZWQgPVxuXHRcdFx0XHRcdGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlNZXRhZGF0YS5iaW5kYWJsZSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gcnVudGltZSBiaW5kaW5ncyBhcmUgbm90IGFsbG93ZWQsIHNvIGNvbnZlcnQgc3RyaW5ncyBpbnRvIGFjdHVhbCBwcmltaXRpdmUgdHlwZXNcblx0XHRcdFx0XHRcdHN3aXRjaCAocHJvcGVydHlNZXRhZGF0YS50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHJ1bnRpbWUgYmluZGluZ3MgYXJlIGFsbG93ZWQsIHNvIHJlc29sdmUgdGhlIHZhbHVlcyBhcyBCaW5kaW5nVG9vbGtpdCBleHByZXNzaW9uc1xuXHRcdFx0XHRcdFx0dmFsdWUgPSByZXNvbHZlQmluZGluZ1N0cmluZyh2YWx1ZSwgcHJvcGVydHlNZXRhZGF0YS50eXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlNZXRhZGF0YS50eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRjb25zdCBmdW5jdGlvbkluZGV4ID0gcHJvcGVydGllc0Fzc2lnbmVkVG9GdW5jdGlvbi5pbmRleE9mKHByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZ1bmN0aW9uSW5kZXggPiAtMSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25TdHJpbmcgPSBmdW5jdGlvblN0cmluZ0luT3JkZXJbZnVuY3Rpb25JbmRleF07XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdW5jdGlvbiA9IGZ1bmN0aW9uSG9sZGVyPy5maW5kKChmdW5jdGlvbkRlZikgPT4gZnVuY3Rpb25EZWZbMF0/Ll9zYXB1aV9oYW5kbGVyTmFtZSA9PT0gZnVuY3Rpb25TdHJpbmcpO1xuXHRcdFx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBfc2FwdWlfaGFuZGxlck5hbWUgdG8gaWRlbnRpZnkgd2hpY2ggZnVuY3Rpb24gaXMgdGhlIG9uZSB3ZSB3YW50IHRvIGJpbmQgaGVyZVxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldEZ1bmN0aW9uICYmIHRhcmdldEZ1bmN0aW9uLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSB0YXJnZXRGdW5jdGlvblswXS5iaW5kKHRhcmdldEZ1bmN0aW9uWzFdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAocGFnZU1vZGVsQ29udGV4dC5nZXRPYmplY3QoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIGdldCB2YWx1ZSBmcm9tIHBhZ2UgbW9kZWxcblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gcGFnZU1vZGVsQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGJpbmQgdG8gbWV0YW1vZGVsXG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChNYW5hZ2VkT2JqZWN0IGFzIE1hbmFnZWRPYmplY3RFeCkucnVuV2l0aFByZXByb2Nlc3NvcnMoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbmRlcmVkQ29udHJvbCA9IGpzeC53aXRoQ29udGV4dCh7IHZpZXc6IGNvbnRhaW5pbmdWaWV3LCBhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCB9LCAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBjb250YWluaW5nVmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IChjb250YWluaW5nVmlldy5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIikgPz8gbmV3IEpTT05Nb2RlbCgpKSBhcyBKU09OTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdGlzUnVudGltZUluc3RhbnRpYXRpb246IHRydWVcblx0XHRcdFx0XHR9IGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cblx0XHRcdFx0XHRjb25zdCBidWlsZGluZ0Jsb2NrSW5zdGFuY2UgPSBuZXcgQnVpbGRpbmdCbG9ja0NsYXNzIShjbGFzc1NldHRpbmdzLCB7fSwgdGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MpO1xuXHRcdFx0XHRcdGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKGJ1aWxkaW5nQmxvY2tJbnN0YW5jZSwgY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKTtcblx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmZyYWdtZW50WE1MKSB7XG5cdFx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmRlcGVuZGVudHMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBkZXBlbmRlbnQgb2YgbVNldHRpbmdzLmRlcGVuZGVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRtU2V0dGluZ3MuZnJhZ21lbnRYTUwuYWRkRGVwZW5kZW50KGRlcGVuZGVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5kZXBlbmRlbnRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5jdXN0b21EYXRhSG9sZGVyKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgY3VzdG9tRGF0YUhvbGRlciBvZiBtU2V0dGluZ3MuY3VzdG9tRGF0YUhvbGRlcikge1xuXHRcdFx0XHRcdFx0XHRcdG1TZXR0aW5ncy5mcmFnbWVudFhNTC5hZGRDdXN0b21EYXRhKGN1c3RvbURhdGFIb2xkZXIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3MuY3VzdG9tRGF0YUhvbGRlcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtU2V0dGluZ3MubGF5b3V0RGF0YSkge1xuXHRcdFx0XHRcdFx0XHRtU2V0dGluZ3MuZnJhZ21lbnRYTUwuc2V0QWdncmVnYXRpb24oXCJsYXlvdXREYXRhXCIsIG1TZXR0aW5ncy5sYXlvdXREYXRhKTtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5sYXlvdXREYXRhO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBidWlsZGluZ0Jsb2NrSW5zdGFuY2UuZ2V0Q29udGVudD8uKGNvbnRhaW5pbmdWaWV3LCBhcHBDb21wb25lbnQsIG1TZXR0aW5ncy5mcmFnbWVudFhNTCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2JBc3luYykge1xuXHRcdFx0XHRcdHRoaXMuX2FDb250ZW50ID0gcmVuZGVyZWRDb250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZW5kZXJlZENvbnRyb2w7XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKHNJZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldHRpbmdzOiBmdW5jdGlvbiAoY29udHJvbFNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBNYW5hZ2VkT2JqZWN0IHwgKHN0cmluZyB8IE1hbmFnZWRPYmplY3QpW10+KSB7XG5cdFx0XHRcdFx0Y29uc3QgYWxsQXNzb2NpYXRpb25zID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFzc29jaWF0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYXNzb2NpYXRpb25EZXRhaWxOYW1lIG9mIE9iamVjdC5rZXlzKGFsbEFzc29jaWF0aW9ucykpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFRoZSBhc3NvY2lhdGVkIGVsZW1lbnRzIGFyZSBpbmRpY2F0ZWQgdmlhIGxvY2FsIElEczsgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIG9uZXNcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXNzb2NpYXRpb25zID0gKFxuXHRcdFx0XHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0pXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IFtjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXV1cblx0XHRcdFx0XHRcdFx0KSBhcyAoc3RyaW5nIHwgTWFuYWdlZE9iamVjdClbXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBDcmVhdGUgZ2xvYmFsIElEcyBmb3IgYXNzb2NpYXRpb25zIGdpdmVuIGFzIHN0cmluZ3MsIG5vdCBmb3IgYWxyZWFkeSByZXNvbHZlZCBNYW5hZ2VkT2JqZWN0c1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSA9IGFzc29jaWF0aW9ucy5tYXAoKGFzc29jaWF0aW9uOiBzdHJpbmcgfCBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBhc3NvY2lhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChhc3NvY2lhdGlvbikgOiBhc3NvY2lhdGlvblxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNEJxQkEsNEJBQTRCO0VBSmpEO0FBQ0E7QUFDQTtFQUZBLE9BR0NDLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQyxVQUtuRkMsS0FBSyxFQUFFLFVBR1BDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBc0IsQ0FBQyxDQUFDLFVBRzVDRCxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFLHVCQUF1QjtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsVUFHOURGLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsMEJBQTBCO0lBQUVDLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxVQUdqRUYsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUF5QixDQUFDLENBQUM7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBLEVBaEJTRSxRQUFRO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7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
242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSdW50aW1lQnVpbGRpbmdCbG9ja0ZyYWdtZW50IiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiRnJhZ21lbnQiLCJSVU5USU1FX0JMT0NLUyIsInN0b3JlUnVudGltZUJsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJuYW1lIiwicmVnaXN0ZXJUeXBlIiwibG9hZCIsIm1TZXR0aW5ncyIsImJ1aWxkaW5nQmxvY2tEZXRhaWwiLCJmcmFnbWVudE5hbWUiLCJlIiwibG9hZEVycm9yTWVzc2FnZSIsImluaXQiLCJMYWJlbCIsInRleHQiLCJmcmFnbWVudENvbnRlbnQiLCJ1bmRlZmluZWQiLCJFcnJvciIsImNsYXNzU2V0dGluZ3MiLCJmZUN1c3RvbURhdGEiLCJjdXN0b21EYXRhIiwibVByb3BlcnRpZXMiLCJ2YWx1ZSIsImZ1bmN0aW9uSG9sZGVyIiwiY29udGFpbmluZ1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0VmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicGFnZU1vZGVsIiwiZ2V0TW9kZWwiLCJmdW5jdGlvblN0cmluZ0luT3JkZXIiLCJzcGxpdCIsInByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24iLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlNZXRhZGF0YSIsInBhZ2VNb2RlbENvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImJpbmRhYmxlIiwiTnVtYmVyIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJmdW5jdGlvbkluZGV4IiwiaW5kZXhPZiIsImZ1bmN0aW9uU3RyaW5nIiwidGFyZ2V0RnVuY3Rpb24iLCJmaW5kIiwiZnVuY3Rpb25EZWYiLCJfc2FwdWlfaGFuZGxlck5hbWUiLCJsZW5ndGgiLCJiaW5kIiwiZ2V0T2JqZWN0IiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyZWRDb250cm9sIiwianN4Iiwid2l0aENvbnRleHQiLCJ2aWV3IiwidGVtcGxhdGVQcm9jZXNzaW5nU2V0dGluZ3MiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiSlNPTk1vZGVsIiwiaXNSdW50aW1lSW5zdGFudGlhdGlvbiIsImJ1aWxkaW5nQmxvY2tJbnN0YW5jZSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiZnJhZ21lbnRYTUwiLCJkZXBlbmRlbnRzIiwiZGVwZW5kZW50IiwiYWRkRGVwZW5kZW50IiwiY3VzdG9tRGF0YUhvbGRlciIsImFkZEN1c3RvbURhdGEiLCJsYXlvdXREYXRhIiwic2V0QWdncmVnYXRpb24iLCJnZXRDb250ZW50IiwiX2JBc3luYyIsIl9hQ29udGVudCIsImlkIiwic0lkIiwiY3JlYXRlSWQiLCJzZXR0aW5ncyIsImNvbnRyb2xTZXR0aW5ncyIsImFsbEFzc29jaWF0aW9ucyIsImdldE1ldGFkYXRhIiwiZ2V0QWxsQXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25EZXRhaWxOYW1lIiwiT2JqZWN0Iiwia2V5cyIsImFzc29jaWF0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImFzc29jaWF0aW9uIiwic2luZ2xlQXNzb2NpYXRpb25WYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgUnVudGltZUJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvUnVudGltZUJ1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9jb3JlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgTGF5b3V0RGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG4vKipcbiAqIEludGVybmFsIGV4dGVuc2lvbiB0byB0aGUgRnJhZ21lbnQgY2xhc3MgaW4gb3JkZXIgdG8gYWRkIHNvbWUgcGxhY2UgdG8gaG9sZCBmdW5jdGlvbnMgZm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVudGltZUJ1aWxkaW5nQmxvY2tGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHtcblx0Lypcblx0ICogRXZlbnQgdG8gaG9sZCBhbmQgcmVzb2x2ZSBmdW5jdGlvbnMgZm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmdW5jdGlvbkhvbGRlciE6IEZ1bmN0aW9uO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGZyYWdtZW50WE1MPzogQ29udHJvbDtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xbXVwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRkZXBlbmRlbnRzITogQ29udHJvbFtdO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ3VzdG9tRGF0YVtdXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGN1c3RvbURhdGFIb2xkZXIhOiBDdXN0b21EYXRhW107XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5MYXlvdXREYXRhXCIgfSlcblx0bGF5b3V0RGF0YSE6IExheW91dERhdGE7XG59XG5cbnR5cGUgRnJhZ21lbnRDdXN0b21EYXRhID0ge1xuXHRtUHJvcGVydGllczoge1xuXHRcdHZhbHVlOiB7XG5cdFx0XHRcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmdcIj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnRTZXR0aW5ncyA9IHtcblx0ZnJhZ21lbnROYW1lOiBzdHJpbmc7XG5cdGZyYWdtZW50Q29udGVudD86IHR5cGVvZiBSdW50aW1lQnVpbGRpbmdCbG9jaztcblx0Y29udGFpbmluZ1ZpZXc6IFZpZXc7XG5cdGN1c3RvbURhdGE/OiBGcmFnbWVudEN1c3RvbURhdGFbXTtcblx0ZGVwZW5kZW50cz86IFVJNUVsZW1lbnRbXTtcblx0Y3VzdG9tRGF0YUhvbGRlcj86IEN1c3RvbURhdGFbXTtcblx0bGF5b3V0RGF0YT86IExheW91dERhdGE7XG5cdGZyYWdtZW50WE1MPzogQ29udHJvbDtcblx0ZnVuY3Rpb25Ib2xkZXI/OiBGdW5jdGlvbldpdGhIYW5kbGVyW11bXTtcblx0bG9hZEVycm9yTWVzc2FnZT86IHN0cmluZztcbn07XG5cbnR5cGUgRnVuY3Rpb25XaXRoSGFuZGxlciA9IEZ1bmN0aW9uICYge1xuXHRfc2FwdWlfaGFuZGxlck5hbWU/OiBzdHJpbmc7XG59O1xudHlwZSBGcmFnbWVudFdpdGhJbnRlcm5hbHMgPSB7XG5cdF9iQXN5bmM6IGJvb2xlYW47XG5cdF9hQ29udGVudDogQ29udHJvbCB8IENvbnRyb2xbXTtcbn07XG5cbmNvbnN0IFJVTlRJTUVfQkxPQ0tTOiBSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2s+ID0ge307XG4vKipcbiAqIFN0b3JlcyB0aGUgY2xhc3Mgb2YgYSBydW50aW1lIGJ1aWxkaW5nIGJsb2NrIHRvIGJlIGxvYWRlZCB3aGVuZXZlciB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBhdCBydW50aW1lLlxuICpcbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlUnVudGltZUJsb2NrKEJ1aWxkaW5nQmxvY2tDbGFzczogdHlwZW9mIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrKTogdm9pZCB7XG5cdFJVTlRJTUVfQkxPQ0tTW1xuXHRcdGAke0J1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgPz8gQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZX0uJHtCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZX1gXG5cdF0gPSBCdWlsZGluZ0Jsb2NrQ2xhc3M7XG59XG5cblJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnQucmVnaXN0ZXJUeXBlKFwiRkVfQ09NUE9ORU5UU1wiLCB7XG5cdGxvYWQ6IGFzeW5jIGZ1bmN0aW9uIChtU2V0dGluZ3M6IFJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnRTZXR0aW5ncykge1xuXHRcdGxldCBidWlsZGluZ0Jsb2NrRGV0YWlsO1xuXHRcdHRyeSB7XG5cdFx0XHRidWlsZGluZ0Jsb2NrRGV0YWlsID0gYXdhaXQgUlVOVElNRV9CTE9DS1NbbVNldHRpbmdzLmZyYWdtZW50TmFtZV0ubG9hZCgpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG1TZXR0aW5ncy5sb2FkRXJyb3JNZXNzYWdlID0gZSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiBidWlsZGluZ0Jsb2NrRGV0YWlsO1xuXHR9LFxuXHRpbml0OiBmdW5jdGlvbiAodGhpczogRnJhZ21lbnRXaXRoSW50ZXJuYWxzLCBtU2V0dGluZ3M6IFJ1bnRpbWVCdWlsZGluZ0Jsb2NrRnJhZ21lbnRTZXR0aW5ncykge1xuXHRcdC8vIEluIGNhc2UgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLCBleGl0IGVhcmx5XG5cdFx0aWYgKG1TZXR0aW5ncy5sb2FkRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IExhYmVsKHsgdGV4dDogbVNldHRpbmdzLmxvYWRFcnJvck1lc3NhZ2UgfSk7XG5cdFx0fVxuXHRcdGxldCBCdWlsZGluZ0Jsb2NrQ2xhc3MgPSBtU2V0dGluZ3MuZnJhZ21lbnRDb250ZW50O1xuXHRcdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gc29tZSBjYXNlIHdlIG1pZ2h0IGhhdmUgYmVlbiBjYWxsZWQgaGVyZSBzeW5jaHJvbm91c2x5ICh1bnN0YXNoIGNhc2UgZm9yIGluc3RhbmNlKSwgd2hpY2ggbWVhbnMgd2UgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxvYWQgZnVuY3Rpb25cblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcyA9IFJVTlRJTUVfQkxPQ0tTW21TZXR0aW5ncy5mcmFnbWVudE5hbWVdO1xuXHRcdH1cblx0XHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gYnVpbGRpbmcgYmxvY2sgY2xhc3MgZm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2sgJHttU2V0dGluZ3MuZnJhZ21lbnROYW1lfSBmb3VuZGApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsYXNzU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0Y29uc3QgZmVDdXN0b21EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID1cblx0XHRcdG1TZXR0aW5ncy5jdXN0b21EYXRhPy5bMF0/Lm1Qcm9wZXJ0aWVzPy52YWx1ZT8uW1wic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiXSB8fCB7fTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGE7XG5cdFx0Y29uc3QgZnVuY3Rpb25Ib2xkZXI6IEZ1bmN0aW9uV2l0aEhhbmRsZXJbXVtdID0gbVNldHRpbmdzLmZ1bmN0aW9uSG9sZGVyID8/IFtdO1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuZnVuY3Rpb25Ib2xkZXI7XG5cblx0XHQvLyBjb250YWluaW5nVmlldyBjYW4gYWxzbyBiZSBhIGZyYWdtZW50LCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUgY29udHJvbGxlciAod2hpY2ggY291bGQgYWxzbyBiZSBhbiBFeHRlbnNpb25BUEkpIGdldCB0aGUgYWN0dWFsIHZpZXdcblx0XHRjb25zdCBjb250YWluaW5nVmlldyA9XG5cdFx0XHRtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcj8uKCk/LmdldFZpZXc/LigpID8/XG5cdFx0XHQobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXI/LigpIGFzIHVua25vd24gYXMgRXh0ZW5zaW9uQVBJKT8uW1wiX3ZpZXdcIl0gPz9cblx0XHRcdG1TZXR0aW5ncy5jb250YWluaW5nVmlldztcblx0XHRjb25zdCBwYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKGNvbnRhaW5pbmdWaWV3KSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udGFpbmluZ1ZpZXcpO1xuXG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHBhZ2VNb2RlbCA9IHBhZ2VDb21wb25lbnQuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpO1xuXG5cdFx0Y29uc3QgZnVuY3Rpb25TdHJpbmdJbk9yZGVyOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IGZlQ3VzdG9tRGF0YS5mdW5jdGlvblN0cmluZ0luT3JkZXI/LnNwbGl0KFwiLFwiKTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzQXNzaWduZWRUb0Z1bmN0aW9uOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IGZlQ3VzdG9tRGF0YS5wcm9wZXJ0aWVzQXNzaWduZWRUb0Z1bmN0aW9uPy5zcGxpdChcIixcIikgPz8gW107XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TWV0YWRhdGEgPSBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0Y29uc3QgcGFnZU1vZGVsQ29udGV4dCA9IHBhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cblx0XHRcdGlmIChwYWdlTW9kZWxDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0XHRcdC8vIHZhbHVlIGNhbm5vdCBiZSByZXNvbHZlZCwgc28gaXQgaXMgZWl0aGVyIGEgcnVudGltZSBiaW5kaW5nIG9yIGEgY29uc3RhbnRcblx0XHRcdFx0bGV0IHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI+IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5TWV0YWRhdGEuYmluZGFibGUgIT09IHRydWUpIHtcblx0XHRcdFx0XHRcdC8vIHJ1bnRpbWUgYmluZGluZ3MgYXJlIG5vdCBhbGxvd2VkLCBzbyBjb252ZXJ0IHN0cmluZ3MgaW50byBhY3R1YWwgcHJpbWl0aXZlIHR5cGVzXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHByb3BlcnR5TWV0YWRhdGEudHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBydW50aW1lIGJpbmRpbmdzIGFyZSBhbGxvd2VkLCBzbyByZXNvbHZlIHRoZSB2YWx1ZXMgYXMgQmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbnNcblx0XHRcdFx0XHRcdHZhbHVlID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcodmFsdWUsIHByb3BlcnR5TWV0YWRhdGEudHlwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5TWV0YWRhdGEudHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25JbmRleCA9IHByb3BlcnRpZXNBc3NpZ25lZFRvRnVuY3Rpb24uaW5kZXhPZihwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChmdW5jdGlvbkluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGZ1bmN0aW9uU3RyaW5nID0gZnVuY3Rpb25TdHJpbmdJbk9yZGVyW2Z1bmN0aW9uSW5kZXhdO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0RnVuY3Rpb24gPSBmdW5jdGlvbkhvbGRlcj8uZmluZCgoZnVuY3Rpb25EZWYpID0+IGZ1bmN0aW9uRGVmWzBdPy5fc2FwdWlfaGFuZGxlck5hbWUgPT09IGZ1bmN0aW9uU3RyaW5nKTtcblx0XHRcdFx0XHRcdC8vIFdlIHVzZSB0aGUgX3NhcHVpX2hhbmRsZXJOYW1lIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9uIGlzIHRoZSBvbmUgd2Ugd2FudCB0byBiaW5kIGhlcmVcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRGdW5jdGlvbiAmJiB0YXJnZXRGdW5jdGlvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gdGFyZ2V0RnVuY3Rpb25bMF0uYmluZCh0YXJnZXRGdW5jdGlvblsxXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBnZXQgdmFsdWUgZnJvbSBwYWdlIG1vZGVsXG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHBhZ2VNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBiaW5kIHRvIG1ldGFtb2RlbFxuXHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZmVDdXN0b21EYXRhW3Byb3BlcnR5TmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAoTWFuYWdlZE9iamVjdCBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZW5kZXJlZENvbnRyb2wgPSBqc3gud2l0aENvbnRleHQoeyB2aWV3OiBjb250YWluaW5nVmlldywgYXBwQ29tcG9uZW50OiBhcHBDb21wb25lbnQgfSwgKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRlbXBsYXRlUHJvY2Vzc2luZ1NldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogY29udGFpbmluZ1ZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiAoY29udGFpbmluZ1ZpZXcuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpID8/IG5ldyBKU09OTW9kZWwoKSkgYXMgSlNPTk1vZGVsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRpc1J1bnRpbWVJbnN0YW50aWF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0fSBhcyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXG5cdFx0XHRcdFx0Y29uc3QgYnVpbGRpbmdCbG9ja0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyEoY2xhc3NTZXR0aW5ncywge30sIHRlbXBsYXRlUHJvY2Vzc2luZ1NldHRpbmdzKTtcblx0XHRcdFx0XHRpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhidWlsZGluZ0Jsb2NrSW5zdGFuY2UsIGNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcik7XG5cdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5mcmFnbWVudFhNTCkge1xuXHRcdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5kZXBlbmRlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZGVwZW5kZW50IG9mIG1TZXR0aW5ncy5kZXBlbmRlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVNldHRpbmdzLmZyYWdtZW50WE1MLmFkZERlcGVuZGVudChkZXBlbmRlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3MuZGVwZW5kZW50cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtU2V0dGluZ3MuY3VzdG9tRGF0YUhvbGRlcikge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGN1c3RvbURhdGFIb2xkZXIgb2YgbVNldHRpbmdzLmN1c3RvbURhdGFIb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRtU2V0dGluZ3MuZnJhZ21lbnRYTUwuYWRkQ3VzdG9tRGF0YShjdXN0b21EYXRhSG9sZGVyKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGFIb2xkZXI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmxheW91dERhdGEpIHtcblx0XHRcdFx0XHRcdFx0bVNldHRpbmdzLmZyYWdtZW50WE1MLnNldEFnZ3JlZ2F0aW9uKFwibGF5b3V0RGF0YVwiLCBtU2V0dGluZ3MubGF5b3V0RGF0YSk7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3MubGF5b3V0RGF0YTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gYnVpbGRpbmdCbG9ja0luc3RhbmNlLmdldENvbnRlbnQ/Lihjb250YWluaW5nVmlldywgYXBwQ29tcG9uZW50LCBtU2V0dGluZ3MuZnJhZ21lbnRYTUwpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCF0aGlzLl9iQXN5bmMpIHtcblx0XHRcdFx0XHR0aGlzLl9hQ29udGVudCA9IHJlbmRlcmVkQ29udHJvbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVuZGVyZWRDb250cm9sO1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6IGZ1bmN0aW9uIChzSWQ6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuY3JlYXRlSWQoc0lkKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0dGluZ3M6IGZ1bmN0aW9uIChjb250cm9sU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IE1hbmFnZWRPYmplY3QgfCAoc3RyaW5nIHwgTWFuYWdlZE9iamVjdClbXT4pIHtcblx0XHRcdFx0XHRjb25zdCBhbGxBc3NvY2lhdGlvbnMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWxsQXNzb2NpYXRpb25zKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhc3NvY2lhdGlvbkRldGFpbE5hbWUgb2YgT2JqZWN0LmtleXMoYWxsQXNzb2NpYXRpb25zKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKChhbGxBc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSBhcyBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhKS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIE11bHRpcGxlIGFzc29jaWF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGFzc29jaWF0ZWQgZWxlbWVudHMgYXJlIGluZGljYXRlZCB2aWEgbG9jYWwgSURzOyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgcmVmZXJlbmNlcyB0byBnbG9iYWwgb25lc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFzc29jaWF0aW9ucyA9IChcblx0XHRcdFx0XHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBbY29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV1dXG5cdFx0XHRcdFx0XHRcdFx0KSBhcyAoc3RyaW5nIHwgTWFuYWdlZE9iamVjdClbXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENyZWF0ZSBnbG9iYWwgSURzIGZvciBhc3NvY2lhdGlvbnMgZ2l2ZW4gYXMgc3RyaW5ncywgbm90IGZvciBhbHJlYWR5IHJlc29sdmVkIE1hbmFnZWRPYmplY3RzXG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0gPSBhc3NvY2lhdGlvbnMubWFwKChhc3NvY2lhdGlvbjogc3RyaW5nIHwgTWFuYWdlZE9iamVjdCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBhc3NvY2lhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChhc3NvY2lhdGlvbikgOiBhc3NvY2lhdGlvblxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gU2luZ2xlIGFzc29jaWF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2luZ2xlQXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdID1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBzaW5nbGVBc3NvY2lhdGlvblZhbHVlID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKHNpbmdsZUFzc29jaWF0aW9uVmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogc2luZ2xlQXNzb2NpYXRpb25WYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNEJxQkEsNEJBQTRCO0VBSmpEO0FBQ0E7QUFDQTtFQUZBLE9BR0NDLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQyxVQUtuRkMsS0FBSyxFQUFFLFVBR1BDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBc0IsQ0FBQyxDQUFDLFVBRzVDRCxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFLHVCQUF1QjtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsVUFHOURGLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsMEJBQTBCO0lBQUVDLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxVQUdqRUYsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUF5QixDQUFDLENBQUM7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBLEVBaEJTRSxRQUFRO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQTtFQWlEbEUsTUFBTUMsY0FBMkQsR0FBRyxDQUFDLENBQUM7RUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLGlCQUFpQixDQUFDQyxrQkFBK0MsRUFBUTtJQUN4RkYsY0FBYyxDQUNaLEdBQUVFLGtCQUFrQixDQUFDQyxRQUFRLENBQUNDLFNBQVMsSUFBSUYsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQ0UsZUFBZ0IsSUFBR0gsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQ0csSUFBSyxFQUFDLENBQzdILEdBQUdKLGtCQUFrQjtFQUN2QjtFQUFDO0VBRURULDRCQUE0QixDQUFDYyxZQUFZLENBQUMsZUFBZSxFQUFFO0lBQzFEQyxJQUFJLEVBQUUsZ0JBQWdCQyxTQUErQyxFQUFFO01BQ3RFLElBQUlDLG1CQUFtQjtNQUN2QixJQUFJO1FBQ0hBLG1CQUFtQixHQUFHLE1BQU1WLGNBQWMsQ0FBQ1MsU0FBUyxDQUFDRSxZQUFZLENBQUMsQ0FBQ0gsSUFBSSxFQUFFO01BQzFFLENBQUMsQ0FBQyxPQUFPSSxDQUFDLEVBQUU7UUFDWEgsU0FBUyxDQUFDSSxnQkFBZ0IsR0FBR0QsQ0FBVztNQUN6QztNQUNBLE9BQU9GLG1CQUFtQjtJQUMzQixDQUFDO0lBQ0RJLElBQUksRUFBRSxVQUF1Q0wsU0FBK0MsRUFBRTtNQUFBO01BQzdGO01BQ0EsSUFBSUEsU0FBUyxDQUFDSSxnQkFBZ0IsRUFBRTtRQUMvQixPQUFPLElBQUlFLEtBQUssQ0FBQztVQUFFQyxJQUFJLEVBQUVQLFNBQVMsQ0FBQ0k7UUFBaUIsQ0FBQyxDQUFDO01BQ3ZEO01BQ0EsSUFBSVgsa0JBQWtCLEdBQUdPLFNBQVMsQ0FBQ1EsZUFBZTtNQUNsRCxJQUFJZixrQkFBa0IsS0FBS2dCLFNBQVMsRUFBRTtRQUNyQztRQUNBaEIsa0JBQWtCLEdBQUdGLGNBQWMsQ0FBQ1MsU0FBUyxDQUFDRSxZQUFZLENBQUM7TUFDNUQ7TUFDQSxJQUFJVCxrQkFBa0IsS0FBS2dCLFNBQVMsRUFBRTtRQUNyQyxNQUFNLElBQUlDLEtBQUssQ0FBRSxzREFBcURWLFNBQVMsQ0FBQ0UsWUFBYSxRQUFPLENBQUM7TUFDdEc7TUFFQSxNQUFNUyxhQUFzQyxHQUFHLENBQUMsQ0FBQztNQUNqRCxNQUFNQyxZQUFvQyxHQUN6QywwQkFBQVosU0FBUyxDQUFDYSxVQUFVLG9GQUFwQixzQkFBdUIsQ0FBQyxDQUFDLHFGQUF6Qix1QkFBMkJDLFdBQVcscUZBQXRDLHVCQUF3Q0MsS0FBSywyREFBN0MsdUJBQWdELHVDQUF1QyxDQUFDLEtBQUksQ0FBQyxDQUFDO01BQy9GLE9BQU9mLFNBQVMsQ0FBQ2EsVUFBVTtNQUMzQixNQUFNRyxjQUF1QyxHQUFHaEIsU0FBUyxDQUFDZ0IsY0FBYyxJQUFJLEVBQUU7TUFDOUUsT0FBT2hCLFNBQVMsQ0FBQ2dCLGNBQWM7O01BRS9CO01BQ0EsTUFBTUMsY0FBYyxHQUNuQixvREFBQWpCLFNBQVMsQ0FBQ2lCLGNBQWMsRUFBQ0MsYUFBYSxvRkFBdEMsa0RBQTBDLHFGQUExQyx1QkFBNENDLE9BQU8sMkRBQW5ELG1EQUF1RCxnQ0FDdEQsMEJBQUFuQixTQUFTLENBQUNpQixjQUFjLEVBQUNDLGFBQWEscUZBQXRDLG1EQUEwQywyREFBM0MsdUJBQTBFLE9BQU8sQ0FBQyxLQUNsRmxCLFNBQVMsQ0FBQ2lCLGNBQWM7TUFDekIsTUFBTUcsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDTCxjQUFjLENBQXNCO01BQ3pGLE1BQU1NLFlBQVksR0FBR0MsV0FBVyxDQUFDQyxlQUFlLENBQUNSLGNBQWMsQ0FBQztNQUVoRSxNQUFNUyxTQUFTLEdBQUdILFlBQVksQ0FBQ0ksWUFBWSxFQUFFO01BQzdDLE1BQU1DLFNBQVMsR0FBR1IsYUFBYSxDQUFDUyxRQUFRLENBQUMsWUFBWSxDQUFDO01BRXRELE1BQU1DLHFCQUEyQyw0QkFBR2xCLFlBQVksQ0FBQ2tCLHFCQUFxQiwwREFBbEMsc0JBQW9DQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQ2xHLE1BQU1DLDRCQUFrRCxHQUFHLDBCQUFBcEIsWUFBWSxDQUFDb0IsNEJBQTRCLDBEQUF6QyxzQkFBMkNELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSSxFQUFFO01BQ3RILEtBQUssTUFBTUUsWUFBWSxJQUFJeEMsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQ3dDLFVBQVUsRUFBRTtRQUNsRSxNQUFNQyxnQkFBZ0IsR0FBRzFDLGtCQUFrQixDQUFDQyxRQUFRLENBQUN3QyxVQUFVLENBQUNELFlBQVksQ0FBQztRQUM3RSxNQUFNRyxnQkFBZ0IsR0FBR1IsU0FBUyxDQUFDUyxvQkFBb0IsQ0FBQ3pCLFlBQVksQ0FBQ3FCLFlBQVksQ0FBQyxDQUFDO1FBRW5GLElBQUlHLGdCQUFnQixLQUFLLElBQUksRUFBRTtVQUM5QjtVQUNBLElBQUlyQixLQUFrRyxHQUNyR0gsWUFBWSxDQUFDcUIsWUFBWSxDQUFDO1VBRTNCLElBQUksT0FBT2xCLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDOUIsSUFBSW9CLGdCQUFnQixDQUFDRyxRQUFRLEtBQUssSUFBSSxFQUFFO2NBQ3ZDO2NBQ0EsUUFBUUgsZ0JBQWdCLENBQUMvQyxJQUFJO2dCQUM1QixLQUFLLFNBQVM7a0JBQ2IyQixLQUFLLEdBQUdBLEtBQUssS0FBSyxNQUFNO2tCQUN4QjtnQkFDRCxLQUFLLFFBQVE7a0JBQ1pBLEtBQUssR0FBR3dCLE1BQU0sQ0FBQ3hCLEtBQUssQ0FBQztrQkFDckI7Y0FBTTtZQUVULENBQUMsTUFBTTtjQUNOO2NBQ0FBLEtBQUssR0FBR3lCLG9CQUFvQixDQUFDekIsS0FBSyxFQUFFb0IsZ0JBQWdCLENBQUMvQyxJQUFJLENBQUM7WUFDM0Q7VUFDRCxDQUFDLE1BQU0sSUFBSStDLGdCQUFnQixDQUFDL0MsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUNoRCxNQUFNcUQsYUFBYSxHQUFHVCw0QkFBNEIsQ0FBQ1UsT0FBTyxDQUFDVCxZQUFZLENBQUM7WUFDeEUsSUFBSVEsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO2NBQ3ZCLE1BQU1FLGNBQWMsR0FBR2IscUJBQXFCLENBQUNXLGFBQWEsQ0FBQztjQUMzRCxNQUFNRyxjQUFjLEdBQUc1QixjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRTZCLElBQUksQ0FBRUMsV0FBVztnQkFBQTtnQkFBQSxPQUFLLGtCQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLGtEQUFkLGNBQWdCQyxrQkFBa0IsTUFBS0osY0FBYztjQUFBLEVBQUM7Y0FDbkg7Y0FDQSxJQUFJQyxjQUFjLElBQUlBLGNBQWMsQ0FBQ0ksTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDaERqQyxLQUFLLEdBQUc2QixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUNLLElBQUksQ0FBQ0wsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ2xEO1lBQ0Q7VUFDRDtVQUVBakMsYUFBYSxDQUFDc0IsWUFBWSxDQUFDLEdBQUdsQixLQUFLO1FBQ3BDLENBQUMsTUFBTSxJQUFJcUIsZ0JBQWdCLENBQUNjLFNBQVMsRUFBRSxLQUFLekMsU0FBUyxFQUFFO1VBQ3REO1VBQ0FFLGFBQWEsQ0FBQ3NCLFlBQVksQ0FBQyxHQUFHRyxnQkFBZ0IsQ0FBQ2MsU0FBUyxFQUFFO1FBQzNELENBQUMsTUFBTTtVQUNOO1VBQ0F2QyxhQUFhLENBQUNzQixZQUFZLENBQUMsR0FBR1AsU0FBUyxDQUFDVyxvQkFBb0IsQ0FBQ3pCLFlBQVksQ0FBQ3FCLFlBQVksQ0FBQyxDQUFDO1FBQ3pGO01BQ0Q7TUFFQSxPQUFRa0IsYUFBYSxDQUFxQkMsb0JBQW9CLENBQzdELE1BQU07UUFDTCxNQUFNQyxlQUFlLEdBQUdDLEdBQUcsQ0FBQ0MsV0FBVyxDQUFDO1VBQUVDLElBQUksRUFBRXZDLGNBQWM7VUFBRU0sWUFBWSxFQUFFQTtRQUFhLENBQUMsRUFBRSxNQUFNO1VBQUE7VUFDbkcsTUFBTWtDLDBCQUEwQixHQUFHO1lBQ2xDQyxNQUFNLEVBQUU7Y0FDUCxhQUFhLEVBQUV6QyxjQUFjLENBQUNZLFFBQVEsQ0FBQyxhQUFhLENBQWtCO2NBQ3RFOEIsZ0JBQWdCLEVBQUcxQyxjQUFjLENBQUNZLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJK0IsU0FBUztZQUMxRSxDQUFDO1lBQ0RyQyxZQUFZLEVBQUVBLFlBQVk7WUFDMUJzQyxzQkFBc0IsRUFBRTtVQUN6QixDQUE4QjtVQUU5QixNQUFNQyxxQkFBcUIsR0FBRyxJQUFJckUsa0JBQWtCLENBQUVrQixhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUU4QywwQkFBMEIsQ0FBQztVQUNwR00sbUNBQW1DLENBQUNELHFCQUFxQixFQUFFN0MsY0FBYyxDQUFDQyxhQUFhLEVBQUUsQ0FBbUI7VUFDNUcsSUFBSWxCLFNBQVMsQ0FBQ2dFLFdBQVcsRUFBRTtZQUMxQixJQUFJaEUsU0FBUyxDQUFDaUUsVUFBVSxFQUFFO2NBQ3pCLEtBQUssTUFBTUMsU0FBUyxJQUFJbEUsU0FBUyxDQUFDaUUsVUFBVSxFQUFFO2dCQUM3Q2pFLFNBQVMsQ0FBQ2dFLFdBQVcsQ0FBQ0csWUFBWSxDQUFDRCxTQUFTLENBQUM7Y0FDOUM7Y0FDQSxPQUFPbEUsU0FBUyxDQUFDaUUsVUFBVTtZQUM1QjtZQUNBLElBQUlqRSxTQUFTLENBQUNvRSxnQkFBZ0IsRUFBRTtjQUMvQixLQUFLLE1BQU1BLGdCQUFnQixJQUFJcEUsU0FBUyxDQUFDb0UsZ0JBQWdCLEVBQUU7Z0JBQzFEcEUsU0FBUyxDQUFDZ0UsV0FBVyxDQUFDSyxhQUFhLENBQUNELGdCQUFnQixDQUFDO2NBQ3REO2NBQ0EsT0FBT3BFLFNBQVMsQ0FBQ29FLGdCQUFnQjtZQUNsQztZQUNBLElBQUlwRSxTQUFTLENBQUNzRSxVQUFVLEVBQUU7Y0FDekJ0RSxTQUFTLENBQUNnRSxXQUFXLENBQUNPLGNBQWMsQ0FBQyxZQUFZLEVBQUV2RSxTQUFTLENBQUNzRSxVQUFVLENBQUM7Y0FDeEUsT0FBT3RFLFNBQVMsQ0FBQ3NFLFVBQVU7WUFDNUI7VUFDRDtVQUVBLGdDQUFPUixxQkFBcUIsQ0FBQ1UsVUFBVSwwREFBaEMsMkJBQUFWLHFCQUFxQixFQUFjN0MsY0FBYyxFQUFFTSxZQUFZLEVBQUV2QixTQUFTLENBQUNnRSxXQUFXLENBQUM7UUFDL0YsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQ1MsT0FBTyxFQUFFO1VBQ2xCLElBQUksQ0FBQ0MsU0FBUyxHQUFHckIsZUFBZTtRQUNqQztRQUNBLE9BQU9BLGVBQWU7TUFDdkIsQ0FBQyxFQUNEO1FBQ0NzQixFQUFFLEVBQUUsVUFBVUMsR0FBVyxFQUFFO1VBQzFCLE9BQU81RSxTQUFTLENBQUNpQixjQUFjLENBQUM0RCxRQUFRLENBQUNELEdBQUcsQ0FBQztRQUM5QyxDQUFDO1FBQ0RFLFFBQVEsRUFBRSxVQUFVQyxlQUFvRixFQUFFO1VBQ3pHLE1BQU1DLGVBQWUsR0FBRyxJQUFJLENBQUNDLFdBQVcsRUFBRSxDQUFDQyxrQkFBa0IsRUFBRTtVQUMvRCxLQUFLLE1BQU1DLHFCQUFxQixJQUFJQyxNQUFNLENBQUNDLElBQUksQ0FBQ0wsZUFBZSxDQUFDLEVBQUU7WUFDakUsSUFBSUQsZUFBZSxDQUFDSSxxQkFBcUIsQ0FBQyxLQUFLMUUsU0FBUyxFQUFFO2NBQ3pELElBQUt1RSxlQUFlLENBQUNHLHFCQUFxQixDQUFDLENBQTRCOUYsUUFBUSxFQUFFO2dCQUNoRjtnQkFDQTtnQkFDQSxNQUFNaUcsWUFBWSxHQUNqQkMsS0FBSyxDQUFDQyxPQUFPLENBQUNULGVBQWUsQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQyxHQUNsREosZUFBZSxDQUFDSSxxQkFBcUIsQ0FBQyxHQUN0QyxDQUFDSixlQUFlLENBQUNJLHFCQUFxQixDQUFDLENBQ1o7O2dCQUUvQjtnQkFDQUosZUFBZSxDQUFDSSxxQkFBcUIsQ0FBQyxHQUFHRyxZQUFZLENBQUNHLEdBQUcsQ0FBRUMsV0FBbUMsSUFDN0YsT0FBT0EsV0FBVyxLQUFLLFFBQVEsR0FBRzFGLFNBQVMsQ0FBQ2lCLGNBQWMsQ0FBQzRELFFBQVEsQ0FBQ2EsV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FDOUY7Y0FDRixDQUFDLE1BQU07Z0JBQ047Z0JBQ0EsTUFBTUMsc0JBQXNCLEdBQUdaLGVBQWUsQ0FBQ0kscUJBQXFCLENBQUM7Z0JBQ3JFSixlQUFlLENBQUNJLHFCQUFxQixDQUFDLEdBQ3JDLE9BQU9RLHNCQUFzQixLQUFLLFFBQVEsR0FDdkMzRixTQUFTLENBQUNpQixjQUFjLENBQUM0RCxRQUFRLENBQUNjLHNCQUFzQixDQUFDLEdBQ3pEQSxzQkFBc0I7Y0FDM0I7WUFDRDtVQUNEO1VBQ0EsT0FBT1osZUFBZTtRQUN2QjtNQUNELENBQUMsQ0FDRDtJQUNGO0VBQ0QsQ0FBQyxDQUFDO0VBQUM7QUFBQSJ9
@@ -8,6 +8,7 @@ import type RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/templating/Run
8
8
  import { initControllerExtensionHookHandlers } from "sap/fe/core/controllerextensions/HookSupport";
9
9
  import type { BindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
10
10
  import { resolveBindingString } from "sap/fe/core/helpers/BindingToolkit";
11
+ import type { UI5AssociationMetadata } from "sap/fe/core/helpers/ClassSupport";
11
12
  import { aggregation, defineUI5Class, event } from "sap/fe/core/helpers/ClassSupport";
12
13
  import jsx from "sap/fe/core/jsx-runtime/jsx";
13
14
  import Label from "sap/m/Label";
@@ -21,7 +22,6 @@ import type LayoutData from "sap/ui/core/LayoutData";
21
22
  import type View from "sap/ui/core/mvc/View";
22
23
  import JSONModel from "sap/ui/model/json/JSONModel";
23
24
  import type { ManagedObjectEx } from "types/extension_types";
24
-
25
25
  /**
26
26
  * Internal extension to the Fragment class in order to add some place to hold functions for runtime building blocks
27
27
  */
@@ -219,23 +219,33 @@ RuntimeBuildingBlockFragment.registerType("FE_COMPONENTS", {
219
219
  },
220
220
  {
221
221
  id: function (sId: string) {
222
- return containingView.createId(sId);
222
+ return mSettings.containingView.createId(sId);
223
223
  },
224
224
  settings: function (controlSettings: Record<string, string | ManagedObject | (string | ManagedObject)[]>) {
225
- const allAssociations = this.getMetadata().getAssociations();
225
+ const allAssociations = this.getMetadata().getAllAssociations();
226
226
  for (const associationDetailName of Object.keys(allAssociations)) {
227
227
  if (controlSettings[associationDetailName] !== undefined) {
228
- // The associated elements are indicated via local IDs; we need to change the references to global ones
229
- const associations = (
230
- Array.isArray(controlSettings[associationDetailName])
231
- ? controlSettings[associationDetailName]
232
- : [controlSettings[associationDetailName]]
233
- ) as (string | ManagedObject)[];
234
-
235
- // Create global IDs for associations given as strings, not for already resolved ManagedObjects
236
- controlSettings[associationDetailName] = associations.map((association: string | ManagedObject) =>
237
- typeof association === "string" ? mSettings.containingView.createId(association) : association
238
- );
228
+ if ((allAssociations[associationDetailName] as UI5AssociationMetadata).multiple) {
229
+ // Multiple association
230
+ // The associated elements are indicated via local IDs; we need to change the references to global ones
231
+ const associations = (
232
+ Array.isArray(controlSettings[associationDetailName])
233
+ ? controlSettings[associationDetailName]
234
+ : [controlSettings[associationDetailName]]
235
+ ) as (string | ManagedObject)[];
236
+
237
+ // Create global IDs for associations given as strings, not for already resolved ManagedObjects
238
+ controlSettings[associationDetailName] = associations.map((association: string | ManagedObject) =>
239
+ typeof association === "string" ? mSettings.containingView.createId(association) : association
240
+ );
241
+ } else {
242
+ // Single association
243
+ const singleAssociationValue = controlSettings[associationDetailName];
244
+ controlSettings[associationDetailName] =
245
+ typeof singleAssociationValue === "string"
246
+ ? mSettings.containingView.createId(singleAssociationValue)
247
+ : singleAssociationValue;
248
+ }
239
249
  }
240
250
  }
241
251
  return controlSettings;