@agilemotion/oui-react-js 2.0.22 → 2.0.24

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.
@@ -141,6 +141,9 @@ class ApplicationManager {
141
141
  _defineProperty(this, "addDashboardView", (view, path) => {
142
142
  this.viewContext.dashboard.addView(view);
143
143
  });
144
+ _defineProperty(this, "getDashboardViewContext", () => {
145
+ return this.viewContext.dashboard;
146
+ });
144
147
  /**
145
148
  * clear dashboard view configuration
146
149
  *
@@ -498,6 +501,9 @@ class ApplicationManager {
498
501
  dashboard: new _ViewContext.ViewContext('dashboard'),
499
502
  popup: new _ViewContext.ViewContext('popup')
500
503
  };
504
+ // The dashboard holds many card views simultaneously, so it must
505
+ // accumulate views instead of evicting the top one on each add.
506
+ this.viewContext.dashboard.concurrent = true;
501
507
  this.props = {};
502
508
  this.listeners = [];
503
509
  this.libs = {};
@@ -756,4 +762,4 @@ class ApplicationManager {
756
762
  const instance = new ApplicationManager();
757
763
  Object.freeze(instance);
758
764
  var _default = exports.default = instance;
759
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT2JzZXJ2YWJsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0V2ZW50IiwiX0V2ZW50VHlwZSIsIl9VdGlscyIsIl9EeW5hbWljSlMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9UeXBlZFZhbHVlIiwiX1NvY2tldE1hbmFnZXIiLCJfVmlld0NvbnRleHQiLCJfaGVscGVycyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkFQUF9WQVJJQUJMRSIsImV4cG9ydHMiLCJTT0NLRVRfVkFSSUFCTEUiLCJBVkFUQVJfTElTVEVORVJfVFlQRSIsIkRBU0hCT0FSRF9TVEFURSIsIlNZU1RFTV9FVkVOVCIsIlRFTVBMQVRFX1RPS0VOX1JFR0VYIiwiUmVnRXhwIiwiYXBwbGljYXRpb25Db250ZXh0IiwiQXBwbGljYXRpb25NYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsInN1YnNjcmlwdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXZlbnRNYW5hZ2VyIiwiYWRkQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9uIiwiY29udHJvbGxlciIsInByb3BzIiwiY29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlciIsIm5hbWUiLCJsaWIiLCJsaWJzIiwiaGlzdG9yeSIsImFwcGxpY2F0aW9uSGlzdG9yeSIsInZpZXdJZCIsInRpdGxlIiwia2V5cyIsInZpZXdDb250ZXh0IiwiZm9yRWFjaCIsImtleSIsInVwZGF0ZUFwcEJhclRpdGxlIiwiY2xlYXJBbGxFdmVudExpc3RlbmVycyIsImNsZWFyIiwiZmlsZUNhY2hlIiwic3BsaWNlIiwibGVuZ3RoIiwiZG9tYWluIiwiZmlsZUNhY2hlRWxlbWVudCIsImZpbGUiLCJVdGlscyIsImlzTnVsbCIsImNvbnNvbGUiLCJlcnJvciIsImZpbGVEb21haW5DYWNoZSIsImdldEZpbGVEb21haW5DYWNoZSIsImZpbGVzIiwicHVzaCIsImNhY2hlZEZpbGUiLCJkb21haW5GaWxlIiwiY29ycmVsYXRpb25JZCIsImNvbnRlbnQiLCJ2YWx1ZXMiLCJwdWJsaXNoIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZW1pdENvbnRleHRDaGFuZ2VFdmVudCIsInZpZXciLCJwYXRoIiwiZGFzaGJvYXJkIiwiYWRkVmlldyIsImNsb3NlQWxsVmlld3MiLCJmb3J3YXJkIiwibWFuYWdlcklkIiwicHJlc2VydmVXaW5kb3ciLCJ3aW5kb3dWaWV3Iiwidmlld0NvbnRleHRFbGVtZW50IiwiY2xvc2VQb3B1cFZpZXciLCJnZXRWaWV3IiwiY2xvc2VWaWV3IiwiaWQiLCJoYW5kbGUiLCJhcGkiLCJfdmlldyRoYW5kbGUiLCJnZXRDaGlsZCIsIl92aWV3JGhhbmRsZTIiLCJncmFwaHMiLCJncmFwaCIsImdldEdyYXBocyIsInZpZXdzIiwiZ2V0Vmlld3MiLCJjb21wb25lbnQiLCJnZXRWaWV3Q29tcG9uZW50IiwidGVtcGxhdGUiLCJldmVudERhdGEiLCJtYXRjaGVzIiwibWF0Y2giLCJleHByZXNpb25Db250ZW50Iiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIiwiZXhwcmVzc2lvblZhbHVlIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJzcGxpdCIsInZvIiwicHJvcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJleHByZXNzaW9uIiwicGFyYW1FeHByZXNzaW9uIiwiaXNFdmVudCIsImJhc2VFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkNvbnRlbnQiLCJpc0NvbXBvbmVudCIsImlzTGliIiwidG9rZW5zIiwiaWRUb2tlbiIsInJlc29sdmVDb21wb25lbnRBcGkiLCJleHByZXNzaW9uQ2xvc3VyZSIsImluZGV4IiwicHJvcGVydHlDaGFpbiIsIm9iaiIsImlzQXJyYXkiLCJBcnJheSIsInVwZGF0ZWQiLCJzZXRFeHByZXNzaW9uVmFsdWVzIiwib2JqVmFsdWUiLCJpc0V4cHJlc3Npb24iLCJzY3JpcHRWYWx1ZSIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJjb25jYXQiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJvYmpLZXkiLCJpbnN0YW5jZVR5cGUiLCJ0eXBlIiwiY29uZmlnVmFsdWUiLCJqc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsIlRFTVBMQVRFX1JFR0VYIiwicGFyYW1ldGVyQ29uZmlnIiwic3RhdGljIiwiaW5jbHVkZXMiLCJ2YWx1ZUluZGV4IiwidmFsIiwicmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlIiwiZGF0YSIsIlR5cGVkVmFsdWUiLCJzZXRNb2RlbFZhbHVlIiwicHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMiLCJnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50IiwiZ2V0VG9wVmlldyIsImluc3RhbmNlIiwibWFpbiIsIlZpZXdDb250ZXh0Iiwid2luZG93IiwicG9wdXAiLCJsaXN0ZW5lcnMiLCJnZXRJZCIsInJlZnJlc2hVc2VyQXZhdGFyIiwiYXZhdGFyIiwiYWxlcnQiLCJtZXNzYWdlIiwibWVzc2FnZVR5cGUiLCJyZW1vdmVMb2FkZWRHcmFwaCIsInNldEhhc0FjdGl2ZU1lZXRpbmciLCJoYXNBY3RpdmVNZWV0aW5nIiwiZ2V0QWN0aXZlTWVldGluZ0tleSIsImdldFVzZXJEZXRhaWxzIiwiZmlyZUV2ZW50IiwiZXZlbnRUeXBlIiwiZXZlbnQiLCJFdmVudCIsInNvdXJjZSIsInVwZGF0ZUNvbnRleHQiLCJlbWl0U29ja2V0RXZlbnQiLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50Iiwic2V0QWN0aXZlVGVuYW50IiwidGVuYW50IiwiZ2V0QWN0aXZlVGVuYW50IiwiZ2V0VW5pcXVlT3JnRm9yUm9sZSIsInJvbGUiLCJzZXREYXNoYm9hcmRTdGF0ZSIsImRhc2hib2FyZFN0YXRlIiwiZ2V0RGFzaGJvYXJkU3RhdGUiLCJhcmciLCJwcm90b3R5cGUiLCJwcm9maWxlIiwicGFyc2UiLCJyb2xlcyIsIm9yZ2FuaXNhdGlvbnMiLCJmaWx0ZXIiLCJvcmciLCJtYXAiLCJjb2RlIiwiRXJyb3IiLCJuYXZpZ2F0ZSIsIm5hdmlnYXRvciIsInNldERhc2hib2FyZFNldHRpbmdzIiwiZGFzaGJvYXJkU2V0dGluZ3MiLCJzdGF0ZSIsImxpc3RlbmVyIiwibG9nIiwiaGFuZGxlciIsImdldERhc2hib2FyZFNldHRpbmdzIiwic2V0TmF2aWdhdG9yIiwic2V0QWN0aXZlTWVldGluZ0tleSIsImFjdGl2ZU1lZXRpbmdLZXkiLCJpc1dpbmRvd09wZW4iLCJzZXRTZXJ2aWNlQXBpUGF0aCIsInNlcnZpY2VBcGlQYXRoIiwiZ2V0U2VydmljZUFwaVBhdGgiLCJzZXRVSUNvbmZpZ1BhdGgiLCJ1aUNvbmZpZ1BhdGgiLCJzZXRDb250ZXh0Um9vdCIsImNvbnRleHRSb290IiwiZ2V0Q29udGV4dFJvb3QiLCJnZXRVSUNvbmZpZ1BhdGgiLCJzZXRGaWxlc0FwaVBhdGgiLCJmaWxlc0FwaVBhdGgiLCJnZXRGaWxlc0FwaVBhdGgiLCJhZGRBcHBsaWNhdGlvbkxpc3RlbmVyIiwicmVtb3ZlQXBwbGljYXRpb25MaXN0ZW5lciIsImNvbmZpZyIsIkV2ZW50VHlwZSIsIk1FU1NBR0VfQVJSSVZFRCIsInNldEFwcGxpY2F0aW9uVGhlbWVDb2xvcnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5IiwicHJpbWFyeUNvbG9yIiwic2Vjb25kYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvciIsImdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IiLCJvcGVuQ29uZmlybURpYWxvZyIsInJlc3VsdENhbGxiYWNrIiwib3BlbkRpYWxvZyIsImV4ZWN1dGUiLCJyZXN1bHQiLCJvcGVuUG9wdXBWaWV3Iiwib3BlbldpbmRvd1ZpZXciLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJlbmFibGVGb3JtTWFya2VycyIsImVuYWJsZWQiLCJmb3JtTWFya2Vyc0VuYWJsZWQiLCJpc0Zvcm1NYXJrZXJzRW5hYmxlZCIsInNldERhc2hib2FyZFZpZXciLCJkYXNoYm9hcmRWaWV3Iiwic2V0VXNlckRldGFpbHMiLCJ1c2VyRGV0YWlscyIsImxvYWRHcmFwaCIsImlzUGFyZW50IiwicGFyYW1ldGVyVmFsdWVzIiwiaXNXaW5kb3ciLCJzaWduYWxHcmFwaCIsImZyZWV6ZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9BcHBsaWNhdGlvbk1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQgZHluYW1pY0pTLCB7VEVNUExBVEVfUkVHRVh9IGZyb20gJy4vRHluYW1pY0pTJztcbmltcG9ydCBUeXBlZFZhbHVlIGZyb20gJy4vVHlwZWRWYWx1ZSc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tIFwiLi9jb21wb25lbnRzL1NvY2tldE1hbmFnZXJcIjtcbmltcG9ydCB7Vmlld0NvbnRleHR9IGZyb20gXCIuL1ZpZXdDb250ZXh0XCI7XG5pbXBvcnQge2lzQXJyYXl9IGZyb20gXCJycnVsZS9kaXN0L2VzbS9oZWxwZXJzXCI7XG5cbmV4cG9ydCBjb25zdCBBUFBfVkFSSUFCTEUgPSAnX19BUFBMSUNBVElPTl9PVUlfU1lTX1ZBUl9fJztcbmV4cG9ydCBjb25zdCBTT0NLRVRfVkFSSUFCTEUgPSAnX19TT0NLRVRfVkFSSUFCTEVfT1VJX1NZU19WQVJfXyc7XG5leHBvcnQgY29uc3QgQVZBVEFSX0xJU1RFTkVSX1RZUEUgPSAnQVZBVEFSX0xJU1RFTkVSJztcbmV4cG9ydCBjb25zdCBEQVNIQk9BUkRfU1RBVEUgPSAnREFTSEJPQVJEX1NUQVRFJztcbmV4cG9ydCBjb25zdCBTWVNURU1fRVZFTlQgPSAnU1lTVEVNX0VWRU5UJztcbmV4cG9ydCBjb25zdCBURU1QTEFURV9UT0tFTl9SRUdFWCA9IG5ldyBSZWdFeHAoJygoWyRdezF9W3tdezF9KSgoW2EtekEtWjAtOV8kLkAje31bXFxcXF1dKikrKXsxfShbfV17MX0pKSsnLCAnZycpO1xuXG5jb25zdCBhcHBsaWNhdGlvbkNvbnRleHQgPSB7fTtcblxuY2xhc3MgQXBwbGljYXRpb25NYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKCFBcHBsaWNhdGlvbk1hbmFnZXIuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgbWFpbjogbmV3IFZpZXdDb250ZXh0KCdtYWluJyksXG4gICAgICAgICAgICAgICAgd2luZG93OiBuZXcgVmlld0NvbnRleHQoJ3dpbmRvdycpLFxuICAgICAgICAgICAgICAgIGRhc2hib2FyZDogbmV3IFZpZXdDb250ZXh0KCdkYXNoYm9hcmQnKSxcbiAgICAgICAgICAgICAgICBwb3B1cDogbmV3IFZpZXdDb250ZXh0KCdwb3B1cCcpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICB0aGlzLmxpYnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNhY2hlID0gW107XG4gICAgICAgICAgICB0aGlzLmFwaSA9IHtcbiAgICAgICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRJZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaFVzZXJBdmF0YXIoYXZhdGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlZnJlc2hVc2VyQXZhdGFyKGF2YXRhcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbGVydCh2aWV3SWQsIG1lc3NhZ2UsIG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmFsZXJ0KHZpZXdJZCwgbWVzc2FnZSwgbWVzc2FnZVR5cGUsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEhhc0FjdGl2ZU1lZXRpbmcoaGFzQWN0aXZlTWVldGluZykge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXRIYXNBY3RpdmVNZWV0aW5nKGhhc0FjdGl2ZU1lZXRpbmcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFzQWN0aXZlTWVldGluZygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhhc0FjdGl2ZU1lZXRpbmcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldEFjdGl2ZU1lZXRpbmdLZXkoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRBY3RpdmVNZWV0aW5nS2V5KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRVc2VyRGV0YWlscygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbG9zZVBvcHVwVmlldygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmNsb3NlUG9wdXBWaWV3KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQoZXZlbnRUeXBlLCBldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChldmVudFR5cGUsIG5ldyBFdmVudChldmVudC5zb3VyY2UsIGV2ZW50LnZpZXdJZCwgZXZlbnQuZGF0YSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXBkYXRlQ29udGV4dCh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZUNvbnRleHQodmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVtaXRTb2NrZXRFdmVudChldmVudFR5cGUsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KGV2ZW50VHlwZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVUZW5hbnQodGVuYW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNldEFjdGl2ZVRlbmFudCh0ZW5hbnQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0QWN0aXZlVGVuYW50KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0QWN0aXZlVGVuYW50KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRVbmlxdWVPcmdGb3JSb2xlKHJvbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFVuaXF1ZU9yZ0ZvclJvbGUocm9sZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXREYXNoYm9hcmRTdGF0ZShkYXNoYm9hcmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXREYXNoYm9hcmRTdGF0ZShkYXNoYm9hcmRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXREYXNoYm9hcmRTdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldERhc2hib2FyZFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5pbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5hZ2VyLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGdldFVuaXF1ZU9yZ0ZvclJvbGUocm9sZSkge1xuICAgICAgICBsZXQgcHJvZmlsZSA9IEpTT04ucGFyc2UodGhpcy5nZXRVc2VyRGV0YWlscygpLnByb2ZpbGUpO1xuICAgICAgICBsZXQgcm9sZXMgPSBwcm9maWxlLm9yZ2FuaXNhdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIob3JnID0+IG9yZy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkgLy8gRmlsdGVyIG9yZ2FuaXNhdGlvbnMgYnkgcm9sZVxuICAgICAgICAgICAgLm1hcChvcmcgPT4gb3JnLmNvZGUpO1xuXG4gICAgICAgIGlmIChyb2xlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBtb3JlIHRoYW4gb25lIG9yZ2FuaXNhdGlvbiBmb3Igcm9sZSA6IFtcIiArIHJvbGUgKyBcIl1cIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb2xlc1swXTtcbiAgICB9XG5cbiAgICBhZGRBcHBsaWNhdGlvbkNvbnRleHRTdWJzY3JpcHRpb24gPSAoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZEFwcGxpY2F0aW9uQ29udGV4dFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBsaWNhdGlvbkNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdGUocGF0aCkge1xuICAgICAgICB0aGlzLnByb3BzLm5hdmlnYXRvcihwYXRoKTtcbiAgICB9XG5cbiAgICBzZXREYXNoYm9hcmRTZXR0aW5ncyhkYXNoYm9hcmRTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnByb3BzLmRhc2hib2FyZFNldHRpbmdzID0gZGFzaGJvYXJkU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgc2V0RGFzaGJvYXJkU3RhdGUoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAobGlzdGVuZXIudHlwZSA9PT0gREFTSEJPQVJEX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlcihzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXNoYm9hcmRTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGFzaGJvYXJkU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlVGVuYW50KHRlbmFudCkge1xuICAgICAgICB0aGlzLnByb3BzLnRlbmFudCA9IHRlbmFudDtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVUZW5hbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRlbmFudDtcbiAgICB9XG5cbiAgICBzZXROYXZpZ2F0b3IobmF2aWdhdG9yKSB7XG4gICAgICAgIHRoaXMucHJvcHMubmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZU1lZXRpbmdLZXkoYWN0aXZlTWVldGluZ0tleSkge1xuICAgICAgICB0aGlzLnByb3BzLmFjdGl2ZU1lZXRpbmdLZXkgPSBhY3RpdmVNZWV0aW5nS2V5O1xuICAgIH1cblxuICAgIGdldEFjdGl2ZU1lZXRpbmdLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmFjdGl2ZU1lZXRpbmdLZXk7XG4gICAgfVxuXG4gICAgc2V0SGFzQWN0aXZlTWVldGluZyhoYXNBY3RpdmVNZWV0aW5nKSB7XG4gICAgICAgIHRoaXMucHJvcHMuaGFzQWN0aXZlTWVldGluZyA9IGhhc0FjdGl2ZU1lZXRpbmc7XG4gICAgfVxuXG4gICAgaGFzQWN0aXZlTWVldGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaGFzQWN0aXZlTWVldGluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcnVlIHdoZW4gdGhlIGZsb2F0aW5nIFdpbmRvd1ZpZXdQb3J0IG92ZXJsYXkgY3VycmVudGx5IGhvc3RzIGEgdmlldy5cbiAgICAgKiBVc2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEgbWVudSBuYXZpZ2F0aW9uIHNob3VsZCBhdXRvLXBpbiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIGlzV2luZG93T3BlbigpIHtcbiAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ICE9IG51bGw7XG4gICAgfVxuXG4gICAgc2V0U2VydmljZUFwaVBhdGgoc2VydmljZUFwaVBhdGgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlQXBpUGF0aCA9IHNlcnZpY2VBcGlQYXRoO1xuICAgIH1cblxuICAgIGdldFNlcnZpY2VBcGlQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZXJ2aWNlQXBpUGF0aDtcbiAgICB9XG5cbiAgICBzZXRVSUNvbmZpZ1BhdGgodWlDb25maWdQYXRoKSB7XG4gICAgICAgIHRoaXMucHJvcHMudWlDb25maWdQYXRoID0gdWlDb25maWdQYXRoO1xuICAgIH1cblxuICAgIHNldENvbnRleHRSb290KGNvbnRleHRSb290KSB7XG4gICAgICAgIHRoaXMucHJvcHMuY29udGV4dFJvb3QgPSBjb250ZXh0Um9vdDtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0Um9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29udGV4dFJvb3Q7XG4gICAgfVxuXG4gICAgZ2V0VUlDb25maWdQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy51aUNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgc2V0RmlsZXNBcGlQYXRoKGZpbGVzQXBpUGF0aCkge1xuICAgICAgICB0aGlzLnByb3BzLmZpbGVzQXBpUGF0aCA9IGZpbGVzQXBpUGF0aDtcbiAgICB9XG5cbiAgICBnZXRGaWxlc0FwaVBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZpbGVzQXBpUGF0aDtcbiAgICB9XG5cbiAgICBhZGRBcHBsaWNhdGlvbkxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHJlbW92ZUFwcGxpY2F0aW9uTGlzdGVuZXIoaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycykgcmV0dXJuO1xuICAgICAgICAvLyBSZXZlcnNlLWl0ZXJhdGUgKyBzcGxpY2Ug4oCUIGhhbmRsZXMgZHVwbGljYXRlIGlkcyB3aXRob3V0IGluZGV4XG4gICAgICAgIC8vIGRyaWZ0LCBhbmQgbXV0YXRlcyB0aGUgZXhpc3RpbmcgYXJyYXkgKHRoZSBzaW5nbGV0b24gaXNcbiAgICAgICAgLy8gT2JqZWN0LmZyZWV6ZSdkLCBzbyB3ZSBjYW4ndCByZWFzc2lnbiB0aGlzLmxpc3RlbmVycykuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFsZXJ0KHZpZXdJZCwgbWVzc2FnZSwgbWVzc2FnZVR5cGUpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHRoaXMsIHRoaXMuZ2V0Vmlldyh2aWV3SWQpLmNvbmZpZy5pZCwge1xuICAgICAgICAgICAgbWVzc2FnZVR5cGU6IG1lc3NhZ2VUeXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuICAgICAgICB9KTtcblxuICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlckF2YXRhcihhdmF0YXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IEFWQVRBUl9MSVNURU5FUl9UWVBFKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlcihhdmF0YXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29uZmlybURpYWxvZ0hhbmRsZXIgPSAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIH07XG5cbiAgICBzZXRBcHBsaWNhdGlvblRoZW1lQ29sb3JzKHByaW1hcnksIHNlY29uZGFyeSkge1xuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnlDb2xvciA9IHByaW1hcnk7XG4gICAgICAgIHRoaXMucHJvcHMuc2Vjb25kYXJ5Q29sb3IgPSBzZWNvbmRhcnk7XG4gICAgfVxuXG4gICAgZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaW1hcnlDb2xvcjtcbiAgICB9XG5cbiAgICBnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB9XG5cbiAgICBvcGVuQ29uZmlybURpYWxvZyhtZXNzYWdlLCByZXN1bHRDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLm9wZW5EaWFsb2cobWVzc2FnZSwge1xuICAgICAgICAgICAgZXhlY3V0ZTogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvcGVuUG9wdXBWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLm9wZW5Qb3B1cFZpZXcodmlldyk7XG4gICAgfVxuXG4gICAgY2xvc2VQb3B1cFZpZXcoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHQucG9wdXAuY2xvc2VBbGxWaWV3cygpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIuY2xvc2VQb3B1cFZpZXcoKTtcbiAgICB9XG5cbiAgICBvcGVuV2luZG93Vmlldyh2aWV3KSB7XG4gICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IHZpZXd9KTtcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LndpbmRvd1ZpZXcgPSB2aWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlZ2lzdGVycyBhIGxpYnJhcnlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHBhcmFtIGxpYlxuICAgICAqL1xuICAgIHJlZ2lzdGVyTGlicmFyeSA9IChuYW1lLCBsaWIpID0+IHtcbiAgICAgICAgdGhpcy5saWJzW25hbWVdID0gbGliO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBzZXQgYXBwbGljYXRpb24gaGlzdG9yeVxuICAgICAqXG4gICAgICogQHBhcmFtIGhpc3RvcnlcbiAgICAgKi9cbiAgICBzZXRBcHBsaWNhdGlvbkhpc3RvcnkgPSAoaGlzdG9yeSkgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmFwcGxpY2F0aW9uSGlzdG9yeSA9IGhpc3Rvcnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGdldCBhcHBsaWNhdGlvbiBoaXN0b3J5XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhcHBsaWNhdGlvbiBoaXN0b3J5XG4gICAgICovXG4gICAgZ2V0QXBwbGljYXRpb25IaXN0b3J5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5hcHBsaWNhdGlvbkhpc3Rvcnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHVwZGF0ZSBhcHBiYXIgdGl0bGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3SWRcbiAgICAgKiBAcGFyYW0gdGl0bGVcbiAgICAgKi9cbiAgICB1cGRhdGVBcHBCYXJUaXRsZSA9ICh2aWV3SWQsIHRpdGxlKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGV4dFtrZXldLnVwZGF0ZUFwcEJhclRpdGxlKHZpZXdJZCwgdGl0bGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGNsZWFycyBhbGwgdmlld3NcbiAgICAgKlxuICAgICAqL1xuICAgIGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5jbGVhcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maWxlQ2FjaGUuc3BsaWNlKDAsIHRoaXMuZmlsZUNhY2hlLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIGdldEZpbGVEb21haW5DYWNoZSA9IChkb21haW4pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlQ2FjaGVFbGVtZW50IG9mIHRoaXMuZmlsZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUNhY2hlRWxlbWVudC5kb21haW4gPT09IGRvbWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlQ2FjaGVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGFkZCB2aWV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb21haW5cbiAgICAgKiBAcGFyYW0gZmlsZVxuICAgICAqL1xuICAgIGFkZEZpbGUgPSAoZG9tYWluLCBmaWxlKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZG9tYWluKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIHNwZWNpZnkgZmlsZSBkb21haW4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlRG9tYWluQ2FjaGUgPSB0aGlzLmdldEZpbGVEb21haW5DYWNoZShkb21haW4pO1xuICAgICAgICBpZiAoZmlsZURvbWFpbkNhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUgPSB7fTtcbiAgICAgICAgICAgIGZpbGVEb21haW5DYWNoZS5kb21haW4gPSBkb21haW47XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUuZmlsZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNhY2hlLnB1c2goZmlsZURvbWFpbkNhY2hlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYWNoZWRGaWxlID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5GaWxlIG9mIGZpbGVEb21haW5DYWNoZS5maWxlcykge1xuICAgICAgICAgICAgaWYgKGRvbWFpbkZpbGUuY29ycmVsYXRpb25JZCA9PT0gZmlsZS5jb3JyZWxhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVkRmlsZSA9IGRvbWFpbkZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkRmlsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlsZURvbWFpbkNhY2hlLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRGaWxlLmNvbnRlbnQgPSBmaWxlLmNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBkYXRlQ29udGV4dCA9ICh2YWx1ZXMsIHB1Ymxpc2ggPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmKHB1Ymxpc2gpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlcylcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHRba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGFkZCB2aWV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSBsaXN0ZW5lciB0byBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBwYXRoXG4gICAgICogQHBhcmFtIGZvcndhcmRcbiAgICAgKi9cbiAgICBhZGREYXNoYm9hcmRWaWV3ID0gKHZpZXcsIHBhdGgpID0+IHtcbiAgICAgICAgdGhpcy52aWV3Q29udGV4dC5kYXNoYm9hcmQuYWRkVmlldyh2aWV3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjbGVhciBkYXNoYm9hcmQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKi9cbiAgICBjbGVhckRhc2hib2FyZFZpZXdzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LmRhc2hib2FyZC5jbG9zZUFsbFZpZXdzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIHZpZXcgY29uZmlndXJhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIGxpc3RlbmVyIHRvIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqIEBwYXJhbSBtYW5hZ2VySWRcbiAgICAgKi9cbiAgICBhZGRWaWV3ID0gKHZpZXcsIHBhdGgsIGZvcndhcmQsIG1hbmFnZXJJZCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0W21hbmFnZXJJZF0uYWRkVmlldyh2aWV3LCBwYXRoLCBmb3J3YXJkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIGFsbCB2aWV3c1xuICAgICAqXG4gICAgICovXG4gICAgY2xvc2VBbGxWaWV3cyA9IChwcmVzZXJ2ZVdpbmRvdyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBwcmVzZXJ2ZVdpbmRvdyBpcyBzZXQsIGxlYXZlIHRoZSBmbG9hdGluZyBXaW5kb3dWaWV3UG9ydCBvdmVybGF5IGludGFjdCDigJQgaXQgaXNcbiAgICAgICAgICAgICAgICAvLyBhIHNlcGFyYXRlIHZpZXdwb3J0IGluIG91ciBtdWx0aS12aWV3cG9ydCBkYXNoYm9hcmQgYW5kIG11c3Qgc3Vydml2ZSBhIG1haW4tdmlld1xuICAgICAgICAgICAgICAgIC8vIG5hdmlnYXRpb24gKGUuZy4gbGF1bmNoaW5nIHRoZSBkYXNoYm9hcmQgZnJvbSB0aGUgbWVudSkuXG4gICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlV2luZG93ICYmIGtleSA9PT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5jbG9zZUFsbFZpZXdzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXByZXNlcnZlV2luZG93KSB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZW1pdENvbnRleHRDaGFuZ2VFdmVudChhcHBsaWNhdGlvbkNvbnRleHQsIHt3aW5kb3dWaWV3OiBudWxsfSk7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQud2luZG93VmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXdJZCB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqL1xuICAgIGNsb3NlVmlldyA9ICh2aWV3SWQsIGZvcndhcmQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGxldCB2aWV3Q29udGV4dEVsZW1lbnQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdwb3B1cCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIuY2xvc2VQb3B1cFZpZXcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IHZpZXdDb250ZXh0RWxlbWVudC5nZXRWaWV3KCk7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRleHRFbGVtZW50LmNsb3NlVmlldyh2aWV3SWQsIGZvcndhcmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnd2luZG93Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmVtaXRDb250ZXh0Q2hhbmdlRXZlbnQoYXBwbGljYXRpb25Db250ZXh0LCB7d2luZG93VmlldzogbnVsbH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LndpbmRvd1ZpZXcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIGdldFZpZXcgPSAoaWQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdDb250ZXh0W2tleV0uZ2V0VmlldyhpZCk7XG4gICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGdldFZpZXdDb21wb25lbnQgPSAodmlldywgaWQpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlldykgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZSkgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHZpZXcuaGFuZGxlLmFwaS5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3LmhhbmRsZS5hcGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2aWV3LmhhbmRsZT8uYXBpPy5nZXRDaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB2aWV3LmhhbmRsZT8uYXBpPy5nZXRDaGlsZChpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLmFwaTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5oYW5kbGUuYXBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICByZXNvbHZlQ29tcG9uZW50QXBpID0gKGlkKSA9PiB7XG4gICAgICAgIGlmIChBUFBfVkFSSUFCTEUgPT09IGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcGk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ3JhcGhzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpKSB7XG4gICAgICAgICAgICBsZXQgdmlld0NvbnRleHQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyYXBoIG9mIHZpZXdDb250ZXh0LmdldEdyYXBocygpKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhzLnB1c2goZ3JhcGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBncmFwaCBvZiBncmFwaHMpIHtcbiAgICAgICAgICAgIGlmIChncmFwaC5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmlld3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGxldCB2aWV3Q29udGV4dCA9IHRoaXMudmlld0NvbnRleHRba2V5XTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3Q29udGV4dC5nZXRWaWV3cygpKSB7XG4gICAgICAgICAgICAgICAgdmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuZ2V0Vmlld0NvbXBvbmVudCh2aWV3LCBpZCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQb3B1bGF0ZSBhbGwgcGxhY2UgaG9sZGVycyBpbiB0aGUgZ2l2ZW4gdGVtcGxhdGVcbiAgICAgKlxuICAgICAqL1xuICAgIHBvcHVsYXRlVGVtcGxhdGUgPSAodGVtcGxhdGUsIGV2ZW50RGF0YSkgPT4ge1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IHRlbXBsYXRlLm1hdGNoKFRFTVBMQVRFX1RPS0VOX1JFR0VYKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwobWF0Y2hlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIGxldCBleHByZXNpb25Db250ZW50ID0gbWF0Y2guc3Vic3RyaW5nKG1hdGNoLmluZGV4T2YoJ3snKSArIDEsIG1hdGNoLmxhc3RJbmRleE9mKCd9JykpO1xuICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzaW9uQ29udGVudC5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpICYmICFVdGlscy5pc051bGwoZXZlbnREYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSBleHByZXNpb25Db250ZW50LnJlcGxhY2UoJyRldmVudC5kYXRhLicsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGV2ZW50RGF0YTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSB2bztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSB0aGlzLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoZXhwcmVzaW9uQ29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKG1hdGNoLCBleHByZXNzaW9uVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH07XG5cbiAgICByZXNvbHZlRXhwcmVzc2lvblZhbHVlID0gKGV4cHJlc3Npb24sIGV2ZW50RGF0YSA9IG51bGwpID0+IHtcbiAgICAgICAgbGV0IHBhcmFtRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ubWF0Y2goL1xcKChbXildKilcXCkvKTtcbiAgICAgICAgbGV0IGlzRXZlbnQgPSBleHByZXNzaW9uLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgIGxldCBiYXNlRXhwcmVzc2lvbiA9IGlzRXZlbnQgPyAnJGV2ZW50LmRhdGEnIDogIVV0aWxzLmlzTnVsbChwYXJhbUV4cHJlc3Npb24pICYmIHBhcmFtRXhwcmVzc2lvbi5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIGV4cHJlc3Npb24ucmVwbGFjZShwYXJhbUV4cHJlc3Npb25bMF0sICcnKSA6IGV4cHJlc3Npb247XG5cbiAgICAgICAgbGV0IGV4cHJlc3Npb25Db250ZW50ID0gYmFzZUV4cHJlc3Npb24uc3Vic3RyaW5nKGJhc2VFeHByZXNzaW9uLmluZGV4T2YoJ3snKSArIDEsIGJhc2VFeHByZXNzaW9uLmluZGV4T2YoJ30nKSk7XG4gICAgICAgIGxldCBpc0NvbXBvbmVudCA9IGJhc2VFeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ0AjeycpO1xuICAgICAgICBsZXQgaXNMaWIgPSBiYXNlRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdAQHsnKTtcbiAgICAgICAgbGV0IHRva2VucyA9IGV4cHJlc3Npb25Db250ZW50LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBpZFRva2VuID0gdG9rZW5zWzBdO1xuXG4gICAgICAgIGlmIChpc0NvbXBvbmVudCB8fCBpc0V2ZW50KSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpc0V2ZW50ID8gZXZlbnREYXRhIDogdGhpcy5yZXNvbHZlQ29tcG9uZW50QXBpKGV4cHJlc3Npb25Db250ZW50KTtcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uQ2xvc3VyZSA9IGlzRXZlbnQgPyAnZGF0YS4nIDogJ30uJztcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGV4cHJlc3Npb24uaW5kZXhPZihleHByZXNzaW9uQ2xvc3VyZSk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlDaGFpbiA9IGV4cHJlc3Npb24uc3Vic3RyaW5nKGluZGV4ICsgZXhwcmVzc2lvbkNsb3N1cmUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSBwcm9wZXJ0eUNoYWluLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTGliKSB7XG4gICAgICAgICAgICAvKmlmIChpZFRva2VuID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICBpZFRva2VuID0gdGhpcy5nZXRDdXJyZW50VmlldygpLmNvbmZpZy5pZCArICdfbGliJztcbiAgICAgICAgICAgIH0qL1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saWJzW2lkVG9rZW5dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247XG4gICAgfTtcblxuICAgIHNldEV4cHJlc3Npb25WYWx1ZXMgPSAob2JqLCBldmVudERhdGEgPSBudWxsKSA9PiB7XG4gICAgICAgIGxldCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmopO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gaXNBcnJheSA/IFtdIDoge307XG5cbiAgICAgICAgT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmIG9ialtrZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRba2V5XSA9IHRoaXMuc2V0RXhwcmVzc2lvblZhbHVlcyhvYmpba2V5XSwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqVmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmpWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYHJlc29sdmVQYXJhbV8ke01hdGgucmFuZG9tKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJy4nLCAnXycpfWAsIG9ialZhbHVlLCBudWxsLCBudWxsLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0VmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqS2V5ID0ga2V5ID09PSAndmFsdWVFeHByZXNzaW9uJyA/ICd2YWx1ZScgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFtvYmpLZXldID0gc2NyaXB0VmFsdWUgIT09IG51bGwgJiYgc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkW29iaktleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIHBhcmFtZXRlciBleHByZXNzaW9uIDogXCIgKyBvYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRba2V5XSA9IG9ialZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfTtcblxuICAgIGZpbGxFdmVudERhdGFWYWx1ZShvYmosIGV2ZW50RGF0YSkge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsRXZlbnREYXRhVmFsdWUodmFsLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gJyRldmVudC5kYXRhJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBldmVudERhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIHJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSA9IChjb25maWdWYWx1ZSwgZXZlbnREYXRhKSA9PiB7XG4gICAgICAgIGlmICghY29uZmlnVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihjb25maWdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoY29uZmlnVmFsdWUsIGV2ZW50RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQganNvbiA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZ1ZhbHVlKTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0ganNvbi5tYXRjaChURU1QTEFURV9SRUdFWCk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hdGNoZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RXhwcmVzc2lvblZhbHVlcyhjb25maWdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpc0V4cHJlc3Npb24ob2JqVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9ialZhbHVlICYmIG9ialZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoJyRhcHBsaWNhdGlvbicpXG4gICAgICAgICAgICB8fCBvYmpWYWx1ZSAmJiBvYmpWYWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJylcbiAgICAgICAgICAgIHx8ICFVdGlscy5pc051bGwob2JqVmFsdWUpICYmIHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ3N0cmluZycgJiYgIVV0aWxzLmlzTnVsbChvYmpWYWx1ZS5tYXRjaChURU1QTEFURV9SRUdFWCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIHJlc29sdmVQYXJhbWV0ZXJWYWx1ZSA9IChwYXJhbWV0ZXJDb25maWcsIGV2ZW50RGF0YSA9IG51bGwpID0+IHtcblxuICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlckNvbmZpZy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gcGFyYW1ldGVyQ29uZmlnLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBpc0V2ZW50ID0gZXhwcmVzc2lvbi5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpO1xuICAgICAgICBpZiAoaXNFdmVudCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnREYXRhO1xuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgZXhwcmVzc2lvbi5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlSW5kZXggPSBleHByZXNzaW9uLnN1YnN0cmluZyhleHByZXNzaW9uLmluZGV4T2YoJ1snKSArIDEsIGV4cHJlc3Npb24uaW5kZXhPZignXScpKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3ZhbHVlSW5kZXhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBpZiB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBzb21lIGRhdGEgcHJvcGVydHlcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uQ2xvc3VyZSA9ICdkYXRhLic7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuICAgICAgICAgICAgaWYoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkNsb3N1cmUgPSBcIl0uXCI7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5Q2hhaW4gPSBleHByZXNzaW9uLnN1YnN0cmluZyhpbmRleCArIGV4cHJlc3Npb25DbG9zdXJlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BzID0gcHJvcGVydHlDaGFpbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdOVUxMIHBhcmFtZXRlciB2YWx1ZSBleHByZXNzaW9uIGluIDogJyArIEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlckNvbmZpZykpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNFeHByZXNzaW9uKHBhcmFtZXRlckNvbmZpZy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHRoaXMucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKHBhcmFtZXRlckNvbmZpZy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IHBhcmFtZXRlckNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHZhbCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KGByZXNvbHZlUGFyYW1fJHtNYXRoLnJhbmRvbSgpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLicsICdfJyl9YCwgZXhwcmVzc2lvbiwgbnVsbCwgbnVsbCwge2RhdGE6IGV2ZW50RGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkgJiYgIVV0aWxzLmlzTnVsbCh2YWwuaW5zdGFuY2VUeXBlKVxuICAgICAgICAgICAgJiYgdmFsLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YWwudHlwZSA9IHBhcmFtZXRlckNvbmZpZy50eXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHR5cGUgPSBudWxsO1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudHlwZSkpIHtcbiAgICAgICAgICAgIHR5cGUgPSBwYXJhbWV0ZXJDb25maWcudHlwZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKHR5cGUsIHZhbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZpZXcncyBtb2RlbFxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKiBAcGFyYW0gdmlld0lkXG4gICAgICovXG4gICAgc2V0TW9kZWxWYWx1ZSA9IChrZXksIHZhbHVlLCB2aWV3SWQpID0+IHtcbiAgICAgICAgdGhpcy5nZXRWaWV3KHZpZXdJZClcbiAgICAgICAgICAgIC5oYW5kbGVcbiAgICAgICAgICAgIC5hcGlcbiAgICAgICAgICAgIC5zZXRNb2RlbFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnModmlld0lkKTtcbiAgICB9O1xuXG4gICAgZ2V0SWQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb25NYW5hZ2VyJztcbiAgICB9O1xuXG4gICAgZW5hYmxlRm9ybU1hcmtlcnMoZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnByb3BzLmZvcm1NYXJrZXJzRW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1NYXJrZXJzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBzZXREYXNoYm9hcmRWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRWaWV3ID0gdmlldztcbiAgICB9XG5cbiAgICBzZXRVc2VyRGV0YWlscyh1c2VyRGV0YWlscykge1xuICAgICAgICB0aGlzLnByb3BzLnVzZXJEZXRhaWxzID0gdXNlckRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnVzZXJEZXRhaWxzO1xuICAgIH1cblxuICAgIGxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMsIHZpZXdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHRbdmlld0NvbnRleHRdLmxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMpO1xuICAgIH1cblxuICAgIHJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KSB7XG4gICAgICAgIGxldCBncmFwaCA9IHRoaXMudmlld0NvbnRleHRbdmlld0NvbnRleHRdLnJlbW92ZUxvYWRlZEdyYXBoKCk7XG4gICAgICAgIGlmIChncmFwaCAmJiBncmFwaC5jb25maWcuaXNXaW5kb3cpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IG51bGx9KTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbEdyYXBoKGlkLCBldmVudCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5zaWduYWxHcmFwaChpZCwgZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdmlld0NvbnRleHRcbiAgICAgKi9cbiAgICBnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50ID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5nZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50KCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHZpZXdDb250ZXh0XG4gICAgICovXG4gICAgZ2V0Q3VycmVudEdyYXBoID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBncmFwaHMgPSB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5ncmFwaHM7XG4gICAgICAgIHJldHVybiBncmFwaHMgJiYgZ3JhcGhzLmxlbmd0aCA+IDAgPyBncmFwaHNbZ3JhcGhzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogdmlld0NvbnRleHRcbiAgICAgKi9cbiAgICBnZXRUb3BWaWV3ID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5nZXRUb3BWaWV3KCk7XG4gICAgfTtcbn1cblxuY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBwbGljYXRpb25NYW5hZ2VyKCk7XG5PYmplY3QuZnJlZXplKGluc3RhbmNlKTtcbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFB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
765
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT2JzZXJ2YWJsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0V2ZW50IiwiX0V2ZW50VHlwZSIsIl9VdGlscyIsIl9EeW5hbWljSlMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9UeXBlZFZhbHVlIiwiX1NvY2tldE1hbmFnZXIiLCJfVmlld0NvbnRleHQiLCJfaGVscGVycyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkFQUF9WQVJJQUJMRSIsImV4cG9ydHMiLCJTT0NLRVRfVkFSSUFCTEUiLCJBVkFUQVJfTElTVEVORVJfVFlQRSIsIkRBU0hCT0FSRF9TVEFURSIsIlNZU1RFTV9FVkVOVCIsIlRFTVBMQVRFX1RPS0VOX1JFR0VYIiwiUmVnRXhwIiwiYXBwbGljYXRpb25Db250ZXh0IiwiQXBwbGljYXRpb25NYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsInN1YnNjcmlwdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXZlbnRNYW5hZ2VyIiwiYWRkQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9uIiwiY29udHJvbGxlciIsInByb3BzIiwiY29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlciIsIm5hbWUiLCJsaWIiLCJsaWJzIiwiaGlzdG9yeSIsImFwcGxpY2F0aW9uSGlzdG9yeSIsInZpZXdJZCIsInRpdGxlIiwia2V5cyIsInZpZXdDb250ZXh0IiwiZm9yRWFjaCIsImtleSIsInVwZGF0ZUFwcEJhclRpdGxlIiwiY2xlYXJBbGxFdmVudExpc3RlbmVycyIsImNsZWFyIiwiZmlsZUNhY2hlIiwic3BsaWNlIiwibGVuZ3RoIiwiZG9tYWluIiwiZmlsZUNhY2hlRWxlbWVudCIsImZpbGUiLCJVdGlscyIsImlzTnVsbCIsImNvbnNvbGUiLCJlcnJvciIsImZpbGVEb21haW5DYWNoZSIsImdldEZpbGVEb21haW5DYWNoZSIsImZpbGVzIiwicHVzaCIsImNhY2hlZEZpbGUiLCJkb21haW5GaWxlIiwiY29ycmVsYXRpb25JZCIsImNvbnRlbnQiLCJ2YWx1ZXMiLCJwdWJsaXNoIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZW1pdENvbnRleHRDaGFuZ2VFdmVudCIsInZpZXciLCJwYXRoIiwiZGFzaGJvYXJkIiwiYWRkVmlldyIsImNsb3NlQWxsVmlld3MiLCJmb3J3YXJkIiwibWFuYWdlcklkIiwicHJlc2VydmVXaW5kb3ciLCJ3aW5kb3dWaWV3Iiwidmlld0NvbnRleHRFbGVtZW50IiwiY2xvc2VQb3B1cFZpZXciLCJnZXRWaWV3IiwiY2xvc2VWaWV3IiwiaWQiLCJoYW5kbGUiLCJhcGkiLCJfdmlldyRoYW5kbGUiLCJnZXRDaGlsZCIsIl92aWV3JGhhbmRsZTIiLCJncmFwaHMiLCJncmFwaCIsImdldEdyYXBocyIsInZpZXdzIiwiZ2V0Vmlld3MiLCJjb21wb25lbnQiLCJnZXRWaWV3Q29tcG9uZW50IiwidGVtcGxhdGUiLCJldmVudERhdGEiLCJtYXRjaGVzIiwibWF0Y2giLCJleHByZXNpb25Db250ZW50Iiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIiwiZXhwcmVzc2lvblZhbHVlIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJzcGxpdCIsInZvIiwicHJvcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJleHByZXNzaW9uIiwicGFyYW1FeHByZXNzaW9uIiwiaXNFdmVudCIsImJhc2VFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkNvbnRlbnQiLCJpc0NvbXBvbmVudCIsImlzTGliIiwidG9rZW5zIiwiaWRUb2tlbiIsInJlc29sdmVDb21wb25lbnRBcGkiLCJleHByZXNzaW9uQ2xvc3VyZSIsImluZGV4IiwicHJvcGVydHlDaGFpbiIsIm9iaiIsImlzQXJyYXkiLCJBcnJheSIsInVwZGF0ZWQiLCJzZXRFeHByZXNzaW9uVmFsdWVzIiwib2JqVmFsdWUiLCJpc0V4cHJlc3Npb24iLCJzY3JpcHRWYWx1ZSIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJjb25jYXQiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJvYmpLZXkiLCJpbnN0YW5jZVR5cGUiLCJ0eXBlIiwiY29uZmlnVmFsdWUiLCJqc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsIlRFTVBMQVRFX1JFR0VYIiwicGFyYW1ldGVyQ29uZmlnIiwic3RhdGljIiwiaW5jbHVkZXMiLCJ2YWx1ZUluZGV4IiwidmFsIiwicmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlIiwiZGF0YSIsIlR5cGVkVmFsdWUiLCJzZXRNb2RlbFZhbHVlIiwicHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMiLCJnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50IiwiZ2V0VG9wVmlldyIsImluc3RhbmNlIiwibWFpbiIsIlZpZXdDb250ZXh0Iiwid2luZG93IiwicG9wdXAiLCJjb25jdXJyZW50IiwibGlzdGVuZXJzIiwiZ2V0SWQiLCJyZWZyZXNoVXNlckF2YXRhciIsImF2YXRhciIsImFsZXJ0IiwibWVzc2FnZSIsIm1lc3NhZ2VUeXBlIiwicmVtb3ZlTG9hZGVkR3JhcGgiLCJzZXRIYXNBY3RpdmVNZWV0aW5nIiwiaGFzQWN0aXZlTWVldGluZyIsImdldEFjdGl2ZU1lZXRpbmdLZXkiLCJnZXRVc2VyRGV0YWlscyIsImZpcmVFdmVudCIsImV2ZW50VHlwZSIsImV2ZW50IiwiRXZlbnQiLCJzb3VyY2UiLCJ1cGRhdGVDb250ZXh0IiwiZW1pdFNvY2tldEV2ZW50Iiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsInNldEFjdGl2ZVRlbmFudCIsInRlbmFudCIsImdldEFjdGl2ZVRlbmFudCIsImdldFVuaXF1ZU9yZ0ZvclJvbGUiLCJyb2xlIiwic2V0RGFzaGJvYXJkU3RhdGUiLCJkYXNoYm9hcmRTdGF0ZSIsImdldERhc2hib2FyZFN0YXRlIiwiYXJnIiwicHJvdG90eXBlIiwicHJvZmlsZSIsInBhcnNlIiwicm9sZXMiLCJvcmdhbmlzYXRpb25zIiwiZmlsdGVyIiwib3JnIiwibWFwIiwiY29kZSIsIkVycm9yIiwibmF2aWdhdGUiLCJuYXZpZ2F0b3IiLCJzZXREYXNoYm9hcmRTZXR0aW5ncyIsImRhc2hib2FyZFNldHRpbmdzIiwic3RhdGUiLCJsaXN0ZW5lciIsImxvZyIsImhhbmRsZXIiLCJnZXREYXNoYm9hcmRTZXR0aW5ncyIsInNldE5hdmlnYXRvciIsInNldEFjdGl2ZU1lZXRpbmdLZXkiLCJhY3RpdmVNZWV0aW5nS2V5IiwiaXNXaW5kb3dPcGVuIiwic2V0U2VydmljZUFwaVBhdGgiLCJzZXJ2aWNlQXBpUGF0aCIsImdldFNlcnZpY2VBcGlQYXRoIiwic2V0VUlDb25maWdQYXRoIiwidWlDb25maWdQYXRoIiwic2V0Q29udGV4dFJvb3QiLCJjb250ZXh0Um9vdCIsImdldENvbnRleHRSb290IiwiZ2V0VUlDb25maWdQYXRoIiwic2V0RmlsZXNBcGlQYXRoIiwiZmlsZXNBcGlQYXRoIiwiZ2V0RmlsZXNBcGlQYXRoIiwiYWRkQXBwbGljYXRpb25MaXN0ZW5lciIsInJlbW92ZUFwcGxpY2F0aW9uTGlzdGVuZXIiLCJjb25maWciLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJzZXRBcHBsaWNhdGlvblRoZW1lQ29sb3JzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInByaW1hcnlDb2xvciIsInNlY29uZGFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbkNvbmZpcm1EaWFsb2ciLCJyZXN1bHRDYWxsYmFjayIsIm9wZW5EaWFsb2ciLCJleGVjdXRlIiwicmVzdWx0Iiwib3BlblBvcHVwVmlldyIsIm9wZW5XaW5kb3dWaWV3IiwiZmlsbEV2ZW50RGF0YVZhbHVlIiwiZW5hYmxlRm9ybU1hcmtlcnMiLCJlbmFibGVkIiwiZm9ybU1hcmtlcnNFbmFibGVkIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJzZXREYXNoYm9hcmRWaWV3IiwiZGFzaGJvYXJkVmlldyIsInNldFVzZXJEZXRhaWxzIiwidXNlckRldGFpbHMiLCJsb2FkR3JhcGgiLCJpc1BhcmVudCIsInBhcmFtZXRlclZhbHVlcyIsImlzV2luZG93Iiwic2lnbmFsR3JhcGgiLCJmcmVlemUiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvQXBwbGljYXRpb25NYW5hZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IGR5bmFtaWNKUywge1RFTVBMQVRFX1JFR0VYfSBmcm9tICcuL0R5bmFtaWNKUyc7XG5pbXBvcnQgVHlwZWRWYWx1ZSBmcm9tICcuL1R5cGVkVmFsdWUnO1xuaW1wb3J0IHNvY2tldE1hbmFnZXIgZnJvbSBcIi4vY29tcG9uZW50cy9Tb2NrZXRNYW5hZ2VyXCI7XG5pbXBvcnQge1ZpZXdDb250ZXh0fSBmcm9tIFwiLi9WaWV3Q29udGV4dFwiO1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tIFwicnJ1bGUvZGlzdC9lc20vaGVscGVyc1wiO1xuXG5leHBvcnQgY29uc3QgQVBQX1ZBUklBQkxFID0gJ19fQVBQTElDQVRJT05fT1VJX1NZU19WQVJfXyc7XG5leHBvcnQgY29uc3QgU09DS0VUX1ZBUklBQkxFID0gJ19fU09DS0VUX1ZBUklBQkxFX09VSV9TWVNfVkFSX18nO1xuZXhwb3J0IGNvbnN0IEFWQVRBUl9MSVNURU5FUl9UWVBFID0gJ0FWQVRBUl9MSVNURU5FUic7XG5leHBvcnQgY29uc3QgREFTSEJPQVJEX1NUQVRFID0gJ0RBU0hCT0FSRF9TVEFURSc7XG5leHBvcnQgY29uc3QgU1lTVEVNX0VWRU5UID0gJ1NZU1RFTV9FVkVOVCc7XG5leHBvcnQgY29uc3QgVEVNUExBVEVfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKCcoKFskXXsxfVt7XXsxfSkoKFthLXpBLVowLTlfJC5AI3t9W1xcXFxdXSopKyl7MX0oW31dezF9KSkrJywgJ2cnKTtcblxuY29uc3QgYXBwbGljYXRpb25Db250ZXh0ID0ge307XG5cbmNsYXNzIEFwcGxpY2F0aW9uTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmICghQXBwbGljYXRpb25NYW5hZ2VyLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIG1haW46IG5ldyBWaWV3Q29udGV4dCgnbWFpbicpLFxuICAgICAgICAgICAgICAgIHdpbmRvdzogbmV3IFZpZXdDb250ZXh0KCd3aW5kb3cnKSxcbiAgICAgICAgICAgICAgICBkYXNoYm9hcmQ6IG5ldyBWaWV3Q29udGV4dCgnZGFzaGJvYXJkJyksXG4gICAgICAgICAgICAgICAgcG9wdXA6IG5ldyBWaWV3Q29udGV4dCgncG9wdXAnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGRhc2hib2FyZCBob2xkcyBtYW55IGNhcmQgdmlld3Mgc2ltdWx0YW5lb3VzbHksIHNvIGl0IG11c3RcbiAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmlld3MgaW5zdGVhZCBvZiBldmljdGluZyB0aGUgdG9wIG9uZSBvbiBlYWNoIGFkZC5cbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZGFzaGJvYXJkLmNvbmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLnByb3BzID0ge307XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5saWJzID0ge307XG4gICAgICAgICAgICB0aGlzLmZpbGVDYWNoZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5hcGkgPSB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlZnJlc2hVc2VyQXZhdGFyKGF2YXRhcikge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZWZyZXNoVXNlckF2YXRhcihhdmF0YXIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWxlcnQodmlld0lkLCBtZXNzYWdlLCBtZXNzYWdlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5hbGVydCh2aWV3SWQsIG1lc3NhZ2UsIG1lc3NhZ2VUeXBlLCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVMb2FkZWRHcmFwaCh2aWV3Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVMb2FkZWRHcmFwaCh2aWV3Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRIYXNBY3RpdmVNZWV0aW5nKGhhc0FjdGl2ZU1lZXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0SGFzQWN0aXZlTWVldGluZyhoYXNBY3RpdmVNZWV0aW5nKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhhc0FjdGl2ZU1lZXRpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5oYXNBY3RpdmVNZWV0aW5nKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRBY3RpdmVNZWV0aW5nS2V5KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0QWN0aXZlTWVldGluZ0tleSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRVc2VyRGV0YWlscygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xvc2VQb3B1cFZpZXcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5jbG9zZVBvcHVwVmlldygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KGV2ZW50VHlwZSwgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoZXZlbnRUeXBlLCBuZXcgRXZlbnQoZXZlbnQuc291cmNlLCBldmVudC52aWV3SWQsIGV2ZW50LmRhdGEpKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVwZGF0ZUNvbnRleHQodmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGVDb250ZXh0KHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbWl0U29ja2V0RXZlbnQoZXZlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChldmVudFR5cGUsIGRhdGEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlVGVuYW50KHRlbmFudCkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXRBY3RpdmVUZW5hbnQodGVuYW50KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldEFjdGl2ZVRlbmFudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldEFjdGl2ZVRlbmFudCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0VW5pcXVlT3JnRm9yUm9sZShyb2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRVbmlxdWVPcmdGb3JSb2xlKHJvbGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RGFzaGJvYXJkU3RhdGUoZGFzaGJvYXJkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0RGFzaGJvYXJkU3RhdGUoZGFzaGJvYXJkU3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0RGFzaGJvYXJkU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXREYXNoYm9hcmRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9uTWFuYWdlci5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBnZXRVbmlxdWVPcmdGb3JSb2xlKHJvbGUpIHtcbiAgICAgICAgbGV0IHByb2ZpbGUgPSBKU09OLnBhcnNlKHRoaXMuZ2V0VXNlckRldGFpbHMoKS5wcm9maWxlKTtcbiAgICAgICAgbGV0IHJvbGVzID0gcHJvZmlsZS5vcmdhbmlzYXRpb25zXG4gICAgICAgICAgICAuZmlsdGVyKG9yZyA9PiBvcmcucm9sZXMuaW5jbHVkZXMocm9sZSkpIC8vIEZpbHRlciBvcmdhbmlzYXRpb25zIGJ5IHJvbGVcbiAgICAgICAgICAgIC5tYXAob3JnID0+IG9yZy5jb2RlKTtcblxuICAgICAgICBpZiAocm9sZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBvcmdhbmlzYXRpb24gZm9yIHJvbGUgOiBbXCIgKyByb2xlICsgXCJdXCIpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm9sZXNbMF07XG4gICAgfVxuXG4gICAgYWRkQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9uID0gKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRBcHBsaWNhdGlvbkNvbnRleHRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHJlc29sdmUoYXBwbGljYXRpb25Db250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRlKHBhdGgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5uYXZpZ2F0b3IocGF0aCk7XG4gICAgfVxuXG4gICAgc2V0RGFzaGJvYXJkU2V0dGluZ3MoZGFzaGJvYXJkU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRTZXR0aW5ncyA9IGRhc2hib2FyZFNldHRpbmdzO1xuICAgIH1cblxuICAgIHNldERhc2hib2FyZFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIHRoaXMucHJvcHMuZGFzaGJvYXJkU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IERBU0hCT0FSRF9TVEFURSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZXIoc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmRhc2hib2FyZFNldHRpbmdzO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZVRlbmFudCh0ZW5hbnQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy50ZW5hbnQgPSB0ZW5hbnQ7XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlVGVuYW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50ZW5hbnQ7XG4gICAgfVxuXG4gICAgc2V0TmF2aWdhdG9yKG5hdmlnYXRvcikge1xuICAgICAgICB0aGlzLnByb3BzLm5hdmlnYXRvciA9IG5hdmlnYXRvcjtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmVNZWV0aW5nS2V5KGFjdGl2ZU1lZXRpbmdLZXkpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3RpdmVNZWV0aW5nS2V5ID0gYWN0aXZlTWVldGluZ0tleTtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVNZWV0aW5nS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5hY3RpdmVNZWV0aW5nS2V5O1xuICAgIH1cblxuICAgIHNldEhhc0FjdGl2ZU1lZXRpbmcoaGFzQWN0aXZlTWVldGluZykge1xuICAgICAgICB0aGlzLnByb3BzLmhhc0FjdGl2ZU1lZXRpbmcgPSBoYXNBY3RpdmVNZWV0aW5nO1xuICAgIH1cblxuICAgIGhhc0FjdGl2ZU1lZXRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmhhc0FjdGl2ZU1lZXRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1ZSB3aGVuIHRoZSBmbG9hdGluZyBXaW5kb3dWaWV3UG9ydCBvdmVybGF5IGN1cnJlbnRseSBob3N0cyBhIHZpZXcuXG4gICAgICogVXNlZCB0byBkZWNpZGUgd2hldGhlciBhIG1lbnUgbmF2aWdhdGlvbiBzaG91bGQgYXV0by1waW4gdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBpc1dpbmRvd09wZW4oKSB7XG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbnRleHQud2luZG93VmlldyAhPSBudWxsO1xuICAgIH1cblxuICAgIHNldFNlcnZpY2VBcGlQYXRoKHNlcnZpY2VBcGlQYXRoKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VydmljZUFwaVBhdGggPSBzZXJ2aWNlQXBpUGF0aDtcbiAgICB9XG5cbiAgICBnZXRTZXJ2aWNlQXBpUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VydmljZUFwaVBhdGg7XG4gICAgfVxuXG4gICAgc2V0VUlDb25maWdQYXRoKHVpQ29uZmlnUGF0aCkge1xuICAgICAgICB0aGlzLnByb3BzLnVpQ29uZmlnUGF0aCA9IHVpQ29uZmlnUGF0aDtcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0Um9vdChjb250ZXh0Um9vdCkge1xuICAgICAgICB0aGlzLnByb3BzLmNvbnRleHRSb290ID0gY29udGV4dFJvb3Q7XG4gICAgfVxuXG4gICAgZ2V0Q29udGV4dFJvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNvbnRleHRSb290O1xuICAgIH1cblxuICAgIGdldFVJQ29uZmlnUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudWlDb25maWdQYXRoO1xuICAgIH1cblxuICAgIHNldEZpbGVzQXBpUGF0aChmaWxlc0FwaVBhdGgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5maWxlc0FwaVBhdGggPSBmaWxlc0FwaVBhdGg7XG4gICAgfVxuXG4gICAgZ2V0RmlsZXNBcGlQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5maWxlc0FwaVBhdGg7XG4gICAgfVxuXG4gICAgYWRkQXBwbGljYXRpb25MaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICByZW1vdmVBcHBsaWNhdGlvbkxpc3RlbmVyKGlkKSB7XG4gICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnMpIHJldHVybjtcbiAgICAgICAgLy8gUmV2ZXJzZS1pdGVyYXRlICsgc3BsaWNlIOKAlCBoYW5kbGVzIGR1cGxpY2F0ZSBpZHMgd2l0aG91dCBpbmRleFxuICAgICAgICAvLyBkcmlmdCwgYW5kIG11dGF0ZXMgdGhlIGV4aXN0aW5nIGFycmF5ICh0aGUgc2luZ2xldG9uIGlzXG4gICAgICAgIC8vIE9iamVjdC5mcmVlemUnZCwgc28gd2UgY2FuJ3QgcmVhc3NpZ24gdGhpcy5saXN0ZW5lcnMpLlxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5saXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhbGVydCh2aWV3SWQsIG1lc3NhZ2UsIG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudCh0aGlzLCB0aGlzLmdldFZpZXcodmlld0lkKS5jb25maWcuaWQsIHtcbiAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiBtZXNzYWdlVHlwZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFVzZXJBdmF0YXIoYXZhdGFyKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lci50eXBlID09PSBBVkFUQVJfTElTVEVORVJfVFlQRSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZXIoYXZhdGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbmZpcm1EaWFsb2dIYW5kbGVyID0gKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB9O1xuXG4gICAgc2V0QXBwbGljYXRpb25UaGVtZUNvbG9ycyhwcmltYXJ5LCBzZWNvbmRhcnkpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5wcmltYXJ5Q29sb3IgPSBwcmltYXJ5O1xuICAgICAgICB0aGlzLnByb3BzLnNlY29uZGFyeUNvbG9yID0gc2Vjb25kYXJ5O1xuICAgIH1cblxuICAgIGdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmltYXJ5Q29sb3I7XG4gICAgfVxuXG4gICAgZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgfVxuXG4gICAgb3BlbkNvbmZpcm1EaWFsb2cobWVzc2FnZSwgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlci5vcGVuRGlhbG9nKG1lc3NhZ2UsIHtcbiAgICAgICAgICAgIGV4ZWN1dGU6IChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgb3BlblBvcHVwVmlldyh2aWV3KSB7XG4gICAgICAgIHRoaXMucHJvcHMuY29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlci5vcGVuUG9wdXBWaWV3KHZpZXcpO1xuICAgIH1cblxuICAgIGNsb3NlUG9wdXBWaWV3KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LnBvcHVwLmNsb3NlQWxsVmlld3MoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLmNsb3NlUG9wdXBWaWV3KCk7XG4gICAgfVxuXG4gICAgb3BlbldpbmRvd1ZpZXcodmlldykge1xuICAgICAgICBldmVudE1hbmFnZXIuZW1pdENvbnRleHRDaGFuZ2VFdmVudChhcHBsaWNhdGlvbkNvbnRleHQsIHt3aW5kb3dWaWV3OiB2aWV3fSk7XG4gICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ID0gdmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWdpc3RlcnMgYSBsaWJyYXJ5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEBwYXJhbSBsaWJcbiAgICAgKi9cbiAgICByZWdpc3RlckxpYnJhcnkgPSAobmFtZSwgbGliKSA9PiB7XG4gICAgICAgIHRoaXMubGlic1tuYW1lXSA9IGxpYjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogc2V0IGFwcGxpY2F0aW9uIGhpc3RvcnlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoaXN0b3J5XG4gICAgICovXG4gICAgc2V0QXBwbGljYXRpb25IaXN0b3J5ID0gKGhpc3RvcnkpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5hcHBsaWNhdGlvbkhpc3RvcnkgPSBoaXN0b3J5O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBnZXQgYXBwbGljYXRpb24gaGlzdG9yeVxuICAgICAqXG4gICAgICogQHJldHVybnMgYXBwbGljYXRpb24gaGlzdG9yeVxuICAgICAqL1xuICAgIGdldEFwcGxpY2F0aW9uSGlzdG9yeSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuYXBwbGljYXRpb25IaXN0b3J5O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgYXBwYmFyIHRpdGxlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlld0lkXG4gICAgICogQHBhcmFtIHRpdGxlXG4gICAgICovXG4gICAgdXBkYXRlQXBwQmFyVGl0bGUgPSAodmlld0lkLCB0aXRsZSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS51cGRhdGVBcHBCYXJUaXRsZSh2aWV3SWQsIHRpdGxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBjbGVhcnMgYWxsIHZpZXdzXG4gICAgICpcbiAgICAgKi9cbiAgICBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmNsZWFyQWxsRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dClcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250ZXh0W2tleV0uY2xlYXIoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlsZUNhY2hlLnNwbGljZSgwLCB0aGlzLmZpbGVDYWNoZS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICBnZXRGaWxlRG9tYWluQ2FjaGUgPSAoZG9tYWluKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZUNhY2hlRWxlbWVudCBvZiB0aGlzLmZpbGVDYWNoZSkge1xuICAgICAgICAgICAgaWYgKGZpbGVDYWNoZUVsZW1lbnQuZG9tYWluID09PSBkb21haW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZUNhY2hlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBhZGQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZG9tYWluXG4gICAgICogQHBhcmFtIGZpbGVcbiAgICAgKi9cbiAgICBhZGRGaWxlID0gKGRvbWFpbiwgZmlsZSkgPT4ge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBzcGVjaWZ5IGZpbGUgZG9tYWluJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlsZURvbWFpbkNhY2hlID0gdGhpcy5nZXRGaWxlRG9tYWluQ2FjaGUoZG9tYWluKTtcbiAgICAgICAgaWYgKGZpbGVEb21haW5DYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlsZURvbWFpbkNhY2hlID0ge307XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUuZG9tYWluID0gZG9tYWluO1xuICAgICAgICAgICAgZmlsZURvbWFpbkNhY2hlLmZpbGVzID0gW107XG4gICAgICAgICAgICB0aGlzLmZpbGVDYWNoZS5wdXNoKGZpbGVEb21haW5DYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FjaGVkRmlsZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZG9tYWluRmlsZSBvZiBmaWxlRG9tYWluQ2FjaGUuZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChkb21haW5GaWxlLmNvcnJlbGF0aW9uSWQgPT09IGZpbGUuY29ycmVsYXRpb25JZCkge1xuICAgICAgICAgICAgICAgIGNhY2hlZEZpbGUgPSBkb21haW5GaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlZEZpbGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGZpbGVEb21haW5DYWNoZS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkRmlsZS5jb250ZW50ID0gZmlsZS5jb250ZW50O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVwZGF0ZUNvbnRleHQgPSAodmFsdWVzLCBwdWJsaXNoID0gdHJ1ZSkgPT4ge1xuICAgICAgICBpZihwdWJsaXNoKSB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZW1pdENvbnRleHRDaGFuZ2VFdmVudChhcHBsaWNhdGlvbkNvbnRleHQsIHZhbHVlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25Db250ZXh0W2tleV0gPSB2YWx1ZXNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBhZGQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlldyB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gcGF0aFxuICAgICAqIEBwYXJhbSBmb3J3YXJkXG4gICAgICovXG4gICAgYWRkRGFzaGJvYXJkVmlldyA9ICh2aWV3LCBwYXRoKSA9PiB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHQuZGFzaGJvYXJkLmFkZFZpZXcodmlldyk7XG4gICAgfVxuXG4gICAgZ2V0RGFzaGJvYXJkVmlld0NvbnRleHQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LmRhc2hib2FyZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjbGVhciBkYXNoYm9hcmQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKi9cbiAgICBjbGVhckRhc2hib2FyZFZpZXdzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LmRhc2hib2FyZC5jbG9zZUFsbFZpZXdzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIHZpZXcgY29uZmlndXJhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIGxpc3RlbmVyIHRvIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqIEBwYXJhbSBtYW5hZ2VySWRcbiAgICAgKi9cbiAgICBhZGRWaWV3ID0gKHZpZXcsIHBhdGgsIGZvcndhcmQsIG1hbmFnZXJJZCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0W21hbmFnZXJJZF0uYWRkVmlldyh2aWV3LCBwYXRoLCBmb3J3YXJkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIGFsbCB2aWV3c1xuICAgICAqXG4gICAgICovXG4gICAgY2xvc2VBbGxWaWV3cyA9IChwcmVzZXJ2ZVdpbmRvdyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBwcmVzZXJ2ZVdpbmRvdyBpcyBzZXQsIGxlYXZlIHRoZSBmbG9hdGluZyBXaW5kb3dWaWV3UG9ydCBvdmVybGF5IGludGFjdCDigJQgaXQgaXNcbiAgICAgICAgICAgICAgICAvLyBhIHNlcGFyYXRlIHZpZXdwb3J0IGluIG91ciBtdWx0aS12aWV3cG9ydCBkYXNoYm9hcmQgYW5kIG11c3Qgc3Vydml2ZSBhIG1haW4tdmlld1xuICAgICAgICAgICAgICAgIC8vIG5hdmlnYXRpb24gKGUuZy4gbGF1bmNoaW5nIHRoZSBkYXNoYm9hcmQgZnJvbSB0aGUgbWVudSkuXG4gICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlV2luZG93ICYmIGtleSA9PT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5jbG9zZUFsbFZpZXdzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXByZXNlcnZlV2luZG93KSB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZW1pdENvbnRleHRDaGFuZ2VFdmVudChhcHBsaWNhdGlvbkNvbnRleHQsIHt3aW5kb3dWaWV3OiBudWxsfSk7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQud2luZG93VmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXdJZCB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqL1xuICAgIGNsb3NlVmlldyA9ICh2aWV3SWQsIGZvcndhcmQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGxldCB2aWV3Q29udGV4dEVsZW1lbnQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdwb3B1cCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIuY2xvc2VQb3B1cFZpZXcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IHZpZXdDb250ZXh0RWxlbWVudC5nZXRWaWV3KCk7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRleHRFbGVtZW50LmNsb3NlVmlldyh2aWV3SWQsIGZvcndhcmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnd2luZG93Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmVtaXRDb250ZXh0Q2hhbmdlRXZlbnQoYXBwbGljYXRpb25Db250ZXh0LCB7d2luZG93VmlldzogbnVsbH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LndpbmRvd1ZpZXcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIGdldFZpZXcgPSAoaWQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdDb250ZXh0W2tleV0uZ2V0VmlldyhpZCk7XG4gICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGdldFZpZXdDb21wb25lbnQgPSAodmlldywgaWQpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlldykgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZSkgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHZpZXcuaGFuZGxlLmFwaS5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3LmhhbmRsZS5hcGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2aWV3LmhhbmRsZT8uYXBpPy5nZXRDaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB2aWV3LmhhbmRsZT8uYXBpPy5nZXRDaGlsZChpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLmFwaTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5oYW5kbGUuYXBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICByZXNvbHZlQ29tcG9uZW50QXBpID0gKGlkKSA9PiB7XG4gICAgICAgIGlmIChBUFBfVkFSSUFCTEUgPT09IGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcGk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ3JhcGhzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpKSB7XG4gICAgICAgICAgICBsZXQgdmlld0NvbnRleHQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyYXBoIG9mIHZpZXdDb250ZXh0LmdldEdyYXBocygpKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhzLnB1c2goZ3JhcGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBncmFwaCBvZiBncmFwaHMpIHtcbiAgICAgICAgICAgIGlmIChncmFwaC5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmlld3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGxldCB2aWV3Q29udGV4dCA9IHRoaXMudmlld0NvbnRleHRba2V5XTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3Q29udGV4dC5nZXRWaWV3cygpKSB7XG4gICAgICAgICAgICAgICAgdmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuZ2V0Vmlld0NvbXBvbmVudCh2aWV3LCBpZCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQb3B1bGF0ZSBhbGwgcGxhY2UgaG9sZGVycyBpbiB0aGUgZ2l2ZW4gdGVtcGxhdGVcbiAgICAgKlxuICAgICAqL1xuICAgIHBvcHVsYXRlVGVtcGxhdGUgPSAodGVtcGxhdGUsIGV2ZW50RGF0YSkgPT4ge1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IHRlbXBsYXRlLm1hdGNoKFRFTVBMQVRFX1RPS0VOX1JFR0VYKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwobWF0Y2hlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIGxldCBleHByZXNpb25Db250ZW50ID0gbWF0Y2guc3Vic3RyaW5nKG1hdGNoLmluZGV4T2YoJ3snKSArIDEsIG1hdGNoLmxhc3RJbmRleE9mKCd9JykpO1xuICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzaW9uQ29udGVudC5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpICYmICFVdGlscy5pc051bGwoZXZlbnREYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSBleHByZXNpb25Db250ZW50LnJlcGxhY2UoJyRldmVudC5kYXRhLicsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGV2ZW50RGF0YTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSB2bztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSB0aGlzLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoZXhwcmVzaW9uQ29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKG1hdGNoLCBleHByZXNzaW9uVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH07XG5cbiAgICByZXNvbHZlRXhwcmVzc2lvblZhbHVlID0gKGV4cHJlc3Npb24sIGV2ZW50RGF0YSA9IG51bGwpID0+IHtcbiAgICAgICAgbGV0IHBhcmFtRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ubWF0Y2goL1xcKChbXildKilcXCkvKTtcbiAgICAgICAgbGV0IGlzRXZlbnQgPSBleHByZXNzaW9uLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgIGxldCBiYXNlRXhwcmVzc2lvbiA9IGlzRXZlbnQgPyAnJGV2ZW50LmRhdGEnIDogIVV0aWxzLmlzTnVsbChwYXJhbUV4cHJlc3Npb24pICYmIHBhcmFtRXhwcmVzc2lvbi5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIGV4cHJlc3Npb24ucmVwbGFjZShwYXJhbUV4cHJlc3Npb25bMF0sICcnKSA6IGV4cHJlc3Npb247XG5cbiAgICAgICAgbGV0IGV4cHJlc3Npb25Db250ZW50ID0gYmFzZUV4cHJlc3Npb24uc3Vic3RyaW5nKGJhc2VFeHByZXNzaW9uLmluZGV4T2YoJ3snKSArIDEsIGJhc2VFeHByZXNzaW9uLmluZGV4T2YoJ30nKSk7XG4gICAgICAgIGxldCBpc0NvbXBvbmVudCA9IGJhc2VFeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ0AjeycpO1xuICAgICAgICBsZXQgaXNMaWIgPSBiYXNlRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdAQHsnKTtcbiAgICAgICAgbGV0IHRva2VucyA9IGV4cHJlc3Npb25Db250ZW50LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBpZFRva2VuID0gdG9rZW5zWzBdO1xuXG4gICAgICAgIGlmIChpc0NvbXBvbmVudCB8fCBpc0V2ZW50KSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpc0V2ZW50ID8gZXZlbnREYXRhIDogdGhpcy5yZXNvbHZlQ29tcG9uZW50QXBpKGV4cHJlc3Npb25Db250ZW50KTtcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uQ2xvc3VyZSA9IGlzRXZlbnQgPyAnZGF0YS4nIDogJ30uJztcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGV4cHJlc3Npb24uaW5kZXhPZihleHByZXNzaW9uQ2xvc3VyZSk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlDaGFpbiA9IGV4cHJlc3Npb24uc3Vic3RyaW5nKGluZGV4ICsgZXhwcmVzc2lvbkNsb3N1cmUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSBwcm9wZXJ0eUNoYWluLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTGliKSB7XG4gICAgICAgICAgICAvKmlmIChpZFRva2VuID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICBpZFRva2VuID0gdGhpcy5nZXRDdXJyZW50VmlldygpLmNvbmZpZy5pZCArICdfbGliJztcbiAgICAgICAgICAgIH0qL1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saWJzW2lkVG9rZW5dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247XG4gICAgfTtcblxuICAgIHNldEV4cHJlc3Npb25WYWx1ZXMgPSAob2JqLCBldmVudERhdGEgPSBudWxsKSA9PiB7XG4gICAgICAgIGxldCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmopO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gaXNBcnJheSA/IFtdIDoge307XG5cbiAgICAgICAgT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmIG9ialtrZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRba2V5XSA9IHRoaXMuc2V0RXhwcmVzc2lvblZhbHVlcyhvYmpba2V5XSwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqVmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmpWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYHJlc29sdmVQYXJhbV8ke01hdGgucmFuZG9tKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJy4nLCAnXycpfWAsIG9ialZhbHVlLCBudWxsLCBudWxsLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0VmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqS2V5ID0ga2V5ID09PSAndmFsdWVFeHByZXNzaW9uJyA/ICd2YWx1ZScgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFtvYmpLZXldID0gc2NyaXB0VmFsdWUgIT09IG51bGwgJiYgc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkW29iaktleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIHBhcmFtZXRlciBleHByZXNzaW9uIDogXCIgKyBvYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRba2V5XSA9IG9ialZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfTtcblxuICAgIGZpbGxFdmVudERhdGFWYWx1ZShvYmosIGV2ZW50RGF0YSkge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsRXZlbnREYXRhVmFsdWUodmFsLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gJyRldmVudC5kYXRhJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBldmVudERhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIHJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSA9IChjb25maWdWYWx1ZSwgZXZlbnREYXRhKSA9PiB7XG4gICAgICAgIGlmICghY29uZmlnVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihjb25maWdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoY29uZmlnVmFsdWUsIGV2ZW50RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQganNvbiA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZ1ZhbHVlKTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0ganNvbi5tYXRjaChURU1QTEFURV9SRUdFWCk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hdGNoZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RXhwcmVzc2lvblZhbHVlcyhjb25maWdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpc0V4cHJlc3Npb24ob2JqVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9ialZhbHVlICYmIG9ialZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoJyRhcHBsaWNhdGlvbicpXG4gICAgICAgICAgICB8fCBvYmpWYWx1ZSAmJiBvYmpWYWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJylcbiAgICAgICAgICAgIHx8ICFVdGlscy5pc051bGwob2JqVmFsdWUpICYmIHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ3N0cmluZycgJiYgIVV0aWxzLmlzTnVsbChvYmpWYWx1ZS5tYXRjaChURU1QTEFURV9SRUdFWCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIHJlc29sdmVQYXJhbWV0ZXJWYWx1ZSA9IChwYXJhbWV0ZXJDb25maWcsIGV2ZW50RGF0YSA9IG51bGwpID0+IHtcblxuICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlckNvbmZpZy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gcGFyYW1ldGVyQ29uZmlnLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBpc0V2ZW50ID0gZXhwcmVzc2lvbi5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpO1xuICAgICAgICBpZiAoaXNFdmVudCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnREYXRhO1xuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgZXhwcmVzc2lvbi5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlSW5kZXggPSBleHByZXNzaW9uLnN1YnN0cmluZyhleHByZXNzaW9uLmluZGV4T2YoJ1snKSArIDEsIGV4cHJlc3Npb24uaW5kZXhPZignXScpKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3ZhbHVlSW5kZXhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBpZiB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBzb21lIGRhdGEgcHJvcGVydHlcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uQ2xvc3VyZSA9ICdkYXRhLic7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuICAgICAgICAgICAgaWYoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkNsb3N1cmUgPSBcIl0uXCI7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5Q2hhaW4gPSBleHByZXNzaW9uLnN1YnN0cmluZyhpbmRleCArIGV4cHJlc3Npb25DbG9zdXJlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BzID0gcHJvcGVydHlDaGFpbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdOVUxMIHBhcmFtZXRlciB2YWx1ZSBleHByZXNzaW9uIGluIDogJyArIEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlckNvbmZpZykpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNFeHByZXNzaW9uKHBhcmFtZXRlckNvbmZpZy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHRoaXMucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKHBhcmFtZXRlckNvbmZpZy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IHBhcmFtZXRlckNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHZhbCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KGByZXNvbHZlUGFyYW1fJHtNYXRoLnJhbmRvbSgpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLicsICdfJyl9YCwgZXhwcmVzc2lvbiwgbnVsbCwgbnVsbCwge2RhdGE6IGV2ZW50RGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkgJiYgIVV0aWxzLmlzTnVsbCh2YWwuaW5zdGFuY2VUeXBlKVxuICAgICAgICAgICAgJiYgdmFsLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YWwudHlwZSA9IHBhcmFtZXRlckNvbmZpZy50eXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHR5cGUgPSBudWxsO1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudHlwZSkpIHtcbiAgICAgICAgICAgIHR5cGUgPSBwYXJhbWV0ZXJDb25maWcudHlwZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKHR5cGUsIHZhbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZpZXcncyBtb2RlbFxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKiBAcGFyYW0gdmlld0lkXG4gICAgICovXG4gICAgc2V0TW9kZWxWYWx1ZSA9IChrZXksIHZhbHVlLCB2aWV3SWQpID0+IHtcbiAgICAgICAgdGhpcy5nZXRWaWV3KHZpZXdJZClcbiAgICAgICAgICAgIC5oYW5kbGVcbiAgICAgICAgICAgIC5hcGlcbiAgICAgICAgICAgIC5zZXRNb2RlbFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnModmlld0lkKTtcbiAgICB9O1xuXG4gICAgZ2V0SWQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb25NYW5hZ2VyJztcbiAgICB9O1xuXG4gICAgZW5hYmxlRm9ybU1hcmtlcnMoZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnByb3BzLmZvcm1NYXJrZXJzRW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1NYXJrZXJzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBzZXREYXNoYm9hcmRWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRWaWV3ID0gdmlldztcbiAgICB9XG5cbiAgICBzZXRVc2VyRGV0YWlscyh1c2VyRGV0YWlscykge1xuICAgICAgICB0aGlzLnByb3BzLnVzZXJEZXRhaWxzID0gdXNlckRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnVzZXJEZXRhaWxzO1xuICAgIH1cblxuICAgIGxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMsIHZpZXdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHRbdmlld0NvbnRleHRdLmxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMpO1xuICAgIH1cblxuICAgIHJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KSB7XG4gICAgICAgIGxldCBncmFwaCA9IHRoaXMudmlld0NvbnRleHRbdmlld0NvbnRleHRdLnJlbW92ZUxvYWRlZEdyYXBoKCk7XG4gICAgICAgIGlmIChncmFwaCAmJiBncmFwaC5jb25maWcuaXNXaW5kb3cpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IG51bGx9KTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbEdyYXBoKGlkLCBldmVudCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5zaWduYWxHcmFwaChpZCwgZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdmlld0NvbnRleHRcbiAgICAgKi9cbiAgICBnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50ID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5nZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50KCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHZpZXdDb250ZXh0XG4gICAgICovXG4gICAgZ2V0Q3VycmVudEdyYXBoID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBncmFwaHMgPSB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5ncmFwaHM7XG4gICAgICAgIHJldHVybiBncmFwaHMgJiYgZ3JhcGhzLmxlbmd0aCA+IDAgPyBncmFwaHNbZ3JhcGhzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogdmlld0NvbnRleHRcbiAgICAgKi9cbiAgICBnZXRUb3BWaWV3ID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5nZXRUb3BWaWV3KCk7XG4gICAgfTtcbn1cblxuY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBwbGljYXRpb25NYW5hZ2VyKCk7XG5PYmplY3QuZnJlZXplKGluc3RhbmNlKTtcbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxjQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxRQUFBLEdBQUFULE9BQUE7QUFBK0MsU0FBQUssd0JBQUFLLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFQLHVCQUFBLFlBQUFBLENBQUFLLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENB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
@@ -85,6 +85,15 @@ class ViewContext {
85
85
  * @param forward
86
86
  */
87
87
  _defineProperty(this, "addView", (view, path, forward) => {
88
+ // Concurrent (dashboard) context: every card view coexists. Don't evict
89
+ // the top or close siblings — just (re)register this one, clearing any
90
+ // prior view with the same id first so its stale event subscriptions
91
+ // don't linger on the bus.
92
+ if (this.concurrent) {
93
+ this.closeView(view.config.id, forward);
94
+ this.views.push(view);
95
+ return;
96
+ }
88
97
  let topView = this.getTopView();
89
98
  if (topView) {
90
99
  this.closeView(topView.config.id, forward);
@@ -112,7 +121,9 @@ class ViewContext {
112
121
  *
113
122
  */
114
123
  _defineProperty(this, "closeAllViews", () => {
115
- for (const view of this.views) {
124
+ // Snapshot: closeView splices this.views, so iterating the live array
125
+ // would skip elements and leave views (and their listeners) behind.
126
+ for (const view of [...this.views]) {
116
127
  this.closeView(view.config.id, false);
117
128
  }
118
129
  });
@@ -141,7 +152,10 @@ class ViewContext {
141
152
  if (view) {
142
153
  if (!_Utils.default.isNull(view) && !_Utils.default.isNull(view.handle.api)) {
143
154
  _Observable.default.clearEventListeners(viewId);
144
- let index = this.views.findIndex(v => v.handle.api.id === viewId);
155
+ // Match by config.id: it equals handle.api.id for regular views
156
+ // but dashboard card handles expose no api.id, so the old
157
+ // handle.api.id match never spliced them (they leaked).
158
+ let index = this.views.findIndex(v => v.config.id === viewId);
145
159
  if (index >= 0) {
146
160
  this.views.splice(index, 1);
147
161
  if (!forward) {
@@ -180,6 +194,10 @@ class ViewContext {
180
194
  this.navHistory = [];
181
195
  this.graphs = [];
182
196
  this.id = _id;
197
+ // Concurrent contexts (e.g. the dashboard) hold many views at once and
198
+ // must NOT evict the top view on add. Single-active-view contexts (main,
199
+ // window, popup) keep the default close-the-top-on-add stack semantics.
200
+ this.concurrent = false;
183
201
  }
184
202
  getTopView() {
185
203
  if (this.views.length > 0) {
@@ -238,4 +256,4 @@ class ViewContext {
238
256
  }
239
257
  }
240
258
  exports.ViewContext = ViewContext;
241
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT2JzZXJ2YWJsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0V2ZW50IiwiX0V2ZW50VHlwZSIsIl9VdGlscyIsIl9EeW5hbWljSlMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9HcmFwaCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJTWVNURU1fRVZFTlQiLCJleHBvcnRzIiwiTEVHRU5EX0FSUk9XX0lDT04iLCJWaWV3Q29udGV4dCIsImNvbnN0cnVjdG9yIiwiaWQiLCJ2aWV3SWQiLCJ0aXRsZSIsInZpZXciLCJnZXRWaWV3IiwibGVnZW5kSWNvbkFycm93IiwicmVwbGFjZSIsInByb3BzIiwic2Vjb25kYXJ5Q29sb3IiLCJ0aXRsZVZhbHVlIiwibWF0Y2giLCJURU1QTEFURV9SRUdFWCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJuYXZIaXN0b3J5RWxlbWVudCIsIm5hdkhpc3RvcnkiLCJsZWdlbmRWYWx1ZSIsImNvdW50ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJhcHBCYXJUaXRsZSIsInByb3BlcnR5IiwibmFtZSIsImV2ZW50IiwiRXZlbnQiLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJBUFBMSUNBVElPTl9DT05URVhUX0NIQU5HRSIsImdyYXBocyIsInZpZXdzIiwic3BsaWNlIiwicGF0aCIsImZvcndhcmQiLCJ0b3BWaWV3IiwiZ2V0VG9wVmlldyIsImNsb3NlVmlldyIsImNvbmZpZyIsInBhcmVudCIsImNvbnRleHRWaWV3IiwiVXRpbHMiLCJpc051bGwiLCJoYW5kbGUiLCJhcGkiLCJncmFwaElkIiwiaGlzdG9yeUVsZW1lbnQiLCJwdXNoIiwiY2xlYXJFdmVudExpc3RlbmVycyIsImluZGV4IiwiZmluZEluZGV4IiwidiIsInZpZXdJbmRleCIsImgiLCJzaWduYWxHcmFwaCIsImdyYXBoVG9TaWduYWwiLCJncmFwaCIsInNpZ25hbCIsImdldFVzZXJEZXRhaWxzIiwidXNlckRldGFpbHMiLCJyZW1vdmVMb2FkZWRHcmFwaCIsImdyYXBoVmlld3MiLCJmaWx0ZXIiLCJncmFwaFZpZXciLCJncmFwaEhpc3RvcnkiLCJncmFwaEhpc3RvcnlFbGVtZW50IiwibG9hZEdyYXBoIiwiaXNQYXJlbnQiLCJwYXJhbWV0ZXJWYWx1ZXMiLCJHcmFwaCIsInBhcnNlQ29uZmlnIiwicGFyYW1ldGVyVmFsdWUiLCJtb2RlbCIsImluaXQiXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1ZpZXdDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuL0R5bmFtaWNKUyc7XG5pbXBvcnQge1RFTVBMQVRFX1JFR0VYfSBmcm9tICcuL0R5bmFtaWNKUyc7XG5pbXBvcnQgR3JhcGggZnJvbSBcIi4vY29tcG9uZW50cy9HcmFwaFwiO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tIFwiLi9BcHBsaWNhdGlvbk1hbmFnZXJcIjtcblxuZXhwb3J0IGNvbnN0IFNZU1RFTV9FVkVOVCA9ICdTWVNURU1fRVZFTlQnO1xuZXhwb3J0IGNvbnN0IExFR0VORF9BUlJPV19JQ09OID0gYCA8aSBjbGFzcz1cXFwiZmEgZmEtYXJyb3ctcmlnaHQgZmEteHNcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBzdHlsZT0nY29sb3I6X19DT0xPUl9fJz48L2k+IGA7XG5cbmV4cG9ydCBjbGFzcyBWaWV3Q29udGV4dCB7XG4gICAgY29uc3RydWN0b3IoaWQpIHtcbiAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xuICAgICAgICB0aGlzLnByb3BzID0ge307XG4gICAgICAgIHRoaXMubmF2SGlzdG9yeSA9IFtdO1xuICAgICAgICB0aGlzLmdyYXBocyA9IFtdO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdXBkYXRlIGFwcGJhciB0aXRsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXdJZFxuICAgICAqIEBwYXJhbSB0aXRsZVxuICAgICAqL1xuICAgIHVwZGF0ZUFwcEJhclRpdGxlID0gKHZpZXdJZCwgdGl0bGUpID0+IHtcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLmdldFZpZXcodmlld0lkKTtcbiAgICAgICAgaWYgKCF2aWV3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVnZW5kSWNvbkFycm93ID0gTEVHRU5EX0FSUk9XX0lDT04ucmVwbGFjZSgnX19DT0xPUl9fJywgdGhpcy5wcm9wcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgICAgIGxldCB0aXRsZVZhbHVlID0gJyc7XG5cbiAgICAgICAgaWYodGl0bGUpIHtcbiAgICAgICAgICAgIGlmICghdGl0bGUubWF0Y2goVEVNUExBVEVfUkVHRVgpKSB7XG4gICAgICAgICAgICAgICAgdGl0bGVWYWx1ZSA9IHRpdGxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aXRsZVZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQodmlld0lkICsgJ1RpdGxlJywgdGl0bGUsIHZpZXdJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5hdkhpc3RvcnlFbGVtZW50IG9mIHRoaXMubmF2SGlzdG9yeSkge1xuICAgICAgICAgICAgaWYgKG5hdkhpc3RvcnlFbGVtZW50LnZpZXdJZCA9PT0gdmlld0lkKSB7XG4gICAgICAgICAgICAgICAgbmF2SGlzdG9yeUVsZW1lbnQudGl0bGUgPSB0aXRsZVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlZ2VuZFZhbHVlID0gJzxzcGFuPic7XG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBuYXZIaXN0b3J5RWxlbWVudCBvZiB0aGlzLm5hdkhpc3RvcnkpIHtcbiAgICAgICAgICAgIGlmICghbmF2SGlzdG9yeUVsZW1lbnQudGl0bGUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGVnZW5kVmFsdWUgKz0gYCR7bmF2SGlzdG9yeUVsZW1lbnQudGl0bGV9YDtcbiAgICAgICAgICAgIGlmIChjb3VudGVyKysgPCB0aGlzLm5hdkhpc3RvcnkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGxlZ2VuZFZhbHVlICs9IGxlZ2VuZEljb25BcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxlZ2VuZFZhbHVlICs9ICc8L3NwYW4+JztcbiAgICAgICAgdGhpcy5wcm9wcy5hcHBCYXJUaXRsZSA9IGxlZ2VuZFZhbHVlO1xuXG4gICAgICAgIGxldCBwcm9wZXJ0eSA9IHt9O1xuICAgICAgICBwcm9wZXJ0eS5uYW1lID0gJ3RpdGxlLScgKyB2aWV3SWQ7XG4gICAgICAgIHByb3BlcnR5LnZhbHVlID0gdGhpcy5wcm9wcy5hcHBCYXJUaXRsZTtcblxuICAgICAgICAvLyBXaGVuIHdlIGludHJvZHVjZSB0aGUgdmlldyBtYW5hZ2VyLCBpdCBtdXN0IGJlY29tZSB0aGUgZXZlbnQgc291cmNlIGluc3RlYWQgb2YgYXBwbGljYXRpb25NYW5hZ2VyXG4gICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIFNZU1RFTV9FVkVOVCwgcHJvcGVydHkpO1xuICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5BUFBMSUNBVElPTl9DT05URVhUX0NIQU5HRSwgZXZlbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLmdyYXBocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHt9O1xuICAgICAgICAgICAgcHJvcGVydHkubmFtZSA9ICdzdGVwcGVyVGl0bGUnO1xuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoYXBwbGljYXRpb25NYW5hZ2VyLCBTWVNURU1fRVZFTlQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLkFQUExJQ0FUSU9OX0NPTlRFWFRfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xlYXJzIGFsbCB2aWV3c1xuICAgICAqXG4gICAgICovXG4gICAgY2xlYXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlld3Muc3BsaWNlKDAsIHRoaXMudmlld3MubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogYWRkIHZpZXcgY29uZmlndXJhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIGxpc3RlbmVyIHRvIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqL1xuICAgIGFkZFZpZXcgPSAodmlldywgcGF0aCwgZm9yd2FyZCkgPT4ge1xuICAgICAgICBsZXQgdG9wVmlldyA9IHRoaXMuZ2V0VG9wVmlldygpO1xuICAgICAgICBpZiAodG9wVmlldykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVZpZXcodG9wVmlldy5jb25maWcuaWQsIGZvcndhcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZXcucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5hdkhpc3Rvcnkuc3BsaWNlKDAsIHRoaXMubmF2SGlzdG9yeS5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250ZXh0VmlldyBvZiB0aGlzLnZpZXdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29udGV4dFZpZXcpICYmICFVdGlscy5pc051bGwoY29udGV4dFZpZXcuaGFuZGxlLmFwaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVZpZXcoY29udGV4dFZpZXcuaGFuZGxlLmFwaS5pZCwgZm9yd2FyZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChmb3J3YXJkIHx8IHZpZXcucGFyZW50KSAmJiAoIXZpZXcuZ3JhcGhJZCkpIHtcbiAgICAgICAgICAgIGxldCBoaXN0b3J5RWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgaGlzdG9yeUVsZW1lbnQudmlld0lkID0gdmlldy5jb25maWcuaWQ7XG4gICAgICAgICAgICBoaXN0b3J5RWxlbWVudC5wYXJlbnQgPSB2aWV3LnBhcmVudDtcbiAgICAgICAgICAgIGhpc3RvcnlFbGVtZW50LmdyYXBoSWQgPSB2aWV3LmdyYXBoSWQ7XG4gICAgICAgICAgICBoaXN0b3J5RWxlbWVudC5wYXRoID0gcGF0aDtcblxuICAgICAgICAgICAgdGhpcy5uYXZIaXN0b3J5LnB1c2goaGlzdG9yeUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aWV3cy5wdXNoKHZpZXcpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBjbG9zZXMgdGhlIGN1cnJlbnQgdmlld1xuICAgICAqXG4gICAgICovXG4gICAgY2xvc2VBbGxWaWV3cyA9ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB2aWV3IG9mIHRoaXMudmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VWaWV3KHZpZXcuY29uZmlnLmlkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogZ2V0IGFsbCB2aWV3XG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRWaWV3cyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGdldCBhbGwgZ3JhcGhzXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRHcmFwaHMgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyYXBocztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXdJZCB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqL1xuICAgIGNsb3NlVmlldyA9ICh2aWV3SWQsIGZvcndhcmQpID0+IHtcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLmdldFZpZXcodmlld0lkKTtcbiAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXcpICYmICFVdGlscy5pc051bGwodmlldy5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckV2ZW50TGlzdGVuZXJzKHZpZXdJZCk7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy52aWV3cy5maW5kSW5kZXgoKHYpID0+IHYuaGFuZGxlLmFwaS5pZCA9PT0gdmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3J3YXJkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmlld0luZGV4ID0gdGhpcy5uYXZIaXN0b3J5LmZpbmRJbmRleCgoaCkgPT4gaC52aWV3SWQgPT09IHZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlld0luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdkhpc3Rvcnkuc3BsaWNlKHZpZXdJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZpZXcgY29uZmlndXJhdGlvbiB3aXRoIGEgcGFydGljdWxhciBpZFxuICAgICAqXG4gICAgICovXG4gICAgZ2V0VmlldyA9IChpZCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZpZXcgb2YgdGhpcy52aWV3cykge1xuICAgICAgICAgICAgaWYgKGlkID09PSB2aWV3LmNvbmZpZy5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGdldFRvcFZpZXcoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdzW3RoaXMudmlld3MubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzaWduYWxHcmFwaChpZCwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JhcGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBncmFwaFRvU2lnbmFsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JhcGggb2YgdGhpcy5ncmFwaHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09IGdyYXBoLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoVG9TaWduYWwgPSBncmFwaDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWdyYXBoVG9TaWduYWwgJiYgVXRpbHMuaXNOdWxsKGlkKSkge1xuICAgICAgICAgICAgICAgIGdyYXBoVG9TaWduYWwgPSB0aGlzLmdyYXBoc1t0aGlzLmdyYXBocy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoZ3JhcGhUb1NpZ25hbCkge1xuICAgICAgICAgICAgICAgIGdyYXBoVG9TaWduYWwuc2lnbmFsKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFVzZXJEZXRhaWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy51c2VyRGV0YWlscztcbiAgICB9XG5cbiAgICByZW1vdmVMb2FkZWRHcmFwaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JhcGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBncmFwaCA9IHRoaXMuZ3JhcGhzW3RoaXMuZ3JhcGhzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgbGV0IGdyYXBoVmlld3MgPSB0aGlzLnZpZXdzLmZpbHRlcigodmlldykgPT4gdmlldy5ncmFwaElkID09PSBncmFwaC5pZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JhcGhWaWV3IG9mIGdyYXBoVmlld3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlVmlldyhncmFwaFZpZXcuY29uZmlnLmlkLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ3JhcGhzLnNwbGljZSgwLCB0aGlzLmdyYXBocy5sZW5ndGgpO1xuICAgICAgICAgICAgbGV0IGdyYXBoSGlzdG9yeSA9IHRoaXMubmF2SGlzdG9yeS5maWx0ZXIoKHZpZXcpID0+IHZpZXcuZ3JhcGhJZCA9PT0gZ3JhcGguaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBncmFwaEhpc3RvcnlFbGVtZW50IG9mIGdyYXBoSGlzdG9yeSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2SGlzdG9yeS5zcGxpY2UodGhpcy5uYXZIaXN0b3J5LmZpbmRJbmRleCgoZSkgPT4gZSA9PT0gZ3JhcGhIaXN0b3J5RWxlbWVudCksIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZ3JhcGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkR3JhcGgoaXNQYXJlbnQsIGNvbmZpZywgcGFyYW1ldGVyVmFsdWVzKSB7XG4gICAgICAgIGlmIChpc1BhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5uYXZIaXN0b3J5LnNwbGljZSgwLCB0aGlzLm5hdkhpc3RvcnkubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udGV4dFZpZXcgb2YgdGhpcy52aWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VWaWV3KGNvbnRleHRWaWV3LmhhbmRsZS5hcGkuaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBncmFwaCA9IG5ldyBHcmFwaChVdGlscy5wYXJzZUNvbmZpZyhjb25maWcpKTtcbiAgICAgICAgdGhpcy5ncmFwaHMucHVzaChncmFwaCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXJWYWx1ZSBvZiBwYXJhbWV0ZXJWYWx1ZXMpIHtcbiAgICAgICAgICAgIGdyYXBoLm1vZGVsW3BhcmFtZXRlclZhbHVlLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBncmFwaC5pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5uYXZIaXN0b3J5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdkhpc3RvcnlbdGhpcy5uYXZIaXN0b3J5Lmxlbmd0aCAtIDJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsV0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBRUEsSUFBQU0sTUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sbUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUFzRCxTQUFBSyx3QkFBQUcsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUwsdUJBQUEsWUFBQUEsQ0FBQUcsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxnQkFBQVAsQ0FBQSxJQUFBRCxDQUFBLGdCQUFBQyxDQUFBLE9BQUFhLGNBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxJQUFBRCxDQUFBLEdBQUFVLE1BQUEsQ0FBQUMsY0FBQSxLQUFBRCxNQUFBLENBQUFFLHdCQUFBLENBQUFsQixDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxDQUFBSyxHQUFBLElBQUFMLENBQUEsQ0FBQU0sR0FBQSxJQUFBUCxDQUFBLENBQUFFLENBQUEsRUFBQVAsQ0FBQSxFQUFBTSxDQUFBLElBQUFDLENBQUEsQ0FBQVAsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsV0FBQU8sQ0FBQSxLQUFBUixDQUFBLEVBQUFDLENBQUE7QUFBQSxTQUFBVix1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxHQUFBTCxDQUFBLEtBQUFVLE9BQUEsRUFBQVYsQ0FBQTtBQUFBLFNBQUFtQixnQkFBQW5CLENBQUEsRUFBQUcsQ0FBQSxFQUFBRixDQUFBLFlBQUFFLENBQUEsR0FBQWlCLGNBQUEsQ0FBQWpCLENBQUEsTUFBQUgsQ0FBQSxHQUFBZ0IsTUFBQSxDQUFBQyxjQUFBLENBQUFqQixDQUFBLEVBQUFHLENBQUEsSUFBQWtCLEtBQUEsRUFBQXBCLENBQUEsRUFBQXFCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFVBQUF4QixDQUFBLENBQUFHLENBQUEsSUFBQUYsQ0FBQSxFQUFBRCxDQUFBO0FBQUEsU0FBQW9CLGVBQUFuQixDQUFBLFFBQUFNLENBQUEsR0FBQWtCLFlBQUEsQ0FBQXhCLENBQUEsdUNBQUFNLENBQUEsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQWtCLGFBQUF4QixDQUFBLEVBQUFFLENBQUEsMkJBQUFGLENBQUEsS0FBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFELENBQUEsR0FBQUMsQ0FBQSxDQUFBeUIsTUFBQSxDQUFBQyxXQUFBLGtCQUFBM0IsQ0FBQSxRQUFBTyxDQUFBLEdBQUFQLENBQUEsQ0FBQWUsSUFBQSxDQUFBZCxDQUFBLEVBQUFFLENBQUEsdUNBQUFJLENBQUEsU0FBQUEsQ0FBQSxZQUFBcUIsU0FBQSx5RUFBQXpCLENBQUEsR0FBQTBCLE1BQUEsR0FBQUMsTUFBQSxFQUFBN0IsQ0FBQTtBQUUvQyxNQUFNOEIsWUFBWSxHQUFBQyxPQUFBLENBQUFELFlBQUEsR0FBRyxjQUFjO0FBQ25DLE1BQU1FLGlCQUFpQixHQUFBRCxPQUFBLENBQUFDLGlCQUFBLDZGQUE2RjtBQUVwSCxNQUFNQyxXQUFXLENBQUM7RUFDckJDLFdBQVdBLENBQUNDLEdBQUUsRUFBRTtJQVFoQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMSWpCLGVBQUEsNEJBTW9CLENBQUNrQixNQUFNLEVBQUVDLEtBQUssS0FBSztNQUNuQyxJQUFJQyxJQUFJLEdBQUcsSUFBSSxDQUFDQyxPQUFPLENBQUNILE1BQU0sQ0FBQztNQUMvQixJQUFJLENBQUNFLElBQUksRUFBRTtRQUNQO01BQ0o7TUFFQSxJQUFJRSxlQUFlLEdBQUdSLGlCQUFpQixDQUFDUyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxjQUFjLENBQUM7TUFDdkYsSUFBSUMsVUFBVSxHQUFHLEVBQUU7TUFFbkIsSUFBR1AsS0FBSyxFQUFFO1FBQ04sSUFBSSxDQUFDQSxLQUFLLENBQUNRLEtBQUssQ0FBQ0MseUJBQWMsQ0FBQyxFQUFFO1VBQzlCRixVQUFVLEdBQUdQLEtBQUs7UUFDdEIsQ0FBQyxNQUFNO1VBQ0hPLFVBQVUsR0FBR0csa0JBQVMsQ0FBQ0MsYUFBYSxDQUFDWixNQUFNLEdBQUcsT0FBTyxFQUFFQyxLQUFLLEVBQUVELE1BQU0sQ0FBQztRQUN6RTtNQUNKO01BRUEsS0FBSyxNQUFNYSxpQkFBaUIsSUFBSSxJQUFJLENBQUNDLFVBQVUsRUFBRTtRQUM3QyxJQUFJRCxpQkFBaUIsQ0FBQ2IsTUFBTSxLQUFLQSxNQUFNLEVBQUU7VUFDckNhLGlCQUFpQixDQUFDWixLQUFLLEdBQUdPLFVBQVU7UUFDeEM7TUFDSjtNQUVBLElBQUlPLFdBQVcsR0FBRyxRQUFRO01BQzFCLElBQUlDLE9BQU8sR0FBRyxDQUFDO01BQ2YsS0FBSyxNQUFNSCxpQkFBaUIsSUFBSSxJQUFJLENBQUNDLFVBQVUsRUFBRTtRQUM3QyxJQUFJLENBQUNELGlCQUFpQixDQUFDWixLQUFLLEVBQUU7UUFDOUJjLFdBQVcsT0FBQUUsTUFBQSxDQUFPSixpQkFBaUIsQ0FBQ1osS0FBSyxDQUFFO1FBQzNDLElBQUllLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQ0YsVUFBVSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3hDSCxXQUFXLElBQUlYLGVBQWU7UUFDbEM7TUFDSjtNQUVBVyxXQUFXLElBQUksU0FBUztNQUN4QixJQUFJLENBQUNULEtBQUssQ0FBQ2EsV0FBVyxHQUFHSixXQUFXO01BRXBDLElBQUlLLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakJBLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHLFFBQVEsR0FBR3JCLE1BQU07TUFDakNvQixRQUFRLENBQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDc0IsS0FBSyxDQUFDYSxXQUFXOztNQUV2QztNQUNBLElBQUlHLEtBQUssR0FBRyxJQUFJQyxjQUFLLENBQUNDLDJCQUFrQixFQUFFOUIsWUFBWSxFQUFFMEIsUUFBUSxDQUFDO01BQ2pFSyxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUNDLDBCQUEwQixFQUFFTixLQUFLLENBQUM7TUFFbkUsSUFBSSxJQUFJLENBQUNPLE1BQU0sQ0FBQ1gsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QkUsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiQSxRQUFRLENBQUNDLElBQUksR0FBRyxjQUFjO1FBRTlCLElBQUlDLEtBQUssR0FBRyxJQUFJQyxjQUFLLENBQUNDLDJCQUFrQixFQUFFOUIsWUFBWSxFQUFFMEIsUUFBUSxDQUFDO1FBQ2pFSyxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUNDLDBCQUEwQixFQUFFTixLQUFLLENBQUM7TUFDdkU7SUFDSixDQUFDO0lBRUQ7QUFDSjtBQUNBO0FBQ0E7SUFISXhDLGVBQUEsZ0JBSVEsTUFBTTtNQUNWLElBQUksQ0FBQ2dELEtBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNELEtBQUssQ0FBQ1osTUFBTSxDQUFDO0lBQzNDLENBQUM7SUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQU5JcEMsZUFBQSxrQkFPVSxDQUFDb0IsSUFBSSxFQUFFOEIsSUFBSSxFQUFFQyxPQUFPLEtBQUs7TUFDL0IsSUFBSUMsT0FBTyxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUM7TUFDL0IsSUFBSUQsT0FBTyxFQUFFO1FBQ1QsSUFBSSxDQUFDRSxTQUFTLENBQUNGLE9BQU8sQ0FBQ0csTUFBTSxDQUFDdEMsRUFBRSxFQUFFa0MsT0FBTyxDQUFDO01BQzlDO01BRUEsSUFBSS9CLElBQUksQ0FBQ29DLE1BQU0sRUFBRTtRQUNiLElBQUksQ0FBQ3hCLFVBQVUsQ0FBQ2lCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDakIsVUFBVSxDQUFDSSxNQUFNLENBQUM7UUFDakQsS0FBSyxNQUFNcUIsV0FBVyxJQUFJLElBQUksQ0FBQ1QsS0FBSyxFQUFFO1VBQ2xDLElBQUksQ0FBQ1UsY0FBSyxDQUFDQyxNQUFNLENBQUNGLFdBQVcsQ0FBQyxJQUFJLENBQUNDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDRixXQUFXLENBQUNHLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDUCxTQUFTLENBQUNHLFdBQVcsQ0FBQ0csTUFBTSxDQUFDQyxHQUFHLENBQUM1QyxFQUFFLEVBQUVrQyxPQUFPLENBQUM7VUFDdEQ7UUFDSjtNQUNKO01BRUEsSUFBSSxDQUFDQSxPQUFPLElBQUkvQixJQUFJLENBQUNvQyxNQUFNLEtBQU0sQ0FBQ3BDLElBQUksQ0FBQzBDLE9BQVEsRUFBRTtRQUM3QyxJQUFJQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCQSxjQUFjLENBQUM3QyxNQUFNLEdBQUdFLElBQUksQ0FBQ21DLE1BQU0sQ0FBQ3RDLEVBQUU7UUFDdEM4QyxjQUFjLENBQUNQLE1BQU0sR0FBR3BDLElBQUksQ0FBQ29DLE1BQU07UUFDbkNPLGNBQWMsQ0FBQ0QsT0FBTyxHQUFHMUMsSUFBSSxDQUFDMEMsT0FBTztRQUNyQ0MsY0FBYyxDQUFDYixJQUFJLEdBQUdBLElBQUk7UUFFMUIsSUFBSSxDQUFDbEIsVUFBVSxDQUFDZ0MsSUFBSSxDQUFDRCxjQUFjLENBQUM7TUFDeEM7TUFFQSxJQUFJLENBQUNmLEtBQUssQ0FBQ2dCLElBQUksQ0FBQzVDLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQ7QUFDSjtBQUNBO0FBQ0E7SUFISXBCLGVBQUEsd0JBSWdCLE1BQU07TUFDbEIsS0FBSyxNQUFNb0IsSUFBSSxJQUFJLElBQUksQ0FBQzRCLEtBQUssRUFBRTtRQUMzQixJQUFJLENBQUNNLFNBQVMsQ0FBQ2xDLElBQUksQ0FBQ21DLE1BQU0sQ0FBQ3RDLEVBQUUsRUFBRSxLQUFLLENBQUM7TUFDekM7SUFDSixDQUFDO0lBRUQ7QUFDSjtBQUNBO0FBQ0E7SUFISWpCLGVBQUEsbUJBSVcsTUFBTTtNQUNiLE9BQU8sSUFBSSxDQUFDZ0QsS0FBSztJQUNyQixDQUFDO0lBRUQ7QUFDSjtBQUNBO0FBQ0E7SUFISWhELGVBQUEsb0JBSVksTUFBTTtNQUNkLE9BQU8sSUFBSSxDQUFDK0MsTUFBTTtJQUN0QixDQUFDO0lBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTEkvQyxlQUFBLG9CQU1ZLENBQUNrQixNQUFNLEVBQUVpQyxPQUFPLEtBQUs7TUFDN0IsSUFBSS9CLElBQUksR0FBRyxJQUFJLENBQUNDLE9BQU8sQ0FBQ0gsTUFBTSxDQUFDO01BQy9CLElBQUlFLElBQUksRUFBRTtRQUNOLElBQUksQ0FBQ3NDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQ3NDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdkMsSUFBSSxDQUFDd0MsTUFBTSxDQUFDQyxHQUFHLENBQUMsRUFBRTtVQUN2RGxCLG1CQUFZLENBQUNzQixtQkFBbUIsQ0FBQy9DLE1BQU0sQ0FBQztVQUN4QyxJQUFJZ0QsS0FBSyxHQUFHLElBQUksQ0FBQ2xCLEtBQUssQ0FBQ21CLFNBQVMsQ0FBRUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNSLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDNUMsRUFBRSxLQUFLQyxNQUFNLENBQUM7VUFDbkUsSUFBSWdELEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUNsQixLQUFLLENBQUNDLE1BQU0sQ0FBQ2lCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFM0IsSUFBSSxDQUFDZixPQUFPLEVBQUU7Y0FDVixJQUFJa0IsU0FBUyxHQUFHLElBQUksQ0FBQ3JDLFVBQVUsQ0FBQ21DLFNBQVMsQ0FBRUcsQ0FBQyxJQUFLQSxDQUFDLENBQUNwRCxNQUFNLEtBQUtBLE1BQU0sQ0FBQztjQUNyRSxJQUFJbUQsU0FBUyxJQUFJLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDckMsVUFBVSxDQUFDaUIsTUFBTSxDQUFDb0IsU0FBUyxFQUFFLENBQUMsQ0FBQztjQUN4QztZQUNKO1VBQ0o7UUFDSjtNQUNKO0lBQ0osQ0FBQztJQUVEO0FBQ0o7QUFDQTtBQUNBO0lBSElyRSxlQUFBLGtCQUlXaUIsRUFBRSxJQUFLO01BQ2QsS0FBSyxNQUFNRyxJQUFJLElBQUksSUFBSSxDQUFDNEIsS0FBSyxFQUFFO1FBQzNCLElBQUkvQixFQUFFLEtBQUtHLElBQUksQ0FBQ21DLE1BQU0sQ0FBQ3RDLEVBQUUsRUFBRTtVQUN2QixPQUFPRyxJQUFJO1FBQ2Y7TUFDSjtNQUVBLE9BQU8sSUFBSTtJQUNmLENBQUM7SUF1RUQ7QUFDSjtBQUNBO0lBRklwQixlQUFBLG9DQUc0QixNQUFNO01BQzlCLElBQUksSUFBSSxDQUFDZ0MsVUFBVSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDSixVQUFVLENBQUMsSUFBSSxDQUFDQSxVQUFVLENBQUNJLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDdEQ7TUFFQSxPQUFPLElBQUk7SUFDZixDQUFDO0lBN1BHLElBQUksQ0FBQ1ksS0FBSyxHQUFHLEVBQUU7SUFDZixJQUFJLENBQUN4QixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxDQUFDUSxVQUFVLEdBQUcsRUFBRTtJQUNwQixJQUFJLENBQUNlLE1BQU0sR0FBRyxFQUFFO0lBQ2hCLElBQUksQ0FBQzlCLEVBQUUsR0FBR0EsR0FBRTtFQUNoQjtFQTBLQW9DLFVBQVVBLENBQUEsRUFBRztJQUNULElBQUksSUFBSSxDQUFDTCxLQUFLLENBQUNaLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDdkIsT0FBTyxJQUFJLENBQUNZLEtBQUssQ0FBQyxJQUFJLENBQUNBLEtBQUssQ0FBQ1osTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1QztJQUVBLE9BQU8sSUFBSTtFQUNmO0VBRUFtQyxXQUFXQSxDQUFDdEQsRUFBRSxFQUFFdUIsS0FBSyxFQUFFO0lBQ25CLElBQUksSUFBSSxDQUFDTyxNQUFNLENBQUNYLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEIsSUFBSW9DLGFBQWEsR0FBRyxJQUFJO01BQ3hCLEtBQUssTUFBTUMsS0FBSyxJQUFJLElBQUksQ0FBQzFCLE1BQU0sRUFBRTtRQUM3QixJQUFJOUIsRUFBRSxLQUFLd0QsS0FBSyxDQUFDeEQsRUFBRSxFQUFFO1VBQ2pCdUQsYUFBYSxHQUFHQyxLQUFLO1VBQ3JCO1FBQ0o7TUFDSjtNQUVBLElBQUksQ0FBQ0QsYUFBYSxJQUFJZCxjQUFLLENBQUNDLE1BQU0sQ0FBQzFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDdUQsYUFBYSxHQUFHLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUNBLE1BQU0sQ0FBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUN2RDtNQUVBLElBQUdvQyxhQUFhLEVBQUU7UUFDZEEsYUFBYSxDQUFDRSxNQUFNLENBQUNsQyxLQUFLLENBQUM7TUFDL0I7SUFDSjtFQUNKO0VBRUFtQyxjQUFjQSxDQUFBLEVBQUc7SUFDYixPQUFPLElBQUksQ0FBQ25ELEtBQUssQ0FBQ29ELFdBQVc7RUFDakM7RUFFQUMsaUJBQWlCQSxDQUFBLEVBQUc7SUFDaEIsSUFBSSxJQUFJLENBQUM5QixNQUFNLENBQUNYLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEIsSUFBSXFDLEtBQUssR0FBRyxJQUFJLENBQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUNYLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDL0MsSUFBSTBDLFVBQVUsR0FBRyxJQUFJLENBQUM5QixLQUFLLENBQUMrQixNQUFNLENBQUUzRCxJQUFJLElBQUtBLElBQUksQ0FBQzBDLE9BQU8sS0FBS1csS0FBSyxDQUFDeEQsRUFBRSxDQUFDO01BRXZFLEtBQUssTUFBTStELFNBQVMsSUFBSUYsVUFBVSxFQUFFO1FBQ2hDLElBQUksQ0FBQ3hCLFNBQVMsQ0FBQzBCLFNBQVMsQ0FBQ3pCLE1BQU0sQ0FBQ3RDLEVBQUUsRUFBRSxLQUFLLENBQUM7TUFDOUM7TUFFQSxJQUFJLENBQUM4QixNQUFNLENBQUNFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDRixNQUFNLENBQUNYLE1BQU0sQ0FBQztNQUN6QyxJQUFJNkMsWUFBWSxHQUFHLElBQUksQ0FBQ2pELFVBQVUsQ0FBQytDLE1BQU0sQ0FBRTNELElBQUksSUFBS0EsSUFBSSxDQUFDMEMsT0FBTyxLQUFLVyxLQUFLLENBQUN4RCxFQUFFLENBQUM7TUFDOUUsS0FBSyxNQUFNaUUsbUJBQW1CLElBQUlELFlBQVksRUFBRTtRQUM1QyxJQUFJLENBQUNqRCxVQUFVLENBQUNpQixNQUFNLENBQUMsSUFBSSxDQUFDakIsVUFBVSxDQUFDbUMsU0FBUyxDQUFFdEYsQ0FBQyxJQUFLQSxDQUFDLEtBQUtxRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMxRjtNQUVBLE9BQU9ULEtBQUs7SUFDaEI7RUFDSjtFQUVBVSxTQUFTQSxDQUFDQyxRQUFRLEVBQUU3QixNQUFNLEVBQUU4QixlQUFlLEVBQUU7SUFDekMsSUFBSUQsUUFBUSxFQUFFO01BQ1YsSUFBSSxDQUFDcEQsVUFBVSxDQUFDaUIsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNqQixVQUFVLENBQUNJLE1BQU0sQ0FBQztNQUNqRCxLQUFLLE1BQU1xQixXQUFXLElBQUksSUFBSSxDQUFDVCxLQUFLLEVBQUU7UUFDbEMsSUFBSSxDQUFDTSxTQUFTLENBQUNHLFdBQVcsQ0FBQ0csTUFBTSxDQUFDQyxHQUFHLENBQUM1QyxFQUFFLEVBQUUsS0FBSyxDQUFDO01BQ3BEO0lBQ0o7SUFFQSxJQUFJd0QsS0FBSyxHQUFHLElBQUlhLGNBQUssQ0FBQzVCLGNBQUssQ0FBQzZCLFdBQVcsQ0FBQ2hDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQ1IsTUFBTSxDQUFDaUIsSUFBSSxDQUFDUyxLQUFLLENBQUM7SUFFdkIsS0FBSyxNQUFNZSxjQUFjLElBQUlILGVBQWUsRUFBRTtNQUMxQ1osS0FBSyxDQUFDZ0IsS0FBSyxDQUFDRCxjQUFjLENBQUNqRCxJQUFJLENBQUMsR0FBR2lELGNBQWMsQ0FBQ3RGLEtBQUs7SUFDM0Q7SUFFQXVFLEtBQUssQ0FBQ2lCLElBQUksQ0FBQyxDQUFDO0VBQ2hCO0FBWUo7QUFBQzdFLE9BQUEsQ0FBQUUsV0FBQSxHQUFBQSxXQUFBIiwiaWdub3JlTGlzdCI6W119
259
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT2JzZXJ2YWJsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0V2ZW50IiwiX0V2ZW50VHlwZSIsIl9VdGlscyIsIl9EeW5hbWljSlMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9HcmFwaCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJTWVNURU1fRVZFTlQiLCJleHBvcnRzIiwiTEVHRU5EX0FSUk9XX0lDT04iLCJWaWV3Q29udGV4dCIsImNvbnN0cnVjdG9yIiwiaWQiLCJ2aWV3SWQiLCJ0aXRsZSIsInZpZXciLCJnZXRWaWV3IiwibGVnZW5kSWNvbkFycm93IiwicmVwbGFjZSIsInByb3BzIiwic2Vjb25kYXJ5Q29sb3IiLCJ0aXRsZVZhbHVlIiwibWF0Y2giLCJURU1QTEFURV9SRUdFWCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJuYXZIaXN0b3J5RWxlbWVudCIsIm5hdkhpc3RvcnkiLCJsZWdlbmRWYWx1ZSIsImNvdW50ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJhcHBCYXJUaXRsZSIsInByb3BlcnR5IiwibmFtZSIsImV2ZW50IiwiRXZlbnQiLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJBUFBMSUNBVElPTl9DT05URVhUX0NIQU5HRSIsImdyYXBocyIsInZpZXdzIiwic3BsaWNlIiwicGF0aCIsImZvcndhcmQiLCJjb25jdXJyZW50IiwiY2xvc2VWaWV3IiwiY29uZmlnIiwicHVzaCIsInRvcFZpZXciLCJnZXRUb3BWaWV3IiwicGFyZW50IiwiY29udGV4dFZpZXciLCJVdGlscyIsImlzTnVsbCIsImhhbmRsZSIsImFwaSIsImdyYXBoSWQiLCJoaXN0b3J5RWxlbWVudCIsImNsZWFyRXZlbnRMaXN0ZW5lcnMiLCJpbmRleCIsImZpbmRJbmRleCIsInYiLCJ2aWV3SW5kZXgiLCJoIiwic2lnbmFsR3JhcGgiLCJncmFwaFRvU2lnbmFsIiwiZ3JhcGgiLCJzaWduYWwiLCJnZXRVc2VyRGV0YWlscyIsInVzZXJEZXRhaWxzIiwicmVtb3ZlTG9hZGVkR3JhcGgiLCJncmFwaFZpZXdzIiwiZmlsdGVyIiwiZ3JhcGhWaWV3IiwiZ3JhcGhIaXN0b3J5IiwiZ3JhcGhIaXN0b3J5RWxlbWVudCIsImxvYWRHcmFwaCIsImlzUGFyZW50IiwicGFyYW1ldGVyVmFsdWVzIiwiR3JhcGgiLCJwYXJzZUNvbmZpZyIsInBhcmFtZXRlclZhbHVlIiwibW9kZWwiLCJpbml0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9WaWV3Q29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgRXZlbnQgZnJvbSAnLi9ldmVudC9FdmVudCc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4vZXZlbnQvRXZlbnRUeXBlJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcbmltcG9ydCBkeW5hbWljSlMgZnJvbSAnLi9EeW5hbWljSlMnO1xuaW1wb3J0IHtURU1QTEFURV9SRUdFWH0gZnJvbSAnLi9EeW5hbWljSlMnO1xuaW1wb3J0IEdyYXBoIGZyb20gXCIuL2NvbXBvbmVudHMvR3JhcGhcIjtcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSBcIi4vQXBwbGljYXRpb25NYW5hZ2VyXCI7XG5cbmV4cG9ydCBjb25zdCBTWVNURU1fRVZFTlQgPSAnU1lTVEVNX0VWRU5UJztcbmV4cG9ydCBjb25zdCBMRUdFTkRfQVJST1dfSUNPTiA9IGAgPGkgY2xhc3M9XFxcImZhIGZhLWFycm93LXJpZ2h0IGZhLXhzXFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCIgc3R5bGU9J2NvbG9yOl9fQ09MT1JfXyc+PC9pPiBgO1xuXG5leHBvcnQgY2xhc3MgVmlld0NvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKGlkKSB7XG4gICAgICAgIHRoaXMudmlld3MgPSBbXTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IHt9O1xuICAgICAgICB0aGlzLm5hdkhpc3RvcnkgPSBbXTtcbiAgICAgICAgdGhpcy5ncmFwaHMgPSBbXTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICAvLyBDb25jdXJyZW50IGNvbnRleHRzIChlLmcuIHRoZSBkYXNoYm9hcmQpIGhvbGQgbWFueSB2aWV3cyBhdCBvbmNlIGFuZFxuICAgICAgICAvLyBtdXN0IE5PVCBldmljdCB0aGUgdG9wIHZpZXcgb24gYWRkLiBTaW5nbGUtYWN0aXZlLXZpZXcgY29udGV4dHMgKG1haW4sXG4gICAgICAgIC8vIHdpbmRvdywgcG9wdXApIGtlZXAgdGhlIGRlZmF1bHQgY2xvc2UtdGhlLXRvcC1vbi1hZGQgc3RhY2sgc2VtYW50aWNzLlxuICAgICAgICB0aGlzLmNvbmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgYXBwYmFyIHRpdGxlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlld0lkXG4gICAgICogQHBhcmFtIHRpdGxlXG4gICAgICovXG4gICAgdXBkYXRlQXBwQmFyVGl0bGUgPSAodmlld0lkLCB0aXRsZSkgPT4ge1xuICAgICAgICBsZXQgdmlldyA9IHRoaXMuZ2V0Vmlldyh2aWV3SWQpO1xuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZWdlbmRJY29uQXJyb3cgPSBMRUdFTkRfQVJST1dfSUNPTi5yZXBsYWNlKCdfX0NPTE9SX18nLCB0aGlzLnByb3BzLnNlY29uZGFyeUNvbG9yKTtcbiAgICAgICAgbGV0IHRpdGxlVmFsdWUgPSAnJztcblxuICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgaWYgKCF0aXRsZS5tYXRjaChURU1QTEFURV9SRUdFWCkpIHtcbiAgICAgICAgICAgICAgICB0aXRsZVZhbHVlID0gdGl0bGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRpdGxlVmFsdWUgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdCh2aWV3SWQgKyAnVGl0bGUnLCB0aXRsZSwgdmlld0lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmF2SGlzdG9yeUVsZW1lbnQgb2YgdGhpcy5uYXZIaXN0b3J5KSB7XG4gICAgICAgICAgICBpZiAobmF2SGlzdG9yeUVsZW1lbnQudmlld0lkID09PSB2aWV3SWQpIHtcbiAgICAgICAgICAgICAgICBuYXZIaXN0b3J5RWxlbWVudC50aXRsZSA9IHRpdGxlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVnZW5kVmFsdWUgPSAnPHNwYW4+JztcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IG5hdkhpc3RvcnlFbGVtZW50IG9mIHRoaXMubmF2SGlzdG9yeSkge1xuICAgICAgICAgICAgaWYgKCFuYXZIaXN0b3J5RWxlbWVudC50aXRsZSkgY29udGludWU7XG4gICAgICAgICAgICBsZWdlbmRWYWx1ZSArPSBgJHtuYXZIaXN0b3J5RWxlbWVudC50aXRsZX1gO1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA8IHRoaXMubmF2SGlzdG9yeS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbGVnZW5kVmFsdWUgKz0gbGVnZW5kSWNvbkFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGVnZW5kVmFsdWUgKz0gJzwvc3Bhbj4nO1xuICAgICAgICB0aGlzLnByb3BzLmFwcEJhclRpdGxlID0gbGVnZW5kVmFsdWU7XG5cbiAgICAgICAgbGV0IHByb3BlcnR5ID0ge307XG4gICAgICAgIHByb3BlcnR5Lm5hbWUgPSAndGl0bGUtJyArIHZpZXdJZDtcbiAgICAgICAgcHJvcGVydHkudmFsdWUgPSB0aGlzLnByb3BzLmFwcEJhclRpdGxlO1xuXG4gICAgICAgIC8vIFdoZW4gd2UgaW50cm9kdWNlIHRoZSB2aWV3IG1hbmFnZXIsIGl0IG11c3QgYmVjb21lIHRoZSBldmVudCBzb3VyY2UgaW5zdGVhZCBvZiBhcHBsaWNhdGlvbk1hbmFnZXJcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgU1lTVEVNX0VWRU5ULCBwcm9wZXJ0eSk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLkFQUExJQ0FUSU9OX0NPTlRFWFRfQ0hBTkdFLCBldmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JhcGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0ge307XG4gICAgICAgICAgICBwcm9wZXJ0eS5uYW1lID0gJ3N0ZXBwZXJUaXRsZSc7XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIFNZU1RFTV9FVkVOVCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQVBQTElDQVRJT05fQ09OVEVYVF9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBjbGVhcnMgYWxsIHZpZXdzXG4gICAgICpcbiAgICAgKi9cbiAgICBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy52aWV3cy5zcGxpY2UoMCwgdGhpcy52aWV3cy5sZW5ndGgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBhZGQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlldyB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gcGF0aFxuICAgICAqIEBwYXJhbSBmb3J3YXJkXG4gICAgICovXG4gICAgYWRkVmlldyA9ICh2aWV3LCBwYXRoLCBmb3J3YXJkKSA9PiB7XG4gICAgICAgIC8vIENvbmN1cnJlbnQgKGRhc2hib2FyZCkgY29udGV4dDogZXZlcnkgY2FyZCB2aWV3IGNvZXhpc3RzLiBEb24ndCBldmljdFxuICAgICAgICAvLyB0aGUgdG9wIG9yIGNsb3NlIHNpYmxpbmdzIOKAlCBqdXN0IChyZSlyZWdpc3RlciB0aGlzIG9uZSwgY2xlYXJpbmcgYW55XG4gICAgICAgIC8vIHByaW9yIHZpZXcgd2l0aCB0aGUgc2FtZSBpZCBmaXJzdCBzbyBpdHMgc3RhbGUgZXZlbnQgc3Vic2NyaXB0aW9uc1xuICAgICAgICAvLyBkb24ndCBsaW5nZXIgb24gdGhlIGJ1cy5cbiAgICAgICAgaWYgKHRoaXMuY29uY3VycmVudCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVZpZXcodmlldy5jb25maWcuaWQsIGZvcndhcmQpO1xuICAgICAgICAgICAgdGhpcy52aWV3cy5wdXNoKHZpZXcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRvcFZpZXcgPSB0aGlzLmdldFRvcFZpZXcoKTtcbiAgICAgICAgaWYgKHRvcFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VWaWV3KHRvcFZpZXcuY29uZmlnLmlkLCBmb3J3YXJkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aWV3LnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5uYXZIaXN0b3J5LnNwbGljZSgwLCB0aGlzLm5hdkhpc3RvcnkubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udGV4dFZpZXcgb2YgdGhpcy52aWV3cykge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNvbnRleHRWaWV3KSAmJiAhVXRpbHMuaXNOdWxsKGNvbnRleHRWaWV3LmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VWaWV3KGNvbnRleHRWaWV3LmhhbmRsZS5hcGkuaWQsIGZvcndhcmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoZm9yd2FyZCB8fCB2aWV3LnBhcmVudCkgJiYgKCF2aWV3LmdyYXBoSWQpKSB7XG4gICAgICAgICAgICBsZXQgaGlzdG9yeUVsZW1lbnQgPSB7fTtcbiAgICAgICAgICAgIGhpc3RvcnlFbGVtZW50LnZpZXdJZCA9IHZpZXcuY29uZmlnLmlkO1xuICAgICAgICAgICAgaGlzdG9yeUVsZW1lbnQucGFyZW50ID0gdmlldy5wYXJlbnQ7XG4gICAgICAgICAgICBoaXN0b3J5RWxlbWVudC5ncmFwaElkID0gdmlldy5ncmFwaElkO1xuICAgICAgICAgICAgaGlzdG9yeUVsZW1lbnQucGF0aCA9IHBhdGg7XG5cbiAgICAgICAgICAgIHRoaXMubmF2SGlzdG9yeS5wdXNoKGhpc3RvcnlFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlld3MucHVzaCh2aWV3KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIHRoZSBjdXJyZW50IHZpZXdcbiAgICAgKlxuICAgICAqL1xuICAgIGNsb3NlQWxsVmlld3MgPSAoKSA9PiB7XG4gICAgICAgIC8vIFNuYXBzaG90OiBjbG9zZVZpZXcgc3BsaWNlcyB0aGlzLnZpZXdzLCBzbyBpdGVyYXRpbmcgdGhlIGxpdmUgYXJyYXlcbiAgICAgICAgLy8gd291bGQgc2tpcCBlbGVtZW50cyBhbmQgbGVhdmUgdmlld3MgKGFuZCB0aGVpciBsaXN0ZW5lcnMpIGJlaGluZC5cbiAgICAgICAgZm9yIChjb25zdCB2aWV3IG9mIFsuLi50aGlzLnZpZXdzXSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVZpZXcodmlldy5jb25maWcuaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBnZXQgYWxsIHZpZXdcbiAgICAgKlxuICAgICAqL1xuICAgIGdldFZpZXdzID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3cztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogZ2V0IGFsbCBncmFwaHNcbiAgICAgKlxuICAgICAqL1xuICAgIGdldEdyYXBocyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGhzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBjbG9zZXMgdGhlIHNwZWNpZmllZCB2aWV3XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlld0lkIHRoZSBsaXN0ZW5lciB0byBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBmb3J3YXJkXG4gICAgICovXG4gICAgY2xvc2VWaWV3ID0gKHZpZXdJZCwgZm9yd2FyZCkgPT4ge1xuICAgICAgICBsZXQgdmlldyA9IHRoaXMuZ2V0Vmlldyh2aWV3SWQpO1xuICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlldykgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmNsZWFyRXZlbnRMaXN0ZW5lcnModmlld0lkKTtcbiAgICAgICAgICAgICAgICAvLyBNYXRjaCBieSBjb25maWcuaWQ6IGl0IGVxdWFscyBoYW5kbGUuYXBpLmlkIGZvciByZWd1bGFyIHZpZXdzXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRhc2hib2FyZCBjYXJkIGhhbmRsZXMgZXhwb3NlIG5vIGFwaS5pZCwgc28gdGhlIG9sZFxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZS5hcGkuaWQgbWF0Y2ggbmV2ZXIgc3BsaWNlZCB0aGVtICh0aGV5IGxlYWtlZCkuXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy52aWV3cy5maW5kSW5kZXgoKHYpID0+IHYuY29uZmlnLmlkID09PSB2aWV3SWQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3Muc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcndhcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aWV3SW5kZXggPSB0aGlzLm5hdkhpc3RvcnkuZmluZEluZGV4KChoKSA9PiBoLnZpZXdJZCA9PT0gdmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2SGlzdG9yeS5zcGxpY2Uodmlld0luZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRWaWV3ID0gKGlkKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnZpZXdzKSB7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHZpZXcuY29uZmlnLmlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZ2V0VG9wVmlldygpIHtcbiAgICAgICAgaWYgKHRoaXMudmlld3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld3NbdGhpcy52aWV3cy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNpZ25hbEdyYXBoKGlkLCBldmVudCkge1xuICAgICAgICBpZiAodGhpcy5ncmFwaHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGdyYXBoVG9TaWduYWwgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChjb25zdCBncmFwaCBvZiB0aGlzLmdyYXBocykge1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZ3JhcGguaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGhUb1NpZ25hbCA9IGdyYXBoO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JhcGhUb1NpZ25hbCAmJiBVdGlscy5pc051bGwoaWQpKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhUb1NpZ25hbCA9IHRoaXMuZ3JhcGhzW3RoaXMuZ3JhcGhzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihncmFwaFRvU2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhUb1NpZ25hbC5zaWduYWwoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnVzZXJEZXRhaWxzO1xuICAgIH1cblxuICAgIHJlbW92ZUxvYWRlZEdyYXBoKCkge1xuICAgICAgICBpZiAodGhpcy5ncmFwaHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGdyYXBoID0gdGhpcy5ncmFwaHNbdGhpcy5ncmFwaHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBsZXQgZ3JhcGhWaWV3cyA9IHRoaXMudmlld3MuZmlsdGVyKCh2aWV3KSA9PiB2aWV3LmdyYXBoSWQgPT09IGdyYXBoLmlkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBncmFwaFZpZXcgb2YgZ3JhcGhWaWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VWaWV3KGdyYXBoVmlldy5jb25maWcuaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncmFwaHMuc3BsaWNlKDAsIHRoaXMuZ3JhcGhzLmxlbmd0aCk7XG4gICAgICAgICAgICBsZXQgZ3JhcGhIaXN0b3J5ID0gdGhpcy5uYXZIaXN0b3J5LmZpbHRlcigodmlldykgPT4gdmlldy5ncmFwaElkID09PSBncmFwaC5pZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyYXBoSGlzdG9yeUVsZW1lbnQgb2YgZ3JhcGhIaXN0b3J5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZIaXN0b3J5LnNwbGljZSh0aGlzLm5hdkhpc3RvcnkuZmluZEluZGV4KChlKSA9PiBlID09PSBncmFwaEhpc3RvcnlFbGVtZW50KSwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBncmFwaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMpIHtcbiAgICAgICAgaWYgKGlzUGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5hdkhpc3Rvcnkuc3BsaWNlKDAsIHRoaXMubmF2SGlzdG9yeS5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250ZXh0VmlldyBvZiB0aGlzLnZpZXdzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVZpZXcoY29udGV4dFZpZXcuaGFuZGxlLmFwaS5pZCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdyYXBoID0gbmV3IEdyYXBoKFV0aWxzLnBhcnNlQ29uZmlnKGNvbmZpZykpO1xuICAgICAgICB0aGlzLmdyYXBocy5wdXNoKGdyYXBoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlclZhbHVlIG9mIHBhcmFtZXRlclZhbHVlcykge1xuICAgICAgICAgICAgZ3JhcGgubW9kZWxbcGFyYW1ldGVyVmFsdWUubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdyYXBoLmluaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIGdldFByZXZpb3VzSGlzdG9yeUVsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm5hdkhpc3RvcnkubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF2SGlzdG9yeVt0aGlzLm5hdkhpc3RvcnkubGVuZ3RoIC0gMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFFQSxJQUFBTSxNQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxtQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQXNELFNBQUFLLHdCQUFBRyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTCx1QkFBQSxZQUFBQSxD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