@sapui5/sap.fe.core 1.99.1 → 1.99.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -442,6 +442,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
442
442
|
return executeDraftEditAction(oContext, bRunPreserveChangesFlow).catch(function (oResponse) {
|
|
443
443
|
//Only call back if error 409
|
|
444
444
|
if (bRunPreserveChangesFlow && oResponse.status === 409) {
|
|
445
|
+
messageHandling.removeBoundTransitionMessages();
|
|
445
446
|
messageHandling.removeUnboundTransitionMessages();
|
|
446
447
|
return Promise.resolve(mParam.fnWhenDecisionToOverwriteDocumentIsRequired ? mParam.fnWhenDecisionToOverwriteDocumentIsRequired() : true).then(overwriteOnDemand);
|
|
447
448
|
} else {
|
|
@@ -559,4 +560,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
559
560
|
|
|
560
561
|
return draft;
|
|
561
562
|
}, false);
|
|
562
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyYWZ0LnRzIl0sIm5hbWVzIjpbImRyYWZ0T3BlcmF0aW9ucyIsIkVESVQiLCJBQ1RJVkFUSU9OIiwiRElTQ0FSRCIsIlBSRVBBUkUiLCJkcmFmdCIsImNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsImRlbGV0ZURyYWZ0IiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiaGFzUHJlcGFyZUFjdGlvbiIsImV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24iLCJiUHJlc2VydmVDaGFuZ2VzIiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwic2V0UGFyYW1ldGVyIiwic0dyb3VwSWQiLCJvRWRpdFByb21pc2UiLCJleGVjdXRlIiwidGhlbiIsIm9EcmFmdERvY3VtZW50Q29udGV4dCIsInN1Ym1pdEJhdGNoIiwiRXJyb3IiLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsImJIYXNQcmVwYXJlQWN0aW9uIiwiYklnbm9yZUV0YWciLCJvQWN0aXZlRG9jdW1lbnRDb250ZXh0IiwiY2F0Y2giLCJzQWN0aW9uTmFtZSIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJvQmluZGluZ1BhcmFtZXRlcnMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiYVRhcmdldFBhdGhzIiwicGF0aEV4cHJlc3Npb25zIiwibGVuZ3RoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJyZXF1ZXN0TWVzc2FnZXMiLCJQcm9taXNlIiwicmVqZWN0IiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJtUGFyYW1ldGVycyIsIm1QYXJhbXMiLCJncm91cElkIiwiZ2V0R3JvdXBJZCIsIm9QcmVwYXJhdGlvblByb21pc2UiLCJiUHJlcGFyZUZvckVkaXQiLCJnZXRNZXNzYWdlc1BhdGgiLCJzTWVzc2FnZXNQYXRoIiwiJFByb3BlcnR5UGF0aCIsInJlc29sdmUiLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJtUGFyYW0iLCJsb2NhbEkxOG5SZWYiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyIsIm92ZXJ3cml0ZU9uRGVtYW5kIiwiYk92ZXJ3cml0ZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvUmVzb3VyY2VCdW5kbGUiLCJvVmlldyIsImdldFJlc291cmNlQnVuZGxlIiwiX29SZXNvdXJjZUJ1bmRsZSIsInJlcXVlc3RPYmplY3QiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJNZXNzYWdlQm94IiwiQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIiwiQ3JlYXRlZEJ5VXNlciIsInNVbnNhdmVkQ2hhbmdlc01zZyIsInNob3dNZXNzYWdlQm94Iiwib0RpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGV4dCIsInN0YXRlIiwiY29udGVudCIsIlRleHQiLCJ0ZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0eXBlIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJmbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYkV4ZWN1dGUiLCJvUmVzcG9uc2UiLCJzdGF0dXMiLCJmbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkIiwib0RyYWZ0Q29udGV4dCIsImZuQWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsImJQcmVwYXJlT25FZGl0IiwiZXhjIiwiZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50Iiwic0JhdGNoR3JvdXAiLCJvUHJlcGFyZVByb21pc2UiLCJvQWN0aXZhdGVQcm9taXNlIiwiYWxsIiwidmFsdWVzIiwiZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQiLCJzRGlzY2FyZEFjdGlvbiIsImJJc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiZGVsZXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQSxNQUFNQSxlQUFlLEdBQUc7QUFDdkJDLElBQUFBLElBQUksRUFBRSxZQURpQjtBQUV2QkMsSUFBQUEsVUFBVSxFQUFFLGtCQUZXO0FBR3ZCQyxJ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LEdBQVYsRUFBb0I7QUFDMUIsYUFBTzNFLE9BQU8sQ0FBQ0MsTUFBUixDQUFlMEUsR0FBZixDQUFQO0FBQ0EsS0FwQ0ssQ0FBUDtBQXFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTNUgsV0FBVCxDQUFxQkUsUUFBckIsRUFBc0Q7QUFDckQsUUFBTWtJLGNBQWMsR0FBR25JLGFBQWEsQ0FBQ0MsUUFBRCxFQUFXVixlQUFlLENBQUNHLE9BQTNCLENBQXBDO0FBQUEsUUFDQzBJLGVBQWUsR0FBR25JLFFBQVEsQ0FBQ1MsU0FBVCxHQUFxQjJILGNBRHhDOztBQUdBLFFBQUlELGVBQWUsSUFBSyxDQUFDQSxlQUFELElBQW9CLENBQUNELGNBQTdDLEVBQThEO0FBQzdEO0FBQ0EsVUFBSWxJLFFBQVEsQ0FBQ3FJLGlCQUFULEVBQUosRUFBa0M7QUFDakMsZUFBT3JJLFFBQVEsQ0FDYnNJLFVBREssR0FFTEMsWUFGSyxHQUdML0csSUFISyxDQUdBLFlBQVk7QUFDakIsaUJBQU94QixRQUFRLENBQUN3SSxNQUFULEVBQVA7QUFDQSxTQUxLLEVBTUx2RyxLQU5LLENBTUMsVUFBVVksS0FBVixFQUFzQjtBQUM1QixpQkFBT0UsT0FBTyxDQUFDQyxNQUFSLENBQWVILEtBQWYsQ0FBUDtBQUNBLFNBUkssQ0FBUDtBQVNBLE9BVkQsTUFVTztBQUNOLGVBQU83QyxRQUFRLENBQUN3SSxNQUFULEVBQVA7QUFDQTtBQUNELEtBZkQsTUFlTztBQUNOO0FBQ0EsYUFBTzVFLHlCQUF5QixDQUFDNUQsUUFBRCxDQUFoQztBQUNBO0FBQ0Q7O1NBRWNMLEsiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmVcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2FjdGlvbnMvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGNhbGxiYWNrcyB1c2VkIGluIHRoZSBmdW5jdGlvbnNcbiAqXG4gKlxuICogQGF1dGhvciBTQVAgU0VcbiAqIEBzaW5jZSAxLjU0LjBcbiAqIEBpbnRlcmZhY2VcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYXBwcm92ZSBvciByZWplY3QgdGhlIGNyZWF0aW9uIG9mIGEgZHJhZnRcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBhYnN0cmFjdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7KGJvb2xlYW58UHJvbWlzZSl9IEFwcHJvdmFsIG9mIGRyYWZ0IGNyZWF0aW9uIFt0cnVlfGZhbHNlXSBvciBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYm9vbGVhbiB2YWx1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayBhZnRlciBhIGRyYWZ0IHdhcyBzdWNjZXNzdWxseSBjcmVhdGVkXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5hZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBhYnN0cmFjdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQWN0aXZlRG9jdW1lbnRDb250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQWN0aXZlRG9jdW1lbnRDb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIHRvIGFwcHJvdmUgb3IgcmVqZWN0IG92ZXJ3cml0aW5nIGFuIHVuc2F2ZWQgZHJhZnQgb2YgYW5vdGhlciB1c2VyXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay53aGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZFxuICogQGZ1bmN0aW9uXG4gKiBAcHVibGljXG4gKiBAc3RhdGljXG4gKiBAYWJzdHJhY3RcbiAqXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIHsoYm9vbGVhbnxQcm9taXNlKX0gQXBwcm92YWwgdG8gb3ZlcndyaXRlIHVuc2F2ZWQgZHJhZnQgW3RydWV8ZmFsc2VdIG9yIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBib29sZWFuIHZhbHVlXG4gKlxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbi8qIENvbnN0YW50cyBmb3IgZHJhZnQgb3BlcmF0aW9ucyAqL1xuY29uc3QgZHJhZnRPcGVyYXRpb25zID0ge1xuXHRFRElUOiBcIkVkaXRBY3Rpb25cIixcblx0QUNUSVZBVElPTjogXCJBY3RpdmF0aW9uQWN0aW9uXCIsXG5cdERJU0NBUkQ6IFwiRGlzY2FyZEFjdGlvblwiLFxuXHRQUkVQQVJFOiBcIlByZXBhcmF0aW9uQWN0aW9uXCJcbn07XG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU0LjBcbiAqL1xuY29uc3QgZHJhZnQgPSB7XG5cdGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50OiBjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCxcblx0YWN0aXZhdGVEb2N1bWVudDogYWN0aXZhdGVEb2N1bWVudCxcblx0ZGVsZXRlRHJhZnQ6IGRlbGV0ZURyYWZ0XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIGFjdGlvbiBuYW1lIGZvciBhIGRyYWZ0IG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uTmFtZShvQ29udGV4dDogYW55LCBzT3BlcmF0aW9uOiBzdHJpbmcpIHtcblx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNFbnRpdHlTZXRQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvXCIgKyBzT3BlcmF0aW9uKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nIGZvciB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzT3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gKGFjdGlvbiBvciBmdW5jdGlvbiBpbXBvcnQpXG4gKiBAcGFyYW0gb09wdGlvbnMgT3B0aW9ucyB0byBjcmVhdGUgdGhlIG9wZXJhdGlvbiBjb250ZXh0XG4gKiBAcmV0dXJucyB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmd9IFRoZSBjb250ZXh0IGJpbmRpbmcgb2YgdGhlIGJvdW5kIG9wZXJhdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQ6IGFueSwgc09wZXJhdGlvbjogc3RyaW5nLCBvT3B0aW9ucz86IGFueSkge1xuXHRjb25zdCBzT3BlcmF0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIHNPcGVyYXRpb24pO1xuXG5cdHJldHVybiBvQ29udGV4dC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KHNPcGVyYXRpb25OYW1lICsgXCIoLi4uKVwiLCBvQ29udGV4dCwgb09wdGlvbnMpO1xufVxuLyoqXG4gKiBDaGVjayBpZiBvcHRpb25hbCBkcmFmdCBwcmVwYXJlIGFjdGlvbiBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYSBhIHByZXBhcmUgYWN0aW9uIGV4aXN0c1xuICovXG5mdW5jdGlvbiBoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0OiBhbnkpIHtcblx0cmV0dXJuICEhZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGRyYWZ0IGZyb20gYW4gYWN0aXZlIGRvY3VtZW50LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJQcmVzZXJ2ZUNoYW5nZXMgSWYgdHJ1ZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgcHJlc2VydmVkIGFuZCBhbiBlcnJvciBtZXNzYWdlIChodHRwIHN0YXR1cyA0MDkpIGlzIHNlbmQgZnJvbSB0aGUgYmFja2VuZCwgb3RoZXJ3aXNlIGZhbHNlIC0gZXhpc3RpbmcgY2hhbmdlcyBmcm9tIGFub3RoZXIgdXNlciB0aGF0IGFyZSBub3QgbG9ja2VkIGFyZSBvdmVyd3JpdHRlbjwvbGk+XG4gKiBAcmV0dXJucyB7UHJvbWlzZS48c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQ+fSBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0OiBhbnksIGJQcmVzZXJ2ZUNoYW5nZXM6IGJvb2xlYW4pIHtcblx0aWYgKG9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3B0aW9ucyA9IHsgJCRpbmhlcml0RXhwYW5kU2VsZWN0OiB0cnVlIH07XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkVESVQsIG9PcHRpb25zKTtcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlByZXNlcnZlQ2hhbmdlc1wiLCBiUHJlc2VydmVDaGFuZ2VzKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiZGlyZWN0XCI7XG5cdFx0Y29uc3Qgb0VkaXRQcm9taXNlID0gb09wZXJhdGlvbi5leGVjdXRlKHNHcm91cElkKS50aGVuKGZ1bmN0aW9uIChvRHJhZnREb2N1bWVudENvbnRleHQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9EcmFmdERvY3VtZW50Q29udGV4dDtcblx0XHR9KTtcblx0XHRvT3BlcmF0aW9uLmdldE1vZGVsKCkuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdHJldHVybiBvRWRpdFByb21pc2U7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBlZGl0IHRoaXMgZHJhZnQgZG9jdW1lbnRcIik7XG5cdH1cbn1cbi8qZnVuY3Rpb24gZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkKG9Db250ZXh0OiBhbnksIHNHcm91cElkOiBhbnksIGFNZXNzYWdlczogYW55KSB7IC8vV2lsbCB1bmNvbW1lbnQgdGhpcyBmdW5jdGlvbiBpbiB0aGUgY29tbWl0IDogNTUxMzUxMFxuXHRpZiAoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdGNvbnN0IHNNZXNzYWdlID0gYU1lc3NhZ2VzWzBdLm1lc3NhZ2UsXG5cdFx0XHRkaWFsb2dQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vTWVzc2FnZUJveFwiXSwgZnVuY3Rpb24oTWVzc2FnZUJveDogYW55KSB7XG5cdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNNZXNzYWdlLCB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBbTWVzc2FnZUJveC5BY3Rpb24uT0ssIE1lc3NhZ2VCb3guQWN0aW9uLkNBTkNFTF0sXG5cdFx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbihzQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IE1lc3NhZ2VCb3guQWN0aW9uLk9LKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdHJldHVybiBkaWFsb2dQcm9taXNlO1xuXHR9XG59Ki9cbi8qKlxuICogQWN0aXZhdGVzIGEgZHJhZnQgZG9jdW1lbnQuIFRoZSBkcmFmdCB3aWxsIHJlcGxhY2UgdGhlIHNpYmxpbmcgZW50aXR5IGFuZCB3aWxsIGJlIGRlbGV0ZWQgYnkgdGhlIGJhY2sgZW5kLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gW3NHcm91cElkXSBUaGUgb3B0aW9uYWwgYmF0Y2ggZ3JvdXAgaW4gd2hpY2ggdGhlIG9wZXJhdGlvbiBpcyB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMge1Byb21pc2UuPHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0Pn0gUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25cbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dDogYW55LCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIHNHcm91cElkPzogc3RyaW5nKSB7XG5cdGNvbnN0IGJIYXNQcmVwYXJlQWN0aW9uID0gaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dCk7XG5cblx0Ly8gQWNjb3JkaW5nIHRvIHRoZSBkcmFmdCBzcGVjIGlmIHRoZSBzZXJ2aWNlIGNvbnRhaW5zIGEgcHJlcGFyZSBhY3Rpb24gYW5kIHdlIHRyaWdnZXIgYm90aCBwcmVwYXJlIGFuZFxuXHQvLyBhY3RpdmF0ZSBpbiBvbmUgJGJhdGNoIHRoZSBhY3RpdmF0ZSBhY3Rpb24gaXMgY2FsbGVkIHdpdGggaUYtTWF0Y2g9KlxuXHRjb25zdCBiSWdub3JlRXRhZyA9IGJIYXNQcmVwYXJlQWN0aW9uO1xuXG5cdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5BQ1RJVkFUSU9OLCB7ICQkaW5oZXJpdEV4cGFuZFNlbGVjdDogdHJ1ZSB9KTtcblx0XHRyZXR1cm4gb09wZXJhdGlvblxuXHRcdFx0LmV4ZWN1dGUoc0dyb3VwSWQsIGJJZ25vcmVFdGFnKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9BY3RpdmVEb2N1bWVudENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goXG5cdFx0XHRcdC8vaWYgQUNUSVZBVEUgYWN0aW9uIGZhaWxzIHRoZW4gd2UgcmVxdWVzdCBlaXRoZXIgdGhlIHNpZGVFZmZlY3RzIGFnYWluc3QgUFJFUEFSRSBhY3Rpb24gKGlmIGFubm90YXRlZCkgb3IgdGhlIG1lc3NhZ2VzIGFzIGZhbGxiYWNrOlxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKGJIYXNQcmVwYXJlQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSxcblx0XHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCksXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nUGFyYW1ldGVycyA9IG9TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhzQWN0aW9uTmFtZSwgb0NvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRhVGFyZ2V0UGF0aHMgPSBvQmluZGluZ1BhcmFtZXRlcnMgJiYgb0JpbmRpbmdQYXJhbWV0ZXJzLnBhdGhFeHByZXNzaW9ucztcblx0XHRcdFx0XHRcdGlmIChhVGFyZ2V0UGF0aHMgJiYgYVRhcmdldFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoYVRhcmdldFBhdGhzLCBvQ29udGV4dCkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0TWVzc2FnZXMob0NvbnRleHQsIG9TaWRlRWZmZWN0c1NlcnZpY2UpLmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgbWVzc2FnZXNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBhY3RpdmF0aW9uIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKipcbiAqIEV4ZWN1dGUgYSBwcmVwYXJhdGlvbiBhY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuZ3JvdXBJZF0gVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIHdoZXJlIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgb3BlcmF0aW9uIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUHJlcGFyZUZvckVkaXRdIFNoYWxsIHRoZSBtZXNzYWdlcyBiZSByZXF1ZXN0ZWQgaWYgc3VwcG9ydGVkIGJ5IHNlcnZpY2VcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiB7IGdyb3VwSWQ/OiBzdHJpbmc7IGJQcmVwYXJlRm9yRWRpdD86IGJvb2xlYW4gfVxuKSB7XG5cdGNvbnN0IG1QYXJhbXMgPSBtUGFyYW1ldGVycyB8fCB7fTtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpO1xuXG5cdFx0Ly8gVE9ETzogc2lkZSBlZmZlY3RzIHF1YWxpZmllciBzaGFsbCBiZSBldmVuIGRlcHJlY2F0ZWQgdG8gYmUgY2hlY2tlZFxuXHRcdG9PcGVyYXRpb24uc2V0UGFyYW1ldGVyKFwiU2lkZUVmZmVjdHNRdWFsaWZpZXJcIiwgXCJcIik7XG5cblx0XHRjb25zdCBzR3JvdXBJZCA9IG1QYXJhbXMuZ3JvdXBJZCB8fCBvT3BlcmF0aW9uLmdldEdyb3VwSWQoKTtcblx0XHRjb25zdCBvUHJlcGFyYXRpb25Qcm9taXNlID0gb09wZXJhdGlvblxuXHRcdFx0LmV4ZWN1dGUoc0dyb3VwSWQpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChtUGFyYW1zLmJQcmVwYXJlRm9yRWRpdCkge1xuXHRcdFx0XHRcdC8vIGlmIFBSRVBBUkUgYWN0aW9uIGlzIHRyaWdnZXJlZCBhZnRlciBFZGl0IHRoZW4gZWl0aGVyIHRoZSBzaWRlRWZmZWN0cyAoaWYgYW5ub3RhdGVkIGFnYWluc3QgUFJFUEFSRSkgYXJlIGV4ZWN1dGVkIG9yIHRoZSBtZXNzYWdlcyBhcmUgcmVxdWVzdGVkIGFzIGZhbGxiYWNrIGlmIG5vIHNpZGVFZmZlY3RzOlxuXHRcdFx0XHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpLFxuXHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCksXG5cdFx0XHRcdFx0XHRvQmluZGluZ1BhcmFtZXRlcnMgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoc0FjdGlvbk5hbWUsIG9Db250ZXh0KSxcblx0XHRcdFx0XHRcdGFUYXJnZXRQYXRocyA9IG9CaW5kaW5nUGFyYW1ldGVycyAmJiBvQmluZGluZ1BhcmFtZXRlcnMucGF0aEV4cHJlc3Npb25zO1xuXHRcdFx0XHRcdGlmIChhVGFyZ2V0UGF0aHMgJiYgYVRhcmdldFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKGFUYXJnZXRQYXRocywgb0NvbnRleHQsIHNHcm91cElkKS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0TWVzc2FnZXMob0NvbnRleHQsIG9TaWRlRWZmZWN0c1NlcnZpY2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb09wZXJhdGlvbjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW9uXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiBvUHJlcGFyYXRpb25Qcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBwcmVwYXJhdGlvbiBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBtZXNzYWdlIHBhdGggZm9yIGEgY29udGV4dC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBwYXRoIHNoYWxsIGJlIGRldGVybWluZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2UgcGF0aCwgZW1wdHkgaWYgbm90IGFubm90YXRlZFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1BhdGgob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0c0VudGl0eVNldFBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhcIik7XG59XG4vKipcbiAqIFJlcXVlc3RzIHRoZSBtZXNzYWdlcyBpZiBhbm5vdGF0ZWQgZm9yIGEgZ2l2ZW4gY29udGV4dC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBtZXNzYWdlcyBzaGFsbCBiZSByZXF1ZXN0ZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHNTZXJ2aWNlIFNlcnZpY2UgZm9yIHRoZSBTaWRlRWZmZWN0cyBvbiBTQVAgRmlvcmkgZWxlbWVudHNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgbWVzc2FnZXMgd2VyZSByZXF1ZXN0ZWRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gcmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0OiBhbnksIG9TaWRlRWZmZWN0c1NlcnZpY2U6IFNpZGVFZmZlY3RzU2VydmljZSkge1xuXHRjb25zdCBzTWVzc2FnZXNQYXRoID0gZ2V0TWVzc2FnZXNQYXRoKG9Db250ZXh0KTtcblx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRyZXR1cm4gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJFByb3BlcnR5UGF0aDogc01lc3NhZ2VzUGF0aCB9XSBhcyBhbnksIG9Db250ZXh0KTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG4vKipcbiAqIEV4ZWN1dGVzIGRpc2NhcmQgb2YgYSBkcmFmdCBmdW5jdGlvbiB1c2luZyBIVFRQIFBvc3QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24ob0NvbnRleHQ6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvRGlzY2FyZE9wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpO1xuXHRcdGNvbnN0IG9EaXNjYXJkUHJvbWlzZSA9IG9EaXNjYXJkT3BlcmF0aW9uLmV4ZWN1dGUoXCJkaXJlY3RcIik7XG5cdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChcImRpcmVjdFwiKTtcblx0XHRyZXR1cm4gb0Rpc2NhcmRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkaXNjYXJkIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkcmFmdCBkb2N1bWVudCBmcm9tIGFuIGV4aXN0aW5nIGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjb3Jlb2dyYXBoeSBkZWZpbmVkLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5vVmlld10gVGhlIHZpZXdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJQcmVzZXJ2ZUNoYW5nZXNdIFByZXNlcnZlIGNoYW5nZXMgb2YgYW4gZXhpc3RpbmcgZHJhZnQgb2YgYW5vdGhlciB1c2VyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUHJlcGFyZU9uRWRpdF0gQWxzbyBjYWxsIHByZXBhcmUgd2hlbiBjYWxsaW5nIGRyYWZ0IGNyZWF0aW9uXG4gKiBAcGFyYW0ge3NhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50fSBbbVBhcmFtZXRlcnMuZm5CZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudF0gQ2FsbGJhY2sgdGhhdCBhbGxvd3MgdmV0byBiZWZvcmUgY3JlYXRlIHJlcXVlc3QgaXMgZXhlY3V0ZWRcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suYWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudF0gQ2FsbGJhY2sgZm9yIHBvc3Rwcm9jZXNzaW9uZyBhZnRlciBkcmFmdCBkb2N1bWVudCB3YXMgY3JlYXRlZFxuICogQHBhcmFtIHtzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay53aGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZH0gW21QYXJhbWV0ZXJzLmZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWRdIENhbGxiYWNrIGZvciBkZWNpZGluZyBvbiBvdmVyd3JpdGluZyBhbiB1bnNhdmVkIGNoYW5nZSBieSBhbm90aGVyIHVzZXJcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIHdpdGggdGhlIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dCBjb250ZXh0fSBvZiB0aGUgbmV3IGRyYWZ0IGRvY3VtZW50XG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBvYmplY3QsXG5cdG1QYXJhbWV0ZXJzOiB7XG5cdFx0b1ZpZXc6IFZpZXc7XG5cdFx0YlByZXNlcnZlQ2hhbmdlcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0YlByZXBhcmVPbkVkaXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdGZuQmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQ/OiBhbnk7XG5cdFx0Zm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50PzogYW55O1xuXHRcdGZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQ/OiBhbnk7XG5cdH1cbikge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fSxcblx0XHRsb2NhbEkxOG5SZWYgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93ID1cblx0XHRcdHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAodHlwZW9mIG1QYXJhbS5iUHJlc2VydmVDaGFuZ2VzID09PSBcImJvb2xlYW5cIiAmJiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyk7IC8vZGVmYXVsdCB0cnVlXG5cblx0LyoqXG5cdCAqIE92ZXJ3cml0ZSBvciByZWplY3QgYmFzZWQgb24gZm5XaGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZC5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBiT3ZlcndyaXRlIE92ZXJ3cml0ZSB0aGUgY2hhbmdlIG9yIG5vdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2l0aCByZXN1bHQgb2Yge0BsaW5rIHNhcC5mZS5jb3JlLmFjdGlvbnMjZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbn1cblx0ICovXG5cdGZ1bmN0aW9uIG92ZXJ3cml0ZU9uRGVtYW5kKGJPdmVyd3JpdGU6IGFueSkge1xuXHRcdGlmIChiT3ZlcndyaXRlKSB7XG5cdFx0XHQvL092ZXJ3cml0ZSBleGlzdGluZyBjaGFuZ2VzXG5cdFx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgZHJhZnREYXRhQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGxldCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXG5cdFx0XHRyZXR1cm4gKChtUGFyYW1ldGVycy5vVmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChfb1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBfb1Jlc291cmNlQnVuZGxlO1xuXHRcdFx0XHRcdHJldHVybiBkcmFmdERhdGFDb250ZXh0LnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGRyYWZ0QWRtaW5EYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAoZHJhZnRBZG1pbkRhdGEpIHtcblx0XHRcdFx0XHRcdC8vIHJlbW92ZSBhbGwgdW5ib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFzIHdlIHNob3cgYSBzcGVjaWFsIGRpYWxvZ1xuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdGxldCBzSW5mbyA9IGRyYWZ0QWRtaW5EYXRhLkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIHx8IGRyYWZ0QWRtaW5EYXRhLkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSAobVBhcmFtZXRlcnMub1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldDtcblx0XHRcdFx0XHRcdGlmIChzSW5mbykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTG9ja2VkQnlVc2VyTXNnID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XCJDX0RSQUZUX09CSkVDVF9QQUdFX0RSQUZUX0xPQ0tFRF9CWV9VU0VSXCIsXG5cdFx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRcdHNJbmZvLFxuXHRcdFx0XHRcdFx0XHRcdHNFbnRpdHlTZXRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKHNMb2NrZWRCeVVzZXJNc2cpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c0luZm8gPSBkcmFmdEFkbWluRGF0YS5DcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24gfHwgZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlcjtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc1Vuc2F2ZWRDaGFuZ2VzTXNnID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XCJDX0RSQUZUX09CSkVDVF9QQUdFX0RSQUZUX1VOU0FWRURfQ0hBTkdFU1wiLFxuXHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHRzSW5mbyxcblx0XHRcdFx0XHRcdFx0XHRzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZUJveChzVW5zYXZlZENoYW5nZXNNc2cpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJEcmFmdCBjcmVhdGlvbiBhYm9ydGVkIGZvciBkb2N1bWVudDogXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkpKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNob3dNZXNzYWdlQm94KHNVbnNhdmVkQ2hhbmdlc01zZzogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRcdHRpdGxlOiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIkNfRFJBRlRfT0JKRUNUX1BBR0VfV0FSTklOR1wiKSxcblx0XHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRjb250ZW50OiBuZXcgVGV4dCh7XG5cdFx0XHRcdFx0dGV4dDogc1Vuc2F2ZWRDaGFuZ2VzTXNnXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0dGV4dDogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9FRElUXCIpLFxuXHRcdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0dGV4dDogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHJlamVjdChcIkRyYWZ0IGNyZWF0aW9uIGFib3J0ZWQgZm9yIGRvY3VtZW50OiBcIiArIG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICghb0NvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQmluZGluZyBjb250ZXh0IHRvIGFjdGl2ZSBkb2N1bWVudCBpcyByZXF1aXJlZFwiKSk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdG1QYXJhbS5mbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG5cdFx0XHQ/IG1QYXJhbS5mbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KG9Db250ZXh0LCBiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdylcblx0XHRcdDogdHJ1ZVxuXHQpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGJFeGVjdXRlOiBhbnkpIHtcblx0XHRcdGlmICghYkV4ZWN1dGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRHJhZnQgY3JlYXRpb24gd2FzIGFib3J0ZWQgYnkgZXh0ZW5zaW9uIGZvciBkb2N1bWVudDogXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24ob0NvbnRleHQsIGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93KS5jYXRjaChmdW5jdGlvbiAob1Jlc3BvbnNlOiBhbnkpIHtcblx0XHRcdFx0Ly9Pbmx5IGNhbGwgYmFjayBpZiBlcnJvciA0MDlcblx0XHRcdFx0aWYgKGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93ICYmIG9SZXNwb25zZS5zdGF0dXMgPT09IDQwOSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRcdFx0XHRcdG1QYXJhbS5mbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkID8gbVBhcmFtLmZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQoKSA6IHRydWVcblx0XHRcdFx0XHQpLnRoZW4ob3ZlcndyaXRlT25EZW1hbmQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihvUmVzcG9uc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KVxuXHRcdC50aGVuKGZ1bmN0aW9uIChvRHJhZnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdG1QYXJhbS5mbkFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcblx0XHRcdFx0XHQ/IG1QYXJhbS5mbkFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQob0NvbnRleHQsIG9EcmFmdENvbnRleHQpXG5cdFx0XHRcdFx0OiBvRHJhZnRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdH0pXG5cdFx0LnRoZW4oZnVuY3Rpb24gKG9EcmFmdENvbnRleHQ6IGFueSkge1xuXHRcdFx0aWYgKG1QYXJhbS5iUHJlcGFyZU9uRWRpdCAmJiBoYXNQcmVwYXJlQWN0aW9uKG9EcmFmdENvbnRleHQpKSB7XG5cdFx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihvRHJhZnRDb250ZXh0LCBvQXBwQ29tcG9uZW50LCB7IGJQcmVwYXJlRm9yRWRpdDogdHJ1ZSB9KS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0RyYWZ0Q29udGV4dDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb0RyYWZ0Q29udGV4dDtcblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAoZXhjOiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGFjdGl2ZSBkb2N1bWVudCBmcm9tIGEgZHJhZnQgZG9jdW1lbnQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHNldmVyYWwgaG9va3MgYXMgdGhlcmUgaXMgYSBjZXJ0YWluIGNob3Jlb2dyYXBoeSBkZWZpbmVkLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNhY3RpdmF0ZURvY3VtZW50XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdFxuICogQHN0YXRpY1xuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50fSBbbVBhcmFtZXRlcnMuZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50XSBDYWxsYmFjayB0aGF0IGFsbG93cyB2ZXRvIGJlZm9yZSBjcmVhdGUgcmVxdWVzdCBpcyBleGVjdXRlZFxuICogQHBhcmFtIHtzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50XSBDYWxsYmFjayBmb3IgcG9zdHByb2Nlc3Npb25nIGFmdGVyIGRvY3VtZW50IHdhcyBhY3RpdmF0ZWQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQgY29udGV4dH0gb2YgdGhlIG5ldyBkcmFmdCBkb2N1bWVudFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBhY3RpdmF0ZURvY3VtZW50KFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBvYmplY3QsXG5cdG1QYXJhbWV0ZXJzOiB7IGZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudD86IGFueTsgZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQ/OiBhbnkgfVxuKSB7XG5cdGNvbnN0IG1QYXJhbSA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdGlmICghb0NvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQmluZGluZyBjb250ZXh0IHRvIGRyYWZ0IGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpKTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1QYXJhbS5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQgPyBtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50KG9Db250ZXh0KSA6IHRydWUpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGJFeGVjdXRlOiBhbnkpIHtcblx0XHRcdGlmICghYkV4ZWN1dGUpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkFjdGl2YXRpb24gb2YgdGhlIGRvY3VtZW50IHdhcyBhYm9ydGVkIGJ5IGV4dGVuc2lvbiBmb3IgZG9jdW1lbnQ6IFwiICsgb0NvbnRleHQuZ2V0UGF0aCgpKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dCkpIHtcblx0XHRcdFx0cmV0dXJuIGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQsIG9BcHBDb21wb25lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBhY3RpdmF0aW9uIHJlcXVpcmVzIHByZXBhcmF0aW9uICovXG5cdFx0XHRjb25zdCBzQmF0Y2hHcm91cCA9IFwiZHJhZnRcIjtcblx0XHRcdC8vIHdlIHVzZSB0aGUgc2FtZSBiYXRjaEdyb3VwIHRvIGZvcmNlIHByZXBhcmUgYW5kIGFjdGl2YXRlIGluIGEgc2FtZSBiYXRjaCBidXQgd2l0aCBkaWZmZXJlbnQgY2hhbmdlc2V0XG5cdFx0XHRjb25zdCBvUHJlcGFyZVByb21pc2UgPSBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCwge1xuXHRcdFx0XHRncm91cElkOiBzQmF0Y2hHcm91cCxcblx0XHRcdFx0YlByZXBhcmVGb3JFZGl0OiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0XHRvQ29udGV4dC5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNCYXRjaEdyb3VwKTtcblxuXHRcdFx0Y29uc3Qgb0FjdGl2YXRlUHJvbWlzZSA9IGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQsIG9BcHBDb21wb25lbnQsIHNCYXRjaEdyb3VwKTtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtvUHJlcGFyZVByb21pc2UsIG9BY3RpdmF0ZVByb21pc2VdKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAodmFsdWVzOiBbYW55LCBhbnldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlc1sxXTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChleGM6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC50aGVuKGZ1bmN0aW9uIChvQWN0aXZlRG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdG1QYXJhbS5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudCA/IG1QYXJhbS5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudChvQ29udGV4dCwgb0FjdGl2ZURvY3VtZW50Q29udGV4dCkgOiBvQWN0aXZlRG9jdW1lbnRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChleGM6IGFueSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGV4Yyk7XG5cdFx0fSk7XG59XG4vKipcbiAqIEhUVFAgUE9TVCBjYWxsIHdoZW4gRHJhZnRBY3Rpb24gaXMgcHJlc2VudCBmb3IgRHJhZnQgRGVsZXRlOyBIVFRQIERFTEVURSBmb3IgRHJhZnQod2hlbiBubyBEcmFmdEFjdGlvbilcbiAqIGFuZCBBY3RpdmUgSW5zdGFuY2UgdXNlcyBERUxFVEUgYWx3YXlzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNkZWxldGVEcmFmdFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGRvY3VtZW50IHRvIGJlIGRpc2NhcmRlZFxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZURyYWZ0KG9Db250ZXh0OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0Y29uc3Qgc0Rpc2NhcmRBY3Rpb24gPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuRElTQ0FSRCksXG5cdFx0YklzQWN0aXZlRW50aXR5ID0gb0NvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHk7XG5cblx0aWYgKGJJc0FjdGl2ZUVudGl0eSB8fCAoIWJJc0FjdGl2ZUVudGl0eSAmJiAhc0Rpc2NhcmRBY3Rpb24pKSB7XG5cdFx0Ly9Vc2UgRGVsZXRlIGluIGNhc2Ugb2YgYWN0aXZlIGVudGl0eSBhbmQgbm8gZGlzY2FyZCBhY3Rpb24gYXZhaWxhYmxlIGZvciBkcmFmdFxuXHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRleHRcblx0XHRcdFx0LmdldEJpbmRpbmcoKVxuXHRcdFx0XHQucmVzZXRDaGFuZ2VzKClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udGV4dC5kZWxldGUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBvQ29udGV4dC5kZWxldGUoKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly9Vc2UgRGlzY2FyZCBQb3N0IEFjdGlvbiBpZiBpdCBpcyBhIGRyYWZ0IGVudGl0eSBhbmQgZGlzY2FyZCBhY3Rpb24gZXhpc3RzXG5cdFx0cmV0dXJuIGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24ob0NvbnRleHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyYWZ0O1xuIl19
|
|
563
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyYWZ0LnRzIl0sIm5hbWVzIjpbImRyYWZ0T3BlcmF0aW9ucyIsIkVESVQiLCJBQ1RJVkFUSU9OIiwiRElTQ0FSRCIsIlBSRVBBUkUiLCJkcmFmdCIsImNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsImRlbGV0ZURyYWZ0IiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiaGFzUHJlcGFyZUFjdGlvbiIsImV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24iLCJiUHJlc2VydmVDaGFuZ2VzIiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwic2V0UGFyYW1ldGVyIiwic0dyb3VwSWQiLCJvRWRpdFByb21pc2UiLCJleGVjdXRlIiwidGhlbiIsIm9EcmFmdERvY3VtZW50Q29udGV4dCIsInN1Ym1pdEJhdGNoIiwiRXJyb3IiLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsImJIYXNQcmVwYXJlQWN0aW9uIiwiYklnbm9yZUV0YWciLCJvQWN0aXZlRG9jdW1lbnRDb250ZXh0IiwiY2F0Y2giLCJzQWN0aW9uTmFtZSIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJvQmluZGluZ1BhcmFtZXRlcnMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiYVRhcmdldFBhdGhzIiwicGF0aEV4cHJlc3Npb25zIiwibGVuZ3RoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJyZXF1ZXN0TWVzc2FnZXMiLCJQcm9taXNlIiwicmVqZWN0IiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJtUGFyYW1ldGVycyIsIm1QYXJhbXMiLCJncm91cElkIiwiZ2V0R3JvdXBJZCIsIm9QcmVwYXJhdGlvblByb21pc2UiLCJiUHJlcGFyZUZvckVkaXQiLCJnZXRNZXNzYWdlc1BhdGgiLCJzTWVzc2FnZXNQYXRoIiwiJFByb3BlcnR5UGF0aCIsInJlc29sdmUiLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJtUGFyYW0iLCJsb2NhbEkxOG5SZWYiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyIsIm92ZXJ3cml0ZU9uRGVtYW5kIiwiYk92ZXJ3cml0ZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvUmVzb3VyY2VCdW5kbGUiLCJvVmlldyIsImdldFJlc291cmNlQnVuZGxlIiwiX29SZXNvdXJjZUJ1bmRsZSIsInJlcXVlc3RPYmplY3QiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJNZXNzYWdlQm94IiwiQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIiwiQ3JlYXRlZEJ5VXNlciIsInNVbnNhdmVkQ2hhbmdlc01zZyIsInNob3dNZXNzYWdlQm94Iiwib0RpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGV4dCIsInN0YXRlIiwiY29udGVudCIsIlRleHQiLCJ0ZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0eXBlIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJmbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYkV4ZWN1dGUiLCJvUmVzcG9uc2UiLCJzdGF0dXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQiLCJvRHJhZnRDb250ZXh0IiwiZm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYlByZXBhcmVPbkVkaXQiLCJleGMiLCJmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQiLCJzQmF0Y2hHcm91cCIsIm9QcmVwYXJlUHJvbWlzZSIsIm9BY3RpdmF0ZVByb21pc2UiLCJhbGwiLCJ2YWx1ZXMiLCJmbkFmdGVyQWN0aXZhdGVEb2N1bWVudCIsInNEaXNjYXJkQWN0aW9uIiwiYklzQWN0aXZlRW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJkZWxldGUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBLE1BQU1BLGVBQWUsR0FBRztBQUN2QkMsSUFBQUEsSUFBSSxFQUFFLFlBRGlCO0FBRXZC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ekMsQ0FBakMsR0FBb0dBLHNCQUQ5RixDQUFQO0FBR0EsS0FqQ0ssRUFrQ0xDLEtBbENLLENBa0NDLFVBQVUwRixHQUFWLEVBQW9CO0FBQzFCLGFBQU81RSxPQUFPLENBQUNDLE1BQVIsQ0FBZTJFLEdBQWYsQ0FBUDtBQUNBLEtBcENLLENBQVA7QUFxQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBUzdILFdBQVQsQ0FBcUJFLFFBQXJCLEVBQXNEO0FBQ3JELFFBQU1tSSxjQUFjLEdBQUdwSSxhQUFhLENBQUNDLFFBQUQsRUFBV1YsZUFBZSxDQUFDRyxPQUEzQixDQUFwQztBQUFBLFFBQ0MySSxlQUFlLEdBQUdwSSxRQUFRLENBQUNTLFNBQVQsR0FBcUI0SCxjQUR4Qzs7QUFHQSxRQUFJRCxlQUFlLElBQUssQ0FBQ0EsZUFBRCxJQUFvQixDQUFDRCxjQUE3QyxFQUE4RDtBQUM3RDtBQUNBLFVBQUluSSxRQUFRLENBQUNzSSxpQkFBVCxFQUFKLEVBQWtDO0FBQ2pDLGVBQU90SSxRQUFRLENBQ2J1SSxVQURLLEdBRUxDLFlBRkssR0FHTGhILElBSEssQ0FHQSxZQUFZO0FBQ2pCLGlCQUFPeEIsUUFBUSxDQUFDeUksTUFBVCxFQUFQO0FBQ0EsU0FMSyxFQU1MeEcsS0FOSyxDQU1DLFVBQVVZLEtBQVYsRUFBc0I7QUFDNUIsaUJBQU9FLE9BQU8sQ0FBQ0MsTUFBUixDQUFlSCxLQUFmLENBQVA7QUFDQSxTQVJLLENBQVA7QUFTQSxPQVZELE1BVU87QUFDTixlQUFPN0MsUUFBUSxDQUFDeUksTUFBVCxFQUFQO0FBQ0E7QUFDRCxLQWZELE1BZU87QUFDTjtBQUNBLGFBQU83RSx5QkFBeUIsQ0FBQzVELFFBQUQsQ0FBaEM7QUFDQTtBQUNEOztTQUVjTCxLIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9hY3Rpb25zL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjYWxsYmFja3MgdXNlZCBpbiB0aGUgZnVuY3Rpb25zXG4gKlxuICpcbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAc2luY2UgMS41NC4wXG4gKiBAaW50ZXJmYWNlXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFja1xuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIHRvIGFwcHJvdmUgb3IgcmVqZWN0IHRoZSBjcmVhdGlvbiBvZiBhIGRyYWZ0XG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5iZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAYWJzdHJhY3RcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMgeyhib29sZWFufFByb21pc2UpfSBBcHByb3ZhbCBvZiBkcmFmdCBjcmVhdGlvbiBbdHJ1ZXxmYWxzZV0gb3IgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJvb2xlYW4gdmFsdWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgYWZ0ZXIgYSBkcmFmdCB3YXMgc3VjY2Vzc3VsbHkgY3JlYXRlZFxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suYWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAYWJzdHJhY3RcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0FjdGl2ZURvY3VtZW50Q29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0FjdGl2ZURvY3VtZW50Q29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayB0byBhcHByb3ZlIG9yIHJlamVjdCBvdmVyd3JpdGluZyBhbiB1bnNhdmVkIGRyYWZ0IG9mIGFub3RoZXIgdXNlclxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2sud2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWRcbiAqIEBmdW5jdGlvblxuICogQHB1YmxpY1xuICogQHN0YXRpY1xuICogQGFic3RyYWN0XG4gKlxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7KGJvb2xlYW58UHJvbWlzZSl9IEFwcHJvdmFsIHRvIG92ZXJ3cml0ZSB1bnNhdmVkIGRyYWZ0IFt0cnVlfGZhbHNlXSBvciBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYm9vbGVhbiB2YWx1ZVxuICpcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG4vKiBDb25zdGFudHMgZm9yIGRyYWZ0IG9wZXJhdGlvbnMgKi9cbmNvbnN0IGRyYWZ0T3BlcmF0aW9ucyA9IHtcblx0RURJVDogXCJFZGl0QWN0aW9uXCIsXG5cdEFDVElWQVRJT046IFwiQWN0aXZhdGlvbkFjdGlvblwiLFxuXHRESVNDQVJEOiBcIkRpc2NhcmRBY3Rpb25cIixcblx0UFJFUEFSRTogXCJQcmVwYXJhdGlvbkFjdGlvblwiXG59O1xuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgZHJhZnQgcHJvZ3JhbW1pbmcgbW9kZWxcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdFxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41NC4wXG4gKi9cbmNvbnN0IGRyYWZ0ID0ge1xuXHRjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudDogY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQsXG5cdGFjdGl2YXRlRG9jdW1lbnQ6IGFjdGl2YXRlRG9jdW1lbnQsXG5cdGRlbGV0ZURyYWZ0OiBkZWxldGVEcmFmdFxufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBhY3Rpb24gbmFtZSBmb3IgYSBkcmFmdCBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHNPcGVyYXRpb24gVGhlIG9wZXJhdGlvbiBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgZHJhZnQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbk5hbWUob0NvbnRleHQ6IGFueSwgc09wZXJhdGlvbjogc3RyaW5nKSB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L1wiICsgc09wZXJhdGlvbik7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gb3BlcmF0aW9uIGNvbnRleHQgYmluZGluZyBmb3IgdGhlIGdpdmVuIGNvbnRleHQgYW5kIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIChhY3Rpb24gb3IgZnVuY3Rpb24gaW1wb3J0KVxuICogQHBhcmFtIG9PcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSBvcGVyYXRpb24gY29udGV4dFxuICogQHJldHVybnMge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nfSBUaGUgY29udGV4dCBiaW5kaW5nIG9mIHRoZSBib3VuZCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0OiBhbnksIHNPcGVyYXRpb246IHN0cmluZywgb09wdGlvbnM/OiBhbnkpIHtcblx0Y29uc3Qgc09wZXJhdGlvbk5hbWUgPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBzT3BlcmF0aW9uKTtcblxuXHRyZXR1cm4gb0NvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChzT3BlcmF0aW9uTmFtZSArIFwiKC4uLilcIiwgb0NvbnRleHQsIG9PcHRpb25zKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgb3B0aW9uYWwgZHJhZnQgcHJlcGFyZSBhY3Rpb24gZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGEgYSBwcmVwYXJlIGFjdGlvbiBleGlzdHNcbiAqL1xuZnVuY3Rpb24gaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dDogYW55KSB7XG5cdHJldHVybiAhIWdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBkcmFmdCBmcm9tIGFuIGFjdGl2ZSBkb2N1bWVudC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIHtib29sZWFufSBiUHJlc2VydmVDaGFuZ2VzIElmIHRydWUgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlciB1c2VyIHRoYXQgYXJlIG5vdCBsb2NrZWQgYXJlIHByZXNlcnZlZCBhbmQgYW4gZXJyb3IgbWVzc2FnZSAoaHR0cCBzdGF0dXMgNDA5KSBpcyBzZW5kIGZyb20gdGhlIGJhY2tlbmQsIG90aGVyd2lzZSBmYWxzZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgb3ZlcndyaXR0ZW48L2xpPlxuICogQHJldHVybnMge1Byb21pc2UuPHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0Pn0gUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25cbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dDogYW55LCBiUHJlc2VydmVDaGFuZ2VzOiBib29sZWFuKSB7XG5cdGlmIChvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb09wdGlvbnMgPSB7ICQkaW5oZXJpdEV4cGFuZFNlbGVjdDogdHJ1ZSB9O1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5FRElULCBvT3B0aW9ucyk7XG5cdFx0b09wZXJhdGlvbi5zZXRQYXJhbWV0ZXIoXCJQcmVzZXJ2ZUNoYW5nZXNcIiwgYlByZXNlcnZlQ2hhbmdlcyk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImRpcmVjdFwiO1xuXHRcdGNvbnN0IG9FZGl0UHJvbWlzZSA9IG9PcGVyYXRpb24uZXhlY3V0ZShzR3JvdXBJZCkudGhlbihmdW5jdGlvbiAob0RyYWZ0RG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBvRHJhZnREb2N1bWVudENvbnRleHQ7XG5cdFx0fSk7XG5cdFx0b09wZXJhdGlvbi5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRyZXR1cm4gb0VkaXRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgZWRpdCB0aGlzIGRyYWZ0IGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChvQ29udGV4dDogYW55LCBzR3JvdXBJZDogYW55LCBhTWVzc2FnZXM6IGFueSkgeyAvL1dpbGwgdW5jb21tZW50IHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbW1pdCA6IDU1MTM1MTBcblx0aWYgKGFNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzTWVzc2FnZSA9IGFNZXNzYWdlc1swXS5tZXNzYWdlLFxuXHRcdFx0ZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL01lc3NhZ2VCb3hcIl0sIGZ1bmN0aW9uKE1lc3NhZ2VCb3g6IGFueSkge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzTWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW01lc3NhZ2VCb3guQWN0aW9uLk9LLCBNZXNzYWdlQm94LkFjdGlvbi5DQU5DRUxdLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQWN0aW9uID09PSBNZXNzYWdlQm94LkFjdGlvbi5PSykge1xuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nUHJvbWlzZTtcblx0fVxufSovXG4vKipcbiAqIEFjdGl2YXRlcyBhIGRyYWZ0IGRvY3VtZW50LiBUaGUgZHJhZnQgd2lsbCByZXBsYWNlIHRoZSBzaWJsaW5nIGVudGl0eSBhbmQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBiYWNrIGVuZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtzR3JvdXBJZF0gVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIGluIHdoaWNoIHRoZSBvcGVyYXRpb24gaXMgdG8gYmUgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQ6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBzR3JvdXBJZD86IHN0cmluZykge1xuXHRjb25zdCBiSGFzUHJlcGFyZUFjdGlvbiA9IGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQpO1xuXG5cdC8vIEFjY29yZGluZyB0byB0aGUgZHJhZnQgc3BlYyBpZiB0aGUgc2VydmljZSBjb250YWlucyBhIHByZXBhcmUgYWN0aW9uIGFuZCB3ZSB0cmlnZ2VyIGJvdGggcHJlcGFyZSBhbmRcblx0Ly8gYWN0aXZhdGUgaW4gb25lICRiYXRjaCB0aGUgYWN0aXZhdGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRoIGlGLU1hdGNoPSpcblx0Y29uc3QgYklnbm9yZUV0YWcgPSBiSGFzUHJlcGFyZUFjdGlvbjtcblxuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuQUNUSVZBVElPTiwgeyAkJGluaGVyaXRFeHBhbmRTZWxlY3Q6IHRydWUgfSk7XG5cdFx0cmV0dXJuIG9PcGVyYXRpb25cblx0XHRcdC5leGVjdXRlKHNHcm91cElkLCBiSWdub3JlRXRhZylcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvQWN0aXZlRG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9BY3RpdmVEb2N1bWVudENvbnRleHQ7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKFxuXHRcdFx0XHQvL2lmIEFDVElWQVRFIGFjdGlvbiBmYWlscyB0aGVuIHdlIHJlcXVlc3QgZWl0aGVyIHRoZSBzaWRlRWZmZWN0cyBhZ2FpbnN0IFBSRVBBUkUgYWN0aW9uIChpZiBhbm5vdGF0ZWQpIG9yIHRoZSBtZXNzYWdlcyBhcyBmYWxsYmFjazpcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChiSGFzUHJlcGFyZUFjdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSksXG5cdFx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0XHRcdFx0XHRvQmluZGluZ1BhcmFtZXRlcnMgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoc0FjdGlvbk5hbWUsIG9Db250ZXh0KSxcblx0XHRcdFx0XHRcdFx0YVRhcmdldFBhdGhzID0gb0JpbmRpbmdQYXJhbWV0ZXJzICYmIG9CaW5kaW5nUGFyYW1ldGVycy5wYXRoRXhwcmVzc2lvbnM7XG5cdFx0XHRcdFx0XHRpZiAoYVRhcmdldFBhdGhzICYmIGFUYXJnZXRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKGFUYXJnZXRQYXRocywgb0NvbnRleHQpLmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIG1lc3NhZ2VzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYWN0aXZhdGlvbiBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuLyoqXG4gKiBFeGVjdXRlIGEgcHJlcGFyYXRpb24gYWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmdyb3VwSWRdIFRoZSBvcHRpb25hbCBiYXRjaCBncm91cCB3aGVyZSB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbiBpblxuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlByZXBhcmVGb3JFZGl0XSBTaGFsbCB0aGUgbWVzc2FnZXMgYmUgcmVxdWVzdGVkIGlmIHN1cHBvcnRlZCBieSBzZXJ2aWNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQ+fSBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihcblx0b0NvbnRleHQ6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogeyBncm91cElkPzogc3RyaW5nOyBiUHJlcGFyZUZvckVkaXQ/OiBib29sZWFuIH1cbikge1xuXHRjb25zdCBtUGFyYW1zID0gbVBhcmFtZXRlcnMgfHwge307XG5cdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKTtcblxuXHRcdC8vIFRPRE86IHNpZGUgZWZmZWN0cyBxdWFsaWZpZXIgc2hhbGwgYmUgZXZlbiBkZXByZWNhdGVkIHRvIGJlIGNoZWNrZWRcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlNpZGVFZmZlY3RzUXVhbGlmaWVyXCIsIFwiXCIpO1xuXG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBtUGFyYW1zLmdyb3VwSWQgfHwgb09wZXJhdGlvbi5nZXRHcm91cElkKCk7XG5cdFx0Y29uc3Qgb1ByZXBhcmF0aW9uUHJvbWlzZSA9IG9PcGVyYXRpb25cblx0XHRcdC5leGVjdXRlKHNHcm91cElkKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAobVBhcmFtcy5iUHJlcGFyZUZvckVkaXQpIHtcblx0XHRcdFx0XHQvLyBpZiBQUkVQQVJFIGFjdGlvbiBpcyB0cmlnZ2VyZWQgYWZ0ZXIgRWRpdCB0aGVuIGVpdGhlciB0aGUgc2lkZUVmZmVjdHMgKGlmIGFubm90YXRlZCBhZ2FpbnN0IFBSRVBBUkUpIGFyZSBleGVjdXRlZCBvciB0aGUgbWVzc2FnZXMgYXJlIHJlcXVlc3RlZCBhcyBmYWxsYmFjayBpZiBubyBzaWRlRWZmZWN0czpcblx0XHRcdFx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSxcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmdQYXJhbWV0ZXJzID0gb1NpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHNBY3Rpb25OYW1lLCBvQ29udGV4dCksXG5cdFx0XHRcdFx0XHRhVGFyZ2V0UGF0aHMgPSBvQmluZGluZ1BhcmFtZXRlcnMgJiYgb0JpbmRpbmdQYXJhbWV0ZXJzLnBhdGhFeHByZXNzaW9ucztcblx0XHRcdFx0XHRpZiAoYVRhcmdldFBhdGhzICYmIGFUYXJnZXRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0UGF0aHMsIG9Db250ZXh0LCBzR3JvdXBJZCkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb247XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgdGhlIG9wZXJhdGlvblwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gb1ByZXBhcmF0aW9uUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBhbiBhY3RpdmUgZG9jdW1lbnRcIik7XG5cdH1cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWVzc2FnZSBwYXRoIGZvciBhIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgcGF0aCBzaGFsbCBiZSBkZXRlcm1pbmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBNZXNzYWdlIHBhdGgsIGVtcHR5IGlmIG5vdCBhbm5vdGF0ZWRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXNQYXRoKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNFbnRpdHlTZXRQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoXCIpO1xufVxuLyoqXG4gKiBSZXF1ZXN0cyB0aGUgbWVzc2FnZXMgaWYgYW5ub3RhdGVkIGZvciBhIGdpdmVuIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgbWVzc2FnZXMgc2hhbGwgYmUgcmVxdWVzdGVkXG4gKiBAcGFyYW0ge29iamVjdH0gb1NpZGVFZmZlY3RzU2VydmljZSBTZXJ2aWNlIGZvciB0aGUgU2lkZUVmZmVjdHMgb24gU0FQIEZpb3JpIGVsZW1lbnRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIG1lc3NhZ2VzIHdlcmUgcmVxdWVzdGVkXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RNZXNzYWdlcyhvQ29udGV4dDogYW55LCBvU2lkZUVmZmVjdHNTZXJ2aWNlOiBTaWRlRWZmZWN0c1NlcnZpY2UpIHtcblx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGdldE1lc3NhZ2VzUGF0aChvQ29udGV4dCk7XG5cdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0cmV0dXJuIG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICRQcm9wZXJ0eVBhdGg6IHNNZXNzYWdlc1BhdGggfV0gYXMgYW55LCBvQ29udGV4dCk7XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBkaXNjYXJkIG9mIGEgZHJhZnQgZnVuY3Rpb24gdXNpbmcgSFRUUCBQb3N0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQ+fSBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb0Rpc2NhcmRPcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5ESVNDQVJEKTtcblx0XHRjb25zdCBvRGlzY2FyZFByb21pc2UgPSBvRGlzY2FyZE9wZXJhdGlvbi5leGVjdXRlKFwiZGlyZWN0XCIpO1xuXHRcdG9Db250ZXh0LmdldE1vZGVsKCkuc3VibWl0QmF0Y2goXCJkaXJlY3RcIik7XG5cdFx0cmV0dXJuIG9EaXNjYXJkUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGlzY2FyZCBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgZHJhZnQgZG9jdW1lbnQgZnJvbSBhbiBleGlzdGluZyBkb2N1bWVudC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgc2V2ZXJhbCBob29rcyBhcyB0aGVyZSBpcyBhIGNlcnRhaW4gY29yZW9ncmFwaHkgZGVmaW5lZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMub1ZpZXddIFRoZSB2aWV3XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUHJlc2VydmVDaGFuZ2VzXSBQcmVzZXJ2ZSBjaGFuZ2VzIG9mIGFuIGV4aXN0aW5nIGRyYWZ0IG9mIGFub3RoZXIgdXNlclxuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlByZXBhcmVPbkVkaXRdIEFsc28gY2FsbCBwcmVwYXJlIHdoZW4gY2FsbGluZyBkcmFmdCBjcmVhdGlvblxuICogQHBhcmFtIHtzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5iZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRdIENhbGxiYWNrIHRoYXQgYWxsb3dzIHZldG8gYmVmb3JlIGNyZWF0ZSByZXF1ZXN0IGlzIGV4ZWN1dGVkXG4gKiBAcGFyYW0ge3NhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnR9IFttUGFyYW1ldGVycy5mbkFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRdIENhbGxiYWNrIGZvciBwb3N0cHJvY2Vzc2lvbmcgYWZ0ZXIgZHJhZnQgZG9jdW1lbnQgd2FzIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2sud2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWR9IFttUGFyYW1ldGVycy5mbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkXSBDYWxsYmFjayBmb3IgZGVjaWRpbmcgb24gb3ZlcndyaXRpbmcgYW4gdW5zYXZlZCBjaGFuZ2UgYnkgYW5vdGhlciB1c2VyXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQgY29udGV4dH0gb2YgdGhlIG5ldyBkcmFmdCBkb2N1bWVudFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudChcblx0b0NvbnRleHQ6IGFueSxcblx0b0FwcENvbXBvbmVudDogb2JqZWN0LFxuXHRtUGFyYW1ldGVyczoge1xuXHRcdG9WaWV3OiBWaWV3O1xuXHRcdGJQcmVzZXJ2ZUNoYW5nZXM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdGJQcmVwYXJlT25FZGl0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRmbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50PzogYW55O1xuXHRcdGZuQWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudD86IGFueTtcblx0XHRmbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkPzogYW55O1xuXHR9XG4pIHtcblx0Y29uc3QgbVBhcmFtID0gbVBhcmFtZXRlcnMgfHwge30sXG5cdFx0bG9jYWxJMThuUmVmID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyA9XG5cdFx0XHR0eXBlb2YgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMgPT09IFwidW5kZWZpbmVkXCIgfHwgKHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJib29sZWFuXCIgJiYgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMpOyAvL2RlZmF1bHQgdHJ1ZVxuXG5cdC8qKlxuXHQgKiBPdmVyd3JpdGUgb3IgcmVqZWN0IGJhc2VkIG9uIGZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYk92ZXJ3cml0ZSBPdmVyd3JpdGUgdGhlIGNoYW5nZSBvciBub3Rcblx0ICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdpdGggcmVzdWx0IG9mIHtAbGluayBzYXAuZmUuY29yZS5hY3Rpb25zI2V4ZWN1dGVEcmFmdEVkaXRBY3Rpb259XG5cdCAqL1xuXHRmdW5jdGlvbiBvdmVyd3JpdGVPbkRlbWFuZChiT3ZlcndyaXRlOiBhbnkpIHtcblx0XHRpZiAoYk92ZXJ3cml0ZSkge1xuXHRcdFx0Ly9PdmVyd3JpdGUgZXhpc3RpbmcgY2hhbmdlc1xuXHRcdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IGRyYWZ0RGF0YUNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQob0NvbnRleHQuZ2V0UGF0aCgpICsgXCIvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIikuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRsZXQgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRcdFx0cmV0dXJuICgobVBhcmFtZXRlcnMub1ZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoX29SZXNvdXJjZUJ1bmRsZTogYW55KSB7XG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlID0gX29SZXNvdXJjZUJ1bmRsZTtcblx0XHRcdFx0XHRyZXR1cm4gZHJhZnREYXRhQ29udGV4dC5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChkcmFmdEFkbWluRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0XHRcdFx0XHQvLyByZW1vdmUgYWxsIHVuYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcyB3ZSBzaG93IGEgc3BlY2lhbCBkaWFsb2dcblx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRsZXQgc0luZm8gPSBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbiB8fCBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKG1QYXJhbWV0ZXJzLm9WaWV3LmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRpZiAoc0luZm8pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0xvY2tlZEJ5VXNlck1zZyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9MT0NLRURfQllfVVNFUlwiLFxuXHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHRzSW5mbyxcblx0XHRcdFx0XHRcdFx0XHRzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc0xvY2tlZEJ5VXNlck1zZyk7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNJbmZvID0gZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIHx8IGRyYWZ0QWRtaW5EYXRhLkNyZWF0ZWRCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNVbnNhdmVkQ2hhbmdlc01zZyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9VTlNBVkVEX0NIQU5HRVNcIixcblx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0c0luZm8sXG5cdFx0XHRcdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRHJhZnQgY3JlYXRpb24gYWJvcnRlZCBmb3IgZG9jdW1lbnQ6IFwiICsgb0NvbnRleHQuZ2V0UGF0aCgpKSk7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93TWVzc2FnZUJveChzVW5zYXZlZENoYW5nZXNNc2c6IGFueSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHR0aXRsZTogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0RSQUZUX09CSkVDVF9QQUdFX1dBUk5JTkdcIiksXG5cdFx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdFx0Y29udGVudDogbmV3IFRleHQoe1xuXHRcdFx0XHRcdHRleHQ6IHNVbnNhdmVkQ2hhbmdlc01zZ1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfRURJVFwiKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZWplY3QoXCJEcmFmdCBjcmVhdGlvbiBhYm9ydGVkIGZvciBkb2N1bWVudDogXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvRGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBhY3RpdmUgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIikpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRtUGFyYW0uZm5CZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuXHRcdFx0PyBtUGFyYW0uZm5CZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudChvQ29udGV4dCwgYlJ1blByZXNlcnZlQ2hhbmdlc0Zsb3cpXG5cdFx0XHQ6IHRydWVcblx0KVxuXHRcdC50aGVuKGZ1bmN0aW9uIChiRXhlY3V0ZTogYW55KSB7XG5cdFx0XHRpZiAoIWJFeGVjdXRlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRyYWZ0IGNyZWF0aW9uIHdhcyBhYm9ydGVkIGJ5IGV4dGVuc2lvbiBmb3IgZG9jdW1lbnQ6IFwiICsgb0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdykuY2F0Y2goZnVuY3Rpb24gKG9SZXNwb25zZTogYW55KSB7XG5cdFx0XHRcdC8vT25seSBjYWxsIGJhY2sgaWYgZXJyb3IgNDA5XG5cdFx0XHRcdGlmIChiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyAmJiBvUmVzcG9uc2Uuc3RhdHVzID09PSA0MDkpIHtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdFx0XHRtUGFyYW0uZm5XaGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZCA/IG1QYXJhbS5mbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkKCkgOiB0cnVlXG5cdFx0XHRcdFx0KS50aGVuKG92ZXJ3cml0ZU9uRGVtYW5kKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3Iob1Jlc3BvbnNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbihmdW5jdGlvbiAob0RyYWZ0Q29udGV4dDogYW55KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRtUGFyYW0uZm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG5cdFx0XHRcdFx0PyBtUGFyYW0uZm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KG9Db250ZXh0LCBvRHJhZnRDb250ZXh0KVxuXHRcdFx0XHRcdDogb0RyYWZ0Q29udGV4dFxuXHRcdFx0KTtcblx0XHR9KVxuXHRcdC50aGVuKGZ1bmN0aW9uIChvRHJhZnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdGlmIChtUGFyYW0uYlByZXBhcmVPbkVkaXQgJiYgaGFzUHJlcGFyZUFjdGlvbihvRHJhZnRDb250ZXh0KSkge1xuXHRcdFx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0RyYWZ0Q29udGV4dCwgb0FwcENvbXBvbmVudCwgeyBiUHJlcGFyZUZvckVkaXQ6IHRydWUgfSkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKGV4YzogYW55KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXhjKTtcblx0XHR9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhY3RpdmUgZG9jdW1lbnQgZnJvbSBhIGRyYWZ0IGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjaG9yZW9ncmFwaHkgZGVmaW5lZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjYWN0aXZhdGVEb2N1bWVudFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge3NhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudF0gQ2FsbGJhY2sgdGhhdCBhbGxvd3MgdmV0byBiZWZvcmUgY3JlYXRlIHJlcXVlc3QgaXMgZXhlY3V0ZWRcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suZm5BZnRlckFjdGl2YXRlRG9jdW1lbnR9IFttUGFyYW1ldGVycy5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudF0gQ2FsbGJhY2sgZm9yIHBvc3Rwcm9jZXNzaW9uZyBhZnRlciBkb2N1bWVudCB3YXMgYWN0aXZhdGVkLlxuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0IGNvbnRleHR9IG9mIHRoZSBuZXcgZHJhZnQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gYWN0aXZhdGVEb2N1bWVudChcblx0b0NvbnRleHQ6IGFueSxcblx0b0FwcENvbXBvbmVudDogb2JqZWN0LFxuXHRtUGFyYW1ldGVyczogeyBmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQ/OiBhbnk7IGZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50PzogYW55IH1cbikge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fTtcblxuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBkcmFmdCBkb2N1bWVudCBpcyByZXF1aXJlZFwiKSk7XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50ID8gbVBhcmFtLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudChvQ29udGV4dCkgOiB0cnVlKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChiRXhlY3V0ZTogYW55KSB7XG5cdFx0XHRpZiAoIWJFeGVjdXRlKSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBY3RpdmF0aW9uIG9mIHRoZSBkb2N1bWVudCB3YXMgYWJvcnRlZCBieSBleHRlbnNpb24gZm9yIGRvY3VtZW50OiBcIiArIG9Db250ZXh0LmdldFBhdGgoKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQpKSB7XG5cdFx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50KTtcblx0XHRcdH1cblxuXHRcdFx0LyogYWN0aXZhdGlvbiByZXF1aXJlcyBwcmVwYXJhdGlvbiAqL1xuXHRcdFx0Y29uc3Qgc0JhdGNoR3JvdXAgPSBcImRyYWZ0XCI7XG5cdFx0XHQvLyB3ZSB1c2UgdGhlIHNhbWUgYmF0Y2hHcm91cCB0byBmb3JjZSBwcmVwYXJlIGFuZCBhY3RpdmF0ZSBpbiBhIHNhbWUgYmF0Y2ggYnV0IHdpdGggZGlmZmVyZW50IGNoYW5nZXNldFxuXHRcdFx0Y29uc3Qgb1ByZXBhcmVQcm9taXNlID0gZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0NvbnRleHQsIG9BcHBDb21wb25lbnQsIHtcblx0XHRcdFx0Z3JvdXBJZDogc0JhdGNoR3JvdXAsXG5cdFx0XHRcdGJQcmVwYXJlRm9yRWRpdDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzQmF0Y2hHcm91cCk7XG5cblx0XHRcdGNvbnN0IG9BY3RpdmF0ZVByb21pc2UgPSBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50LCBzQmF0Y2hHcm91cCk7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChbb1ByZXBhcmVQcm9taXNlLCBvQWN0aXZhdGVQcm9taXNlXSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHZhbHVlczogW2FueSwgYW55XSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZXNbMV07XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXhjOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXhjKTtcblx0XHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbihmdW5jdGlvbiAob0FjdGl2ZURvY3VtZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQgPyBtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQob0NvbnRleHQsIG9BY3RpdmVEb2N1bWVudENvbnRleHQpIDogb0FjdGl2ZURvY3VtZW50Q29udGV4dFxuXHRcdFx0KTtcblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAoZXhjOiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBIVFRQIFBPU1QgY2FsbCB3aGVuIERyYWZ0QWN0aW9uIGlzIHByZXNlbnQgZm9yIERyYWZ0IERlbGV0ZTsgSFRUUCBERUxFVEUgZm9yIERyYWZ0KHdoZW4gbm8gRHJhZnRBY3Rpb24pXG4gKiBhbmQgQWN0aXZlIEluc3RhbmNlIHVzZXMgREVMRVRFIGFsd2F5cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjZGVsZXRlRHJhZnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBkaXNjYXJkZWRcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBkZWxldGVEcmFmdChvQ29udGV4dDogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGNvbnN0IHNEaXNjYXJkQWN0aW9uID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpLFxuXHRcdGJJc0FjdGl2ZUVudGl0eSA9IG9Db250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXG5cdGlmIChiSXNBY3RpdmVFbnRpdHkgfHwgKCFiSXNBY3RpdmVFbnRpdHkgJiYgIXNEaXNjYXJkQWN0aW9uKSkge1xuXHRcdC8vVXNlIERlbGV0ZSBpbiBjYXNlIG9mIGFjdGl2ZSBlbnRpdHkgYW5kIG5vIGRpc2NhcmQgYWN0aW9uIGF2YWlsYWJsZSBmb3IgZHJhZnRcblx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0XG5cdFx0XHRcdC5nZXRCaW5kaW5nKClcblx0XHRcdFx0LnJlc2V0Q2hhbmdlcygpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vVXNlIERpc2NhcmQgUG9zdCBBY3Rpb24gaWYgaXQgaXMgYSBkcmFmdCBlbnRpdHkgYW5kIGRpc2NhcmQgYWN0aW9uIGV4aXN0c1xuXHRcdHJldHVybiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBkcmFmdDtcbiJdfQ==
|
|
@@ -459,6 +459,7 @@ function createDraftFromActiveDocument(
|
|
|
459
459
|
return executeDraftEditAction(oContext, bRunPreserveChangesFlow).catch(function (oResponse: any) {
|
|
460
460
|
//Only call back if error 409
|
|
461
461
|
if (bRunPreserveChangesFlow && oResponse.status === 409) {
|
|
462
|
+
messageHandling.removeBoundTransitionMessages();
|
|
462
463
|
messageHandling.removeUnboundTransitionMessages();
|
|
463
464
|
return Promise.resolve(
|
|
464
465
|
mParam.fnWhenDecisionToOverwriteDocumentIsRequired ? mParam.fnWhenDecisionToOverwriteDocumentIsRequired() : true
|
|
@@ -22,7 +22,7 @@ sap.ui.define(
|
|
|
22
22
|
"sap/ui/core/MessageType",
|
|
23
23
|
"sap/fe/core/helpers/ModelHelper"
|
|
24
24
|
],
|
|
25
|
-
function(
|
|
25
|
+
function (
|
|
26
26
|
ControllerExtension,
|
|
27
27
|
OverrideExecution,
|
|
28
28
|
Log,
|
|
@@ -99,7 +99,7 @@ sap.ui.define(
|
|
|
99
99
|
* @public
|
|
100
100
|
* @since 1.90.0
|
|
101
101
|
*/
|
|
102
|
-
editDocument: function(oContext, mParameters) {
|
|
102
|
+
editDocument: function (oContext, mParameters) {
|
|
103
103
|
mParameters = mParameters || {};
|
|
104
104
|
var that = this,
|
|
105
105
|
bPrepareOnEdit = mParameters.prepareOnEdit || undefined,
|
|
@@ -117,7 +117,7 @@ sap.ui.define(
|
|
|
117
117
|
that._getMessageHandler()
|
|
118
118
|
)
|
|
119
119
|
)
|
|
120
|
-
.then(function(oNewDocumentContext) {
|
|
120
|
+
.then(function (oNewDocumentContext) {
|
|
121
121
|
var sProgrammingModel = that._getProgrammingModel(oContext);
|
|
122
122
|
|
|
123
123
|
if (sProgrammingModel === ProgrammingModel.Sticky) {
|
|
@@ -130,7 +130,7 @@ sap.ui.define(
|
|
|
130
130
|
if (oNewDocumentContext !== oContext) {
|
|
131
131
|
return that
|
|
132
132
|
._handleNewContext(oNewDocumentContext, true, undefined, bDraftNavigation, true)
|
|
133
|
-
.then(function() {
|
|
133
|
+
.then(function () {
|
|
134
134
|
if (sProgrammingModel === ProgrammingModel.Sticky) {
|
|
135
135
|
// The stickyOn handler must be set after the navigation has been done,
|
|
136
136
|
// as the URL may change in the case of FCL
|
|
@@ -140,12 +140,12 @@ sap.ui.define(
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
})
|
|
143
|
-
.catch(function(oError) {
|
|
143
|
+
.catch(function (oError) {
|
|
144
144
|
Log.error("Error while editing the document", oError);
|
|
145
145
|
});
|
|
146
146
|
},
|
|
147
147
|
|
|
148
|
-
deleteMultipleDocuments: function(aContexts, mParameters) {
|
|
148
|
+
deleteMultipleDocuments: function (aContexts, mParameters) {
|
|
149
149
|
if (mParameters) {
|
|
150
150
|
mParameters.beforeDeleteCallBack = this.base.editFlow.onBeforeDelete;
|
|
151
151
|
} else {
|
|
@@ -153,10 +153,7 @@ sap.ui.define(
|
|
|
153
153
|
beforeDeleteCallBack: this.base.editFlow.onBeforeDelete
|
|
154
154
|
};
|
|
155
155
|
}
|
|
156
|
-
return this.base
|
|
157
|
-
.getView()
|
|
158
|
-
.getController()
|
|
159
|
-
._editFlow.deleteMultipleDocuments(aContexts, mParameters);
|
|
156
|
+
return this.base.getView().getController()._editFlow.deleteMultipleDocuments(aContexts, mParameters);
|
|
160
157
|
},
|
|
161
158
|
|
|
162
159
|
/**
|
|
@@ -170,14 +167,14 @@ sap.ui.define(
|
|
|
170
167
|
* @public
|
|
171
168
|
* @since 1.90.0
|
|
172
169
|
*/
|
|
173
|
-
updateDocument: function(oContext, oPromise) {
|
|
170
|
+
updateDocument: function (oContext, oPromise) {
|
|
174
171
|
var that = this,
|
|
175
172
|
transactionHelper = that._getTransactionHelper(),
|
|
176
173
|
oBindingContext = that.getView().getBindingContext(),
|
|
177
174
|
bIsDraft = that._getProgrammingModel(oContext) === ProgrammingModel.Draft;
|
|
178
175
|
|
|
179
176
|
this._getMessageHandler().removeTransitionMessages();
|
|
180
|
-
return this._syncTask(function() {
|
|
177
|
+
return this._syncTask(function () {
|
|
181
178
|
if (oBindingContext) {
|
|
182
179
|
transactionHelper.handleDocumentModifications();
|
|
183
180
|
EditState.setEditStateDirty();
|
|
@@ -190,7 +187,7 @@ sap.ui.define(
|
|
|
190
187
|
|
|
191
188
|
return oPromise
|
|
192
189
|
.then(
|
|
193
|
-
function() {
|
|
190
|
+
function () {
|
|
194
191
|
if (bIsDraft && oBindingContext) {
|
|
195
192
|
var oMetaModel = oBindingContext.getModel().getMetaModel(),
|
|
196
193
|
sEntitySetName = oMetaModel.getMetaContext(oBindingContext.getPath()).getObject("@sapui.name"),
|
|
@@ -204,7 +201,7 @@ sap.ui.define(
|
|
|
204
201
|
sChangedPath = SemanticKeyHelper.getSemanticPath(oBindingContext, true);
|
|
205
202
|
|
|
206
203
|
if (sCurrentSemanticPath !== sChangedPath) {
|
|
207
|
-
return that._handleNewContext(oBindingContext, true, undefined, true).then(function() {
|
|
204
|
+
return that._handleNewContext(oBindingContext, true, undefined, true).then(function () {
|
|
208
205
|
that._setDraftStatus(DraftStatus.Saved);
|
|
209
206
|
});
|
|
210
207
|
} else {
|
|
@@ -215,16 +212,16 @@ sap.ui.define(
|
|
|
215
212
|
}
|
|
216
213
|
}
|
|
217
214
|
},
|
|
218
|
-
function() {
|
|
215
|
+
function () {
|
|
219
216
|
if (bIsDraft && oBindingContext) {
|
|
220
217
|
that._setDraftStatus(DraftStatus.Clear);
|
|
221
218
|
}
|
|
222
219
|
}
|
|
223
220
|
)
|
|
224
|
-
.catch(function(oError) {
|
|
221
|
+
.catch(function (oError) {
|
|
225
222
|
Log.error("Error while updating the document", oError);
|
|
226
223
|
})
|
|
227
|
-
.finally(function() {
|
|
224
|
+
.finally(function () {
|
|
228
225
|
that._getMessageHandler().showMessages();
|
|
229
226
|
});
|
|
230
227
|
});
|
|
@@ -256,7 +253,7 @@ sap.ui.define(
|
|
|
256
253
|
* @public
|
|
257
254
|
* @since 1.90.0
|
|
258
255
|
*/
|
|
259
|
-
createDocument: function(vListBinding, mParameters) {
|
|
256
|
+
createDocument: function (vListBinding, mParameters) {
|
|
260
257
|
var that = this,
|
|
261
258
|
transactionHelper = this._getTransactionHelper(),
|
|
262
259
|
oLockObject = this._getGlobalUIModel(),
|
|
@@ -275,7 +272,7 @@ sap.ui.define(
|
|
|
275
272
|
if (mParameters.creationMode === CreationMode.External) {
|
|
276
273
|
// Create by navigating to an external target
|
|
277
274
|
// TODO: Call appropriate function (currently using the same as for outbound chevron nav, and without any context - 3rd param)
|
|
278
|
-
return this._syncTask().then(function() {
|
|
275
|
+
return this._syncTask().then(function () {
|
|
279
276
|
var oController = that.getView().getController(),
|
|
280
277
|
sCreatePath = ModelHelper.getAbsoluteMetaPathForListBinding(that.getView(), vListBinding);
|
|
281
278
|
|
|
@@ -313,11 +310,11 @@ sap.ui.define(
|
|
|
313
310
|
*/
|
|
314
311
|
function handleSideEffects(oListBinding, oCreationPromise) {
|
|
315
312
|
oCreationPromise
|
|
316
|
-
.then(function(oNewContext) {
|
|
313
|
+
.then(function (oNewContext) {
|
|
317
314
|
// transient contexts are reliably removed once oNewContext.created() is resolved
|
|
318
315
|
return oNewContext.created();
|
|
319
316
|
})
|
|
320
|
-
.then(function() {
|
|
317
|
+
.then(function () {
|
|
321
318
|
var oBindingContext = that.getView().getBindingContext();
|
|
322
319
|
// if there are transient contexts, we must avoid requesting side effects
|
|
323
320
|
// this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
|
|
@@ -329,7 +326,7 @@ sap.ui.define(
|
|
|
329
326
|
.requestSideEffectsForNavigationProperty(oListBinding.getPath(), oBindingContext);
|
|
330
327
|
}
|
|
331
328
|
})
|
|
332
|
-
.catch(function(oError) {
|
|
329
|
+
.catch(function (oError) {
|
|
333
330
|
Log.error("Error while creating the document", oError);
|
|
334
331
|
});
|
|
335
332
|
}
|
|
@@ -349,13 +346,13 @@ sap.ui.define(
|
|
|
349
346
|
oMessageManager
|
|
350
347
|
.getMessageModel()
|
|
351
348
|
.getData()
|
|
352
|
-
.forEach(function(oMessage) {
|
|
349
|
+
.forEach(function (oMessage) {
|
|
353
350
|
if (oMessage.code === sCustomValidationFunction) {
|
|
354
351
|
oMessageManager.removeMessages(oMessage);
|
|
355
352
|
}
|
|
356
353
|
});
|
|
357
354
|
|
|
358
|
-
aValidationMessages.forEach(function(oValidationMessage) {
|
|
355
|
+
aValidationMessages.forEach(function (oValidationMessage) {
|
|
359
356
|
// Handle Bound CustomValidation message
|
|
360
357
|
if (oValidationMessage.messageTarget) {
|
|
361
358
|
oFieldControl = sap.ui.getCore().getControl(mCustomValidity[oValidationMessage.messageTarget].fieldId);
|
|
@@ -365,7 +362,7 @@ sap.ui.define(
|
|
|
365
362
|
oMessageManager
|
|
366
363
|
.getMessageModel()
|
|
367
364
|
.getData()
|
|
368
|
-
.filter(function(oMessage) {
|
|
365
|
+
.filter(function (oMessage) {
|
|
369
366
|
return oMessage.target === sTarget;
|
|
370
367
|
}).length === 0
|
|
371
368
|
) {
|
|
@@ -385,7 +382,7 @@ sap.ui.define(
|
|
|
385
382
|
var aExistingValidationMessages = oMessageManager
|
|
386
383
|
.getMessageModel()
|
|
387
384
|
.getData()
|
|
388
|
-
.filter(function(oMessage) {
|
|
385
|
+
.filter(function (oMessage) {
|
|
389
386
|
return oMessage.target === sTarget;
|
|
390
387
|
});
|
|
391
388
|
aExistingValidationMessages[0].addControlId(mCustomValidity[oValidationMessage.messageTarget].fieldId);
|
|
@@ -410,7 +407,7 @@ sap.ui.define(
|
|
|
410
407
|
|
|
411
408
|
bShouldBusyLock && BusyLocker.lock(oLockObject);
|
|
412
409
|
return this._syncTask(oExecCustomValidation)
|
|
413
|
-
.then(function(aValidationMessages) {
|
|
410
|
+
.then(function (aValidationMessages) {
|
|
414
411
|
if (aValidationMessages.length > 0) {
|
|
415
412
|
createCustomValidationMessages(aValidationMessages);
|
|
416
413
|
Log.error("Custom Validation failed");
|
|
@@ -438,7 +435,7 @@ sap.ui.define(
|
|
|
438
435
|
var sCreationMode = mParameters.creationMode;
|
|
439
436
|
|
|
440
437
|
return Promise.resolve(that._getProgrammingModel(oListBinding))
|
|
441
|
-
.then(function(programmingModel) {
|
|
438
|
+
.then(function (programmingModel) {
|
|
442
439
|
sProgrammingModel = programmingModel;
|
|
443
440
|
if (sCreationMode && sCreationMode !== CreationMode.NewPage) {
|
|
444
441
|
// use the passed creation mode
|
|
@@ -476,7 +473,7 @@ sap.ui.define(
|
|
|
476
473
|
return CreationMode.Async;
|
|
477
474
|
}
|
|
478
475
|
})
|
|
479
|
-
.then(function(sCreationMode) {
|
|
476
|
+
.then(function (sCreationMode) {
|
|
480
477
|
var oCreation,
|
|
481
478
|
mArgs,
|
|
482
479
|
oCreationRow = mParameters.creationRow,
|
|
@@ -494,7 +491,7 @@ sap.ui.define(
|
|
|
494
491
|
// prefill data from creation row
|
|
495
492
|
oPayload = oCreationRowContext.getObject();
|
|
496
493
|
mParameters.data = {};
|
|
497
|
-
Object.keys(oPayload).forEach(function(sPropertyPath) {
|
|
494
|
+
Object.keys(oPayload).forEach(function (sPropertyPath) {
|
|
498
495
|
var oProperty = oMetaModel.getObject(sMetaPath + "/" + sPropertyPath);
|
|
499
496
|
// ensure navigation properties are not part of the payload, deep create not supported
|
|
500
497
|
if (oProperty && oProperty.$kind === "NavigationProperty") {
|
|
@@ -514,7 +511,7 @@ sap.ui.define(
|
|
|
514
511
|
that._handleCreateEvents(oListBinding);
|
|
515
512
|
}
|
|
516
513
|
|
|
517
|
-
oCreation = oValidationCheck.then(function() {
|
|
514
|
+
oCreation = oValidationCheck.then(function () {
|
|
518
515
|
if (!mParameters.parentControl) {
|
|
519
516
|
mParameters.parentControl = that.getView();
|
|
520
517
|
}
|
|
@@ -554,7 +551,7 @@ sap.ui.define(
|
|
|
554
551
|
if (sProgrammingModel == ProgrammingModel.Sticky || mParameters.createAction) {
|
|
555
552
|
mArgs.transient = true;
|
|
556
553
|
}
|
|
557
|
-
oNavigation = oCreation.then(function(oNewDocumentContext) {
|
|
554
|
+
oNavigation = oCreation.then(function (oNewDocumentContext) {
|
|
558
555
|
if (!oNewDocumentContext) {
|
|
559
556
|
var oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
560
557
|
return oRoutingListener.navigateToMessagePage(
|
|
@@ -577,7 +574,7 @@ sap.ui.define(
|
|
|
577
574
|
// the creation row shall be cleared once the validation check was successful and
|
|
578
575
|
// therefore the POST can be sent async to the backend
|
|
579
576
|
oNavigation = oValidationCheck
|
|
580
|
-
.then(function() {
|
|
577
|
+
.then(function () {
|
|
581
578
|
var oCreationRowListBinding = oCreationRowContext.getBinding(),
|
|
582
579
|
oNewTransientContext;
|
|
583
580
|
|
|
@@ -589,12 +586,12 @@ sap.ui.define(
|
|
|
589
586
|
oCreationRow.setBindingContext(oNewTransientContext);
|
|
590
587
|
|
|
591
588
|
// this is needed to avoid console errors TO be checked with model colleagues
|
|
592
|
-
oNewTransientContext.created().catch(function() {
|
|
589
|
+
oNewTransientContext.created().catch(function () {
|
|
593
590
|
Log.trace("transient fast creation context deleted");
|
|
594
591
|
});
|
|
595
592
|
return oCreationRowContext.delete("$direct");
|
|
596
593
|
})
|
|
597
|
-
.catch(function(oError) {
|
|
594
|
+
.catch(function (oError) {
|
|
598
595
|
// Reset busy indicator after a validation error
|
|
599
596
|
if (BusyLocker.isLocked(that.getView().getModel("ui"))) {
|
|
600
597
|
BusyLocker.unlock(that.getView().getModel("ui"));
|
|
@@ -615,7 +612,7 @@ sap.ui.define(
|
|
|
615
612
|
mParameters.creationMode !== CreationMode.Inline;
|
|
616
613
|
if (oCreation) {
|
|
617
614
|
return Promise.all([oCreation, oNavigation])
|
|
618
|
-
.then(function(aParams) {
|
|
615
|
+
.then(function (aParams) {
|
|
619
616
|
if (bIsNewPageCreation) {
|
|
620
617
|
that._setEditMode(EditMode.Editable, bIsNewPageCreation);
|
|
621
618
|
} else {
|
|
@@ -630,7 +627,7 @@ sap.ui.define(
|
|
|
630
627
|
}
|
|
631
628
|
}
|
|
632
629
|
})
|
|
633
|
-
.catch(function(oError) {
|
|
630
|
+
.catch(function (oError) {
|
|
634
631
|
if (oError && oError.navigateBackFromTransientState) {
|
|
635
632
|
oRoutingListener.navigateBackFromTransientState();
|
|
636
633
|
}
|
|
@@ -640,13 +637,13 @@ sap.ui.define(
|
|
|
640
637
|
}
|
|
641
638
|
});
|
|
642
639
|
})
|
|
643
|
-
.finally(function() {
|
|
640
|
+
.finally(function () {
|
|
644
641
|
if (oTable && oTable.isA("sap.ui.mdc.Table")) {
|
|
645
642
|
var fnFocusOrScroll =
|
|
646
643
|
mParameters.creationMode === CreationMode.Inline
|
|
647
644
|
? oTable.focusRow.bind(oTable)
|
|
648
645
|
: oTable.scrollToIndex.bind(oTable);
|
|
649
|
-
oTable.getRowBinding().attachEventOnce("change", function() {
|
|
646
|
+
oTable.getRowBinding().attachEventOnce("change", function () {
|
|
650
647
|
switch (mParameters.createAtEnd) {
|
|
651
648
|
case true:
|
|
652
649
|
if (oTable.data("tableType") === "ResponsiveTable" && oTable.getThreshold()) {
|
|
@@ -681,7 +678,7 @@ sap.ui.define(
|
|
|
681
678
|
* @experimental As of version 1.90.0
|
|
682
679
|
* @since 1.90.0
|
|
683
680
|
*/
|
|
684
|
-
onBeforeSave: function(mParameters) {
|
|
681
|
+
onBeforeSave: function (mParameters) {
|
|
685
682
|
// to be overridden
|
|
686
683
|
return Promise.resolve();
|
|
687
684
|
},
|
|
@@ -702,7 +699,7 @@ sap.ui.define(
|
|
|
702
699
|
* @experimental As of version 1.98.0
|
|
703
700
|
* @since 1.98.0
|
|
704
701
|
*/
|
|
705
|
-
onBeforeCreate: function(mParameters) {
|
|
702
|
+
onBeforeCreate: function (mParameters) {
|
|
706
703
|
// to be overridden
|
|
707
704
|
return Promise.resolve();
|
|
708
705
|
},
|
|
@@ -722,7 +719,7 @@ sap.ui.define(
|
|
|
722
719
|
* @experimental As of version 1.98.0
|
|
723
720
|
* @since 1.98.0
|
|
724
721
|
*/
|
|
725
|
-
onBeforeEdit: function(mParameters) {
|
|
722
|
+
onBeforeEdit: function (mParameters) {
|
|
726
723
|
// to be overridden
|
|
727
724
|
return Promise.resolve();
|
|
728
725
|
},
|
|
@@ -742,7 +739,7 @@ sap.ui.define(
|
|
|
742
739
|
* @experimental As of version 1.98.0
|
|
743
740
|
* @since 1.98.0
|
|
744
741
|
*/
|
|
745
|
-
onBeforeDiscard: function(mParameters) {
|
|
742
|
+
onBeforeDiscard: function (mParameters) {
|
|
746
743
|
// to be overridden
|
|
747
744
|
return Promise.resolve();
|
|
748
745
|
},
|
|
@@ -762,7 +759,7 @@ sap.ui.define(
|
|
|
762
759
|
* @experimental As of version 1.98.0
|
|
763
760
|
* @since 1.98.0
|
|
764
761
|
*/
|
|
765
|
-
onBeforeDelete: function(mParameters) {
|
|
762
|
+
onBeforeDelete: function (mParameters) {
|
|
766
763
|
// to be overridden
|
|
767
764
|
return Promise.resolve();
|
|
768
765
|
},
|
|
@@ -784,7 +781,7 @@ sap.ui.define(
|
|
|
784
781
|
* @public
|
|
785
782
|
* @since 1.90.0
|
|
786
783
|
*/
|
|
787
|
-
saveDocument: function(oContext, mParameters) {
|
|
784
|
+
saveDocument: function (oContext, mParameters) {
|
|
788
785
|
mParameters = mParameters || {};
|
|
789
786
|
var that = this,
|
|
790
787
|
bExecuteSideEffectsOnError = mParameters.bExecuteSideEffectsOnError || undefined,
|
|
@@ -811,7 +808,7 @@ sap.ui.define(
|
|
|
811
808
|
that._getMessageHandler()
|
|
812
809
|
)
|
|
813
810
|
)
|
|
814
|
-
.then(function(oActiveDocumentContext) {
|
|
811
|
+
.then(function (oActiveDocumentContext) {
|
|
815
812
|
var sProgrammingModel = that._getProgrammingModel(oContext);
|
|
816
813
|
|
|
817
814
|
that._removeContextsFromPages();
|
|
@@ -827,14 +824,14 @@ sap.ui.define(
|
|
|
827
824
|
that._handleNewContext(oActiveDocumentContext, false, undefined, bDraftNavigation, true);
|
|
828
825
|
}
|
|
829
826
|
})
|
|
830
|
-
.catch(function(oError) {
|
|
827
|
+
.catch(function (oError) {
|
|
831
828
|
Log.error("Error while saving the document", oError);
|
|
832
829
|
return Promise.reject(oError);
|
|
833
830
|
})
|
|
834
831
|
);
|
|
835
832
|
},
|
|
836
833
|
|
|
837
|
-
toggleDraftActive: function(oContext) {
|
|
834
|
+
toggleDraftActive: function (oContext) {
|
|
838
835
|
var oContextData = oContext.getObject();
|
|
839
836
|
var that = this;
|
|
840
837
|
var bEditable;
|
|
@@ -864,19 +861,16 @@ sap.ui.define(
|
|
|
864
861
|
}
|
|
865
862
|
oToggleContext
|
|
866
863
|
.requestCanonicalPath()
|
|
867
|
-
.then(function(sCanonicalPath) {
|
|
864
|
+
.then(function (sCanonicalPath) {
|
|
868
865
|
// We use the canonical path for the navigation instead of the semantic path, as the
|
|
869
866
|
// semantic key values may have changed between the draft and the active version (BCP 2170216142)
|
|
870
|
-
return oToggleContext
|
|
871
|
-
.getModel()
|
|
872
|
-
.bindContext(sCanonicalPath)
|
|
873
|
-
.getBoundContext();
|
|
867
|
+
return oToggleContext.getModel().bindContext(sCanonicalPath).getBoundContext();
|
|
874
868
|
})
|
|
875
|
-
.then(function(oToggleContext) {
|
|
869
|
+
.then(function (oToggleContext) {
|
|
876
870
|
that._setEditMode(bEditable ? EditMode.Editable : EditMode.Display, false); //switch to edit mode only if a draft is available
|
|
877
871
|
that._handleNewContext(oToggleContext, bEditable, true, true, true);
|
|
878
872
|
})
|
|
879
|
-
.catch(function(err) {
|
|
873
|
+
.catch(function (err) {
|
|
880
874
|
return Promise.reject("Error in EditFlow.toggleDraftActive:" + err);
|
|
881
875
|
});
|
|
882
876
|
},
|
|
@@ -898,7 +892,7 @@ sap.ui.define(
|
|
|
898
892
|
* @public
|
|
899
893
|
* @since 1.90.0
|
|
900
894
|
*/
|
|
901
|
-
cancelDocument: function(oContext, mParameters) {
|
|
895
|
+
cancelDocument: function (oContext, mParameters) {
|
|
902
896
|
var that = this,
|
|
903
897
|
transactionHelper = this._getTransactionHelper(),
|
|
904
898
|
oResourceBundle = that.getView().getController().oResourceBundle;
|
|
@@ -914,7 +908,7 @@ sap.ui.define(
|
|
|
914
908
|
that._getMessageHandler()
|
|
915
909
|
)
|
|
916
910
|
)
|
|
917
|
-
.then(function(oActiveDocumentContext) {
|
|
911
|
+
.then(function (oActiveDocumentContext) {
|
|
918
912
|
var bDraftNavigation = true,
|
|
919
913
|
sProgrammingModel = that._getProgrammingModel(oContext);
|
|
920
914
|
|
|
@@ -936,7 +930,7 @@ sap.ui.define(
|
|
|
936
930
|
} else if (sProgrammingModel === ProgrammingModel.Draft) {
|
|
937
931
|
// We need to load the semantic keys of the active context, as we need them
|
|
938
932
|
// for the navigation
|
|
939
|
-
return that._fetchSemanticKeyValues(oActiveDocumentContext).then(function() {
|
|
933
|
+
return that._fetchSemanticKeyValues(oActiveDocumentContext).then(function () {
|
|
940
934
|
// We force the recreation of the context, so that it's created and bound in the same microtask,
|
|
941
935
|
// so that all properties are loaded together by autoExpandSelect, so that when switching back to Edit mode
|
|
942
936
|
// $$inheritExpandSelect takes all loaded properties into account (BCP 2070462265)
|
|
@@ -951,7 +945,7 @@ sap.ui.define(
|
|
|
951
945
|
return that._handleNewContext(oActiveDocumentContext, false, undefined, bDraftNavigation, true);
|
|
952
946
|
}
|
|
953
947
|
})
|
|
954
|
-
.catch(function(oError) {
|
|
948
|
+
.catch(function (oError) {
|
|
955
949
|
Log.error("Error while discarding the document", oError);
|
|
956
950
|
});
|
|
957
951
|
},
|
|
@@ -972,7 +966,7 @@ sap.ui.define(
|
|
|
972
966
|
* @public
|
|
973
967
|
* @since 1.90.0
|
|
974
968
|
*/
|
|
975
|
-
deleteDocument: function(oContext, mParameters) {
|
|
969
|
+
deleteDocument: function (oContext, mParameters) {
|
|
976
970
|
var that = this;
|
|
977
971
|
var oAppComponent = CommonUtils.getAppComponent(that.getView());
|
|
978
972
|
if (!mParameters) {
|
|
@@ -984,7 +978,7 @@ sap.ui.define(
|
|
|
984
978
|
}
|
|
985
979
|
mParameters.beforeDeleteCallBack = this.base.editFlow.onBeforeDelete;
|
|
986
980
|
return this._deleteDocumentTransaction(oContext, mParameters)
|
|
987
|
-
.then(function() {
|
|
981
|
+
.then(function () {
|
|
988
982
|
// Single objet deletion is triggered from an OP header button (not from a list)
|
|
989
983
|
// --> Mark UI dirty and navigate back to dismiss the OP
|
|
990
984
|
EditState.setEditStateDirty();
|
|
@@ -995,7 +989,7 @@ sap.ui.define(
|
|
|
995
989
|
oAppComponent.getShellServices().setBackNavigation();
|
|
996
990
|
}
|
|
997
991
|
})
|
|
998
|
-
.catch(function(oError) {
|
|
992
|
+
.catch(function (oError) {
|
|
999
993
|
Log.error("Error while deleting the document", oError);
|
|
1000
994
|
});
|
|
1001
995
|
},
|
|
@@ -1010,7 +1004,7 @@ sap.ui.define(
|
|
|
1010
1004
|
* @public
|
|
1011
1005
|
* @since 1.90.0
|
|
1012
1006
|
*/
|
|
1013
|
-
applyDocument: function(oContext) {
|
|
1007
|
+
applyDocument: function (oContext) {
|
|
1014
1008
|
var that = this,
|
|
1015
1009
|
oLockObject = this._getGlobalUIModel();
|
|
1016
1010
|
BusyLocker.lock(oLockObject);
|
|
@@ -1018,12 +1012,12 @@ sap.ui.define(
|
|
|
1018
1012
|
this._submitOpenChanges(oContext)
|
|
1019
1013
|
// check if there are any validation/parse errors
|
|
1020
1014
|
.then(this._checkForValidationErrors.bind(this, oContext))
|
|
1021
|
-
.then(function() {
|
|
1015
|
+
.then(function () {
|
|
1022
1016
|
that._getMessageHandler().showMessageDialog();
|
|
1023
1017
|
that._getRoutingListener().navigateBackFromContext(oContext);
|
|
1024
1018
|
return true;
|
|
1025
1019
|
})
|
|
1026
|
-
.finally(function() {
|
|
1020
|
+
.finally(function () {
|
|
1027
1021
|
if (BusyLocker.isLocked(oLockObject)) {
|
|
1028
1022
|
BusyLocker.unlock(oLockObject);
|
|
1029
1023
|
}
|
|
@@ -1053,7 +1047,7 @@ sap.ui.define(
|
|
|
1053
1047
|
* @since 1.90.0
|
|
1054
1048
|
* @final
|
|
1055
1049
|
**/
|
|
1056
|
-
invokeAction: function(sActionName, mParameters) {
|
|
1050
|
+
invokeAction: function (sActionName, mParameters) {
|
|
1057
1051
|
var that = this,
|
|
1058
1052
|
oControl,
|
|
1059
1053
|
transactionHelper = this._getTransactionHelper(),
|
|
@@ -1155,11 +1149,7 @@ sap.ui.define(
|
|
|
1155
1149
|
}
|
|
1156
1150
|
}
|
|
1157
1151
|
|
|
1158
|
-
|
|
1159
|
-
mParameters.bGetBoundContext = false;
|
|
1160
|
-
} else {
|
|
1161
|
-
mParameters.bGetBoundContext = true;
|
|
1162
|
-
}
|
|
1152
|
+
mParameters.bGetBoundContext = this._getBoundContext(oView, mParameters);
|
|
1163
1153
|
// Need to know that the action is called from ObjectPage for changeSet Isolated workaround
|
|
1164
1154
|
mParameters.bObjectPage = oView.getViewData().converterType === "ObjectPage";
|
|
1165
1155
|
return this._syncTask()
|
|
@@ -1172,18 +1162,18 @@ sap.ui.define(
|
|
|
1172
1162
|
that._getMessageHandler()
|
|
1173
1163
|
)
|
|
1174
1164
|
)
|
|
1175
|
-
.then(function(oResponse) {
|
|
1165
|
+
.then(function (oResponse) {
|
|
1176
1166
|
// if the returned context for the bound action is different than the context on which action was called,
|
|
1177
1167
|
// refresh the corresponding list binding
|
|
1178
1168
|
if (mParameters.contexts) {
|
|
1179
1169
|
return that
|
|
1180
1170
|
._refreshListIfRequired(that._getActionResponseDataAndKeys(sActionName, oResponse), mParameters.contexts[0])
|
|
1181
|
-
.then(function() {
|
|
1171
|
+
.then(function () {
|
|
1182
1172
|
return oResponse;
|
|
1183
1173
|
});
|
|
1184
1174
|
}
|
|
1185
1175
|
})
|
|
1186
|
-
.then(function(oResponse) {
|
|
1176
|
+
.then(function (oResponse) {
|
|
1187
1177
|
if (oCurrentActionCallBacks) {
|
|
1188
1178
|
oCurrentActionCallBacks.fResolver(oResponse);
|
|
1189
1179
|
}
|
|
@@ -1225,7 +1215,7 @@ sap.ui.define(
|
|
|
1225
1215
|
}
|
|
1226
1216
|
}
|
|
1227
1217
|
})
|
|
1228
|
-
.catch(function(err) {
|
|
1218
|
+
.catch(function (err) {
|
|
1229
1219
|
if (oCurrentActionCallBacks) {
|
|
1230
1220
|
oCurrentActionCallBacks.fRejector();
|
|
1231
1221
|
}
|
|
@@ -1253,7 +1243,7 @@ sap.ui.define(
|
|
|
1253
1243
|
* @experimental As of version 1.90.0
|
|
1254
1244
|
* @since 1.90.0
|
|
1255
1245
|
*/
|
|
1256
|
-
securedExecution: function(fnFunction, mParameters) {
|
|
1246
|
+
securedExecution: function (fnFunction, mParameters) {
|
|
1257
1247
|
var bBusySet = mParameters && mParameters.busy && mParameters.busy.set !== undefined ? mParameters.busy.set : true,
|
|
1258
1248
|
bBusyCheck = mParameters && mParameters.busy && mParameters.busy.check !== undefined ? mParameters.busy.check : true,
|
|
1259
1249
|
bUpdatesDocument = (mParameters && mParameters.updatesDocument) || false,
|
|
@@ -1277,7 +1267,7 @@ sap.ui.define(
|
|
|
1277
1267
|
this._getMessageHandler().removeTransitionMessages();
|
|
1278
1268
|
|
|
1279
1269
|
return this._syncTask(fnFunction)
|
|
1280
|
-
.then(function() {
|
|
1270
|
+
.then(function () {
|
|
1281
1271
|
if (bUpdatesDocument) {
|
|
1282
1272
|
that._getTransactionHelper().handleDocumentModifications();
|
|
1283
1273
|
EditState.setEditStateDirty();
|
|
@@ -1286,13 +1276,13 @@ sap.ui.define(
|
|
|
1286
1276
|
}
|
|
1287
1277
|
}
|
|
1288
1278
|
})
|
|
1289
|
-
.catch(function(oError) {
|
|
1279
|
+
.catch(function (oError) {
|
|
1290
1280
|
if (bUpdatesDocument && bIsDraft) {
|
|
1291
1281
|
that._setDraftStatus(DraftStatus.Clear);
|
|
1292
1282
|
}
|
|
1293
1283
|
return Promise.reject(oError);
|
|
1294
1284
|
})
|
|
1295
|
-
.finally(function() {
|
|
1285
|
+
.finally(function () {
|
|
1296
1286
|
if (bBusySet) {
|
|
1297
1287
|
BusyLocker.unlock(oLockObject);
|
|
1298
1288
|
}
|
|
@@ -1305,11 +1295,11 @@ sap.ui.define(
|
|
|
1305
1295
|
*
|
|
1306
1296
|
* @param oEvent
|
|
1307
1297
|
*/
|
|
1308
|
-
handlePatchSent: function(oEvent) {
|
|
1298
|
+
handlePatchSent: function (oEvent) {
|
|
1309
1299
|
var that = this;
|
|
1310
1300
|
this.mPatchPromises = this.mPatchPromises ? this.mPatchPromises : {};
|
|
1311
1301
|
// do this for every unique object (eg: every table) so that each associated promise is fulfilled at the end
|
|
1312
|
-
var oPatchPromise = new Promise(function(resolve, reject) {
|
|
1302
|
+
var oPatchPromise = new Promise(function (resolve, reject) {
|
|
1313
1303
|
that.mPatchPromises[oEvent.getSource()] = {
|
|
1314
1304
|
resolvePatchPromise: resolve,
|
|
1315
1305
|
rejectPatchPromise: reject
|
|
@@ -1323,7 +1313,7 @@ sap.ui.define(
|
|
|
1323
1313
|
*
|
|
1324
1314
|
* @param oEvent
|
|
1325
1315
|
*/
|
|
1326
|
-
handlePatchCompleted: function(oEvent) {
|
|
1316
|
+
handlePatchCompleted: function (oEvent) {
|
|
1327
1317
|
var bSuccess = oEvent.getParameter("success");
|
|
1328
1318
|
if (bSuccess) {
|
|
1329
1319
|
this.mPatchPromises[oEvent.getSource()].resolvePatchPromise();
|
|
@@ -1344,74 +1334,44 @@ sap.ui.define(
|
|
|
1344
1334
|
|
|
1345
1335
|
*/
|
|
1346
1336
|
|
|
1347
|
-
_setEditMode: function(sEditMode, bCreationMode) {
|
|
1348
|
-
this.base
|
|
1349
|
-
.getView()
|
|
1350
|
-
.getController()
|
|
1351
|
-
._editFlow.setEditMode(sEditMode, bCreationMode);
|
|
1337
|
+
_setEditMode: function (sEditMode, bCreationMode) {
|
|
1338
|
+
this.base.getView().getController()._editFlow.setEditMode(sEditMode, bCreationMode);
|
|
1352
1339
|
},
|
|
1353
1340
|
|
|
1354
|
-
_setDraftStatus: function(sDraftState) {
|
|
1355
|
-
this.base
|
|
1356
|
-
.getView()
|
|
1357
|
-
.getController()
|
|
1358
|
-
._editFlow.setDraftStatus(sDraftState);
|
|
1341
|
+
_setDraftStatus: function (sDraftState) {
|
|
1342
|
+
this.base.getView().getController()._editFlow.setDraftStatus(sDraftState);
|
|
1359
1343
|
},
|
|
1360
1344
|
|
|
1361
|
-
_getRoutingListener: function() {
|
|
1362
|
-
return this.base
|
|
1363
|
-
.getView()
|
|
1364
|
-
.getController()
|
|
1365
|
-
._editFlow.getRoutingListener();
|
|
1345
|
+
_getRoutingListener: function () {
|
|
1346
|
+
return this.base.getView().getController()._editFlow.getRoutingListener();
|
|
1366
1347
|
},
|
|
1367
1348
|
|
|
1368
|
-
_getGlobalUIModel: function() {
|
|
1369
|
-
return this.base
|
|
1370
|
-
.getView()
|
|
1371
|
-
.getController()
|
|
1372
|
-
._editFlow.getGlobalUIModel();
|
|
1349
|
+
_getGlobalUIModel: function () {
|
|
1350
|
+
return this.base.getView().getController()._editFlow.getGlobalUIModel();
|
|
1373
1351
|
},
|
|
1374
1352
|
|
|
1375
|
-
_syncTask: function(vTask) {
|
|
1376
|
-
return this.base
|
|
1377
|
-
.getView()
|
|
1378
|
-
.getController()
|
|
1379
|
-
._editFlow.syncTask(vTask);
|
|
1353
|
+
_syncTask: function (vTask) {
|
|
1354
|
+
return this.base.getView().getController()._editFlow.syncTask(vTask);
|
|
1380
1355
|
},
|
|
1381
1356
|
|
|
1382
|
-
_getProgrammingModel: function(oContext) {
|
|
1383
|
-
return this.base
|
|
1384
|
-
.getView()
|
|
1385
|
-
.getController()
|
|
1386
|
-
._editFlow.getProgrammingModel(oContext);
|
|
1357
|
+
_getProgrammingModel: function (oContext) {
|
|
1358
|
+
return this.base.getView().getController()._editFlow.getProgrammingModel(oContext);
|
|
1387
1359
|
},
|
|
1388
1360
|
|
|
1389
|
-
_deleteDocumentTransaction: function(oContext, mParameters) {
|
|
1390
|
-
return this.base
|
|
1391
|
-
.getView()
|
|
1392
|
-
.getController()
|
|
1393
|
-
._editFlow.deleteDocumentTransaction(oContext, mParameters);
|
|
1361
|
+
_deleteDocumentTransaction: function (oContext, mParameters) {
|
|
1362
|
+
return this.base.getView().getController()._editFlow.deleteDocumentTransaction(oContext, mParameters);
|
|
1394
1363
|
},
|
|
1395
1364
|
|
|
1396
|
-
_handleCreateEvents: function(oBinding) {
|
|
1397
|
-
this.base
|
|
1398
|
-
.getView()
|
|
1399
|
-
.getController()
|
|
1400
|
-
._editFlow.handleCreateEvents(oBinding);
|
|
1365
|
+
_handleCreateEvents: function (oBinding) {
|
|
1366
|
+
this.base.getView().getController()._editFlow.handleCreateEvents(oBinding);
|
|
1401
1367
|
},
|
|
1402
1368
|
|
|
1403
|
-
_getTransactionHelper: function() {
|
|
1404
|
-
return this.base
|
|
1405
|
-
.getView()
|
|
1406
|
-
.getController()
|
|
1407
|
-
._editFlow.getTransactionHelper();
|
|
1369
|
+
_getTransactionHelper: function () {
|
|
1370
|
+
return this.base.getView().getController()._editFlow.getTransactionHelper();
|
|
1408
1371
|
},
|
|
1409
1372
|
|
|
1410
|
-
_getInternalModel: function() {
|
|
1411
|
-
return this.base
|
|
1412
|
-
.getView()
|
|
1413
|
-
.getController()
|
|
1414
|
-
._editFlow.getInternalModel();
|
|
1373
|
+
_getInternalModel: function () {
|
|
1374
|
+
return this.base.getView().getController()._editFlow.getInternalModel();
|
|
1415
1375
|
},
|
|
1416
1376
|
|
|
1417
1377
|
/**
|
|
@@ -1424,32 +1384,20 @@ sap.ui.define(
|
|
|
1424
1384
|
* @returns {Function} The resolver function which can be used to externally resolve the promise
|
|
1425
1385
|
*/
|
|
1426
1386
|
|
|
1427
|
-
_createActionPromise: function(sActionName, sControlId) {
|
|
1428
|
-
return this.base
|
|
1429
|
-
.getView()
|
|
1430
|
-
.getController()
|
|
1431
|
-
._editFlow.createActionPromise(sActionName, sControlId);
|
|
1387
|
+
_createActionPromise: function (sActionName, sControlId) {
|
|
1388
|
+
return this.base.getView().getController()._editFlow.createActionPromise(sActionName, sControlId);
|
|
1432
1389
|
},
|
|
1433
1390
|
|
|
1434
|
-
_getCurrentActionPromise: function() {
|
|
1435
|
-
return this.base
|
|
1436
|
-
.getView()
|
|
1437
|
-
.getController()
|
|
1438
|
-
._editFlow.getCurrentActionPromise();
|
|
1391
|
+
_getCurrentActionPromise: function () {
|
|
1392
|
+
return this.base.getView().getController()._editFlow.getCurrentActionPromise();
|
|
1439
1393
|
},
|
|
1440
1394
|
|
|
1441
|
-
_deleteCurrentActionPromise: function() {
|
|
1442
|
-
return this.base
|
|
1443
|
-
.getView()
|
|
1444
|
-
.getController()
|
|
1445
|
-
._editFlow.deleteCurrentActionPromise();
|
|
1395
|
+
_deleteCurrentActionPromise: function () {
|
|
1396
|
+
return this.base.getView().getController()._editFlow.deleteCurrentActionPromise();
|
|
1446
1397
|
},
|
|
1447
1398
|
|
|
1448
|
-
_getMessageHandler: function() {
|
|
1449
|
-
return this.base
|
|
1450
|
-
.getView()
|
|
1451
|
-
.getController()
|
|
1452
|
-
._editFlow.getMessageHandler();
|
|
1399
|
+
_getMessageHandler: function () {
|
|
1400
|
+
return this.base.getView().getController()._editFlow.getMessageHandler();
|
|
1453
1401
|
},
|
|
1454
1402
|
|
|
1455
1403
|
/**
|
|
@@ -1460,61 +1408,46 @@ sap.ui.define(
|
|
|
1460
1408
|
* @param {object} oResponse The bound action's response data or response context
|
|
1461
1409
|
* @returns {object} Object with data and names of the key fields of the response
|
|
1462
1410
|
*/
|
|
1463
|
-
_getActionResponseDataAndKeys: function(sActionName, oResponse) {
|
|
1464
|
-
return this.base
|
|
1465
|
-
.getView()
|
|
1466
|
-
.getController()
|
|
1467
|
-
._editFlow.getActionResponseDataAndKeys(sActionName, oResponse);
|
|
1411
|
+
_getActionResponseDataAndKeys: function (sActionName, oResponse) {
|
|
1412
|
+
return this.base.getView().getController()._editFlow.getActionResponseDataAndKeys(sActionName, oResponse);
|
|
1468
1413
|
},
|
|
1469
1414
|
|
|
1470
|
-
_submitOpenChanges: function(oContext) {
|
|
1415
|
+
_submitOpenChanges: function (oContext) {
|
|
1471
1416
|
var oModel = oContext.getModel(),
|
|
1472
1417
|
oLockObject = this._getGlobalUIModel();
|
|
1473
1418
|
//Currently we are using only 1 updateGroupId, hence submitting the batch directly here
|
|
1474
1419
|
return oModel
|
|
1475
1420
|
.submitBatch("$auto")
|
|
1476
|
-
.then(function() {
|
|
1421
|
+
.then(function () {
|
|
1477
1422
|
if (oModel.hasPendingChanges("$auto")) {
|
|
1478
1423
|
// the submit was not successful
|
|
1479
1424
|
return Promise.reject("submit of open changes failed");
|
|
1480
1425
|
}
|
|
1481
1426
|
})
|
|
1482
|
-
.finally(function() {
|
|
1427
|
+
.finally(function () {
|
|
1483
1428
|
if (BusyLocker.isLocked(oLockObject)) {
|
|
1484
1429
|
BusyLocker.unlock(oLockObject);
|
|
1485
1430
|
}
|
|
1486
1431
|
});
|
|
1487
1432
|
},
|
|
1488
1433
|
|
|
1489
|
-
_handleStickyOn: function(oContext) {
|
|
1490
|
-
return this.base
|
|
1491
|
-
.getView()
|
|
1492
|
-
.getController()
|
|
1493
|
-
._editFlow.handleStickyOn(oContext);
|
|
1434
|
+
_handleStickyOn: function (oContext) {
|
|
1435
|
+
return this.base.getView().getController()._editFlow.handleStickyOn(oContext);
|
|
1494
1436
|
},
|
|
1495
1437
|
|
|
1496
|
-
_handleStickyOff: function() {
|
|
1497
|
-
return this.base
|
|
1498
|
-
.getView()
|
|
1499
|
-
.getController()
|
|
1500
|
-
._editFlow.handleStickyOff();
|
|
1438
|
+
_handleStickyOff: function () {
|
|
1439
|
+
return this.base.getView().getController()._editFlow.handleStickyOff();
|
|
1501
1440
|
},
|
|
1502
1441
|
|
|
1503
|
-
_onBackNavigationInSession: function() {
|
|
1504
|
-
return this.base
|
|
1505
|
-
.getView()
|
|
1506
|
-
.getController()
|
|
1507
|
-
._editFlow.onBackNavigationInSession();
|
|
1442
|
+
_onBackNavigationInSession: function () {
|
|
1443
|
+
return this.base.getView().getController()._editFlow.onBackNavigationInSession();
|
|
1508
1444
|
},
|
|
1509
1445
|
|
|
1510
|
-
_discardStickySession: function(oContext) {
|
|
1511
|
-
return this.base
|
|
1512
|
-
.getView()
|
|
1513
|
-
.getController()
|
|
1514
|
-
._editFlow.discardStickySession(oContext);
|
|
1446
|
+
_discardStickySession: function (oContext) {
|
|
1447
|
+
return this.base.getView().getController()._editFlow.discardStickySession(oContext);
|
|
1515
1448
|
},
|
|
1516
1449
|
|
|
1517
|
-
_handleNewContext: function(oContext, bEditable, bRecreateContext, bDraftNavigation, bForceFocus) {
|
|
1450
|
+
_handleNewContext: function (oContext, bEditable, bRecreateContext, bDraftNavigation, bForceFocus) {
|
|
1518
1451
|
EditState.setEditStateDirty();
|
|
1519
1452
|
|
|
1520
1453
|
return this._getRoutingListener().navigateToContext(oContext, {
|
|
@@ -1528,6 +1461,12 @@ sap.ui.define(
|
|
|
1528
1461
|
});
|
|
1529
1462
|
},
|
|
1530
1463
|
|
|
1464
|
+
_getBoundContext: function (oView, mParams) {
|
|
1465
|
+
var iViewLevel = oView.getViewData().viewLevel;
|
|
1466
|
+
var bRefreshAfterAction = iViewLevel > 1 || (iViewLevel === 1 && mParams.controlId);
|
|
1467
|
+
return !mParams.isNavigable || !!bRefreshAfterAction;
|
|
1468
|
+
},
|
|
1469
|
+
|
|
1531
1470
|
/**
|
|
1532
1471
|
* Checks if there are validation (parse) errors for controls bound to a given context
|
|
1533
1472
|
*
|
|
@@ -1538,15 +1477,11 @@ sap.ui.define(
|
|
|
1538
1477
|
* @returns {Promise} Promise resolves if there are no validation errors, and rejects if there are validation errors
|
|
1539
1478
|
*/
|
|
1540
1479
|
|
|
1541
|
-
_checkForValidationErrors: function(oContext) {
|
|
1480
|
+
_checkForValidationErrors: function (oContext) {
|
|
1542
1481
|
var that = this;
|
|
1543
|
-
return this._syncTask().then(function() {
|
|
1482
|
+
return this._syncTask().then(function () {
|
|
1544
1483
|
var sViewId = that.base.getView().getId();
|
|
1545
|
-
var aMessages = sap.ui
|
|
1546
|
-
.getCore()
|
|
1547
|
-
.getMessageManager()
|
|
1548
|
-
.getMessageModel()
|
|
1549
|
-
.getData(),
|
|
1484
|
+
var aMessages = sap.ui.getCore().getMessageManager().getMessageModel().getData(),
|
|
1550
1485
|
oControl,
|
|
1551
1486
|
oMessage;
|
|
1552
1487
|
|
|
@@ -1577,7 +1512,7 @@ sap.ui.define(
|
|
|
1577
1512
|
* @param {sap.ui.model.odata.v4.Context} oContext The bound context on which the action was executed
|
|
1578
1513
|
* @returns {Promise} Always resolves to param oResponse
|
|
1579
1514
|
*/
|
|
1580
|
-
_refreshListIfRequired: function(oResponse, oContext) {
|
|
1515
|
+
_refreshListIfRequired: function (oResponse, oContext) {
|
|
1581
1516
|
if (!oContext || !oResponse || !oResponse.oData) {
|
|
1582
1517
|
return Promise.resolve();
|
|
1583
1518
|
}
|
|
@@ -1592,13 +1527,13 @@ sap.ui.define(
|
|
|
1592
1527
|
// ensure context is in the response
|
|
1593
1528
|
if (Object.keys(oContextData).length) {
|
|
1594
1529
|
// check if context in response is different than the bound context
|
|
1595
|
-
bReturnedContextIsSame = aKeys.every(function(sKey) {
|
|
1530
|
+
bReturnedContextIsSame = aKeys.every(function (sKey) {
|
|
1596
1531
|
return oCurrentData[sKey] === oContextData[sKey];
|
|
1597
1532
|
});
|
|
1598
1533
|
if (!bReturnedContextIsSame) {
|
|
1599
|
-
return new Promise(function(resolve, reject) {
|
|
1534
|
+
return new Promise(function (resolve, reject) {
|
|
1600
1535
|
if (oBinding.isRoot()) {
|
|
1601
|
-
oBinding.attachEventOnce("dataReceived", function() {
|
|
1536
|
+
oBinding.attachEventOnce("dataReceived", function () {
|
|
1602
1537
|
resolve();
|
|
1603
1538
|
});
|
|
1604
1539
|
oBinding.refresh();
|
|
@@ -1608,15 +1543,15 @@ sap.ui.define(
|
|
|
1608
1543
|
.getSideEffectsService()
|
|
1609
1544
|
.requestSideEffects([{ $NavigationPropertyPath: oBinding.getPath() }], oBinding.getContext())
|
|
1610
1545
|
.then(
|
|
1611
|
-
function() {
|
|
1546
|
+
function () {
|
|
1612
1547
|
resolve();
|
|
1613
1548
|
},
|
|
1614
|
-
function() {
|
|
1549
|
+
function () {
|
|
1615
1550
|
Log.error("Error while refreshing the table");
|
|
1616
1551
|
resolve();
|
|
1617
1552
|
}
|
|
1618
1553
|
)
|
|
1619
|
-
.catch(function(e) {
|
|
1554
|
+
.catch(function (e) {
|
|
1620
1555
|
Log.error("Error while refreshing the table", e);
|
|
1621
1556
|
});
|
|
1622
1557
|
}
|
|
@@ -1628,13 +1563,13 @@ sap.ui.define(
|
|
|
1628
1563
|
return Promise.resolve();
|
|
1629
1564
|
},
|
|
1630
1565
|
|
|
1631
|
-
_fetchSemanticKeyValues: function(oContext) {
|
|
1566
|
+
_fetchSemanticKeyValues: function (oContext) {
|
|
1632
1567
|
var oMetaModel = oContext.getModel().getMetaModel(),
|
|
1633
1568
|
sEntitySetName = oMetaModel.getMetaContext(oContext.getPath()).getObject("@sapui.name"),
|
|
1634
1569
|
aSemanticKeys = SemanticKeyHelper.getSemanticKeys(oMetaModel, sEntitySetName);
|
|
1635
1570
|
|
|
1636
1571
|
if (aSemanticKeys && aSemanticKeys.length) {
|
|
1637
|
-
var aRequestPromises = aSemanticKeys.map(function(oKey) {
|
|
1572
|
+
var aRequestPromises = aSemanticKeys.map(function (oKey) {
|
|
1638
1573
|
return oContext.requestObject(oKey.$PropertyPath);
|
|
1639
1574
|
});
|
|
1640
1575
|
|
|
@@ -1647,7 +1582,7 @@ sap.ui.define(
|
|
|
1647
1582
|
// Ugly Workaround to overcome mdc field issue, we remove the binding context before
|
|
1648
1583
|
// switching to display mode to avoid the field reads additional values for non existing
|
|
1649
1584
|
// drafts or sticky sessions in the backend
|
|
1650
|
-
_removeContextsFromPages: function() {
|
|
1585
|
+
_removeContextsFromPages: function () {
|
|
1651
1586
|
var aPages = [];
|
|
1652
1587
|
var oAppComponent = CommonUtils.getAppComponent(this.getView());
|
|
1653
1588
|
if (oAppComponent._isFclEnabled()) {
|
|
@@ -1657,7 +1592,7 @@ sap.ui.define(
|
|
|
1657
1592
|
aPages = oAppComponent.getRootContainer().getPages() || [];
|
|
1658
1593
|
}
|
|
1659
1594
|
|
|
1660
|
-
aPages.forEach(function(oPage) {
|
|
1595
|
+
aPages.forEach(function (oPage) {
|
|
1661
1596
|
if (oPage.isA("sap.ui.core.ComponentContainer")) {
|
|
1662
1597
|
oPage = oPage.getComponentInstance(); // The binding context is set at the component level, not the component container
|
|
1663
1598
|
}
|