@sapui5/sap.fe.base 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -575,7 +575,13 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
575
575
  }
576
576
  const fnApplySettings = targetControl.applySettings;
577
577
  targetControl.applySettings = function (mSettings, scope) {
578
- delete mSettings?.models?.$componentState;
578
+ if (mSettings?.models?.$componentState) {
579
+ // We cannot remove the model directly from mSettings.models as this object is shared with the original object when cloning
580
+ mSettings.models = {
581
+ ...mSettings.models
582
+ };
583
+ delete mSettings.models.$componentState;
584
+ }
579
585
  return fnApplySettings.call(this, mSettings, scope);
580
586
  };
581
587
  }
@@ -819,4 +825,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
819
825
  }
820
826
  return _exports;
821
827
  }, false);
822
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwiaXNBcnJheSIsImNvbmNhdCIsInJlZ2lzdGVyVUk1TWV0YWRhdGEiLCJtaXhpbiIsImludGVyZmFjZUNsYXNzIiwiYmFzZUN0b3IiLCJleHRlbmQiLCJpbnRlcmZhY2VQcm90b1R5cGVUb01peCIsIl9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzZXR1cE1peGluIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsImJhc2VDbGFzc01ldGFkYXRhIiwiaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUiLCJnZXRJbnRlcmZhY2VOYW1lIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJuYW1lIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkiLCJqc29uTW9kZWwiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJvT2JqIiwiZGVlcENsb25lIiwiZ2V0T2JqZWN0Iiwib1RhcmdldCIsIm1vZGVsIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJyZWYiLCJSZWZsZWN0IiwiYmluZCIsImlzTmFOIiwiTnVtYmVyIiwiX19iaW5kaW5nSW5mbyIsInBhdGgiLCJib3VuZFByb3BlcnRpZXMiLCJTeW1ib2wiLCJjcmVhdGVTdGF0ZVByb3h5Iiwic3RhdGVQcm9wZXJ0eU5hbWUiLCJib3VuZFRvU3RhdGVQcm9wcyIsImluaXRpYWxEYXRhIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJzdGF0ZU1vZGVsIiwiZ2V0TW9kZWwiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsImdldFBhcmFtZXRlciIsInN1YnN0cmluZyIsImluY2x1ZGVzIiwic2V0UHJvcGVydHkiLCJfX3N0YXRlQ3JlYXRlZCIsInByb3h5Iiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwia25vd25Cb3VuZFByb3BlcnRpZXMiLCJfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSIsInNldFJlc3VsdCIsIl91cGRhdGVTdGF0ZURlYm91bmNlZCIsImNvbmZpZ3VyYWJsZSIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwidXBkYXRpbmdTdGF0ZSIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJfdXBkYXRlU3RhdGUiLCJfdXBkYXRlU3RhdGVUaW1lciIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiX19zdGF0ZU5hbWUiLCJmbkFwcGx5U2V0dGluZ3MiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwic2NvcGUiLCJtb2RlbHMiLCIkY29tcG9uZW50U3RhdGUiLCJjYWxsIiwiZm5TZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJvVmFsdWUiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiY2xhenoiLCJpbk9iaiIsIm9iak5hbWUiLCJiYXNlVHlwZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwicmVzdWx0IiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlLCBwcm9wYWdhdGVIb29rRnJvbU1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxudHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGJpbmRhYmxlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdGlzQmluZGluZ0luZm8/OiBib29sZWFuO1xuXHRiaW5kVG9TdGF0ZT86IGJvb2xlYW47XG5cdGV4cGVjdGVkQW5ub3RhdGlvbnM/OiBzdHJpbmdbXTtcblx0ZXhwZWN0ZWRUeXBlcz86IHN0cmluZ1tdO1xuXHRhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1QWdncmVnYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRhbHRUeXBlcz86IHN0cmluZ1tdO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdGRlZmF1bHRDbGFzcz86IHVua25vd247XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0dmlzaWJpbGl0eT86IHN0cmluZztcblx0Zm9yd2FyZGluZz86IG9iamVjdDtcbn07XG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0c3RhdGVQcm9wZXJ0eT86IHN0cmluZztcblx0c3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0cmV0dXJuVHlwZXM/OiBzdHJpbmdbXTtcblx0YnVpbGRpbmdCbG9ja01ldGFkYXRhPzogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NvckRlc2NyaXB0b3I8VD4gPSBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiAmIHsgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUIH07XG50eXBlIFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZT86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0b3ZlcnJpZGVzPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2xEZWZpbml0aW9uID0ge1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdG92ZXJyaWRlPzogdW5rbm93bjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcblx0X19hcGlSZWdpc3RlcmVkOiBib29sZWFuO1xufSAmIHtcblx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgWE1MRXZlbnRIb2xkZXIgPSB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcbn07XG5cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdC8vIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBUUyBjb21waWxlclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxULCBLIGV4dGVuZHMga2V5b2YgVCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4gPSBQYXJ0aWFsPFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+PiAmXG5cdChLIGV4dGVuZHMga2V5b2YgVCA/IFBhcnRpYWw8UGljazxULCBLPj4gOiB7fSkgJlxuXHQkQ29udHJvbFNldHRpbmdzO1xuZXhwb3J0IHR5cGUgQ29udmVydENvbnRleHRUb1N0cmluZzxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IEsgZXh0ZW5kcyBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgPyBzdHJpbmcgOiBUW0tdO1xufTtcbnR5cGUgQ29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIENvbnRleHQgfCB1bmRlZmluZWQgPyBzdHJpbmcgfCB1bmRlZmluZWQgOiBUW0tdO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mQnVpbGRpbmdCbG9jazxUPiA9IENvbnRleHRUb1N0cmluZzxQcm9wZXJ0aWVzT2Y8VD4+O1xuZXhwb3J0IHR5cGUgU3RyaWN0UHJvcGVydGllc09mPFQ+ID0gUGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj47XG5leHBvcnQgdHlwZSBVSTVBY2Nlc3NvcnM8VD4gPSB7XG5cdC8vIEFkZCBhbGwgdGhlIGdldFhYWCBtZXRob2QsIG1pZ2h0IGFkZCB0b28gbXVjaCBhcyBJJ20gbm90IGZpbHRlcmluZyBvbiBhY3R1YWwgcHJvcGVydGllcy4uLlxuXHRbUCBpbiBrZXlvZiBSZXF1aXJlZDxUPiBhcyBgZ2V0JHtDYXBpdGFsaXplPHN0cmluZyAmIFA+fWBdOiAoKSA9PiBUW1BdO1xufTtcbmV4cG9ydCB0eXBlIFVJNVNldHRlcnM8VD4gPSB7XG5cdC8vIEFkZCBhbGwgdGhlIHNldFhYWCBtZXRob2QsIG1pZ2h0IGFkZCB0b28gbXVjaCBhcyBJJ20gbm90IGZpbHRlcmluZyBvbiBhY3R1YWwgcHJvcGVydGllcy4uLlxuXHRbUCBpbiBrZXlvZiBSZXF1aXJlZDxUPiBhcyBgc2V0JHtDYXBpdGFsaXplPHN0cmluZyAmIFA+fWBdOiAodmFsdWU6IFRbUF0pID0+IFQ7XG59O1xuZXhwb3J0IHR5cGUgRW5oYW5jZVdpdGhVSTU8VD4gPSB7XG5cdG5ldyAocHJvcHM6IFByb3BlcnRpZXNPZjxUPik6IEVuaGFuY2VXaXRoVUk1PFQ+O1xuXHRuZXcgKHNJZDogc3RyaW5nLCBwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG59ICYgVCAmXG5cdFVJNUFjY2Vzc29yczxUPiAmXG5cdFVJNVNldHRlcnM8VD47XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uID0gXCJJbnN0ZWFkXCIgfCBcIkJlZm9yZVwiIHwgXCJBZnRlclwiIHwgXCJBZnRlckFzeW5jXCIgfCBcIkJlZm9yZUFzeW5jXCI7XG5cbmNvbnN0IGVuc3VyZU1ldGFkYXRhID0gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24ge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRyZWZlcmVuY2VzOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge30sXG5cdFx0XHRpbnRlcmZhY2VzOiBbXVxuXHRcdH0sXG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID8/IHt9XG5cdCkgYXMgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRoYXQgd2lsbCBmaW5kIHRoZSBjb3JyZWN0IEFQSSBvYmplY3QgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udHJvbCBoaWVyYXJjaHkuXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcmV0dXJucyBUaGUgcHJvcGVyIGdldEFQSSBmdW5jdGlvbiBmb3IgdGhpcyBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0OiBVSTVBUElDb250cm9sKSB7XG5cdHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFVJNUFQSUNvbnRyb2w+KFxuXHRcdHRoaXM6IFVJNUFQSUNvbnRyb2wsXG5cdFx0b0V2ZW50OiBVSTVFdmVudCxcblx0XHRhcGlGUU46IHN0cmluZyA9IHRhcmdldC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKVxuXHQpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1NvdXJjZSA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRpZiAodGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24pIHtcblx0XHRcdG9Tb3VyY2UgPSB0YXJnZXQuX2dldEFQSUV4dGVuc2lvbihvU291cmNlKSA/PyBvU291cmNlO1xuXHRcdH1cblx0XHR3aGlsZSAob1NvdXJjZSAmJiAhb1NvdXJjZS5pc0E8VD4oYXBpRlFOKSAmJiBvU291cmNlLmdldFBhcmVudCkge1xuXHRcdFx0aWYgKHRoaXMuaXNEZXBlbmRlbnRCb3VuZCkge1xuXHRcdFx0XHRjb25zdCBvRGVwZW5kZW50cyA9IChvU291cmNlIGFzIENvbnRyb2wpLmdldERlcGVuZGVudHMoKTtcblx0XHRcdFx0Y29uc3QgaGFzQ29ycmVjdERlcGVuZGVudCA9IG9EZXBlbmRlbnRzLmZpbmQoKG9EZXBlbmRlbnQ6IFVJNUVsZW1lbnQpID0+IG9EZXBlbmRlbnQuaXNBKGFwaUZRTikpO1xuXHRcdFx0XHRpZiAoaGFzQ29ycmVjdERlcGVuZGVudCkge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBoYXNDb3JyZWN0RGVwZW5kZW50IGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghb1NvdXJjZSB8fCAhb1NvdXJjZS5pc0E8VD4oYXBpRlFOKSkge1xuXHRcdFx0Y29uc3Qgb1NvdXJjZU1hcCA9IHRoaXMuaW5zdGFuY2VNYXAuZ2V0KHRoaXMpIGFzIFRbXTtcblx0XHRcdG9Tb3VyY2UgPSBvU291cmNlTWFwPy5bb1NvdXJjZU1hcC5sZW5ndGggLSAxXTtcblx0XHR9XG5cdFx0bGV0IHRhcmdldENvbnRyb2w7XG5cdFx0aWYgKG9Tb3VyY2UgJiYgb1NvdXJjZS5pc0E8VD4oYXBpRlFOKSkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbCA9IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXRDb250cm9sO1xuXHR9O1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB3aGVuIGFuIHhtbEV2ZW50SGFuZGxlciBpcyBkZWZpbmVkLCB0aGUgYGdldEFQSWAgZnVuY3Rpb24gaXMgcHJvcGVybHkgYXNzaWduZWQuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IHNob3VsZCBob2xkIHRoZSBzdGF0aWMgZnVuY3Rpb25zXG4gKi9cbmNvbnN0IGVuc3VyZUdldEFQSSA9IGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUFQSUNvbnRyb2wpOiB2b2lkIHtcblx0aWYgKCF0YXJnZXQuX19hcGlSZWdpc3RlcmVkKSB7XG5cdFx0dGFyZ2V0Ll9fYXBpUmVnaXN0ZXJlZCA9IHRydWU7XG5cdFx0dGFyZ2V0Lmluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBvYmplY3RbXT4oKTtcblx0XHR0YXJnZXQucmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uIChfaW5zdGFuY2U6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0XHRpZiAoIXRoaXMuaW5zdGFuY2VNYXAuZ2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvcikpIHtcblx0XHRcdFx0dGhpcy5pbnN0YW5jZU1hcC5zZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yLCBbXSk7XG5cdFx0XHR9XG5cdFx0XHQodGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSBhcyBvYmplY3RbXSkucHVzaChfaW5zdGFuY2UpO1xuXHRcdH07XG5cdFx0dGFyZ2V0LmdldEFQSSA9IHByZXBhcmVHZXRBUElGdW5jdGlvbih0YXJnZXQpO1xuXHR9XG59O1xuXG50eXBlIEV4dGVuZFdpdGhPYmplY3Q8VCwgSz4gPSBUIGV4dGVuZHMgb2JqZWN0ID8gSyAmIHsgW1RLZXkgaW4ga2V5b2YgVF0/OiBCaW5kaW5nSW5mb0hvbGRlcjxUW1RLZXldPiB9IDogSztcblxuZXhwb3J0IHR5cGUgU3RhdGVPZjxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBBcnJheTxpbmZlciBVPiB8IFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBFeHRlbmRXaXRoT2JqZWN0PFUsIFJlYWRvbmx5QXJyYXk8VT4+IDogVFtLXTtcbn07XG5leHBvcnQgdHlwZSBCaW5kaW5nSW5mb0hvbGRlcjxUPiA9IFQgJiB7XG5cdF9fYmluZGluZ0luZm86IHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdFx0bW9kZWw6IHN0cmluZztcblx0XHR0eXBlOiBUO1xuXHR9O1xufTtcblxuLyoqXG4gKiBBbGxvd3MgdG8gZGVmaW5lIGEgcHJvcGVydHkgdGhhdCB3aWxsIGhvbGQgdGhlIGNvbnRyb2wgc3RhdGUuXG4gKlxuICogUHJvcGVydGllcyBkZWZpbmVkIHdpdGggdGhpcyBkZWNvcmF0b3Igd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGJvdW5kIHRvIHRoZSBjb250cm9sIHN0YXRlIHdoZW4gdXNlZCBpbiBKU1guXG4gKiBBcnJheXMgbmVlZCB0byBiZSBib3VuZCB1c2luZyB0aGUgYGJpbmRTdGF0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHByb3BlcnR5IGRlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU3RhdGUoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKG1ldGFkYXRhLnN0YXRlUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT25seSBvbmUgc3RhdGUgcHJvcGVydHkgcGVyIGNvbnRyb2wgaXMgYWxsb3dlZFwiKTtcblx0XHR9XG5cdFx0bWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSA9IHByb3BlcnR5S2V5O1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0bWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKiAjcmVnaW9uIENPTlRST0xMRVIgRVhURU5TSU9OUyAqL1xuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBpcyBhbiBvdmVycmlkZSBmb3IgdGhlIG1ldGhvZCBuYW1lIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUgc3BlY2lmaWMgY29udHJvbGxlciBleHRlbnNpb24gb3IgYmFzZSBpbXBsZW1lbnRhdGlvbi5cbiAqIEBwYXJhbSBleHRlbnNpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdGhhdCB3aWxsIGJlIG92ZXJyaWRkZW5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRob2RPdmVycmlkZShleHRlbnNpb25OYW1lPzogc3RyaW5nKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSkge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGVzKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGVzID0ge307XG5cdFx0fVxuXHRcdGxldCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0Lm92ZXJyaWRlcztcblx0XHRpZiAoZXh0ZW5zaW9uTmFtZSkge1xuXHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbikge1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbiA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXSkge1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdO1xuXHRcdH1cblx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4pW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldO1xuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbiBiZSBleHRlbmRlZCBieSBvdGhlciBjb250cm9sbGVyIGV4dGVuc2lvbiBiYXNlZCBvbiB0aGUgZGVmaW5lZCBvdmVycmlkZUV4ZWN1dGlvblR5cGUuXG4gKiBAcGFyYW0gb3ZlcnJpZGVFeGVjdXRpb24gVGhlIE92ZXJyaWRlRXhlY3V0aW9uIGRlZmluaW5nIHdoZW4gdGhlIG92ZXJyaWRlIHNob3VsZCBydW4gKEJlZm9yZSAvIEFmdGVyIC8gSW5zdGVhZClcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbnNpYmxlKG92ZXJyaWRlRXhlY3V0aW9uOiBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbik6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5vdmVycmlkZUV4ZWN1dGlvbiA9IG92ZXJyaWRlRXhlY3V0aW9uIGFzIHVua25vd24gYXMgT3ZlcnJpZGVFeGVjdXRpb247XG5cblx0XHQvLyBieSBkZWZhdWx0LCBldmVyeSBleHRlbnNpYmxlIG1ldGhvZCBpcyBhbHNvIGhvb2thYmxlIChleGNlcHQgdGhvc2UgZGVmaW5lZCBhcyBJbnN0ZWFkKVxuXHRcdGlmIChvdmVycmlkZUV4ZWN1dGlvbiAhPT0gXCJJbnN0ZWFkXCIpIHtcblx0XHRcdGhvb2thYmxlKG92ZXJyaWRlRXhlY3V0aW9uKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTtcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2Qgd2lsbCBiZSBwdWJsaWNseSBhdmFpbGFibGUgZm9yIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHVzYWdlLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0V4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gdHJ1ZTtcblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2Qgd2lsbCBiZSBvbmx5IGF2YWlsYWJsZSBmb3IgaW50ZXJuYWwgdXNhZ2Ugb2YgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaXZhdGVFeHRlbnNpb24oKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1YmxpYyA9IGZhbHNlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCBjYW5ub3QgYmUgZnVydGhlciBleHRlbmRlZCBieSBvdGhlciBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbEV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0uZmluYWwgPSB0cnVlO1xuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gdXNlIGluc3RhbnRpYXRlIGEgY29udHJvbGxlciBleHRlbnNpb24gdW5kZXIgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBuYW1lLlxuICogQHBhcmFtIGV4dGVuc2lvbkNsYXNzIFRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogdHlwZW9mIENvbnRyb2xsZXJFeHRlbnNpb24gfCBGdW5jdGlvbik6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXHRcdG1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBJIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIENPTlRST0wgKi9cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIGV2ZW50IG9uIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIGV2ZW50S2V5OiBzdHJpbmcgfCBTeW1ib2wpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvbiBUaGUgcHJvcGVydHkgZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5KGF0dHJpYnV0ZURlZmluaXRpb246IFVJNVByb3BlcnR5TWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKGF0dHJpYnV0ZURlZmluaXRpb24uaXNCaW5kaW5nSW5mbyA9PT0gdHJ1ZSkge1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9IGZhbHNlO1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5ncm91cCA9IFwiRGF0YVwiO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IGF0dHJpYnV0ZURlZmluaXRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0aWYgKCFhdHRyaWJ1dGVEZWZpbml0aW9uLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpKSB7XG5cdFx0XHQvLyBOb3QgZXhwbGljaXRlbHkgZGVmaW5lZFxuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHR9XG5cblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgZm9sbG93aW5nIGFnZ3JlZ2F0aW9uIGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiBUaGUgYWdncmVnYXRpb24gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjogVUk1QWdncmVnYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24ubXVsdGlwbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gVUk1IGRlZmF1bHRzIHRoaXMgdG8gdHJ1ZSBidXQgdGhpcyBpcyBqdXN0IHdlaXJkLi4uXG5cdFx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24ubXVsdGlwbGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gYWdncmVnYXRpb25EZWZpbml0aW9uO1xuXHRcdH1cblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLmlzRGVmYXVsdCkge1xuXHRcdFx0bWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uID0gcHJvcGVydHlLZXk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0YWdncmVnYXRpb25EZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBJIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYXNzb2NpYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gdWk1QXNzb2NpYXRpb25NZXRhZGF0YSBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgYXNzb2NpYXRpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NvY2lhdGlvbih1aTVBc3NvY2lhdGlvbk1ldGFkYXRhOiBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gdWk1QXNzb2NpYXRpb25NZXRhZGF0YTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qKlxuICogRGVmaW5lcyBpbiB0aGUgbWV0YWRhdGEgdGhhdCB0aGlzIGNvbnRyb2wgaW1wbGVtZW50cyBhIHNwZWNpZmljIGludGVyZmFjZS5cbiAqIEBwYXJhbSBpbnRlcmZhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBpbXBsZW1lbnRlZCBpbnRlcmZhY2VcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbXBsZW1lbnRJbnRlcmZhY2UoaW50ZXJmYWNlTmFtZTogc3RyaW5nKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cblx0XHRtZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdH07XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBtZXRob2Qgc2hvdWxkIGFsc28gYmUgZXhwb3NlZCBzdGF0aWNhbGx5IHNvIHdlIGNhbiBjYWxsIGl0IGZyb20gWE1MLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50SGFuZGxlcigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5a2V5KSB7XG5cdFx0Y29uc3QgY3VycmVudENvbnN0cnVjdG9yOiBVSTVBUElDb250cm9sID0gdGFyZ2V0LmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgVUk1QVBJQ29udHJvbDtcblx0XHRlbnN1cmVHZXRBUEkoY3VycmVudENvbnN0cnVjdG9yKTtcblx0XHRjdXJyZW50Q29uc3RydWN0b3JbcHJvcGVydHlrZXkudG9TdHJpbmcoKV0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0XHRpZiAoYXJncz8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50Q29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0Py5bcHJvcGVydHlrZXkudG9TdHJpbmcoKV0oLi4uYXJncyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcbn1cblxudHlwZSBVSTVDb250cm9sQW5kTW9yZSA9IHR5cGVvZiBDb250cm9sICZcblx0RnVuY3Rpb24gJiB7XG5cdFx0cmVnaXN0ZXJJbnN0YW5jZT86IEZ1bmN0aW9uO1xuXHRcdG92ZXJyaWRlPzogRnVuY3Rpb247XG5cdFx0cmVuZGVyZXI/OiB1bmtub3duO1xuXHRcdHJlbmRlcjogRnVuY3Rpb247XG5cdFx0bWV0YWRhdGE/OiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHR9O1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgY2xhc3Mgc2hvdWxkIGRlZmluZSBhIFVJNSBjb250cm9sIG9mIHRoZSBzcGVjaWZpZWQgbmFtZS5cbiAqIEBwYXJhbSBzVGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgVUk1IGNsYXNzXG4gKiBAcGFyYW0gbWV0YWRhdGFEZWZpbml0aW9uIElubGluZSBtZXRhZGF0YSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBBIGNsYXNzIGRlY29yYXRvciB0aGF0IHdpbGwgY3JlYXRlIGEgdWk1IGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVVSTVDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIG1ldGFkYXRhRGVmaW5pdGlvbj86IFBhcnRpYWw8VUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbj4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoY29uc3RydWN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRpZiAobWV0YWRhdGFEZWZpbml0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdFx0aWYgKGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYTogdW5rbm93bltdKSA9PiBUO1xuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXG5cdFx0bGV0IGludGVyZmFjZVByb3RvVHlwZVRvTWl4ID0gaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlO1xuXHRcdHdoaWxlIChpbnRlcmZhY2VQcm90b1R5cGVUb01peCkge1xuXHRcdFx0YmFzZUN0b3IgPSBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKGJhc2VDdG9yLCBtZXRhZGF0YSwgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdFx0aW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdH1cblx0XHRwcm9wYWdhdGVIb29rRnJvbU1peGluKGJhc2VDdG9yLCBpbnRlcmZhY2VDbGFzcyk7XG5cblx0XHQvLyBIb29rIHRvIGFkZCBwb3RlbnRpYWxseSBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpblxuXHRcdGludGVyZmFjZUNsYXNzLnByb3RvdHlwZS5zZXR1cE1peGluPy4oYmFzZUN0b3IpO1xuXHRcdHJldHVybiBiYXNlQ3Rvcjtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVjZWl2aW5nIGNvbnRyb2wuXG5cdCAqIElmIG5vdCBkZWZpbmVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFkZGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2VOYW1lPygpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gYWRkIG1vcmUgbG9naWMgdG8gdGhlIG1peGluLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIHRoZSBiYXNlIGNsYXNzLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBiYXNlIGNsYXNzIHRoYXQgd2lsbCBiZSBleHRlbmRlZFxuXHQgKi9cblx0c2V0dXBNaXhpbj8oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2U8VCBleHRlbmRzIFVJNUVsZW1lbnQ+KCk6IFJlZjxUPiB7XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcblx0XHRzZXRDdXJyZW50OiBmdW5jdGlvbiAob0NvbnRyb2xJbnN0YW5jZTogVCk6IHZvaWQge1xuXHRcdFx0dGhpcy5jdXJyZW50ID0gb0NvbnRyb2xJbnN0YW5jZTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG9iamVjdCB3aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIHRocm91Z2gganN4IHRlbXBsYXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuZnVuY3Rpb24gX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyhcblx0YmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRiYXNlQ2xhc3NNZXRhZGF0YTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbixcblx0aW50ZXJmYWNlQ2xhc3NQcm90b3R5cGU6IEZ1bmN0aW9uW1wicHJvdG90eXBlXCJdXG4pOiBVSTVDb250cm9sQW5kTW9yZSB7XG5cdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZT8uZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdGlmIChpbnRlcmZhY2VOYW1lKSB7XG5cdFx0YmFzZUNsYXNzTWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9XG5cblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAobmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIG5hbWUgIT09IFwic2V0dXBNaXhpblwiICYmIG5hbWUgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0aWYgKCFiYXNlQ3Rvci5wcm90b3R5cGVbbmFtZV0pIHtcblx0XHRcdFx0Ly8gVGhlIGJhc2UgY2xhc3MgXCJ3aW5zXCIgb3ZlciB0aGUgbWl4aW5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUsIG5hbWUpIHx8IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0gbWVyZ2UoYmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhLCBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZS5tZXRhZGF0YSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJhc2VDdG9yO1xufVxuXG5mdW5jdGlvbiBfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkoanNvbk1vZGVsOiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24ge1xuXHRjb25zdCBwYXRoSW5Nb2RlbCA9IGAvJHtwcm9wLnRvU3RyaW5nKCl9YDtcblx0Y29uc3Qgb09iaiA9IGRlZXBDbG9uZShqc29uTW9kZWwuZ2V0T2JqZWN0KHBhdGhJbk1vZGVsKSk7XG5cdGxldCBvVGFyZ2V0O1xuXHRpZiAocHJvcCA9PT0gXCJfX2JpbmRpbmdJbmZvXCIpIHtcblx0XHRyZXR1cm4geyBtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIiB9O1xuXHR9XG5cdGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSBvT2JqO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvT2JqKSkge1xuXHRcdG9UYXJnZXQgPSBuZXcgUHJveHkob09iaiwge1xuXHRcdFx0Z2V0KHRhcmdldDogdW5rbm93bltdLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgcmVmID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmLmJpbmQodGFyZ2V0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWYgPT09IHVuZGVmaW5lZCAmJiBpc05hTihOdW1iZXIocC50b1N0cmluZygpKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X19iaW5kaW5nSW5mbzoge1xuXHRcdFx0XHRcdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdFx0XHRcdFx0cGF0aDogcFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlZjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0ID0geyAuLi5vT2JqIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0b1RhcmdldC5fX2JpbmRpbmdJbmZvID0ge1xuXHRcdFx0bW9kZWw6IFwiJGNvbXBvbmVudFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBwYXRoSW5Nb2RlbFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9UYXJnZXQ7XG59XG5jb25zdCBib3VuZFByb3BlcnRpZXMgPSBTeW1ib2woXCJib3VuZFByb3BlcnRpZXNcIik7XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlUHJveHkoXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0W2JvdW5kUHJvcGVydGllc106IHN0cmluZ1tdO1xuXHRcdF9fc3RhdGVDcmVhdGVkOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZTogRnVuY3Rpb247XG5cdFx0X3VwZGF0ZVN0YXRlRGVib3VuY2VkOiBGdW5jdGlvbjtcblx0XHRfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZTogYm9vbGVhbjtcblx0XHRfdXBkYXRlU3RhdGVUaW1lcjogdW5rbm93bjtcblx0XHRfY2hhbmdlZFByb3BzPzogc3RyaW5nW107XG5cdH0sXG5cdHN0YXRlUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSxcblx0aW5pdGlhbERhdGE/OiBvYmplY3Rcbik6IEpTT05Nb2RlbCB7XG5cdC8vIExhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIHByb3BlcnR5XG5cdHRhcmdldENvbnRyb2wuc2V0TW9kZWwobmV3IEpTT05Nb2RlbChpbml0aWFsRGF0YSksIFwiJGNvbXBvbmVudFN0YXRlXCIpO1xuXHRjb25zdCBzdGF0ZU1vZGVsID0gdGFyZ2V0Q29udHJvbC5nZXRNb2RlbChcIiRjb21wb25lbnRTdGF0ZVwiKSBhcyBKU09OTW9kZWw7XG5cdHN0YXRlTW9kZWwuYXR0YWNoUHJvcGVydHlDaGFuZ2UoKGV2dDogTW9kZWwkUHJvcGVydHlDaGFuZ2VFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldnQuZ2V0UGFyYW1ldGVyKFwicGF0aFwiKT8uc3Vic3RyaW5nKDEpOyAvLyB0byByZW1vdmUgdGhlIGZpcnN0IC9cblx0XHRpZiAocGF0aCAmJiBib3VuZFRvU3RhdGVQcm9wcy5pbmNsdWRlcyhwYXRoKSkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eShwYXRoLCBldnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikpO1xuXHRcdH1cblx0fSk7XG5cdHRhcmdldENvbnRyb2wuX19zdGF0ZUNyZWF0ZWQgPSB0cnVlO1xuXHRjb25zdCBwcm94eSA9IG5ldyBQcm94eShzdGF0ZU1vZGVsLCB7XG5cdFx0Z2V0OiAodGFyZ2V0OiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24gPT4ge1xuXHRcdFx0cmV0dXJuIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuXHRcdH0sXG5cdFx0c2V0OiAoc2V0U3RhdGVNb2RlbDogSlNPTk1vZGVsLCBwcm9wLCB2YWx1ZSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Ly8gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtub3duIGJvdW5kIHByb3BlcnR5IGluIGFueSBvZiB0aGUgcmVsYXRlZCBjbGFzc2VzXG5cdFx0XHRjb25zdCBrbm93bkJvdW5kUHJvcGVydGllcyA9IHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXTtcblx0XHRcdGlmIChrbm93bkJvdW5kUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHByb3AudG9TdHJpbmcoKSwgdmFsdWUpO1xuXHRcdFx0XHR0YXJnZXRDb250cm9sLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0fVxuXHR9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3h5O1xuXHRcdH0sXG5cdFx0c2V0KHZhbHVlKSB7XG5cdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRzdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvYCwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVN0YXRlUHJvcGVydHkoXG5cdG9iajogVUk1Q29udHJvbERlZmluaXRpb24sXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0W2JvdW5kUHJvcGVydGllc106IHN0cmluZ1tdO1xuXHRcdF9fc3RhdGVDcmVhdGVkOiBib29sZWFuO1xuXHRcdF9fc3RhdGVOYW1lOiBzdHJpbmc7XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fVxuKTogdm9pZCB7XG5cdGlmIChvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkgfHwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdKSB7XG5cdFx0bGV0IHVwZGF0aW5nU3RhdGUgPSBmYWxzZTtcblx0XHRjb25zdCBib3VuZFRvU3RhdGVQcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBvYmoubWV0YWRhdGE/LnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVmID0gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChwcm9wZXJ0eURlZi5iaW5kVG9TdGF0ZSkge1xuXHRcdFx0XHRib3VuZFRvU3RhdGVQcm9wcy5wdXNoKHByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGFzIHdlIG1heSBoYXZlIGJvdW5kIHByb3BlcnRpZXMgaW4gcGFyZW50IGNsYXNzZXMgYW5kIHN1YmNsYXNzZXMsIHdlIGtlZXAgdHJhY2sgb2YgdGhvc2UgaW4gdGhlIG1vZGVsIGl0c2VsZlxuXHRcdHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSA/Pz0gW107XG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID0gWy4uLnRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSwgLi4uYm91bmRUb1N0YXRlUHJvcHNdO1xuXG5cdFx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSkge1xuXHRcdFx0Ly8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIHN0YXRlIHRvIGJlIGFwcGxpZWQgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIGFwcGxpZWQgaW4gdGVzdHNcblx0XHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fdXBkYXRlU3RhdGVUaW1lcjtcblx0XHRcdFx0aWYgKCF1cGRhdGluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXQgKHRoaXMgYXMgeyBvblN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfSkub25TdGF0ZUNoYW5nZT8uKHRoaXMuX2NoYW5nZWRQcm9wcyk7XG5cdFx0XHRcdFx0dGhpcy5fY2hhbmdlZFByb3BzID0gW107XG5cdFx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQgPSBmdW5jdGlvbiAoY2hhbmdlZFByb3A6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPz89IFtdO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2NoYW5nZWRQcm9wcy5pbmNsdWRlcyhjaGFuZ2VkUHJvcCkpIHtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMucHVzaChjaGFuZ2VkUHJvcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLl91cGRhdGVTdGF0ZVRpbWVyICYmICF1cGRhdGluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGUoKTtcblx0XHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhdGVQcm9wZXJ0eU5hbWUgPSBvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eTtcblx0XHRcdHRhcmdldENvbnRyb2wuX19zdGF0ZUNyZWF0ZWQgPSBmYWxzZTtcblx0XHRcdHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUgPSBzdGF0ZVByb3BlcnR5TmFtZTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQ6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSkge1xuXHRcdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZm5BcHBseVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbC5hcHBseVNldHRpbmdzO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5hcHBseVNldHRpbmdzID0gZnVuY3Rpb24gKFxuXHRcdFx0XHRtU2V0dGluZ3M6IHsgbW9kZWxzPzogUmVjb3JkPHN0cmluZywgbmV2ZXI+IH0sXG5cdFx0XHRcdHNjb3BlPzogb2JqZWN0IHwgdW5kZWZpbmVkXG5cdFx0XHQpOiB0eXBlb2YgdGFyZ2V0Q29udHJvbCB7XG5cdFx0XHRcdGRlbGV0ZSBtU2V0dGluZ3M/Lm1vZGVscz8uJGNvbXBvbmVudFN0YXRlO1xuXHRcdFx0XHRyZXR1cm4gZm5BcHBseVNldHRpbmdzLmNhbGwodGhpcywgbVNldHRpbmdzLCBzY29wZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eTtcblx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoc1Byb3BlcnR5TmFtZTogc3RyaW5nLCBvVmFsdWU6IHVua25vd24sIGJTdXBwcmVzc0ludmFsaWRhdGUpOiB0eXBlb2YgdGFyZ2V0Q29udHJvbCB7XG5cdFx0XHRcdGlmICh0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10uaW5jbHVkZXMoc1Byb3BlcnR5TmFtZSkgJiYgIXRoaXMuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMuX19zdGF0ZUNyZWF0ZWQpIHtcblx0XHRcdFx0XHRcdGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgdGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0TW9kZWwoXCIkY29tcG9uZW50U3RhdGVcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShgLyR7c1Byb3BlcnR5TmFtZX1gLCBvVmFsdWUpO1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlRGVib3VuY2VkKHNQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmblNldFByb3BlcnR5LmNhbGwodGhpcywgc1Byb3BlcnR5TmFtZSwgb1ZhbHVlLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaGVhdnkgbGlmdGluZyB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIHRoZSBjbGFzcyBwcm9wZXJ0eSBmb3IgdWk1IHRvIHVzZS5cbiAqIEBwYXJhbSBjbGF6eiBUaGUgY2xhc3MgcHJvdG90eXBlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlXG4gKiBAcGFyYW0gaW5PYmogVGhlIG1ldGFkYXRhIG9iamVjdFxuICogQHJldHVybnMgVGhlIG1ldGFkYXRhIGNsYXNzXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyVUk1TWV0YWRhdGEoY2xheno6IFVJNUNvbnRyb2xBbmRNb3JlLCBuYW1lOiBzdHJpbmcsIGluT2JqOiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogRnVuY3Rpb24ge1xuXHRpZiAoY2xhenouZ2V0TWV0YWRhdGE/LigpLmlzQShcInNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uXCIpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5PYmopLmZvckVhY2goKG9iak5hbWUpID0+IHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGluT2JqLCBvYmpOYW1lKTtcblx0XHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcblx0XHRcdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRvYmoubWV0YWRhdGEgPSBpbk9iai5tZXRhZGF0YSB8fCB7fTtcblx0b2JqLm92ZXJyaWRlID0gaW5PYmoub3ZlcnJpZGU7XG5cdG9iai5jb25zdHJ1Y3RvciA9IGNsYXp6O1xuXHRvYmoubWV0YWRhdGEuYmFzZVR5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhenoucHJvdG90eXBlKS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblxuXHRpZiAoKGNsYXp6Py5nZXRNZXRhZGF0YSgpIGFzIHVua25vd24gYXMgeyBnZXRTdGVyZW90eXBlOiBGdW5jdGlvbiB9KT8uZ2V0U3RlcmVvdHlwZSgpID09PSBcImNvbnRyb2xcIikge1xuXHRcdGNvbnN0IHJlbmRlcmVyRGVmaW5pdGlvbiA9IGluT2JqLnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcjtcblx0XHRvYmoucmVuZGVyZXIgPSB7IGFwaVZlcnNpb246IDIgfTtcblx0XHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRvYmoucmVuZGVyZXIucmVuZGVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH0gZWxzZSBpZiAocmVuZGVyZXJEZWZpbml0aW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXHRvYmoubWV0YWRhdGEuaW50ZXJmYWNlcyA9IGluT2JqLm1ldGFkYXRhPy5pbnRlcmZhY2VzIHx8IGNsYXp6Lm1ldGFkYXRhPy5pbnRlcmZhY2VzO1xuXHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqW2tleV0gPSBjbGF6ei5wcm90b3R5cGVba2V5XTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRjb25zdCBvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqKSBhcyB0eXBlb2YgQ29udHJvbCAmIEZ1bmN0aW9uO1xuXHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdGNvbnN0IGZuQWZ0ZXJJbml0ID0gb3V0cHV0LnByb3RvdHlwZS5hZnRlckluaXQ7XG5cdG91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRpZiAoZm5Jbml0KSB7XG5cdFx0XHRmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHRcdGlmIChjbGF6ei5yZWdpc3Rlckluc3RhbmNlKSB7XG5cdFx0XHRjbGF6ei5yZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuXHRcdH1cblx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0aWYgKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBhUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpO1xuXHRcdFx0YVByb3BlcnR5S2V5cy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eURlZiA9IG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0Ly8gSWYgYSB2YWx1ZSB3YXMgc2V0IGluIGBpbml0YCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBzZXQgaW4gdGhlIHZhbHVlIGluIHRoZSBlbmRcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWZhdWx0ID0gdGhpc1twcm9wZXJ0eUtleV0gPz8gcHJvcGVydHlEZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRpZiAocHJvcGVydHlEZWYuaXNCaW5kaW5nSW5mbyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzID8/PSB7fTtcblxuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHR0aGlzLm1Qcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHY7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldCgpOiB1bmtub3duIHtcblx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHByb3BlcnR5IGZpcnN0IGFuZCBub3QganVzdCB0aGUgX2JpbmRpbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdC8vIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgd2l0aCBhIG5vbiBiaW5kaW5nIHZhbHVlLCBzZXRQcm9wZXJ0eSBpcyBjYWxsZWQgYW5kIG5vdCBiaW5kUHJvcGVydHlcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUHJvcGVydHlWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSB3ZSB1cGRhdGUgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUgIT09IGJpbmRpbmdQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wVmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcFZhbHVlIH07IC8vIENyZWF0ZSBzaGFsbG93IGNvcHlcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcFZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9wZXJ0eURlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiB0aGlzW3Byb3BlcnR5S2V5XSAhPT0gcHJvcGVydHlEZWZhdWx0KSB7XG5cdFx0XHRcdFx0Ly8gZG9uJ3Qgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGl0J3MgYWxyZWFkeSB0aGVyZVxuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbcHJvcGVydHlLZXldID0gcHJvcGVydHlEZWZhdWx0O1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQWdncmVnYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9ucyk7XG5cdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goKGFnZ3JlZ2F0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmID0gb2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV07XG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXNbYWdncmVnYXRpb25LZXldID8/IGFnZ3JlZ2F0aW9uRGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFnZ3JlZ2F0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiAoZGVmYXVsdFZhbHVlIGFzIFVJNUVsZW1lbnQpPy5pc0EpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA9IGRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnMpO1xuXHRcdFx0YUFzc29jaWF0aW9uS2V5cy5mb3JFYWNoKChhc3NvY2lhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYXNzb2NpYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEucmVmZXJlbmNlcykge1xuXHRcdFx0Y29uc3QgcmVmZXJlbmNlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKTtcblx0XHRcdHJlZmVyZW5jZVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiBjcmVhdGVSZWZlcmVuY2UoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdGZvciAoY29uc3QgbWV0aG9kTmFtZSBpbiBvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0XHRjb25zdCBtZXRob2REZWZpbml0aW9uID0gb2JqLm1ldGFkYXRhLm1ldGhvZHNbbWV0aG9kTmFtZV07XG5cdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkFmdGVyQXN5bmNcIiB8fCBtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMubWV0aG9kSG9sZGVyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlciA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXSA9IFt0aGlzW21ldGhvZE5hbWVdXTtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbWV0aG9kTmFtZSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogRnVuY3Rpb24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdLnB1c2godik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3luYyAoLi4ubWV0aG9kQXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0aG9kQXJyYXlzID0gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0aG9kQXJyYXlzLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRfY3JlYXRlU3RhdGVQcm9wZXJ0eShvYmosIHRoaXMpO1xuXHRcdGlmIChmbkFmdGVySW5pdCkge1xuXHRcdFx0Zm5BZnRlckluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHR9O1xuXG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24gKG9FeHRlbnNpb246IHVua25vd24pOiBGdW5jdGlvbiB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBGdW5jdGlvbikuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuXHRcdFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb0NsYXNzID0gKE1ldGFkYXRhIGFzIHVua25vd24gYXMgeyBjcmVhdGVDbGFzczogRnVuY3Rpb24gfSkuY3JlYXRlQ2xhc3MoXG5cdFx0XHRjbGF6eixcblx0XHRcdGBhbm9ueW1vdXNFeHRlbnNpb25+JHt1aWQoKX1gLFxuXHRcdFx0cG9sLFxuXHRcdFx0Q29udHJvbGxlck1ldGFkYXRhXG5cdFx0KTtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fc3RhdGljT3ZlcnJpZGUgPSBvRXh0ZW5zaW9uO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9vdmVycmlkZSA9IChjbGF6ei5nZXRNZXRhZGF0YSgpIGFzIHsgX292ZXJyaWRlPzogdW5rbm93biB9KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmpl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
828
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwiaXNBcnJheSIsImNvbmNhdCIsInJlZ2lzdGVyVUk1TWV0YWRhdGEiLCJtaXhpbiIsImludGVyZmFjZUNsYXNzIiwiYmFzZUN0b3IiLCJleHRlbmQiLCJpbnRlcmZhY2VQcm90b1R5cGVUb01peCIsIl9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzZXR1cE1peGluIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsImJhc2VDbGFzc01ldGFkYXRhIiwiaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUiLCJnZXRJbnRlcmZhY2VOYW1lIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJuYW1lIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkiLCJqc29uTW9kZWwiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJvT2JqIiwiZGVlcENsb25lIiwiZ2V0T2JqZWN0Iiwib1RhcmdldCIsIm1vZGVsIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJyZWYiLCJSZWZsZWN0IiwiYmluZCIsImlzTmFOIiwiTnVtYmVyIiwiX19iaW5kaW5nSW5mbyIsInBhdGgiLCJib3VuZFByb3BlcnRpZXMiLCJTeW1ib2wiLCJjcmVhdGVTdGF0ZVByb3h5Iiwic3RhdGVQcm9wZXJ0eU5hbWUiLCJib3VuZFRvU3RhdGVQcm9wcyIsImluaXRpYWxEYXRhIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJzdGF0ZU1vZGVsIiwiZ2V0TW9kZWwiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsImdldFBhcmFtZXRlciIsInN1YnN0cmluZyIsImluY2x1ZGVzIiwic2V0UHJvcGVydHkiLCJfX3N0YXRlQ3JlYXRlZCIsInByb3h5Iiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwia25vd25Cb3VuZFByb3BlcnRpZXMiLCJfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSIsInNldFJlc3VsdCIsIl91cGRhdGVTdGF0ZURlYm91bmNlZCIsImNvbmZpZ3VyYWJsZSIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwidXBkYXRpbmdTdGF0ZSIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJfdXBkYXRlU3RhdGUiLCJfdXBkYXRlU3RhdGVUaW1lciIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiX19zdGF0ZU5hbWUiLCJmbkFwcGx5U2V0dGluZ3MiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwic2NvcGUiLCJtb2RlbHMiLCIkY29tcG9uZW50U3RhdGUiLCJjYWxsIiwiZm5TZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJvVmFsdWUiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiY2xhenoiLCJpbk9iaiIsIm9iak5hbWUiLCJiYXNlVHlwZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwicmVzdWx0IiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlLCBwcm9wYWdhdGVIb29rRnJvbU1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxudHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGJpbmRhYmxlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdGlzQmluZGluZ0luZm8/OiBib29sZWFuO1xuXHRiaW5kVG9TdGF0ZT86IGJvb2xlYW47XG5cdGV4cGVjdGVkQW5ub3RhdGlvbnM/OiBzdHJpbmdbXTtcblx0ZXhwZWN0ZWRUeXBlcz86IHN0cmluZ1tdO1xuXHRhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1QWdncmVnYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRhbHRUeXBlcz86IHN0cmluZ1tdO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdGRlZmF1bHRDbGFzcz86IHVua25vd247XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0dmlzaWJpbGl0eT86IHN0cmluZztcblx0Zm9yd2FyZGluZz86IG9iamVjdDtcbn07XG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0c3RhdGVQcm9wZXJ0eT86IHN0cmluZztcblx0c3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0cmV0dXJuVHlwZXM/OiBzdHJpbmdbXTtcblx0YnVpbGRpbmdCbG9ja01ldGFkYXRhPzogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NvckRlc2NyaXB0b3I8VD4gPSBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiAmIHsgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUIH07XG50eXBlIFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZT86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0b3ZlcnJpZGVzPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2xEZWZpbml0aW9uID0ge1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdG92ZXJyaWRlPzogdW5rbm93bjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcblx0X19hcGlSZWdpc3RlcmVkOiBib29sZWFuO1xufSAmIHtcblx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgWE1MRXZlbnRIb2xkZXIgPSB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcbn07XG5cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdC8vIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBUUyBjb21waWxlclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcblxudHlwZSBFdmVudE5hbWVzT2Y8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgKGV2ZW50OiBpbmZlciBFKSA9PiB2b2lkID8gKEUgZXh0ZW5kcyBVSTVFdmVudCA/IEsgOiBuZXZlcikgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBFdmVudHNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBFdmVudE5hbWVzT2Y8VD4+PjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBDb252ZXJ0Q29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIiA/IHN0cmluZyA6IFRbS107XG59O1xudHlwZSBDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQ29udGV4dCB8IHVuZGVmaW5lZCA/IHN0cmluZyB8IHVuZGVmaW5lZCA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2ZCdWlsZGluZ0Jsb2NrPFQ+ID0gQ29udGV4dFRvU3RyaW5nPFByb3BlcnRpZXNPZjxUPj47XG5leHBvcnQgdHlwZSBTdHJpY3RQcm9wZXJ0aWVzT2Y8VD4gPSBQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+PjtcbmV4cG9ydCB0eXBlIFVJNUFjY2Vzc29yczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgZ2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuZXhwb3J0IHR5cGUgVUk1U2V0dGVyczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgc2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBzZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICh2YWx1ZTogVFtQXSkgPT4gVDtcbn07XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IHtcblx0bmV3IChwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG5cdG5ldyAoc0lkOiBzdHJpbmcsIHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcbn0gJiBUICZcblx0VUk1QWNjZXNzb3JzPFQ+ICZcblx0VUk1U2V0dGVyczxUPjtcblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24gPSBcIkluc3RlYWRcIiB8IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIkFmdGVyQXN5bmNcIiB8IFwiQmVmb3JlQXN5bmNcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHJlZmVyZW5jZXM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgPz8ge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdGhhdCB3aWxsIGZpbmQgdGhlIGNvcnJlY3QgQVBJIG9iamVjdCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250cm9sIGhpZXJhcmNoeS5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXIgZ2V0QVBJIGZ1bmN0aW9uIGZvciB0aGlzIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVHZXRBUElGdW5jdGlvbih0YXJnZXQ6IFVJNUFQSUNvbnRyb2wpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgVUk1QVBJQ29udHJvbD4oXG5cdFx0dGhpczogVUk1QVBJQ29udHJvbCxcblx0XHRvRXZlbnQ6IFVJNUV2ZW50LFxuXHRcdGFwaUZRTjogc3RyaW5nID0gdGFyZ2V0LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpXG5cdCk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdGlmICh0YXJnZXQuX2dldEFQSUV4dGVuc2lvbikge1xuXHRcdFx0b1NvdXJjZSA9IHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKG9Tb3VyY2UpID8/IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHdoaWxlIChvU291cmNlICYmICFvU291cmNlLmlzQTxUPihhcGlGUU4pICYmIG9Tb3VyY2UuZ2V0UGFyZW50KSB7XG5cdFx0XHRpZiAodGhpcy5pc0RlcGVuZGVudEJvdW5kKSB7XG5cdFx0XHRcdGNvbnN0IG9EZXBlbmRlbnRzID0gKG9Tb3VyY2UgYXMgQ29udHJvbCkuZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0XHRjb25zdCBoYXNDb3JyZWN0RGVwZW5kZW50ID0gb0RlcGVuZGVudHMuZmluZCgob0RlcGVuZGVudDogVUk1RWxlbWVudCkgPT4gb0RlcGVuZGVudC5pc0EoYXBpRlFOKSk7XG5cdFx0XHRcdGlmIChoYXNDb3JyZWN0RGVwZW5kZW50KSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IGhhc0NvcnJlY3REZXBlbmRlbnQgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvU291cmNlIHx8ICFvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHRjb25zdCBvU291cmNlTWFwID0gdGhpcy5pbnN0YW5jZU1hcC5nZXQodGhpcykgYXMgVFtdO1xuXHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2VNYXA/LltvU291cmNlTWFwLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0Q29udHJvbDtcblx0XHRpZiAob1NvdXJjZSAmJiBvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sID0gb1NvdXJjZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG5cdH07XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHdoZW4gYW4geG1sRXZlbnRIYW5kbGVyIGlzIGRlZmluZWQsIHRoZSBgZ2V0QVBJYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBhc3NpZ25lZC5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxkIGhvbGQgdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuY29uc3QgZW5zdXJlR2V0QVBJID0gZnVuY3Rpb24gKHRhcmdldDogVUk1QVBJQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoIXRhcmdldC5fX2FwaVJlZ2lzdGVyZWQpIHtcblx0XHR0YXJnZXQuX19hcGlSZWdpc3RlcmVkID0gdHJ1ZTtcblx0XHR0YXJnZXQuaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPigpO1xuXHRcdHRhcmdldC5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKF9pbnN0YW5jZTogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGlmICghdGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlTWFwLnNldChfaW5zdGFuY2UuY29uc3RydWN0b3IsIFtdKTtcblx0XHRcdH1cblx0XHRcdCh0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpIGFzIG9iamVjdFtdKS5wdXNoKF9pbnN0YW5jZSk7XG5cdFx0fTtcblx0XHR0YXJnZXQuZ2V0QVBJID0gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldCk7XG5cdH1cbn07XG5cbnR5cGUgRXh0ZW5kV2l0aE9iamVjdDxULCBLPiA9IFQgZXh0ZW5kcyBvYmplY3QgPyBLICYgeyBbVEtleSBpbiBrZXlvZiBUXT86IEJpbmRpbmdJbmZvSG9sZGVyPFRbVEtleV0+IH0gOiBLO1xuXG5leHBvcnQgdHlwZSBTdGF0ZU9mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEFycmF5PGluZmVyIFU+IHwgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IEV4dGVuZFdpdGhPYmplY3Q8VSwgUmVhZG9ubHlBcnJheTxVPj4gOiBUW0tdO1xufTtcbmV4cG9ydCB0eXBlIEJpbmRpbmdJbmZvSG9sZGVyPFQ+ID0gVCAmIHtcblx0X19iaW5kaW5nSW5mbzoge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRtb2RlbDogc3RyaW5nO1xuXHRcdHR5cGU6IFQ7XG5cdH07XG59O1xuXG4vKipcbiAqIEFsbG93cyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgaG9sZCB0aGUgY29udHJvbCBzdGF0ZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRpZiAoIWF0dHJpYnV0ZURlZmluaXRpb24uaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpIHtcblx0XHRcdC8vIE5vdCBleHBsaWNpdGVseSBkZWZpbmVkXG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdH1cblxuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uIFRoZSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBVSTUgZGVmYXVsdHMgdGhpcyB0byB0cnVlIGJ1dCB0aGlzIGlzIGp1c3Qgd2VpcmQuLi5cblx0XHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBhZ2dyZWdhdGlvbkRlZmluaXRpb247XG5cdFx0fVxuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24uaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQ/Lltwcm9wZXJ0eWtleS50b1N0cmluZygpXSguLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufVxuXG50eXBlIFVJNUNvbnRyb2xBbmRNb3JlID0gdHlwZW9mIENvbnRyb2wgJlxuXHRGdW5jdGlvbiAmIHtcblx0XHRyZWdpc3Rlckluc3RhbmNlPzogRnVuY3Rpb247XG5cdFx0b3ZlcnJpZGU/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hOiB1bmtub3duW10pID0+IFQ7XG4vKipcbiAqIE1peGluIGEgc3BlY2lmaWMgaW50ZXJmYWNlIGluY2x1ZGluZyBhbGwgaXRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgaW50byB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSBpbnRlcmZhY2VDbGFzcyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBvZiB0aGUgY29udHJvbFxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIElJbnRlcmZhY2VXaXRoTWl4aW4+KGludGVyZmFjZUNsYXNzOiBDb25zdHJ1Y3RvcjxUPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoYmFzZUN0b3IucHJvdG90eXBlLmV4dGVuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIG1peGluSW50ZXJmYWNlIGRlY29yYXRvciBtdXN0IGJlIHBsYWNlZCBhZnRlciBgZGVmaW5lVWk1Q2xhc3NgXCIpO1xuXHRcdH1cblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKGJhc2VDdG9yLnByb3RvdHlwZSk7XG5cblx0XHRsZXQgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGU7XG5cdFx0d2hpbGUgKGludGVyZmFjZVByb3RvVHlwZVRvTWl4KSB7XG5cdFx0XHRiYXNlQ3RvciA9IF9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MoYmFzZUN0b3IsIG1ldGFkYXRhLCBpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0XHRpbnRlcmZhY2VQcm90b1R5cGVUb01peCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0fVxuXHRcdHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4oYmFzZUN0b3IsIGludGVyZmFjZUNsYXNzKTtcblxuXHRcdC8vIEhvb2sgdG8gYWRkIHBvdGVudGlhbGx5IG1vcmUgbG9naWMgdG8gdGhlIG1peGluXG5cdFx0aW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlLnNldHVwTWl4aW4/LihiYXNlQ3Rvcik7XG5cdFx0cmV0dXJuIGJhc2VDdG9yO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZWNlaXZpbmcgY29udHJvbC5cblx0ICogSWYgbm90IGRlZmluZWQsIHRoZSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgYWRkZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2Vcblx0ICovXG5cdGdldEludGVyZmFjZU5hbWU/KCk6IHN0cmluZztcblxuXHQvKipcblx0ICogSG9vayB0byBhZGQgbW9yZSBsb2dpYyB0byB0aGUgbWl4aW4uXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbG9naWMgdG8gdGhlIGJhc2UgY2xhc3MuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGJhc2UgY2xhc3MgdGhhdCB3aWxsIGJlIGV4dGVuZGVkXG5cdCAqL1xuXHRzZXR1cE1peGluPyhiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZTxUIGV4dGVuZHMgVUk1RWxlbWVudD4oKTogUmVmPFQ+IHtcblx0cmV0dXJuIHtcblx0XHRjdXJyZW50OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuXHRcdHNldEN1cnJlbnQ6IGZ1bmN0aW9uIChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZCB7XG5cdFx0XHR0aGlzLmN1cnJlbnQgPSBvQ29udHJvbEluc3RhbmNlO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgdGhyb3VnaCBqc3ggdGVtcGxhdGluZy5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWZlcmVuY2UoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRpZiAoQmFzZU9iamVjdC5pc09iamVjdEEodGFyZ2V0LCBcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdGlmICghbWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyID0gY3JlYXRlUmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG5mdW5jdGlvbiBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKFxuXHRiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUsXG5cdGJhc2VDbGFzc01ldGFkYXRhOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uLFxuXHRpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZTogRnVuY3Rpb25bXCJwcm90b3R5cGVcIl1cbik6IFVJNUNvbnRyb2xBbmRNb3JlIHtcblx0Y29uc3QgaW50ZXJmYWNlTmFtZSA9IGludGVyZmFjZUNsYXNzUHJvdG90eXBlPy5nZXRJbnRlcmZhY2VOYW1lPy4oKTtcblx0aWYgKGludGVyZmFjZU5hbWUpIHtcblx0XHRiYXNlQ2xhc3NNZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdH1cblxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmIChuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIgJiYgbmFtZSAhPT0gXCJzZXR1cE1peGluXCIgJiYgbmFtZSAhPT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRpZiAoIWJhc2VDdG9yLnByb3RvdHlwZVtuYW1lXSkge1xuXHRcdFx0XHQvLyBUaGUgYmFzZSBjbGFzcyBcIndpbnNcIiBvdmVyIHRoZSBtaXhpblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSwgbmFtZSkgfHwgT2JqZWN0LmNyZWF0ZShudWxsKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSBtZXJnZShiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEsIGludGVyZmFjZUNsYXNzUHJvdG90eXBlLm1ldGFkYXRhKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYmFzZUN0b3I7XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChwcm9wID09PSBcIl9fYmluZGluZ0luZm9cIikge1xuXHRcdHJldHVybiB7IG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvT2JqID09PSBcInN0cmluZ1wiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwibnVtYmVyXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRpZiAodHlwZW9mIG9UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgXCIkY29tcG9uZW50U3RhdGVcIik7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAoXG5cdFx0XHRcdG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSxcblx0XHRcdFx0c2NvcGU/OiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHRcdCk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGUpIHtcblx0XHRcdFx0XHQvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBtb2RlbCBkaXJlY3RseSBmcm9tIG1TZXR0aW5ncy5tb2RlbHMgYXMgdGhpcyBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCB3aGVuIGNsb25pbmdcblx0XHRcdFx0XHRtU2V0dGluZ3MubW9kZWxzID0geyAuLi5tU2V0dGluZ3MubW9kZWxzIH07XG5cdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5tb2RlbHMuJGNvbXBvbmVudFN0YXRlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncywgc2NvcGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlICE9PSBiaW5kaW5nUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gdGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BWYWx1ZSB9OyAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJvcGVydHlEZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgdGhpc1twcm9wZXJ0eUtleV0gIT09IHByb3BlcnR5RGVmYXVsdCkge1xuXHRcdFx0XHRcdC8vIGRvbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmVcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5RGVmYXVsdDtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZiA9IG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldO1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA/PyBhZ2dyZWdhdGlvbkRlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgKGRlZmF1bHRWYWx1ZSBhcyBVSTVFbGVtZW50KT8uaXNBKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1thZ2dyZWdhdGlvbktleV0gPSBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucmVmZXJlbmNlcyk7XG5cdFx0XHRyZWZlcmVuY2VQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogY3JlYXRlUmVmZXJlbmNlKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGhvZE5hbWUgaW4gb2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IG9iai5tZXRhZGF0YS5tZXRob2RzW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIgfHwgbWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLm1ldGhvZEhvbGRlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXIgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbdGhpc1ttZXRob2ROYW1lXV07XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG1ldGhvZE5hbWUsIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXS5wdXNoKHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKC4uLm1ldGhvZEFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZEFycmF5cy5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhcmcgb2YgbWV0aG9kQXJyYXlzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBhcmcuYXBwbHkodGhpcywgbWV0aG9kQXJncyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBc0pBLE1BQU1BLGNBQWMsR0FBRyxTQUFBQSxDQUFVQyxNQUFzRCxFQUFnQztJQUN0SEEsTUFBTSxDQUFDQyxRQUFRLEdBQUdDLEtBQUssQ0FDdEI7TUFDQ0Msb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO01BQ3hCQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2RDLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDaEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNYQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQ1ZDLFVBQVUsRUFBRTtJQUNiLENBQUMsRUFDRFYsTUFBTSxDQUFDQyxRQUFRLElBQUksQ0FBQyxDQUNyQixDQUFpQztJQUNqQyxPQUFPRCxNQUFNLENBQUND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
@@ -113,6 +113,12 @@ type ControlPropertyNames<T> = {
113
113
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
114
114
  [K in keyof T]: T[K] extends Function ? never : K;
115
115
  }[keyof T];
116
+
117
+ type EventNamesOf<T> = {
118
+ [K in keyof T]: T[K] extends (event: infer E) => void ? (E extends UI5Event ? K : never) : never;
119
+ }[keyof T];
120
+ export type EventsOf<T> = Partial<Pick<T, EventNamesOf<T>>>;
121
+
116
122
  export type PropertiesOf<T, K extends keyof T | undefined = undefined> = Partial<Pick<T, ControlPropertyNames<T>>> &
117
123
  (K extends keyof T ? Partial<Pick<T, K>> : {}) &
118
124
  $ControlSettings;
@@ -784,7 +790,12 @@ function _createStateProperty(
784
790
  mSettings: { models?: Record<string, never> },
785
791
  scope?: object | undefined
786
792
  ): typeof targetControl {
787
- delete mSettings?.models?.$componentState;
793
+ if (mSettings?.models?.$componentState) {
794
+ // We cannot remove the model directly from mSettings.models as this object is shared with the original object when cloning
795
+ mSettings.models = { ...mSettings.models };
796
+ delete mSettings.models.$componentState;
797
+ }
798
+
788
799
  return fnApplySettings.call(this, mSettings, scope);
789
800
  };
790
801
  }
@@ -143,7 +143,7 @@ sap.ui.define(["sap/base/util/deepClone"], function (deepClone) {
143
143
  for (const registeredHook of registeredHooks) {
144
144
  registeredHook.handlerFunction = indexableTarget[registeredHook.targetMethod].bind(target);
145
145
  indexableController[registeredHook.name][`attach${String(registeredHook.method)}`](registeredHook.handlerFunction);
146
- controller.getView()?.attachBeforeExit(() => {
146
+ controller.getView()?.attachBeforeExit?.(() => {
147
147
  indexableController[registeredHook.name][`detach${String(registeredHook.method)}`](registeredHook.handlerFunction);
148
148
  });
149
149
  }
@@ -172,4 +172,4 @@ sap.ui.define(["sap/base/util/deepClone"], function (deepClone) {
172
172
  _exports.propagateHookFromMixin = propagateHookFromMixin;
173
173
  return _exports;
174
174
  }, false);
175
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3RlcmVkSW5zdGFuY2VzIiwicmVnaXN0ZXJlZEhhbmRsZXJzIiwiaG9va2FibGUiLCJleGVjdXRpb24iLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJpbmRleGFibGVUYXJnZXQiLCJ0b1N0cmluZyIsImZuIiwiY0V4VEluc3RhbmNlSG9va01hcCIsImhvb2tlZEhhbmRsZXJzIiwicHVzaCIsImhhbmRsZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwib2xkVmFsdWUiLCJ2YWx1ZSIsInJldHVyblZhbHVlIiwiYmluZCIsImFyZ3VtZW50cyIsImhhbmRsZXIiLCJfZXhwb3J0cyIsImlzQWxyZWFkeVJlZ2lzdGVyZWQiLCJleGlzdGluZ1JlZ2lzdHJhdGlvbnMiLCJuZXdSZWdpc3RyYXRpb24iLCJmaW5kIiwiciIsIm5hbWUiLCJtZXRob2QiLCJ0YXJnZXRNZXRob2QiLCJob29rcyIsIlN5bWJvbCIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiU3RyaW5nIiwiY29uc3RydWN0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiY29udHJvbGxlciIsInJlZ2lzdGVyZWRIb29rcyIsImRlZXBDbG9uZSIsImluZGV4YWJsZUNvbnRyb2xsZXIiLCJyZWdpc3RlcmVkSG9vayIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwicmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzb3VyY2UiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhvb2tTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbi8qKlxuICogVGhpcyB0eXBlIGlzIHRvIGJlIGV4dGVuZGVkIHdpdGggYWxsIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBhbmQgbWV0aG9kcyB0aGF0IGFyZSBob29rYWJsZS5cbiAqL1xudHlwZSBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zID0ge1xuXHRlZGl0Rmxvdzoge1xuXHRcdG9uQWZ0ZXJTYXZlOiB0cnVlO1xuXHRcdG9uQmVmb3JlU2F2ZTogdHJ1ZTtcblx0fTtcblx0aW5saW5lRWRpdEZsb3c6IHtcblx0XHRpbmxpbmVFZGl0RW5kOiB0cnVlO1xuXHRcdGlubGluZUVkaXRTdGFydDogdHJ1ZTtcblx0fTtcblx0Y29sbGFib3JhdGlvbk1hbmFnZXI6IHtcblx0XHRjb2xsZWN0QXZhaWxhYmxlQ2FyZHM6IHRydWU7XG5cdH07XG5cdHBhZ2luYXRvcjoge1xuXHRcdGluaXRpYWxpemU6IHRydWU7XG5cdH07XG5cdHJvdXRpbmc6IHtcblx0XHRvbkFmdGVyQmluZGluZzogdHJ1ZTtcblx0fTtcblx0dmlld1N0YXRlOiB7XG5cdFx0cmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzOiB0cnVlO1xuXHRcdGFwcGx5QWRkaXRpb25hbFN0YXRlczogdHJ1ZTtcblx0fTtcbn07XG5cbnR5cGUgSGFuZGxlckNvbmZpZ3VyYXRpb248Q0V4dE5hbWUgZXh0ZW5kcyBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zPiA9IHtcblx0bmFtZTogQ0V4dE5hbWU7XG5cdG1ldGhvZDoga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9uc1tDRXh0TmFtZV07XG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbnR5cGUgSGFuZGxlclJlZ2lzdHJhdGlvbiA9IEhhbmRsZXJDb25maWd1cmF0aW9uPGFueT4gJiB7IHRhcmdldE1ldGhvZDogc3RyaW5nOyBoYW5kbGVyRnVuY3Rpb24/OiBGdW5jdGlvbiB9O1xuXG50eXBlIEZ1bmN0aW9uTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG50eXBlIERlZXBGdW5jdGlvbk1hcCA9IHtcblx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25NYXA7XG59O1xudHlwZSBIb29rTWFwID0ge1xuXHRob29rZWRIYW5kbGVyczoge1xuXHRcdFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uW107XG5cdH07XG59O1xuXG4vLyBVc2UgdHdvIGFycmF5cyBhcyB3ZSBjYW5ub3QgaW5kZXggYSBtYXAgdGhyb3VnaCBhbiBhcmJpdHJhcnkgb2JqZWN0IGluc3RhbmNlXG5jb25zdCByZWdpc3RlcmVkSW5zdGFuY2VzOiBGdW5jdGlvbltdID0gW107XG5jb25zdCByZWdpc3RlcmVkSGFuZGxlcnM6IEhhbmRsZXJSZWdpc3RyYXRpb25bXVtdID0gW107XG5cbi8qKlxuICogTWFya3MgYSBjb250cm9sbGVyIGV4dGVuc2lvbiBtZXRob2QgdG8gYmUgaG9va2FibGUgYnkgZ2VuZXJhdGluZyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBhdHRhY2ggYW5kIGRldGFjaCBoYW5kbGVycyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4ZWN1dGlvblxuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rYWJsZShleGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyBGdW5jdGlvbk1hcDtcblxuXHRcdGluZGV4YWJsZVRhcmdldFtgYXR0YWNoJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfWBdID0gZnVuY3Rpb24gKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0aWYgKCFjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzKSB7XG5cdFx0XHRcdGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gW107XG5cdFx0XHR9XG5cdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1c2goZm4pO1xuXHRcdH07XG5cdFx0aW5kZXhhYmxlVGFyZ2V0W2BkZXRhY2gke3Byb3BlcnR5S2V5LnRvU3RyaW5nKCl9YF0gPSBmdW5jdGlvbiAoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRjb25zdCBoYW5kbGVycyA9IGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnM/Lltwcm9wZXJ0eUtleS50b1N0cmluZygpXTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IGhhbmRsZXJzLmluZGV4T2YoZm4pO1xuXHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBvbGRWYWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7XG5cdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiIHx8IGV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIpIHtcblx0XHRcdGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSAoY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnMgJiYgY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHx8IFtdO1xuXHRcdFx0XHRsZXQgcmV0dXJuVmFsdWU6IHVua25vd247XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBhd2FpdCBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGF3YWl0IGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGF3YWl0IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVycyA9IChjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVycyAmJiBjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkgfHwgW107XG5cdFx0XHRcdGxldCByZXR1cm5WYWx1ZTogdW5rbm93bjtcblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJBZnRlclwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbmV3UmVnaXN0cmF0aW9uIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gc29tZSBleGlzdGluZ1JlZ2lzdHJhdGlvbnMgYnkgY29tcGFyaW5nIGFsbCByZWxldmFudCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIGV4aXN0aW5nUmVnaXN0cmF0aW9uc1xuICogQHBhcmFtIG5ld1JlZ2lzdHJhdGlvblxuICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSBjaGVja1xuICovXG5mdW5jdGlvbiBpc0FscmVhZHlSZWdpc3RlcmVkKGV4aXN0aW5nUmVnaXN0cmF0aW9uczogSGFuZGxlclJlZ2lzdHJhdGlvbltdLCBuZXdSZWdpc3RyYXRpb246IEhhbmRsZXJSZWdpc3RyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuICEhZXhpc3RpbmdSZWdpc3RyYXRpb25zLmZpbmQoXG5cdFx0KHIpID0+IHIubmFtZSA9PT0gbmV3UmVnaXN0cmF0aW9uLm5hbWUgJiYgci5tZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi5tZXRob2QgJiYgci50YXJnZXRNZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi50YXJnZXRNZXRob2Rcblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IGhvb2tzID0gU3ltYm9sKFwiaG9va3NcIik7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbWV0aG9kIGFzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGhvb2sgaGFuZGxlci5cbiAqXG4gKiBDdXJyZW50bHksIG9ubHkgbWV0aG9kcyBvZiBydW50aW1lIGJ1aWxkaW5nIGJsb2NrcyBhcmUgc3VwcG9ydGVkLlxuICogQHBhcmFtIG5hbWUgQ29udHJvbGxlciBleHRlbnNpb24gdG8gaG9vayBpbnRvXG4gKiBAcGFyYW0gbWV0aG9kIE1ldGhvZCB0byBob29rIGludG9cbiAqIEByZXR1cm5zIEEgbWV0aG9kIGRlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXI8Q0V4dE5hbWUgZXh0ZW5kcyBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zPihcblx0bmFtZTogQ0V4dE5hbWUsXG5cdG1ldGhvZDoga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9uc1tDRXh0TmFtZV1cbik6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0sIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBuZXdSZWdpc3RyYXRpb24gPSB7IG5hbWUsIG1ldGhvZDogU3RyaW5nKG1ldGhvZCksIHRhcmdldE1ldGhvZDogcHJvcGVydHlLZXkgfTtcblx0XHRjb25zdCBpbmRleCA9IHJlZ2lzdGVyZWRJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGlmICghdGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jb25zdHJ1Y3RvciwgaG9va3MsIHtcblx0XHRcdFx0dmFsdWU6IFtdXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXT8ucHVzaChuZXdSZWdpc3RyYXRpb24pO1xuXHRcdC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhpcyBleGFjdCBoYW5kbGVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhcyBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCBzdGF0aWNhbGx5IChvbiB0aGUgY29uc3RydWN0b3IpXG5cdFx0aWYgKGluZGV4ICE9PSAtMSAmJiAhaXNBbHJlYWR5UmVnaXN0ZXJlZChyZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdLCBuZXdSZWdpc3RyYXRpb24pKSB7XG5cdFx0XHRyZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdLnB1c2gobmV3UmVnaXN0cmF0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVnaXN0ZXJlZEluc3RhbmNlcy5wdXNoKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0XHRyZWdpc3RlcmVkSGFuZGxlcnMucHVzaChbbmV3UmVnaXN0cmF0aW9uXSk7XG5cdFx0fVxuXHR9IGFzIE1ldGhvZERlY29yYXRvcjtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbGwgY29udHJvbGxlciBleHRlbnNpb24gaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiB0YXJnZXQuXG4gKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBjbGFzcyB0byBpbml0aWFsaXplIHRoZSBoYW5kbGVycyBmb3JcbiAqIEBwYXJhbSB0YXJnZXQuY29uc3RydWN0b3JcbiAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyIGluc3RhbmNlIHRvIGdldCB0aGUgY29udHJvbGxlciBleHRlbnNpb25zIGluc3RhbmNlcyBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhcblx0dGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0Y29udHJvbGxlcjogQ29udHJvbGxlclxuKTogdm9pZCB7XG5cdGlmICh0YXJnZXQuY29uc3RydWN0b3JbaG9va3NdKSB7XG5cdFx0bGV0IHJlZ2lzdGVyZWRIb29rcyA9IHRhcmdldC5jb25zdHJ1Y3Rvcltob29rc107XG5cdFx0dGFyZ2V0W2hvb2tzXSA9IGRlZXBDbG9uZShyZWdpc3RlcmVkSG9va3MpO1xuXHRcdHJlZ2lzdGVyZWRIb29rcyA9IHRhcmdldFtob29rc10hO1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyB1bmtub3duIGFzIEZ1bmN0aW9uTWFwO1xuXHRcdGNvbnN0IGluZGV4YWJsZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIHVua25vd24gYXMgRGVlcEZ1bmN0aW9uTWFwO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0ZXJlZEhvb2sgb2YgcmVnaXN0ZXJlZEhvb2tzKSB7XG5cdFx0XHRyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24gPSBpbmRleGFibGVUYXJnZXRbcmVnaXN0ZXJlZEhvb2sudGFyZ2V0TWV0aG9kXS5iaW5kKHRhcmdldCk7XG5cdFx0XHRpbmRleGFibGVDb250cm9sbGVyW3JlZ2lzdGVyZWRIb29rLm5hbWVdW2BhdHRhY2gke1N0cmluZyhyZWdpc3RlcmVkSG9vay5tZXRob2QpfWBdKHJlZ2lzdGVyZWRIb29rLmhhbmRsZXJGdW5jdGlvbik7XG5cdFx0XHRjb250cm9sbGVyLmdldFZpZXcoKT8uYXR0YWNoQmVmb3JlRXhpdCgoKSA9PiB7XG5cdFx0XHRcdGluZGV4YWJsZUNvbnRyb2xsZXJbcmVnaXN0ZXJlZEhvb2submFtZV1bYGRldGFjaCR7U3RyaW5nKHJlZ2lzdGVyZWRIb29rLm1ldGhvZCl9YF0ocmVnaXN0ZXJlZEhvb2suaGFuZGxlckZ1bmN0aW9uKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhcblx0dGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0Y29udHJvbGxlcjogQ29udHJvbGxlclxuKTogdm9pZCB7XG5cdGlmICh0YXJnZXRbaG9va3NdKSB7XG5cdFx0Y29uc3QgcmVnaXN0ZXJlZEhvb2tzID0gdGFyZ2V0W2hvb2tzXTtcblx0XHRjb25zdCBpbmRleGFibGVDb250cm9sbGVyID0gY29udHJvbGxlciBhcyB1bmtub3duIGFzIERlZXBGdW5jdGlvbk1hcDtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdGVyZWRIb29rIG9mIHJlZ2lzdGVyZWRIb29rcykge1xuXHRcdFx0aW5kZXhhYmxlQ29udHJvbGxlcltyZWdpc3RlcmVkSG9vay5uYW1lXT8uW2BkZXRhY2gke1N0cmluZyhyZWdpc3RlcmVkSG9vay5tZXRob2QpfWBdPy4ocmVnaXN0ZXJlZEhvb2suaGFuZGxlckZ1bmN0aW9uKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4oXG5cdHRhcmdldDogRnVuY3Rpb24gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0c291cmNlOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9XG4pOiB2b2lkIHtcblx0aWYgKHNvdXJjZVtob29rc10pIHtcblx0XHRpZiAodGFyZ2V0W2hvb2tzXSkge1xuXHRcdFx0dGFyZ2V0W2hvb2tzXSEuc3BsaWNlKDAsIDAsIC4uLnNvdXJjZVtob29rc10pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBob29rcywgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGhvb2tzKSB8fCBPYmplY3QuY3JlYXRlKFtdKSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBR0E7QUFDQTtBQUNBOztFQTZCQTs7RUFlQTtFQUNBLE1BQU1BLG1CQUErQixHQUFHLEVBQUU7RUFDMUMsTUFBTUMsa0JBQTJDLEdBQUcsRUFBRTs7RUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLFFBQVFBLENBQUNDLFNBQXFDLEVBQW1CO0lBQ2hGLE9BQU8sVUFBVUMsTUFBZSxFQUFFQyxXQUE0QixFQUFFQyxVQUE4QixFQUFFO01BQy9GLE1BQU1DLGVBQWUsR0FBR0gsTUFBcUI7TUFFN0NHLGVBQWUsQ0FBQyxTQUFTRixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVVDLEVBQVksRUFBUTtRQUNsRixNQUFNQyxtQkFBbUIsR0FBRyxJQUEwQjtRQUN0RCxJQUFJLENBQUNBLG1CQUFtQixDQUFDQyxjQUFjLEVBQUU7VUFDeENELG1CQUFtQixDQUFDQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDO1FBQ0EsSUFBSSxDQUFDRCxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDTixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtV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QUFjLENBQUNkLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQ2MsY0FBYyxDQUFDQyxlQUFlLENBQUM7UUFDbEhMLFVBQVUsQ0FBQ00sT0FBTyxDQUFDLENBQUMsRUFBRUMsZ0JBQWdCLENBQUMsTUFBTTtVQUM1Q0osbUJBQW1CLENBQUNDLGNBQWMsQ0FBQ2YsSUFBSSxDQUFDLENBQUMsU0FBU00sTUFBTSxDQUFDUyxjQUFjLENBQUNkLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQ2MsY0FBYyxDQUFDQyxlQUFlLENBQUM7UUFDbkgsQ0FBQyxDQUFDO01BQ0g7SUFDRDtFQUNEO0VBQUN0QixRQUFBLENBQUFnQixtQ0FBQSxHQUFBQSxtQ0FBQTtFQUVNLFNBQVNTLHFDQUFxQ0EsQ0FDcEQ5QyxNQUE2RyxFQUM3R3NDLFVBQXNCLEVBQ2Y7SUFDUCxJQUFJdEMsTUFBTSxDQUFDOEIsS0FBSyxDQUFDLEVBQUU7TUFDbEIsTUFBTVMsZUFBZSxHQUFHdkMsTUFBTSxDQUFDOEIsS0FBSyxDQUFDO01BQ3JDLE1BQU1XLG1CQUFtQixHQUFHSCxVQUF3QztNQUNwRSxLQUFLLE1BQU1JLGNBQWMsSUFBSUgsZUFBZSxFQUFFO1FBQzdDRSxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDZixJQUFJLENBQUMsR0FBRyxTQUFTTSxNQUFNLENBQUNTLGNBQWMsQ0FBQ2QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHYyxjQUFjLENBQUNDLGVBQWUsQ0FBQztNQUN2SDtJQUNEO0VBQ0Q7RUFBQ3RCLFFBQUEsQ0FBQXlCLHFDQUFBLEdBQUFBLHFDQUFBO0VBRU0sU0FBU0Msc0JBQXNCQSxDQUNyQy9DLE1BQXNELEVBQ3REZ0QsTUFBc0QsRUFDL0M7SUFDUCxJQUFJQSxNQUFNLENBQUNsQixLQUFLLENBQUMsRUFBRTtNQUNsQixJQUFJOUIsTUFBTSxDQUFDOEIsS0FBSyxDQUFDLEVBQUU7UUFDbEI5QixNQUFNLENBQUM4QixLQUFLLENBQUMsQ0FBRWhCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUdrQyxNQUFNLENBQUNsQixLQUFLLENBQUMsQ0FBQztNQUM5QyxDQUFDLE1BQU07UUFDTkssTUFBTSxDQUFDQyxjQUFjLENBQUNwQyxNQUFNLEVBQUU4QixLQUFLLEVBQUVLLE1BQU0sQ0FBQ2Msd0JBQXdCLENBQUNELE1BQU0sRUFBRWxCLEtBQUssQ0FBQyxJQUFJSyxNQUFNLENBQUNlLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMxRztJQUNEO0VBQ0Q7RUFBQzdCLFFBQUEsQ0FBQTBCLHNCQUFBLEdBQUFBLHNCQUFBO0VBQUEsT0FBQTFCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
175
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3RlcmVkSW5zdGFuY2VzIiwicmVnaXN0ZXJlZEhhbmRsZXJzIiwiaG9va2FibGUiLCJleGVjdXRpb24iLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJpbmRleGFibGVUYXJnZXQiLCJ0b1N0cmluZyIsImZuIiwiY0V4VEluc3RhbmNlSG9va01hcCIsImhvb2tlZEhhbmRsZXJzIiwicHVzaCIsImhhbmRsZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwib2xkVmFsdWUiLCJ2YWx1ZSIsInJldHVyblZhbHVlIiwiYmluZCIsImFyZ3VtZW50cyIsImhhbmRsZXIiLCJfZXhwb3J0cyIsImlzQWxyZWFkeVJlZ2lzdGVyZWQiLCJleGlzdGluZ1JlZ2lzdHJhdGlvbnMiLCJuZXdSZWdpc3RyYXRpb24iLCJmaW5kIiwiciIsIm5hbWUiLCJtZXRob2QiLCJ0YXJnZXRNZXRob2QiLCJob29rcyIsIlN5bWJvbCIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiU3RyaW5nIiwiY29uc3RydWN0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiY29udHJvbGxlciIsInJlZ2lzdGVyZWRIb29rcyIsImRlZXBDbG9uZSIsImluZGV4YWJsZUNvbnRyb2xsZXIiLCJyZWdpc3RlcmVkSG9vayIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwicmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzb3VyY2UiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhvb2tTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbi8qKlxuICogVGhpcyB0eXBlIGlzIHRvIGJlIGV4dGVuZGVkIHdpdGggYWxsIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBhbmQgbWV0aG9kcyB0aGF0IGFyZSBob29rYWJsZS5cbiAqL1xudHlwZSBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zID0ge1xuXHRlZGl0Rmxvdzoge1xuXHRcdG9uQWZ0ZXJTYXZlOiB0cnVlO1xuXHRcdG9uQmVmb3JlU2F2ZTogdHJ1ZTtcblx0fTtcblx0aW5saW5lRWRpdEZsb3c6IHtcblx0XHRpbmxpbmVFZGl0RW5kOiB0cnVlO1xuXHRcdGlubGluZUVkaXRTdGFydDogdHJ1ZTtcblx0fTtcblx0Y29sbGFib3JhdGlvbk1hbmFnZXI6IHtcblx0XHRjb2xsZWN0QXZhaWxhYmxlQ2FyZHM6IHRydWU7XG5cdH07XG5cdHBhZ2luYXRvcjoge1xuXHRcdGluaXRpYWxpemU6IHRydWU7XG5cdH07XG5cdHJvdXRpbmc6IHtcblx0XHRvbkFmdGVyQmluZGluZzogdHJ1ZTtcblx0fTtcblx0dmlld1N0YXRlOiB7XG5cdFx0cmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzOiB0cnVlO1xuXHRcdGFwcGx5QWRkaXRpb25hbFN0YXRlczogdHJ1ZTtcblx0fTtcbn07XG5cbnR5cGUgSGFuZGxlckNvbmZpZ3VyYXRpb248Q0V4dE5hbWUgZXh0ZW5kcyBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zPiA9IHtcblx0bmFtZTogQ0V4dE5hbWU7XG5cdG1ldGhvZDoga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9uc1tDRXh0TmFtZV07XG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbnR5cGUgSGFuZGxlclJlZ2lzdHJhdGlvbiA9IEhhbmRsZXJDb25maWd1cmF0aW9uPGFueT4gJiB7IHRhcmdldE1ldGhvZDogc3RyaW5nOyBoYW5kbGVyRnVuY3Rpb24/OiBGdW5jdGlvbiB9O1xuXG50eXBlIEZ1bmN0aW9uTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG50eXBlIERlZXBGdW5jdGlvbk1hcCA9IHtcblx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25NYXA7XG59O1xudHlwZSBIb29rTWFwID0ge1xuXHRob29rZWRIYW5kbGVyczoge1xuXHRcdFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uW107XG5cdH07XG59O1xuXG4vLyBVc2UgdHdvIGFycmF5cyBhcyB3ZSBjYW5ub3QgaW5kZXggYSBtYXAgdGhyb3VnaCBhbiBhcmJpdHJhcnkgb2JqZWN0IGluc3RhbmNlXG5jb25zdCByZWdpc3RlcmVkSW5zdGFuY2VzOiBGdW5jdGlvbltdID0gW107XG5jb25zdCByZWdpc3RlcmVkSGFuZGxlcnM6IEhhbmRsZXJSZWdpc3RyYXRpb25bXVtdID0gW107XG5cbi8qKlxuICogTWFya3MgYSBjb250cm9sbGVyIGV4dGVuc2lvbiBtZXRob2QgdG8gYmUgaG9va2FibGUgYnkgZ2VuZXJhdGluZyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBhdHRhY2ggYW5kIGRldGFjaCBoYW5kbGVycyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4ZWN1dGlvblxuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rYWJsZShleGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyBGdW5jdGlvbk1hcDtcblxuXHRcdGluZGV4YWJsZVRhcmdldFtgYXR0YWNoJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfWBdID0gZnVuY3Rpb24gKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0aWYgKCFjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzKSB7XG5cdFx0XHRcdGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gW107XG5cdFx0XHR9XG5cdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1c2goZm4pO1xuXHRcdH07XG5cdFx0aW5kZXhhYmxlVGFyZ2V0W2BkZXRhY2gke3Byb3BlcnR5S2V5LnRvU3RyaW5nKCl9YF0gPSBmdW5jdGlvbiAoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRjb25zdCBoYW5kbGVycyA9IGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnM/Lltwcm9wZXJ0eUtleS50b1N0cmluZygpXTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IGhhbmRsZXJzLmluZGV4T2YoZm4pO1xuXHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBvbGRWYWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7XG5cdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiIHx8IGV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIpIHtcblx0XHRcdGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSAoY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnMgJiYgY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHx8IFtdO1xuXHRcdFx0XHRsZXQgcmV0dXJuVmFsdWU6IHVua25vd247XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBhd2FpdCBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGF3YWl0IGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGF3YWl0IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVycyA9IChjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVycyAmJiBjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkgfHwgW107XG5cdFx0XHRcdGxldCByZXR1cm5WYWx1ZTogdW5rbm93bjtcblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJBZnRlclwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbmV3UmVnaXN0cmF0aW9uIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gc29tZSBleGlzdGluZ1JlZ2lzdHJhdGlvbnMgYnkgY29tcGFyaW5nIGFsbCByZWxldmFudCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIGV4aXN0aW5nUmVnaXN0cmF0aW9uc1xuICogQHBhcmFtIG5ld1JlZ2lzdHJhdGlvblxuICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSBjaGVja1xuICovXG5mdW5jdGlvbiBpc0FscmVhZHlSZWdpc3RlcmVkKGV4aXN0aW5nUmVnaXN0cmF0aW9uczogSGFuZGxlclJlZ2lzdHJhdGlvbltdLCBuZXdSZWdpc3RyYXRpb246IEhhbmRsZXJSZWdpc3RyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuICEhZXhpc3RpbmdSZWdpc3RyYXRpb25zLmZpbmQoXG5cdFx0KHIpID0+IHIubmFtZSA9PT0gbmV3UmVnaXN0cmF0aW9uLm5hbWUgJiYgci5tZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi5tZXRob2QgJiYgci50YXJnZXRNZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi50YXJnZXRNZXRob2Rcblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IGhvb2tzID0gU3ltYm9sKFwiaG9va3NcIik7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbWV0aG9kIGFzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGhvb2sgaGFuZGxlci5cbiAqXG4gKiBDdXJyZW50bHksIG9ubHkgbWV0aG9kcyBvZiBydW50aW1lIGJ1aWxkaW5nIGJsb2NrcyBhcmUgc3VwcG9ydGVkLlxuICogQHBhcmFtIG5hbWUgQ29udHJvbGxlciBleHRlbnNpb24gdG8gaG9vayBpbnRvXG4gKiBAcGFyYW0gbWV0aG9kIE1ldGhvZCB0byBob29rIGludG9cbiAqIEByZXR1cm5zIEEgbWV0aG9kIGRlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXI8Q0V4dE5hbWUgZXh0ZW5kcyBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zPihcblx0bmFtZTogQ0V4dE5hbWUsXG5cdG1ldGhvZDoga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9uc1tDRXh0TmFtZV1cbik6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0sIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBuZXdSZWdpc3RyYXRpb24gPSB7IG5hbWUsIG1ldGhvZDogU3RyaW5nKG1ldGhvZCksIHRhcmdldE1ldGhvZDogcHJvcGVydHlLZXkgfTtcblx0XHRjb25zdCBpbmRleCA9IHJlZ2lzdGVyZWRJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGlmICghdGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jb25zdHJ1Y3RvciwgaG9va3MsIHtcblx0XHRcdFx0dmFsdWU6IFtdXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXT8ucHVzaChuZXdSZWdpc3RyYXRpb24pO1xuXHRcdC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhpcyBleGFjdCBoYW5kbGVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhcyBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCBzdGF0aWNhbGx5IChvbiB0aGUgY29uc3RydWN0b3IpXG5cdFx0aWYgKGluZGV4ICE9PSAtMSAmJiAhaXNBbHJlYWR5UmVnaXN0ZXJlZChyZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdLCBuZXdSZWdpc3RyYXRpb24pKSB7XG5cdFx0XHRyZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdLnB1c2gobmV3UmVnaXN0cmF0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVnaXN0ZXJlZEluc3RhbmNlcy5wdXNoKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0XHRyZWdpc3RlcmVkSGFuZGxlcnMucHVzaChbbmV3UmVnaXN0cmF0aW9uXSk7XG5cdFx0fVxuXHR9IGFzIE1ldGhvZERlY29yYXRvcjtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbGwgY29udHJvbGxlciBleHRlbnNpb24gaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiB0YXJnZXQuXG4gKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBjbGFzcyB0byBpbml0aWFsaXplIHRoZSBoYW5kbGVycyBmb3JcbiAqIEBwYXJhbSB0YXJnZXQuY29uc3RydWN0b3JcbiAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyIGluc3RhbmNlIHRvIGdldCB0aGUgY29udHJvbGxlciBleHRlbnNpb25zIGluc3RhbmNlcyBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhcblx0dGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0Y29udHJvbGxlcjogQ29udHJvbGxlclxuKTogdm9pZCB7XG5cdGlmICh0YXJnZXQuY29uc3RydWN0b3JbaG9va3NdKSB7XG5cdFx0bGV0IHJlZ2lzdGVyZWRIb29rcyA9IHRhcmdldC5jb25zdHJ1Y3Rvcltob29rc107XG5cdFx0dGFyZ2V0W2hvb2tzXSA9IGRlZXBDbG9uZShyZWdpc3RlcmVkSG9va3MpO1xuXHRcdHJlZ2lzdGVyZWRIb29rcyA9IHRhcmdldFtob29rc10hO1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyB1bmtub3duIGFzIEZ1bmN0aW9uTWFwO1xuXHRcdGNvbnN0IGluZGV4YWJsZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIHVua25vd24gYXMgRGVlcEZ1bmN0aW9uTWFwO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0ZXJlZEhvb2sgb2YgcmVnaXN0ZXJlZEhvb2tzKSB7XG5cdFx0XHRyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24gPSBpbmRleGFibGVUYXJnZXRbcmVnaXN0ZXJlZEhvb2sudGFyZ2V0TWV0aG9kXS5iaW5kKHRhcmdldCk7XG5cdFx0XHRpbmRleGFibGVDb250cm9sbGVyW3JlZ2lzdGVyZWRIb29rLm5hbWVdW2BhdHRhY2gke1N0cmluZyhyZWdpc3RlcmVkSG9vay5tZXRob2QpfWBdKHJlZ2lzdGVyZWRIb29rLmhhbmRsZXJGdW5jdGlvbik7XG5cdFx0XHRjb250cm9sbGVyLmdldFZpZXcoKT8uYXR0YWNoQmVmb3JlRXhpdD8uKCgpID0+IHtcblx0XHRcdFx0aW5kZXhhYmxlQ29udHJvbGxlcltyZWdpc3RlcmVkSG9vay5uYW1lXVtgZGV0YWNoJHtTdHJpbmcocmVnaXN0ZXJlZEhvb2subWV0aG9kKX1gXShyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKFxuXHR0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uICYgeyBbaG9va3NdPzogSGFuZGxlclJlZ2lzdHJhdGlvbltdIH0gfSAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9LFxuXHRjb250cm9sbGVyOiBDb250cm9sbGVyXG4pOiB2b2lkIHtcblx0aWYgKHRhcmdldFtob29rc10pIHtcblx0XHRjb25zdCByZWdpc3RlcmVkSG9va3MgPSB0YXJnZXRbaG9va3NdO1xuXHRcdGNvbnN0IGluZGV4YWJsZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIHVua25vd24gYXMgRGVlcEZ1bmN0aW9uTWFwO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0ZXJlZEhvb2sgb2YgcmVnaXN0ZXJlZEhvb2tzKSB7XG5cdFx0XHRpbmRleGFibGVDb250cm9sbGVyW3JlZ2lzdGVyZWRIb29rLm5hbWVdPy5bYGRldGFjaCR7U3RyaW5nKHJlZ2lzdGVyZWRIb29rLm1ldGhvZCl9YF0/LihyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24pO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGFnYXRlSG9va0Zyb21NaXhpbihcblx0dGFyZ2V0OiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9LFxuXHRzb3VyY2U6IEZ1bmN0aW9uICYgeyBbaG9va3NdPzogSGFuZGxlclJlZ2lzdHJhdGlvbltdIH1cbik6IHZvaWQge1xuXHRpZiAoc291cmNlW2hvb2tzXSkge1xuXHRcdGlmICh0YXJnZXRbaG9va3NdKSB7XG5cdFx0XHR0YXJnZXRbaG9va3NdIS5zcGxpY2UoMCwgMCwgLi4uc291cmNlW2hvb2tzXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGhvb2tzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgaG9va3MpIHx8IE9iamVjdC5jcmVhdGUoW10pKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFHQTtBQUNBO0FBQ0E7O0VBNkJBOztFQWVBO0VBQ0EsTUFBTUEsbUJBQStCLEdBQUcsRUFBRTtFQUMxQyxNQUFNQyxrQkFBMkMsR0FBRyxFQUFFOztFQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsUUFBUUEsQ0FBQ0MsU0FBcUMsRUFBbUI7SUFDaEYsT0FBTyxVQUFVQyxNQUFlLEVBQUVDLFdBQTRCLEVBQUVDLFVBQThCLEVBQUU7TUFDL0YsTUFBTUMsZUFBZSxHQUFHSCxNQUFxQjtNQUU3Q0csZUFBZSxDQUFDLFNBQVNGLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVUMsRUFBWSxFQUFRO1FBQ2xGLE1BQU1DLG1CQUFtQixHQUFHLElBQTBCO1FBQ3RELElBQUksQ0FBQ0EsbUJBQW1CLENBQUNDLGNBQWMsRUFBRTtVQUN4Q0QsbUJBQW1CLENBQUNDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEM7UUFDQSxJQUFJLENBQUNELG1CQUFtQixDQUFDQyxjQUFjLENBQUNOLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFF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
@@ -182,7 +182,7 @@ export function initControllerExtensionHookHandlers(
182
182
  for (const registeredHook of registeredHooks) {
183
183
  registeredHook.handlerFunction = indexableTarget[registeredHook.targetMethod].bind(target);
184
184
  indexableController[registeredHook.name][`attach${String(registeredHook.method)}`](registeredHook.handlerFunction);
185
- controller.getView()?.attachBeforeExit(() => {
185
+ controller.getView()?.attachBeforeExit?.(() => {
186
186
  indexableController[registeredHook.name][`detach${String(registeredHook.method)}`](registeredHook.handlerFunction);
187
187
  });
188
188
  }
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
22
22
  controls: [],
23
23
  elements: [],
24
24
  // eslint-disable-next-line no-template-curly-in-string
25
- version: "1.141.2",
25
+ version: "1.143.0",
26
26
  noLibraryCSS: true
27
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
28
  });