@sapui5/sap.fe.core 1.105.2 → 1.105.3
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 +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Table.ts +1 -1
- package/src/sap/fe/core/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -435,9 +435,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/field/FieldRuntime", "sap/ui/core/
|
|
|
435
435
|
|
|
436
436
|
_proto._getFieldPromise = function _getFieldPromise(oEvent) {
|
|
437
437
|
var promise = oEvent.getParameter("promise") || Promise.resolve();
|
|
438
|
+
var validity = FieldRuntime.getFieldStateOnChange(oEvent).state.validity;
|
|
438
439
|
return promise.then(function () {
|
|
439
440
|
return new Promise(function (resolve, reject) {
|
|
440
|
-
if (!
|
|
441
|
+
if (!validity) {
|
|
441
442
|
reject();
|
|
442
443
|
} else {
|
|
443
444
|
resolve(true);
|
|
@@ -662,4 +663,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/field/FieldRuntime", "sap/ui/core/
|
|
|
662
663
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearPropertiesStatus", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "clearPropertiesStatus"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredFailedRequests", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredFailedRequests"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldChange", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldGroupChange", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldGroupChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "addControlSideEffects", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "addControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeFailedSideEffects", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "removeFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffects", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeControlSideEffects", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "removeControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_addFailedSideEffects", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "_addFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_getContextForSideEffects", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "_getContextForSideEffects"), _class2.prototype)), _class2)) || _class);
|
|
663
664
|
return SideEffectsControllerExtension;
|
|
664
665
|
}, false);
|
|
665
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb24iLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX29WaWV3IiwiYmFzZSIsImdldFZpZXciLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJfbUZpZWxkR3JvdXBRdWV1ZSIsIl9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUiLCJTZXQiLCJfbUZhaWxlZFNpZGVFZmZlY3RzIiwiY2xlYXJQcm9wZXJ0aWVzU3RhdHVzIiwiY2xlYXIiLCJnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm9FdmVudCIsIm9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIiwibUV2ZW50RmllbGRQcm9wZXJ0aWVzIiwiX2dldEZpZWxkUHJvcGVydGllcyIsImFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMiLCJfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMiLCJiSXNJbW1lZGlhdGVUcmlnZ2VyZWQiLCJfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJtU2lkZUVmZmVjdHNQcm9wZXJ0eSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZGVidWciLCJmaWx0ZXIiLCJtSW1tZWRpYXRlU2lkZUVmZmVjdHMiLCJwcmV2aW91c2x5RmFpbGVkIiwiZm9yRWFjaCIsIl9hZGRGYWlsZWRTaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJ0aGF0IiwiYURlZmVycmVkU2lkZUVmZmVjdHMiLCJhRmllbGRHcm91cElkcyIsImdldFBhcmFtZXRlciIsImdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZSIsIm9EZWZlcnJlZFNpZGVFZmZlY3QiLCJiSXNSZXF1ZXN0c1RyaWdnZXJlZCIsIm9TaWRlRWZmZWN0UHJvcGVydHkiLCJzaWRlRWZmZWN0UHJvcGVydHkiLCJvQ29udGV4dCIsInNDb250ZXh0UGF0aCIsImdldFBhdGgiLCJzRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsIm1FbnRpdHlUeXBlIiwiX2dldEVudGl0eVR5cGVGcm9tRlFOIiwicHJvbWlzZXMiLCJTb3VyY2VQcm9wZXJ0aWVzIiwiZXZlcnkiLCJzb3VyY2VQcm9wZXJ0eSIsInR5cGUiLCJzSWQiLCJfZ2VuZXJhdGVTdGF0dXNJbmRleCIsInZhbHVlIiwiaGFzIiwiZmluYWxseSIsIm5hbWUiLCJzRmllbGRHcm91cElkIiwic1NpZGVFZmZlY3ROYW1lIiwicmVwbGFjZSIsIm1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cyIsIk9iamVjdCIsImtleXMiLCJwcm9jZXNzU3RhcnRlZCIsInB1c2giLCJhZGRDb250cm9sU2lkZUVmZmVjdHMiLCJvU2lkZUVmZmVjdHMiLCJyZW1vdmVGYWlsZWRTaWRlRWZmZWN0cyIsImZSZXNvbHZlciIsImZSZWplY3RvciIsIm9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFUYXJnZXRzIiwiVGFyZ2V0RW50aXRpZXMiLCJjb25jYXQiLCJUYXJnZXRQcm9wZXJ0aWVzIiwic1RyaWdnZXJBY3Rpb24iLCJUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyIsIm9Db250cm9sIiwic0NvbnRyb2xJZCIsImlzQSIsImdldElkIiwiYklzTm90QWxyZWFkeUxpc3RlZCIsIm1GYWlsZWRTaWRlRWZmZWN0cyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIl9nZW5lcmF0ZUZpZWxkR3JvdXBQcm9taXNlIiwiYlByb21pc2VTdWNjZXNzIiwicHJvbWlzZSIsIl9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzIiwiZmllbGQiLCJvRmllbGQiLCJzRmllbGRIZWxwZXJJZCIsImdldEZpZWxkSGVscCIsIm9GaWx0ZXJIZWxwIiwiQ29yZSIsImJ5SWQiLCJnZXRPdXRQYXJhbWV0ZXJzIiwib091dFBhcmFtZXRlciIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInNQcm9wZXJ0eVBhdGgiLCJtUHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiam9pbiIsInVuZGVmaW5lZCIsIl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJvU291cmNlRmllbGQiLCJzU2lkZUVmZmVjdEVudGl0eVR5cGUiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9Db250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJnZXRDb250ZXh0Iiwic0Z1bGx5UXVhbGlmaWVkTmFtZSIsImdldENvbnZlcnRlZE1ldGFNb2RlbCIsImVudGl0eVR5cGVzIiwiZmluZCIsIm9FbnRpdHlUeXBlIiwiX2dldEZpZWxkUHJvbWlzZSIsIkZpZWxkUnVudGltZSIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsInN0YXRlIiwidmFsaWRpdHkiLCJnZXRTb3VyY2UiLCJzaWRlRWZmZWN0c01hcCIsIl9nZXRGaWVsZFNpZGVFZmZlY3RzTWFwIiwibVNpZGVFZmZlY3RzTWFwIiwiZ2V0RmllbGRHcm91cElkcyIsInNWaWV3RW50aXR5U2V0U2V0TmFtZSIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwib1ZpZXdFbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwib0VudGl0eVNldCIsImJJc0ltbWVkaWF0ZSIsImluZGV4T2YiLCJzTmFtZSIsImFTaWRlRWZmZWN0UGFydHMiLCJzcGxpdCIsInNTaWRlRWZmZWN0UGF0aCIsImxlbmd0aCIsIm9TaWRlRWZmZWN0IiwiZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsImltbWVkaWF0ZSIsInNWaWV3RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJtRmllbGRQYXRoIiwiZ2V0QWdncmVnYXRpb24iLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInNGaWVsZFBhdGgiLCJnZXRWYWx1ZSIsIm1Db250cm9sRW50aXR5VHlwZSIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsInNDb250cm9sTmFtZSIsIm9Db250cm9sU2lkZUVmZmVjdHMiLCJpbmNsdWRlcyIsIm1GaWVsZFNpZGVFZmZlY3RzTWFwIiwib0ZpZWxkUHJvbWlzZUZvckZpZWxkR3JvdXAiLCJtRmFpbGVkU2lkZUVmZmVjdHNOYW1lIiwic1NpZGVFZmZlY3RDb250ZXh0UGF0aCIsImFGYWlsZWRTaWRlRWZmZWN0cyIsIm1TaWRlRWZmZWN0Q29udGV4dFBhdGgiLCJiU3VjY2VzcyIsIm9GaWVsZEJpbmRpbmciLCJfZ2V0QmluZGluZ0ZvckZpZWxkIiwiYUZpZWxkUGF0aHMiLCJnZXRCaW5kaW5ncyIsInNQYXRoIiwic0JpbmRpbmdOYW1lIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2lkZUVmZmVjdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5VHlwZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnksXG5cdENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsXG5cdE9EYXRhU2lkZUVmZmVjdHNUeXBlLFxuXHRTaWRlRWZmZWN0c1R5cGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5cbnR5cGUgRmllbGRDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0RmllbGRIZWxwKCk6IHN0cmluZztcblx0Z2V0RmllbGRHcm91cElkcygpOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgRmllbGRFdmVudFByb3BlcnR5VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXHRmaWVsZDogRmllbGRDb250cm9sO1xuXHRzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcbn07XG5cbnR5cGUgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG5cdHByZXZpb3VzbHlGYWlsZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlPjtcblxudHlwZSBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIFNpZGVFZmZlY3RzVHlwZVtdPjtcblxudHlwZSBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUgPSB7XG5cdHByb21pc2VzOiBQcm9taXNlPGFueT5bXTtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG5cdHByb2Nlc3NTdGFydGVkPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgRmllbGRHcm91cFF1ZXVlTWFwVHlwZSA9IHtcblx0W3NpZGVFZmZlY3ROYW1lOiBzdHJpbmddOiB7XG5cdFx0W2NvbnRleHRQYXRoOiBzdHJpbmddOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGU7XG5cdH07XG59O1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiKVxuY2xhc3MgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX29WaWV3OiBhbnk7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdHByaXZhdGUgX21GaWVsZEdyb3VwUXVldWUhOiBGaWVsZEdyb3VwUXVldWVNYXBUeXBlO1xuXHRwcml2YXRlIF9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUhOiBTZXQ8c3RyaW5nPjtcblx0cHJpdmF0ZSBfb1NpZGVFZmZlY3RzU2VydmljZSE6IGFueTtcblx0cHJpdmF0ZSBfbUZhaWxlZFNpZGVFZmZlY3RzITogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpIHtcblx0XHR0aGlzLl9vVmlldyA9ICh0aGlzIGFzIGFueSkuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl9vVmlldyk7XG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZSA9ICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZSA9IHt9O1xuXHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSA9IG5ldyBTZXQoKTtcblx0XHR0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBjbGVhclByb3BlcnRpZXNTdGF0dXNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk6IHZvaWQge1xuXHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZS5jbGVhcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzXG5cdCAqIEByZXR1cm5zIFJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgcmVxdWVzdHMgdGhhdCBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMoKTogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdHJldHVybiB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqICAtIEV4ZWN1dGU6IHRyaWdnZXJzIGltbWVkaWF0ZSBTaWRlRWZmZWN0cyByZXF1ZXN0cyBpZiB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGV2ZW50IGlzIGZ1bGZpbGxlZFxuXHQgKiAgLSBSZWdpc3RlcjogY2FjaGVzIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBGaWVsZEdyb3VwIGlzIHVuZm9jdXNlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhbmRsZUZpZWxkQ2hhbmdlXG5cdCAqIEBwYXJhbSBvRXZlbnQgU0FQVUk1IGV2ZW50IHRoYXQgY29tZXMgZnJvbSBhIGZpZWxkIGNoYW5nZVxuXHQgKiBAcGFyYW0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyAgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGhhbmRsZUZpZWxkQ2hhbmdlKG9FdmVudDogRXZlbnQsIG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBtRXZlbnRGaWVsZFByb3BlcnRpZXMgPSB0aGlzLl9nZXRGaWVsZFByb3BlcnRpZXMob0V2ZW50KSxcblx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXM6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZVtdID0gdGhpcy5faW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMoXG5cdFx0XHRcdG1FdmVudEZpZWxkUHJvcGVydGllcyxcblx0XHRcdFx0b0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGVcblx0XHRcdCk7XG5cblx0XHRsZXQgYklzSW1tZWRpYXRlVHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlKG1FdmVudEZpZWxkUHJvcGVydGllcylcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0YklzSW1tZWRpYXRlVHJpZ2dlcmVkID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMubWFwKChtU2lkZUVmZmVjdHNQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKG1TaWRlRWZmZWN0c1Byb3BlcnR5LnNpZGVFZmZlY3RzLCBtU2lkZUVmZmVjdHNQcm9wZXJ0eS5jb250ZXh0KTtcblx0XHRcdFx0XHR9KSB8fCBbXVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgob0Vycm9yKSA9PiB7XG5cdFx0XHRcdGlmIChiSXNJbW1lZGlhdGVUcmlnZ2VyZWQpIHtcblx0XHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIEZpZWxkIFNpZGVFZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogU2lkZUVmZmVjdHMgaGF2ZSBub3QgYmVlbiB0cmlnZ2VyZWQgc2luY2UgcHJlUmVxdWlzaXRlIHZhbGlkYXRpb24gZmFpbHMgc28gd2UgbmVlZFxuXHRcdFx0XHRcdCAqIHRvIGtlZXAgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBhcyBGYWlsZWQgcmVxdWVzdCAodG8gYmUgcmV0cmlnZ2VyIG9uIG5leHQgY2hhbmdlKVxuXHRcdFx0XHRcdCAqL1xuXG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigobUltbWVkaWF0ZVNpZGVFZmZlY3RzKSA9PiBtSW1tZWRpYXRlU2lkZUVmZmVjdHMucHJldmlvdXNseUZhaWxlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0XHRcdC5mb3JFYWNoKChtSW1tZWRpYXRlU2lkZUVmZmVjdHMpID0+XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG1JbW1lZGlhdGVTaWRlRWZmZWN0cy5zaWRlRWZmZWN0cywgbUltbWVkaWF0ZVNpZGVFZmZlY3RzLmNvbnRleHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIFNpZGVFZmZlY3RzIHdpdGggYSByZWxhdGVkICdmb2N1cyBvdXQnIHRvIGEgZmllbGQgZ3JvdXAuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlXG5cdCAqIEBwYXJhbSBvRXZlbnQgU0FQVUk1IEV2ZW50XG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdChzKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlKG9FdmVudDogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzLFxuXHRcdFx0YURlZmVycmVkU2lkZUVmZmVjdHM6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZVtdID0gW10sXG5cdFx0XHRhRmllbGRHcm91cElkczogc3RyaW5nW10gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmllbGRHcm91cElkc1wiKTtcblxuXHRcdGNvbnN0IGdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZSA9IGZ1bmN0aW9uIChvRGVmZXJyZWRTaWRlRWZmZWN0OiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUpIHtcblx0XHRcdGxldCBiSXNSZXF1ZXN0c1RyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RQcm9wZXJ0eSA9IG9EZWZlcnJlZFNpZGVFZmZlY3Quc2lkZUVmZmVjdFByb3BlcnR5O1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQ7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoYXQuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IG1FbnRpdHlUeXBlID0gdGhhdC5fZ2V0RW50aXR5VHlwZUZyb21GUU4oc0VudGl0eVR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwob0RlZmVycmVkU2lkZUVmZmVjdC5wcm9taXNlcylcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGJJc1JlcXVlc3RzVHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vRGVmZXJyZWQgU2lkZUVmZmVjdHMgYXJlIGV4ZWN1dGVkIG9ubHkgaWYgYWxsIHNvdXJjZVByb3BlcnRpZXMgaGF2ZSBubyByZWdpc3RlcmVkIGZhaWx1cmUuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bUVudGl0eVR5cGUgJiZcblx0XHRcdFx0XHRcdChvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMgYXMgUHJvcGVydHlQYXRoW10pLmV2ZXJ5KChzb3VyY2VQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoc291cmNlUHJvcGVydHkudHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNJZCA9IHRoYXQuX2dlbmVyYXRlU3RhdHVzSW5kZXgobUVudGl0eVR5cGUsIHNvdXJjZVByb3BlcnR5LnZhbHVlLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICF0aGF0Ll9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUuaGFzKHNJZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLCBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0XHRpZiAoYklzUmVxdWVzdHNUcmlnZ2VyZWQpIHtcblx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzIG9uIGNvbnRleHQgJHtzQ29udGV4dFBhdGh9YCwgb0Vycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgdGhhdC5fbUZpZWxkR3JvdXBRdWV1ZVtvU2lkZUVmZmVjdFByb3BlcnR5Lm5hbWVdW3NDb250ZXh0UGF0aF07XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRhRmllbGRHcm91cElkcy5mb3JFYWNoKChzRmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIHN0cmluZyBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiIGlzIGFkZGVkIHRvIHRoZSBTaWRlRWZmZWN0cyBuYW1lIGR1cmluZyB0ZW1wbGF0aW5nIHRvIGtub3dcblx0XHRcdCAqIGlmIHRoaXMgU2lkZUVmZmVjdHMgbXVzdCBiZSBpbW1lZGlhdGVseSBleGVjdXRlZCByZXF1ZXN0ZWQgKG9uIGZpZWxkIGNoYW5nZSkgb3IgbXVzdFxuXHRcdFx0ICogYmUgZGVmZXJyZWQgKG9uIGZpZWxkIGdyb3VwIGZvY3VzIG91dClcblx0XHRcdCAqXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IHNTaWRlRWZmZWN0TmFtZTogc3RyaW5nID0gc0ZpZWxkR3JvdXBJZC5yZXBsYWNlKFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIsIFwiXCIpO1xuXHRcdFx0Y29uc3QgbUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzID0gdGhhdC5fbUZpZWxkR3JvdXBRdWV1ZT8uW3NTaWRlRWZmZWN0TmFtZV07XG5cdFx0XHRpZiAobUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cykuZm9yRWFjaCgoc0NvbnRleHRQYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0RlZmVycmVkU2lkZUVmZmVjdCA9IG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdGlmICghb0RlZmVycmVkU2lkZUVmZmVjdC5wcm9jZXNzU3RhcnRlZCkge1xuXHRcdFx0XHRcdFx0b0RlZmVycmVkU2lkZUVmZmVjdC5wcm9jZXNzU3RhcnRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0cy5wdXNoKG9EZWZlcnJlZFNpZGVFZmZlY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0cy5tYXAoKG9EZWZlcnJlZFNpZGVFZmZlY3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZShvRGVmZXJyZWRTaWRlRWZmZWN0KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgU2lkZUVmZmVjdHMgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGFkZENvbnRyb2xTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgTmFtZSBvZiB0aGUgZW50aXR5IHdoZXJlIHRoZSBTaWRlRWZmZWN0cyBjb250cm9sIHdpbGwgYmUgcmVnaXN0ZXJlZFxuXHQgKiBAcGFyYW0gb1NpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIHJlZ2lzdGVyLiBFbnN1cmUgdGhlIHNvdXJjZUNvbnRyb2xJZCBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIFNBUFVJNSBjb250cm9sIElELlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBhZGRDb250cm9sU2lkZUVmZmVjdHMoc0VudGl0eVR5cGU6IHN0cmluZywgb1NpZGVFZmZlY3RzOiBPbWl0PENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsIFwiZnVsbHlRdWFsaWZpZWROYW1lXCI+KTogdm9pZCB7XG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5hZGRDb250cm9sU2lkZUVmZmVjdHMoc0VudGl0eVR5cGUsIG9TaWRlRWZmZWN0cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgcXVldWUgY29udGFpbmluZyB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgcmVtb3ZlRmFpbGVkU2lkZUVmZmVjdHNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgcmVtb3ZlRmFpbGVkU2lkZUVmZmVjdHMoKTogdm9pZCB7XG5cdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSByZXF1ZXN0U2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBuZWVkIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHJlcXVlc3Qgb24gU0FQVUk1IGNvbnRleHRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLCBvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8YW55PiB7XG5cdFx0bGV0IGZSZXNvbHZlcjogYW55LCBmUmVqZWN0b3I6IGFueTtcblx0XHRjb25zdCBvUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZSZXNvbHZlciA9IHJlc29sdmU7XG5cdFx0XHRmUmVqZWN0b3IgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYVRhcmdldHM6IGFueVtdID0gKChvU2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMgYXMgYW55W10pIHx8IFtdKS5jb25jYXQoKG9TaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzIGFzIGFueVtdKSB8fCBbXSksXG5cdFx0XHRzVHJpZ2dlckFjdGlvbjogU3RyaW5nIHwgdW5kZWZpbmVkID0gKG9TaWRlRWZmZWN0cyBhcyBPRGF0YVNpZGVFZmZlY3RzVHlwZSkuVHJpZ2dlckFjdGlvbjtcblxuXHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvQ29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0cywgb0NvbnRleHQpXG5cdFx0XHQudGhlbigoKSA9PiBmUmVzb2x2ZXIoKSlcblx0XHRcdC5jYXRjaCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5fYWRkRmFpbGVkU2lkZUVmZmVjdHMob1NpZGVFZmZlY3RzLCBvQ29udGV4dCk7XG5cdFx0XHRcdGZSZWplY3RvcihvRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gb1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBTaWRlRWZmZWN0cyBjcmVhdGVkIGJ5IGEgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gb0NvbnRyb2wgU0FQVUk1IENvbnRyb2xcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgcmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKG9Db250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0NvbnRyb2xJZCA9IG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpICYmIG9Db250cm9sLmdldElkKCk7XG5cblx0XHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5yZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoc0NvbnRyb2xJZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHNcblx0ICogVGhlIFNpZGVFZmZlY3RzIHdpbGwgYmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgY2hhbmdlIG9uIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfYWRkRmFpbGVkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHJpdmF0ZSBfYWRkRmFpbGVkU2lkZUVmZmVjdHMob1NpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGUsIG9Db250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoOiBzdHJpbmcgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0gPSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc0NvbnRleHRQYXRoXSB8fCBbXTtcblx0XHRjb25zdCBiSXNOb3RBbHJlYWR5TGlzdGVkID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0uZXZlcnkoXG5cdFx0XHQobUZhaWxlZFNpZGVFZmZlY3RzKSA9PiBvU2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lICE9PSBtRmFpbGVkU2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0KTtcblx0XHRpZiAoYklzTm90QWxyZWFkeUxpc3RlZCkge1xuXHRcdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0ucHVzaChvU2lkZUVmZmVjdHMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCBncm91cCB0aGF0IGlzIHJlcXVpcmVkIGJlZm9yZSByZXF1ZXN0aW5nIFNpZGVFZmZlY3RzLlxuXHQgKiBJZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCBhbmQgb25seSB0aGUgZmllbGQgcmVxdWlyZXMgdGhlIFNpZGVFZmZlY3RzIG9uIHRoaXMgY29udGV4dCwgdGhlIFNpZGVFZmZlY3RzIGFyZSByZW1vdmVkIGZyb20gdGhlXG5cdCAqIFNpZGVFZmZlY3RzIHF1ZXVlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2Vcblx0ICogQHBhcmFtIG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdG8gYmUgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZUZpZWxkR3JvdXBQcm9taXNlKG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cblx0XHRsZXQgYlByb21pc2VTdWNjZXNzID0gdHJ1ZTtcblx0XHRyZXR1cm4gbUV2ZW50RmllbGRQcm9wZXJ0aWVzLnByb21pc2Vcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGJQcm9taXNlU3VjY2Vzcztcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRiUHJvbWlzZVN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIGJQcm9taXNlU3VjY2Vzcztcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBOZWVkIHRvIHN0b3JlIHRoZSBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoaXMgZmllbGQgZm9yIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdFx0XHRcdCAqIHNpbmNlIGFsbCBTb3VyY2VQcm9wZXJ0aWVzIGZvciB0aGlzIGtpbmQgb2YgU2lkZUVmZmVjdHMgbXVzdCBiZSB2YWxpZFxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhhdC5fc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhtRXZlbnRGaWVsZFByb3BlcnRpZXMuZmllbGQsIGJQcm9taXNlU3VjY2Vzcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCB0aGF0IGlzIHJlcXVpcmVkIGJlZm9yZSByZXF1ZXN0aW5nIGltbWVkaWF0ZSBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2Vcblx0ICogQHBhcmFtIG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdG8gYmUgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBvUHJvbWlzZSA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5wcm9taXNlO1xuXHRcdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSWYgdGhlIGZpZWxkIGdldHMgYSBGaWVsZEhlbHBlciwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGFsbCBmaWVsZHMgY2hhbmdlZCBieSB0aGlzIEZpZWxkSGVscGVyIGhhdmUgYmVlbiBzZXQuXG5cdFx0XHQgKiBUbyBhY2hpZXZlIHRoaXMsIHdlIGVuc3VyZSB0aGF0IGFsbCByZWxhdGVkIGJpbmRpbmdzIGhhdmUgYmVlbiByZXNvbHZlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIHJlc29sdXRpb24gcHJvY2VzcyBpcyBub3QgbWFuYWdlZCBieSB0aGUgRmllbGQgRXZlbnQgUHJvbWlzZSwgc28gZm9yIGZhc3QgdXNlciBhY3Rpb25zIChsaWtlIGF1dG9tYXRpb24pIGl0IGNhbiBsb2NrIHRoZSBtb2RlbFxuXHRcdFx0ICogYW5kIG5vIHJlcXVlc3QgY2FuIGJlIGV4ZWN1dGVkLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBvRmllbGQgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMuZmllbGQ7XG5cdFx0XHRjb25zdCBzRmllbGRIZWxwZXJJZCA9IG9GaWVsZC5nZXRGaWVsZEhlbHAgJiYgb0ZpZWxkLmdldEZpZWxkSGVscCgpO1xuXHRcdFx0aWYgKHNGaWVsZEhlbHBlcklkKSB7XG5cdFx0XHRcdGNvbnN0IG9GaWx0ZXJIZWxwOiBhbnkgPSBDb3JlLmJ5SWQoc0ZpZWxkSGVscGVySWQpO1xuXHRcdFx0XHRpZiAob0ZpbHRlckhlbHAgJiYgb0ZpbHRlckhlbHAuZ2V0T3V0UGFyYW1ldGVycykge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdChvRmlsdGVySGVscC5nZXRPdXRQYXJhbWV0ZXJzKCkgYXMgYW55W10pLm1hcCgob091dFBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvQmluZGluZyA9IG9PdXRQYXJhbWV0ZXIuZ2V0QmluZGluZyhcInZhbHVlXCIpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBvQmluZGluZy5yZXF1ZXN0VmFsdWUoKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHN0YXR1cyBpbmRleC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZVN0YXR1c0luZGV4XG5cdCAqIEBwYXJhbSBtRW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGVcblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIG9Db250ZXh0IFNBUFVJNSBDb250ZXh0XG5cdCAqIEByZXR1cm5zIEluZGV4XG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZVN0YXR1c0luZGV4KG1FbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBzUHJvcGVydHlQYXRoOiBzdHJpbmcsIG9Db250ZXh0PzogQ29udGV4dCB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0Py5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbVByb3BlcnR5ID0gbUVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdFx0aWYgKG1Qcm9wZXJ0eSkge1xuXHRcdFx0aWYgKG1Qcm9wZXJ0eSAmJiBtUHJvcGVydHkuX3R5cGUgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gW21Qcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUsIHNDb250ZXh0UGF0aF0uam9pbihcIl9fXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgb24gd2hpY2ggU2lkZUVmZmVjdHMgY2FuIGJlIHJlcXVlc3RlZC5cblx0ICogVGhlIGNvcnJlY3Qgb25lIG11c3QgaGF2ZSB0aGUgYmluZGluZyBwYXJhbWV0ZXIgJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9Tb3VyY2VGaWVsZCBGaWVsZFxuXHQgKiBAcGFyYW0gc1NpZGVFZmZlY3RFbnRpdHlUeXBlIFRhcmdldCBlbnRpdHkgdHlwZSBvZiB0aGUgU2lkZUVmZmVjdHMgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBTQVBVSTUgQ29udGV4dFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcml2YXRlIF9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob1NvdXJjZUZpZWxkOiBGaWVsZENvbnRyb2wsIHNTaWRlRWZmZWN0RW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRpZiAoc1NpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0b0NvbnRleHRGb3JTaWRlRWZmZWN0cyA9IChvQmluZGluZ0NvbnRleHQgYXMgYW55KS5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQ29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRvQ29udGV4dEZvclNpZGVFZmZlY3RzID0gKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgYXMgYW55KS5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0XHRcdGlmIChvQ29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRcdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb0NvbnRleHRGb3JTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBFbnRpdHlUeXBlIGJhc2VkIG9uIGl0cyBmdWxseS1xdWFsaWZpZWQgbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIHNGdWxseVF1YWxpZmllZE5hbWUgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RW50aXR5VHlwZUZyb21GUU4oc0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnZlcnRlZE1ldGFNb2RlbCgpIGFzIENvbnZlcnRlZE1ldGFkYXRhKS5lbnRpdHlUeXBlcy5maW5kKChvRW50aXR5VHlwZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG9FbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gc0Z1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9taXNlIG9mIHRoZSBmaWVsZCB2YWxpZGF0aW9uIHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBTaWRlRWZmZWN0cyBwcm9jZXNzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEZpZWxkUHJvbWlzZVxuXHQgKiBAcGFyYW0gb0V2ZW50IEZpZWxkIGNoYW5nZSBldmVudFxuXHQgKiBAcmV0dXJucyBGaWVsZCBwcm9taXNlXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZFByb21pc2Uob0V2ZW50OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdFx0cmV0dXJuIHByb21pc2UudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0XHRpZiAoIUZpZWxkUnVudGltZS5nZXRGaWVsZFN0YXRlT25DaGFuZ2Uob0V2ZW50KS5zdGF0ZS52YWxpZGl0eSkge1xuXHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGZpZWxkIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgU2lkZUVmZmVjdHMgcHJvY2Vzcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRGaWVsZFByb3BlcnRpZXNcblx0ICogQHBhcmFtIG9FdmVudCBGaWVsZCBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMgRmllbGQgcHJvcGVydGllcyAoZXZlbnQgY2hhbmdlIHByb21pc2UsIGZpZWxkLCBTaWRlRWZmZWN0cyByZWxhdGVkIHRvIHRoaXMgZmllbGQpXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZFByb3BlcnRpZXMob0V2ZW50OiBFdmVudCk6IEZpZWxkRXZlbnRQcm9wZXJ0eVR5cGUge1xuXHRcdGNvbnN0IG9GaWVsZDogRmllbGRDb250cm9sID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpZWxkQ29udHJvbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRwcm9taXNlOiB0aGlzLl9nZXRGaWVsZFByb21pc2Uob0V2ZW50KSxcblx0XHRcdGZpZWxkOiBvRmllbGQsXG5cdFx0XHRzaWRlRWZmZWN0c01hcDogdGhpcy5fZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBTaWRlRWZmZWN0cyBtYXBcblx0ICogVGhlc2UgU2lkZUVmZmVjdHMgYXJlXG5cdCAqIC0gbGlzdGVkIGludG8gRmllbGRHcm91cElkcyAoY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZSlcblx0ICogLSBnZW5lcmF0ZWQgYnkgYSBjb250cm9sIG9yIGNvbnRyb2xzIGFuZCB0aGF0IGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGFzIFNvdXJjZVByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcFxuXHQgKiBAcGFyYW0gb0ZpZWxkIEZpZWxkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQ6IEZpZWxkQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9LFxuXHRcdFx0YUZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gb0ZpZWxkLmdldEZpZWxkR3JvdXBJZHMoKSxcblx0XHRcdHNWaWV3RW50aXR5U2V0U2V0TmFtZSA9IHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0LFxuXHRcdFx0b1ZpZXdFbnRpdHlTZXQgPSAodGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKSBhcyBDb252ZXJ0ZWRNZXRhZGF0YSkuZW50aXR5U2V0cy5maW5kKChvRW50aXR5U2V0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBvRW50aXR5U2V0Lm5hbWUgPT09IHNWaWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdGFGaWVsZEdyb3VwSWRzLmZvckVhY2goKHNGaWVsZEdyb3VwSWQpID0+IHtcblx0XHRcdGNvbnN0IGJJc0ltbWVkaWF0ZTogYm9vbGVhbiA9IHNGaWVsZEdyb3VwSWQuaW5kZXhPZihcIiQkSW1tZWRpYXRlUmVxdWVzdFwiKSAhPT0gLTEsXG5cdFx0XHRcdHNOYW1lOiBzdHJpbmcgPSBzRmllbGRHcm91cElkLnJlcGxhY2UoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiwgXCJcIiksXG5cdFx0XHRcdGFTaWRlRWZmZWN0UGFydHM6IHN0cmluZ1tdID0gc05hbWUuc3BsaXQoXCIjXCIpLFxuXHRcdFx0XHRzU2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZyA9IGFTaWRlRWZmZWN0UGFydHNbMF0sXG5cdFx0XHRcdHNTaWRlRWZmZWN0UGF0aDogc3RyaW5nID0gYCR7c1NpZGVFZmZlY3RFbnRpdHlUeXBlfUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHMke1xuXHRcdFx0XHRcdGFTaWRlRWZmZWN0UGFydHMubGVuZ3RoID09PSAyID8gYCMke2FTaWRlRWZmZWN0UGFydHNbMV19YCA6IFwiXCJcblx0XHRcdFx0fWAsXG5cdFx0XHRcdG9TaWRlRWZmZWN0OiBTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQgPVxuXHRcdFx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhzU2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc1NpZGVFZmZlY3RQYXRoXSxcblx0XHRcdFx0b0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgPSB0aGlzLl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob0ZpZWxkLCBzU2lkZUVmZmVjdEVudGl0eVR5cGUpO1xuXHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9Db250ZXh0KSB7XG5cdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc05hbWUsXG5cdFx0XHRcdFx0aW1tZWRpYXRlOiBiSXNJbW1lZGlhdGUsXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdGNvbnRleHQ6IG9Db250ZXh0XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvL1NpZGVFZmZlY3RzIGNvbWluZyBmcm9tIGNvbnRyb2wocylcblx0XHRpZiAoc1ZpZXdFbnRpdHlTZXRTZXROYW1lICYmIG9WaWV3RW50aXR5U2V0KSB7XG5cdFx0XHRjb25zdCBzVmlld0VudGl0eVR5cGUgPSBvVmlld0VudGl0eVNldC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0bUZpZWxkUGF0aDogYW55ID0gKG9GaWVsZC5nZXRBZ2dyZWdhdGlvbihcImN1c3RvbURhdGFcIikgYXMgYW55W10pLmZpbmQoKG9DdXN0b21EYXRhKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcInNvdXJjZVBhdGhcIjtcblx0XHRcdFx0fSksXG5cdFx0XHRcdG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkID0gdGhpcy5fZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9GaWVsZCwgc1ZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0aWYgKG1GaWVsZFBhdGggJiYgb0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgc0ZpZWxkUGF0aCA9IG1GaWVsZFBhdGguZ2V0VmFsdWUoKS5yZXBsYWNlKGAvJHtzVmlld0VudGl0eVNldFNldE5hbWV9L2AsIFwiXCIpLFxuXHRcdFx0XHRcdG1Db250cm9sRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzKFxuXHRcdFx0XHRcdFx0c1ZpZXdFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KSBhcyBDb250cm9sU2lkZUVmZmVjdHNFbnRpdHlEaWN0aW9uYXJ5O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ29udHJvbEVudGl0eVR5cGUpLmZvckVhY2goKHNDb250cm9sTmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250cm9sU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSA9IG1Db250cm9sRW50aXR5VHlwZVtzQ29udHJvbE5hbWVdO1xuXHRcdFx0XHRcdGlmIChvQ29udHJvbFNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMuaW5jbHVkZXMoc0ZpZWxkUGF0aCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNOYW1lID0gYCR7c0NvbnRyb2xOYW1lfTo6JHtzVmlld0VudGl0eVR5cGV9YDtcblx0XHRcdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IHNOYW1lLFxuXHRcdFx0XHRcdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvQ29udHJvbFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBvQ29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbVNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogTGlzdDogZ2V0cyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMgcmVxdWVzdHNcblx0ICogUmVnaXN0ZXI6IGNhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBldmVudCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zICBBcnJheSBvZiBpbW1lZGlhdGUgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzKFxuXHRcdG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSxcblx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8YW55PlxuXHQpOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSB7XG5cdFx0Y29uc3QgbUZpZWxkU2lkZUVmZmVjdHNNYXAgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMuc2lkZUVmZmVjdHNNYXAsXG5cdFx0XHRvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCA9IHRoaXMuX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKSwgLy8gUHJvbWlzZSBtYW5hZ2luZyBGaWVsZEdyb3VwIHJlcXVlc3RzIGlmIEZpZWxkIHByb21pc2UgZmFpbHNcblx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWU6IGFueSA9IHt9LFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSBbXTtcblxuXHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlID0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRPYmplY3Qua2V5cyhtRmllbGRTaWRlRWZmZWN0c01hcCkuZm9yRWFjaCgoc1NpZGVFZmZlY3ROYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBvU2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBtRmllbGRTaWRlRWZmZWN0c01hcFtzU2lkZUVmZmVjdE5hbWVdLFxuXHRcdFx0XHRzU2lkZUVmZmVjdENvbnRleHRQYXRoID0gb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdO1xuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBmb3IgdGhpcyBjb250ZXh0XG5cdFx0XHRpZiAoYUZhaWxlZFNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF07XG5cdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gPSB7fTtcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzLmZvckVhY2goKG1GYWlsZWRTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF1bbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0cnVlO1xuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBzU2lkZUVmZmVjdE5hbWUsXG5cdFx0XHRcdFx0XHRwcmV2aW91c2x5RmFpbGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG1GYWlsZWRTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdGNvbnRleHQ6IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChvU2lkZUVmZmVjdFByb3BlcnR5LmltbWVkaWF0ZSkge1xuXHRcdFx0XHQvLyBTaWRlRWZmZWN0cyB3aWxsIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5IGFmdGVyIGV2ZW50IHByb21pc2UgdmFsaWRhdGlvblxuXHRcdFx0XHRpZiAoIW1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0/LltvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogc1NpZGVFZmZlY3ROYW1lLFxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRjb250ZXh0OiBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQWRkIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRvIHRoZSByZWxhdGVkIGRpY3Rpb25hcnlcblx0XHRcdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdID0gdGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdIHx8IHt9O1xuXHRcdFx0XHRjb25zdCBtU2lkZUVmZmVjdENvbnRleHRQYXRoID0gdGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdIHx8IHtcblx0XHRcdFx0XHRwcm9taXNlczogW10sXG5cdFx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBvU2lkZUVmZmVjdFByb3BlcnR5LFxuXHRcdFx0XHRcdHByb2Nlc3NTdGFydGVkOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRtU2lkZUVmZmVjdENvbnRleHRQYXRoLnByb21pc2VzID0gbVNpZGVFZmZlY3RDb250ZXh0UGF0aC5wcm9taXNlcy5jb25jYXQoW1xuXHRcdFx0XHRcdG9GaWVsZFByb21pc2VGb3JGaWVsZEdyb3VwLFxuXHRcdFx0XHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIGFzIFByb21pc2U8YW55PlxuXHRcdFx0XHRdKTtcblx0XHRcdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdID0gbVNpZGVFZmZlY3RDb250ZXh0UGF0aDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIGEgZmllbGQgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9GaWVsZCBGaWVsZFxuXHQgKiBAcGFyYW0gYlN1Y2Nlc3MgU3RhdHVzIG9mIHRoZSBmaWVsZCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIF9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKG9GaWVsZDogRmllbGRDb250cm9sLCBiU3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9GaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRjb25zdCBtRW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRlFOKHNFbnRpdHlUeXBlKTtcblx0XHRpZiAobUVudGl0eVR5cGUpIHtcblx0XHRcdC8vIFJldHJpZXZlcyBhbGwgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBmaWVsZFxuXHRcdFx0Y29uc3Qgb0ZpZWxkQmluZGluZzogYW55ID0gdGhpcy5fZ2V0QmluZGluZ0ZvckZpZWxkKG9GaWVsZCk7XG5cdFx0XHRjb25zdCBhRmllbGRQYXRocyA9IG9GaWVsZEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIilcblx0XHRcdFx0PyAob0ZpZWxkQmluZGluZy5nZXRCaW5kaW5ncygpIHx8IFtdKS5tYXAoKG9CaW5kaW5nOiBhbnkpID0+IG9CaW5kaW5nLnNQYXRoKVxuXHRcdFx0XHQ6IFtvRmllbGRCaW5kaW5nLmdldFBhdGgoKV07XG5cblx0XHRcdC8vIFN0b3JlcyBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzXG5cdFx0XHRhRmllbGRQYXRocy5mb3JFYWNoKChzRmllbGRQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgc0lkID0gdGhpcy5fZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZSwgc0ZpZWxkUGF0aCwgb0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZVtiU3VjY2VzcyA/IFwiZGVsZXRlXCIgOiBcImFkZFwiXShzSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBwcm9wZXJ0eSBiaW5kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRmllbGQgRmllbGRcblx0ICogQHJldHVybnMgIEJpbmRpbmcgdG8gdGhlIHZhbHVlXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRCaW5kaW5nRm9yRmllbGQob0ZpZWxkOiBGaWVsZENvbnRyb2wpOiBCaW5kaW5nIHtcblx0XHRsZXQgc0JpbmRpbmdOYW1lID0gXCJ2YWx1ZVwiO1xuXHRcdGlmIChvRmllbGQuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdHNCaW5kaW5nTmFtZSA9IFwic2VsZWN0ZWRcIjtcblx0XHR9IGVsc2UgaWYgKG9GaWVsZC5pc0EoXCJzYXAuZmUuY29yZS5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0c0JpbmRpbmdOYW1lID0gXCJ1cGxvYWRVcmxcIjtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaWVsZC5nZXRCaW5kaW5nKHNCaW5kaW5nTmFtZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1RE1BLDhCLFdBRExDLGNBQWMsQ0FBQyw4Q0FBRCxDLFVBU2JDLGNBQWMsRSxVQWdCZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVlkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBaUJkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBNkNkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBaUZkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBV2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FjZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWdDZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWtCZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRSxXQThHZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRTs7Ozs7Ozs7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
|
|
666
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb24iLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX29WaWV3IiwiYmFzZSIsImdldFZpZXciLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJfbUZpZWxkR3JvdXBRdWV1ZSIsIl9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUiLCJTZXQiLCJfbUZhaWxlZFNpZGVFZmZlY3RzIiwiY2xlYXJQcm9wZXJ0aWVzU3RhdHVzIiwiY2xlYXIiLCJnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm9FdmVudCIsIm9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIiwibUV2ZW50RmllbGRQcm9wZXJ0aWVzIiwiX2dldEZpZWxkUHJvcGVydGllcyIsImFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMiLCJfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMiLCJiSXNJbW1lZGlhdGVUcmlnZ2VyZWQiLCJfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJtU2lkZUVmZmVjdHNQcm9wZXJ0eSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZGVidWciLCJmaWx0ZXIiLCJtSW1tZWRpYXRlU2lkZUVmZmVjdHMiLCJwcmV2aW91c2x5RmFpbGVkIiwiZm9yRWFjaCIsIl9hZGRGYWlsZWRTaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJ0aGF0IiwiYURlZmVycmVkU2lkZUVmZmVjdHMiLCJhRmllbGRHcm91cElkcyIsImdldFBhcmFtZXRlciIsImdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZSIsIm9EZWZlcnJlZFNpZGVFZmZlY3QiLCJiSXNSZXF1ZXN0c1RyaWdnZXJlZCIsIm9TaWRlRWZmZWN0UHJvcGVydHkiLCJzaWRlRWZmZWN0UHJvcGVydHkiLCJvQ29udGV4dCIsInNDb250ZXh0UGF0aCIsImdldFBhdGgiLCJzRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsIm1FbnRpdHlUeXBlIiwiX2dldEVudGl0eVR5cGVGcm9tRlFOIiwicHJvbWlzZXMiLCJTb3VyY2VQcm9wZXJ0aWVzIiwiZXZlcnkiLCJzb3VyY2VQcm9wZXJ0eSIsInR5cGUiLCJzSWQiLCJfZ2VuZXJhdGVTdGF0dXNJbmRleCIsInZhbHVlIiwiaGFzIiwiZmluYWxseSIsIm5hbWUiLCJzRmllbGRHcm91cElkIiwic1NpZGVFZmZlY3ROYW1lIiwicmVwbGFjZSIsIm1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cyIsIk9iamVjdCIsImtleXMiLCJwcm9jZXNzU3RhcnRlZCIsInB1c2giLCJhZGRDb250cm9sU2lkZUVmZmVjdHMiLCJvU2lkZUVmZmVjdHMiLCJyZW1vdmVGYWlsZWRTaWRlRWZmZWN0cyIsImZSZXNvbHZlciIsImZSZWplY3RvciIsIm9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFUYXJnZXRzIiwiVGFyZ2V0RW50aXRpZXMiLCJjb25jYXQiLCJUYXJnZXRQcm9wZXJ0aWVzIiwic1RyaWdnZXJBY3Rpb24iLCJUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyIsIm9Db250cm9sIiwic0NvbnRyb2xJZCIsImlzQSIsImdldElkIiwiYklzTm90QWxyZWFkeUxpc3RlZCIsIm1GYWlsZWRTaWRlRWZmZWN0cyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIl9nZW5lcmF0ZUZpZWxkR3JvdXBQcm9taXNlIiwiYlByb21pc2VTdWNjZXNzIiwicHJvbWlzZSIsIl9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzIiwiZmllbGQiLCJvRmllbGQiLCJzRmllbGRIZWxwZXJJZCIsImdldEZpZWxkSGVscCIsIm9GaWx0ZXJIZWxwIiwiQ29yZSIsImJ5SWQiLCJnZXRPdXRQYXJhbWV0ZXJzIiwib091dFBhcmFtZXRlciIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInNQcm9wZXJ0eVBhdGgiLCJtUHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiam9pbiIsInVuZGVmaW5lZCIsIl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJvU291cmNlRmllbGQiLCJzU2lkZUVmZmVjdEVudGl0eVR5cGUiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9Db250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJnZXRDb250ZXh0Iiwic0Z1bGx5UXVhbGlmaWVkTmFtZSIsImdldENvbnZlcnRlZE1ldGFNb2RlbCIsImVudGl0eVR5cGVzIiwiZmluZCIsIm9FbnRpdHlUeXBlIiwiX2dldEZpZWxkUHJvbWlzZSIsInZhbGlkaXR5IiwiRmllbGRSdW50aW1lIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJnZXRTb3VyY2UiLCJzaWRlRWZmZWN0c01hcCIsIl9nZXRGaWVsZFNpZGVFZmZlY3RzTWFwIiwibVNpZGVFZmZlY3RzTWFwIiwiZ2V0RmllbGRHcm91cElkcyIsInNWaWV3RW50aXR5U2V0U2V0TmFtZSIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwib1ZpZXdFbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwib0VudGl0eVNldCIsImJJc0ltbWVkaWF0ZSIsImluZGV4T2YiLCJzTmFtZSIsImFTaWRlRWZmZWN0UGFydHMiLCJzcGxpdCIsInNTaWRlRWZmZWN0UGF0aCIsImxlbmd0aCIsIm9TaWRlRWZmZWN0IiwiZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsImltbWVkaWF0ZSIsInNWaWV3RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJtRmllbGRQYXRoIiwiZ2V0QWdncmVnYXRpb24iLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInNGaWVsZFBhdGgiLCJnZXRWYWx1ZSIsIm1Db250cm9sRW50aXR5VHlwZSIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsInNDb250cm9sTmFtZSIsIm9Db250cm9sU2lkZUVmZmVjdHMiLCJpbmNsdWRlcyIsIm1GaWVsZFNpZGVFZmZlY3RzTWFwIiwib0ZpZWxkUHJvbWlzZUZvckZpZWxkR3JvdXAiLCJtRmFpbGVkU2lkZUVmZmVjdHNOYW1lIiwic1NpZGVFZmZlY3RDb250ZXh0UGF0aCIsImFGYWlsZWRTaWRlRWZmZWN0cyIsIm1TaWRlRWZmZWN0Q29udGV4dFBhdGgiLCJiU3VjY2VzcyIsIm9GaWVsZEJpbmRpbmciLCJfZ2V0QmluZGluZ0ZvckZpZWxkIiwiYUZpZWxkUGF0aHMiLCJnZXRCaW5kaW5ncyIsInNQYXRoIiwic0JpbmRpbmdOYW1lIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2lkZUVmZmVjdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5VHlwZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnksXG5cdENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsXG5cdE9EYXRhU2lkZUVmZmVjdHNUeXBlLFxuXHRTaWRlRWZmZWN0c1R5cGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5cbnR5cGUgRmllbGRDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0RmllbGRIZWxwKCk6IHN0cmluZztcblx0Z2V0RmllbGRHcm91cElkcygpOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgRmllbGRFdmVudFByb3BlcnR5VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXHRmaWVsZDogRmllbGRDb250cm9sO1xuXHRzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcbn07XG5cbnR5cGUgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG5cdHByZXZpb3VzbHlGYWlsZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlPjtcblxudHlwZSBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIFNpZGVFZmZlY3RzVHlwZVtdPjtcblxudHlwZSBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUgPSB7XG5cdHByb21pc2VzOiBQcm9taXNlPGFueT5bXTtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG5cdHByb2Nlc3NTdGFydGVkPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgRmllbGRHcm91cFF1ZXVlTWFwVHlwZSA9IHtcblx0W3NpZGVFZmZlY3ROYW1lOiBzdHJpbmddOiB7XG5cdFx0W2NvbnRleHRQYXRoOiBzdHJpbmddOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGU7XG5cdH07XG59O1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiKVxuY2xhc3MgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX29WaWV3OiBhbnk7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdHByaXZhdGUgX21GaWVsZEdyb3VwUXVldWUhOiBGaWVsZEdyb3VwUXVldWVNYXBUeXBlO1xuXHRwcml2YXRlIF9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUhOiBTZXQ8c3RyaW5nPjtcblx0cHJpdmF0ZSBfb1NpZGVFZmZlY3RzU2VydmljZSE6IGFueTtcblx0cHJpdmF0ZSBfbUZhaWxlZFNpZGVFZmZlY3RzITogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpIHtcblx0XHR0aGlzLl9vVmlldyA9ICh0aGlzIGFzIGFueSkuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl9vVmlldyk7XG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZSA9ICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZSA9IHt9O1xuXHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSA9IG5ldyBTZXQoKTtcblx0XHR0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBjbGVhclByb3BlcnRpZXNTdGF0dXNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk6IHZvaWQge1xuXHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZS5jbGVhcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzXG5cdCAqIEByZXR1cm5zIFJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgcmVxdWVzdHMgdGhhdCBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMoKTogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdHJldHVybiB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqICAtIEV4ZWN1dGU6IHRyaWdnZXJzIGltbWVkaWF0ZSBTaWRlRWZmZWN0cyByZXF1ZXN0cyBpZiB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGV2ZW50IGlzIGZ1bGZpbGxlZFxuXHQgKiAgLSBSZWdpc3RlcjogY2FjaGVzIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBGaWVsZEdyb3VwIGlzIHVuZm9jdXNlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhbmRsZUZpZWxkQ2hhbmdlXG5cdCAqIEBwYXJhbSBvRXZlbnQgU0FQVUk1IGV2ZW50IHRoYXQgY29tZXMgZnJvbSBhIGZpZWxkIGNoYW5nZVxuXHQgKiBAcGFyYW0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyAgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGhhbmRsZUZpZWxkQ2hhbmdlKG9FdmVudDogRXZlbnQsIG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBtRXZlbnRGaWVsZFByb3BlcnRpZXMgPSB0aGlzLl9nZXRGaWVsZFByb3BlcnRpZXMob0V2ZW50KSxcblx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXM6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZVtdID0gdGhpcy5faW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMoXG5cdFx0XHRcdG1FdmVudEZpZWxkUHJvcGVydGllcyxcblx0XHRcdFx0b0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGVcblx0XHRcdCk7XG5cblx0XHRsZXQgYklzSW1tZWRpYXRlVHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlKG1FdmVudEZpZWxkUHJvcGVydGllcylcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0YklzSW1tZWRpYXRlVHJpZ2dlcmVkID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMubWFwKChtU2lkZUVmZmVjdHNQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKG1TaWRlRWZmZWN0c1Byb3BlcnR5LnNpZGVFZmZlY3RzLCBtU2lkZUVmZmVjdHNQcm9wZXJ0eS5jb250ZXh0KTtcblx0XHRcdFx0XHR9KSB8fCBbXVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgob0Vycm9yKSA9PiB7XG5cdFx0XHRcdGlmIChiSXNJbW1lZGlhdGVUcmlnZ2VyZWQpIHtcblx0XHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIEZpZWxkIFNpZGVFZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogU2lkZUVmZmVjdHMgaGF2ZSBub3QgYmVlbiB0cmlnZ2VyZWQgc2luY2UgcHJlUmVxdWlzaXRlIHZhbGlkYXRpb24gZmFpbHMgc28gd2UgbmVlZFxuXHRcdFx0XHRcdCAqIHRvIGtlZXAgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBhcyBGYWlsZWQgcmVxdWVzdCAodG8gYmUgcmV0cmlnZ2VyIG9uIG5leHQgY2hhbmdlKVxuXHRcdFx0XHRcdCAqL1xuXG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigobUltbWVkaWF0ZVNpZGVFZmZlY3RzKSA9PiBtSW1tZWRpYXRlU2lkZUVmZmVjdHMucHJldmlvdXNseUZhaWxlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0XHRcdC5mb3JFYWNoKChtSW1tZWRpYXRlU2lkZUVmZmVjdHMpID0+XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG1JbW1lZGlhdGVTaWRlRWZmZWN0cy5zaWRlRWZmZWN0cywgbUltbWVkaWF0ZVNpZGVFZmZlY3RzLmNvbnRleHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIFNpZGVFZmZlY3RzIHdpdGggYSByZWxhdGVkICdmb2N1cyBvdXQnIHRvIGEgZmllbGQgZ3JvdXAuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlXG5cdCAqIEBwYXJhbSBvRXZlbnQgU0FQVUk1IEV2ZW50XG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdChzKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlKG9FdmVudDogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzLFxuXHRcdFx0YURlZmVycmVkU2lkZUVmZmVjdHM6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZVtdID0gW10sXG5cdFx0XHRhRmllbGRHcm91cElkczogc3RyaW5nW10gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmllbGRHcm91cElkc1wiKTtcblxuXHRcdGNvbnN0IGdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZSA9IGZ1bmN0aW9uIChvRGVmZXJyZWRTaWRlRWZmZWN0OiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUpIHtcblx0XHRcdGxldCBiSXNSZXF1ZXN0c1RyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RQcm9wZXJ0eSA9IG9EZWZlcnJlZFNpZGVFZmZlY3Quc2lkZUVmZmVjdFByb3BlcnR5O1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQ7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoYXQuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IG1FbnRpdHlUeXBlID0gdGhhdC5fZ2V0RW50aXR5VHlwZUZyb21GUU4oc0VudGl0eVR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwob0RlZmVycmVkU2lkZUVmZmVjdC5wcm9taXNlcylcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGJJc1JlcXVlc3RzVHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vRGVmZXJyZWQgU2lkZUVmZmVjdHMgYXJlIGV4ZWN1dGVkIG9ubHkgaWYgYWxsIHNvdXJjZVByb3BlcnRpZXMgaGF2ZSBubyByZWdpc3RlcmVkIGZhaWx1cmUuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bUVudGl0eVR5cGUgJiZcblx0XHRcdFx0XHRcdChvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMgYXMgUHJvcGVydHlQYXRoW10pLmV2ZXJ5KChzb3VyY2VQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoc291cmNlUHJvcGVydHkudHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNJZCA9IHRoYXQuX2dlbmVyYXRlU3RhdHVzSW5kZXgobUVudGl0eVR5cGUsIHNvdXJjZVByb3BlcnR5LnZhbHVlLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICF0aGF0Ll9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUuaGFzKHNJZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLCBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0XHRpZiAoYklzUmVxdWVzdHNUcmlnZ2VyZWQpIHtcblx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzIG9uIGNvbnRleHQgJHtzQ29udGV4dFBhdGh9YCwgb0Vycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgdGhhdC5fbUZpZWxkR3JvdXBRdWV1ZVtvU2lkZUVmZmVjdFByb3BlcnR5Lm5hbWVdW3NDb250ZXh0UGF0aF07XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRhRmllbGRHcm91cElkcy5mb3JFYWNoKChzRmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIHN0cmluZyBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiIGlzIGFkZGVkIHRvIHRoZSBTaWRlRWZmZWN0cyBuYW1lIGR1cmluZyB0ZW1wbGF0aW5nIHRvIGtub3dcblx0XHRcdCAqIGlmIHRoaXMgU2lkZUVmZmVjdHMgbXVzdCBiZSBpbW1lZGlhdGVseSBleGVjdXRlZCByZXF1ZXN0ZWQgKG9uIGZpZWxkIGNoYW5nZSkgb3IgbXVzdFxuXHRcdFx0ICogYmUgZGVmZXJyZWQgKG9uIGZpZWxkIGdyb3VwIGZvY3VzIG91dClcblx0XHRcdCAqXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IHNTaWRlRWZmZWN0TmFtZTogc3RyaW5nID0gc0ZpZWxkR3JvdXBJZC5yZXBsYWNlKFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIsIFwiXCIpO1xuXHRcdFx0Y29uc3QgbUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzID0gdGhhdC5fbUZpZWxkR3JvdXBRdWV1ZT8uW3NTaWRlRWZmZWN0TmFtZV07XG5cdFx0XHRpZiAobUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cykuZm9yRWFjaCgoc0NvbnRleHRQYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0RlZmVycmVkU2lkZUVmZmVjdCA9IG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdGlmICghb0RlZmVycmVkU2lkZUVmZmVjdC5wcm9jZXNzU3RhcnRlZCkge1xuXHRcdFx0XHRcdFx0b0RlZmVycmVkU2lkZUVmZmVjdC5wcm9jZXNzU3RhcnRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0cy5wdXNoKG9EZWZlcnJlZFNpZGVFZmZlY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0cy5tYXAoKG9EZWZlcnJlZFNpZGVFZmZlY3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZShvRGVmZXJyZWRTaWRlRWZmZWN0KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgU2lkZUVmZmVjdHMgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGFkZENvbnRyb2xTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgTmFtZSBvZiB0aGUgZW50aXR5IHdoZXJlIHRoZSBTaWRlRWZmZWN0cyBjb250cm9sIHdpbGwgYmUgcmVnaXN0ZXJlZFxuXHQgKiBAcGFyYW0gb1NpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIHJlZ2lzdGVyLiBFbnN1cmUgdGhlIHNvdXJjZUNvbnRyb2xJZCBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIFNBUFVJNSBjb250cm9sIElELlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBhZGRDb250cm9sU2lkZUVmZmVjdHMoc0VudGl0eVR5cGU6IHN0cmluZywgb1NpZGVFZmZlY3RzOiBPbWl0PENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsIFwiZnVsbHlRdWFsaWZpZWROYW1lXCI+KTogdm9pZCB7XG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5hZGRDb250cm9sU2lkZUVmZmVjdHMoc0VudGl0eVR5cGUsIG9TaWRlRWZmZWN0cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgcXVldWUgY29udGFpbmluZyB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgcmVtb3ZlRmFpbGVkU2lkZUVmZmVjdHNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgcmVtb3ZlRmFpbGVkU2lkZUVmZmVjdHMoKTogdm9pZCB7XG5cdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSByZXF1ZXN0U2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBuZWVkIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHJlcXVlc3Qgb24gU0FQVUk1IGNvbnRleHRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLCBvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8YW55PiB7XG5cdFx0bGV0IGZSZXNvbHZlcjogYW55LCBmUmVqZWN0b3I6IGFueTtcblx0XHRjb25zdCBvUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZSZXNvbHZlciA9IHJlc29sdmU7XG5cdFx0XHRmUmVqZWN0b3IgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYVRhcmdldHM6IGFueVtdID0gKChvU2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMgYXMgYW55W10pIHx8IFtdKS5jb25jYXQoKG9TaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzIGFzIGFueVtdKSB8fCBbXSksXG5cdFx0XHRzVHJpZ2dlckFjdGlvbjogU3RyaW5nIHwgdW5kZWZpbmVkID0gKG9TaWRlRWZmZWN0cyBhcyBPRGF0YVNpZGVFZmZlY3RzVHlwZSkuVHJpZ2dlckFjdGlvbjtcblxuXHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvQ29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0cywgb0NvbnRleHQpXG5cdFx0XHQudGhlbigoKSA9PiBmUmVzb2x2ZXIoKSlcblx0XHRcdC5jYXRjaCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5fYWRkRmFpbGVkU2lkZUVmZmVjdHMob1NpZGVFZmZlY3RzLCBvQ29udGV4dCk7XG5cdFx0XHRcdGZSZWplY3RvcihvRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gb1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBTaWRlRWZmZWN0cyBjcmVhdGVkIGJ5IGEgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gb0NvbnRyb2wgU0FQVUk1IENvbnRyb2xcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgcmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKG9Db250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0NvbnRyb2xJZCA9IG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpICYmIG9Db250cm9sLmdldElkKCk7XG5cblx0XHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5yZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoc0NvbnRyb2xJZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHNcblx0ICogVGhlIFNpZGVFZmZlY3RzIHdpbGwgYmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgY2hhbmdlIG9uIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfYWRkRmFpbGVkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHJpdmF0ZSBfYWRkRmFpbGVkU2lkZUVmZmVjdHMob1NpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGUsIG9Db250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoOiBzdHJpbmcgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0gPSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc0NvbnRleHRQYXRoXSB8fCBbXTtcblx0XHRjb25zdCBiSXNOb3RBbHJlYWR5TGlzdGVkID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0uZXZlcnkoXG5cdFx0XHQobUZhaWxlZFNpZGVFZmZlY3RzKSA9PiBvU2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lICE9PSBtRmFpbGVkU2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0KTtcblx0XHRpZiAoYklzTm90QWxyZWFkeUxpc3RlZCkge1xuXHRcdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0ucHVzaChvU2lkZUVmZmVjdHMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCBncm91cCB0aGF0IGlzIHJlcXVpcmVkIGJlZm9yZSByZXF1ZXN0aW5nIFNpZGVFZmZlY3RzLlxuXHQgKiBJZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCBhbmQgb25seSB0aGUgZmllbGQgcmVxdWlyZXMgdGhlIFNpZGVFZmZlY3RzIG9uIHRoaXMgY29udGV4dCwgdGhlIFNpZGVFZmZlY3RzIGFyZSByZW1vdmVkIGZyb20gdGhlXG5cdCAqIFNpZGVFZmZlY3RzIHF1ZXVlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2Vcblx0ICogQHBhcmFtIG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdG8gYmUgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZUZpZWxkR3JvdXBQcm9taXNlKG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cblx0XHRsZXQgYlByb21pc2VTdWNjZXNzID0gdHJ1ZTtcblx0XHRyZXR1cm4gbUV2ZW50RmllbGRQcm9wZXJ0aWVzLnByb21pc2Vcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGJQcm9taXNlU3VjY2Vzcztcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRiUHJvbWlzZVN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIGJQcm9taXNlU3VjY2Vzcztcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBOZWVkIHRvIHN0b3JlIHRoZSBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoaXMgZmllbGQgZm9yIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdFx0XHRcdCAqIHNpbmNlIGFsbCBTb3VyY2VQcm9wZXJ0aWVzIGZvciB0aGlzIGtpbmQgb2YgU2lkZUVmZmVjdHMgbXVzdCBiZSB2YWxpZFxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhhdC5fc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhtRXZlbnRGaWVsZFByb3BlcnRpZXMuZmllbGQsIGJQcm9taXNlU3VjY2Vzcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCB0aGF0IGlzIHJlcXVpcmVkIGJlZm9yZSByZXF1ZXN0aW5nIGltbWVkaWF0ZSBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2Vcblx0ICogQHBhcmFtIG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdG8gYmUgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBvUHJvbWlzZSA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5wcm9taXNlO1xuXHRcdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSWYgdGhlIGZpZWxkIGdldHMgYSBGaWVsZEhlbHBlciwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGFsbCBmaWVsZHMgY2hhbmdlZCBieSB0aGlzIEZpZWxkSGVscGVyIGhhdmUgYmVlbiBzZXQuXG5cdFx0XHQgKiBUbyBhY2hpZXZlIHRoaXMsIHdlIGVuc3VyZSB0aGF0IGFsbCByZWxhdGVkIGJpbmRpbmdzIGhhdmUgYmVlbiByZXNvbHZlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIHJlc29sdXRpb24gcHJvY2VzcyBpcyBub3QgbWFuYWdlZCBieSB0aGUgRmllbGQgRXZlbnQgUHJvbWlzZSwgc28gZm9yIGZhc3QgdXNlciBhY3Rpb25zIChsaWtlIGF1dG9tYXRpb24pIGl0IGNhbiBsb2NrIHRoZSBtb2RlbFxuXHRcdFx0ICogYW5kIG5vIHJlcXVlc3QgY2FuIGJlIGV4ZWN1dGVkLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBvRmllbGQgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMuZmllbGQ7XG5cdFx0XHRjb25zdCBzRmllbGRIZWxwZXJJZCA9IG9GaWVsZC5nZXRGaWVsZEhlbHAgJiYgb0ZpZWxkLmdldEZpZWxkSGVscCgpO1xuXHRcdFx0aWYgKHNGaWVsZEhlbHBlcklkKSB7XG5cdFx0XHRcdGNvbnN0IG9GaWx0ZXJIZWxwOiBhbnkgPSBDb3JlLmJ5SWQoc0ZpZWxkSGVscGVySWQpO1xuXHRcdFx0XHRpZiAob0ZpbHRlckhlbHAgJiYgb0ZpbHRlckhlbHAuZ2V0T3V0UGFyYW1ldGVycykge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdChvRmlsdGVySGVscC5nZXRPdXRQYXJhbWV0ZXJzKCkgYXMgYW55W10pLm1hcCgob091dFBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvQmluZGluZyA9IG9PdXRQYXJhbWV0ZXIuZ2V0QmluZGluZyhcInZhbHVlXCIpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBvQmluZGluZy5yZXF1ZXN0VmFsdWUoKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHN0YXR1cyBpbmRleC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZVN0YXR1c0luZGV4XG5cdCAqIEBwYXJhbSBtRW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGVcblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIG9Db250ZXh0IFNBUFVJNSBDb250ZXh0XG5cdCAqIEByZXR1cm5zIEluZGV4XG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZVN0YXR1c0luZGV4KG1FbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBzUHJvcGVydHlQYXRoOiBzdHJpbmcsIG9Db250ZXh0PzogQ29udGV4dCB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0Py5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbVByb3BlcnR5ID0gbUVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdFx0aWYgKG1Qcm9wZXJ0eSkge1xuXHRcdFx0aWYgKG1Qcm9wZXJ0eSAmJiBtUHJvcGVydHkuX3R5cGUgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gW21Qcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUsIHNDb250ZXh0UGF0aF0uam9pbihcIl9fXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgb24gd2hpY2ggU2lkZUVmZmVjdHMgY2FuIGJlIHJlcXVlc3RlZC5cblx0ICogVGhlIGNvcnJlY3Qgb25lIG11c3QgaGF2ZSB0aGUgYmluZGluZyBwYXJhbWV0ZXIgJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9Tb3VyY2VGaWVsZCBGaWVsZFxuXHQgKiBAcGFyYW0gc1NpZGVFZmZlY3RFbnRpdHlUeXBlIFRhcmdldCBlbnRpdHkgdHlwZSBvZiB0aGUgU2lkZUVmZmVjdHMgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBTQVBVSTUgQ29udGV4dFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcml2YXRlIF9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob1NvdXJjZUZpZWxkOiBGaWVsZENvbnRyb2wsIHNTaWRlRWZmZWN0RW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRpZiAoc1NpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0b0NvbnRleHRGb3JTaWRlRWZmZWN0cyA9IChvQmluZGluZ0NvbnRleHQgYXMgYW55KS5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQ29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRvQ29udGV4dEZvclNpZGVFZmZlY3RzID0gKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgYXMgYW55KS5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0XHRcdGlmIChvQ29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRcdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb0NvbnRleHRGb3JTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBFbnRpdHlUeXBlIGJhc2VkIG9uIGl0cyBmdWxseS1xdWFsaWZpZWQgbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIHNGdWxseVF1YWxpZmllZE5hbWUgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RW50aXR5VHlwZUZyb21GUU4oc0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnZlcnRlZE1ldGFNb2RlbCgpIGFzIENvbnZlcnRlZE1ldGFkYXRhKS5lbnRpdHlUeXBlcy5maW5kKChvRW50aXR5VHlwZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG9FbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gc0Z1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9taXNlIG9mIHRoZSBmaWVsZCB2YWxpZGF0aW9uIHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBTaWRlRWZmZWN0cyBwcm9jZXNzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEZpZWxkUHJvbWlzZVxuXHQgKiBAcGFyYW0gb0V2ZW50IEZpZWxkIGNoYW5nZSBldmVudFxuXHQgKiBAcmV0dXJucyBGaWVsZCBwcm9taXNlXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZFByb21pc2Uob0V2ZW50OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGNvbnN0IHZhbGlkaXR5ID0gRmllbGRSdW50aW1lLmdldEZpZWxkU3RhdGVPbkNoYW5nZShvRXZlbnQpLnN0YXRlLnZhbGlkaXR5O1xuXHRcdHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdFx0aWYgKCF2YWxpZGl0eSkge1xuXHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGZpZWxkIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgU2lkZUVmZmVjdHMgcHJvY2Vzcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRGaWVsZFByb3BlcnRpZXNcblx0ICogQHBhcmFtIG9FdmVudCBGaWVsZCBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMgRmllbGQgcHJvcGVydGllcyAoZXZlbnQgY2hhbmdlIHByb21pc2UsIGZpZWxkLCBTaWRlRWZmZWN0cyByZWxhdGVkIHRvIHRoaXMgZmllbGQpXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZFByb3BlcnRpZXMob0V2ZW50OiBFdmVudCk6IEZpZWxkRXZlbnRQcm9wZXJ0eVR5cGUge1xuXHRcdGNvbnN0IG9GaWVsZDogRmllbGRDb250cm9sID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpZWxkQ29udHJvbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRwcm9taXNlOiB0aGlzLl9nZXRGaWVsZFByb21pc2Uob0V2ZW50KSxcblx0XHRcdGZpZWxkOiBvRmllbGQsXG5cdFx0XHRzaWRlRWZmZWN0c01hcDogdGhpcy5fZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBTaWRlRWZmZWN0cyBtYXBcblx0ICogVGhlc2UgU2lkZUVmZmVjdHMgYXJlXG5cdCAqIC0gbGlzdGVkIGludG8gRmllbGRHcm91cElkcyAoY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZSlcblx0ICogLSBnZW5lcmF0ZWQgYnkgYSBjb250cm9sIG9yIGNvbnRyb2xzIGFuZCB0aGF0IGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGFzIFNvdXJjZVByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcFxuXHQgKiBAcGFyYW0gb0ZpZWxkIEZpZWxkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQ6IEZpZWxkQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9LFxuXHRcdFx0YUZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gb0ZpZWxkLmdldEZpZWxkR3JvdXBJZHMoKSxcblx0XHRcdHNWaWV3RW50aXR5U2V0U2V0TmFtZSA9IHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0LFxuXHRcdFx0b1ZpZXdFbnRpdHlTZXQgPSAodGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKSBhcyBDb252ZXJ0ZWRNZXRhZGF0YSkuZW50aXR5U2V0cy5maW5kKChvRW50aXR5U2V0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBvRW50aXR5U2V0Lm5hbWUgPT09IHNWaWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdGFGaWVsZEdyb3VwSWRzLmZvckVhY2goKHNGaWVsZEdyb3VwSWQpID0+IHtcblx0XHRcdGNvbnN0IGJJc0ltbWVkaWF0ZTogYm9vbGVhbiA9IHNGaWVsZEdyb3VwSWQuaW5kZXhPZihcIiQkSW1tZWRpYXRlUmVxdWVzdFwiKSAhPT0gLTEsXG5cdFx0XHRcdHNOYW1lOiBzdHJpbmcgPSBzRmllbGRHcm91cElkLnJlcGxhY2UoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiwgXCJcIiksXG5cdFx0XHRcdGFTaWRlRWZmZWN0UGFydHM6IHN0cmluZ1tdID0gc05hbWUuc3BsaXQoXCIjXCIpLFxuXHRcdFx0XHRzU2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZyA9IGFTaWRlRWZmZWN0UGFydHNbMF0sXG5cdFx0XHRcdHNTaWRlRWZmZWN0UGF0aDogc3RyaW5nID0gYCR7c1NpZGVFZmZlY3RFbnRpdHlUeXBlfUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHMke1xuXHRcdFx0XHRcdGFTaWRlRWZmZWN0UGFydHMubGVuZ3RoID09PSAyID8gYCMke2FTaWRlRWZmZWN0UGFydHNbMV19YCA6IFwiXCJcblx0XHRcdFx0fWAsXG5cdFx0XHRcdG9TaWRlRWZmZWN0OiBTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQgPVxuXHRcdFx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhzU2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc1NpZGVFZmZlY3RQYXRoXSxcblx0XHRcdFx0b0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgPSB0aGlzLl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob0ZpZWxkLCBzU2lkZUVmZmVjdEVudGl0eVR5cGUpO1xuXHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9Db250ZXh0KSB7XG5cdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc05hbWUsXG5cdFx0XHRcdFx0aW1tZWRpYXRlOiBiSXNJbW1lZGlhdGUsXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdGNvbnRleHQ6IG9Db250ZXh0XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvL1NpZGVFZmZlY3RzIGNvbWluZyBmcm9tIGNvbnRyb2wocylcblx0XHRpZiAoc1ZpZXdFbnRpdHlTZXRTZXROYW1lICYmIG9WaWV3RW50aXR5U2V0KSB7XG5cdFx0XHRjb25zdCBzVmlld0VudGl0eVR5cGUgPSBvVmlld0VudGl0eVNldC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0bUZpZWxkUGF0aDogYW55ID0gKG9GaWVsZC5nZXRBZ2dyZWdhdGlvbihcImN1c3RvbURhdGFcIikgYXMgYW55W10pLmZpbmQoKG9DdXN0b21EYXRhKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcInNvdXJjZVBhdGhcIjtcblx0XHRcdFx0fSksXG5cdFx0XHRcdG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkID0gdGhpcy5fZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9GaWVsZCwgc1ZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0aWYgKG1GaWVsZFBhdGggJiYgb0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgc0ZpZWxkUGF0aCA9IG1GaWVsZFBhdGguZ2V0VmFsdWUoKS5yZXBsYWNlKGAvJHtzVmlld0VudGl0eVNldFNldE5hbWV9L2AsIFwiXCIpLFxuXHRcdFx0XHRcdG1Db250cm9sRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzKFxuXHRcdFx0XHRcdFx0c1ZpZXdFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KSBhcyBDb250cm9sU2lkZUVmZmVjdHNFbnRpdHlEaWN0aW9uYXJ5O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ29udHJvbEVudGl0eVR5cGUpLmZvckVhY2goKHNDb250cm9sTmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250cm9sU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSA9IG1Db250cm9sRW50aXR5VHlwZVtzQ29udHJvbE5hbWVdO1xuXHRcdFx0XHRcdGlmIChvQ29udHJvbFNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMuaW5jbHVkZXMoc0ZpZWxkUGF0aCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNOYW1lID0gYCR7c0NvbnRyb2xOYW1lfTo6JHtzVmlld0VudGl0eVR5cGV9YDtcblx0XHRcdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IHNOYW1lLFxuXHRcdFx0XHRcdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvQ29udHJvbFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBvQ29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbVNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogTGlzdDogZ2V0cyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMgcmVxdWVzdHNcblx0ICogUmVnaXN0ZXI6IGNhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBldmVudCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zICBBcnJheSBvZiBpbW1lZGlhdGUgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzKFxuXHRcdG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSxcblx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8YW55PlxuXHQpOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSB7XG5cdFx0Y29uc3QgbUZpZWxkU2lkZUVmZmVjdHNNYXAgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMuc2lkZUVmZmVjdHNNYXAsXG5cdFx0XHRvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCA9IHRoaXMuX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKSwgLy8gUHJvbWlzZSBtYW5hZ2luZyBGaWVsZEdyb3VwIHJlcXVlc3RzIGlmIEZpZWxkIHByb21pc2UgZmFpbHNcblx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWU6IGFueSA9IHt9LFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSBbXTtcblxuXHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlID0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRPYmplY3Qua2V5cyhtRmllbGRTaWRlRWZmZWN0c01hcCkuZm9yRWFjaCgoc1NpZGVFZmZlY3ROYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBvU2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBtRmllbGRTaWRlRWZmZWN0c01hcFtzU2lkZUVmZmVjdE5hbWVdLFxuXHRcdFx0XHRzU2lkZUVmZmVjdENvbnRleHRQYXRoID0gb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdO1xuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBmb3IgdGhpcyBjb250ZXh0XG5cdFx0XHRpZiAoYUZhaWxlZFNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF07XG5cdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gPSB7fTtcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzLmZvckVhY2goKG1GYWlsZWRTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF1bbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0cnVlO1xuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBzU2lkZUVmZmVjdE5hbWUsXG5cdFx0XHRcdFx0XHRwcmV2aW91c2x5RmFpbGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG1GYWlsZWRTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdGNvbnRleHQ6IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChvU2lkZUVmZmVjdFByb3BlcnR5LmltbWVkaWF0ZSkge1xuXHRcdFx0XHQvLyBTaWRlRWZmZWN0cyB3aWxsIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5IGFmdGVyIGV2ZW50IHByb21pc2UgdmFsaWRhdGlvblxuXHRcdFx0XHRpZiAoIW1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0/LltvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogc1NpZGVFZmZlY3ROYW1lLFxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRjb250ZXh0OiBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQWRkIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRvIHRoZSByZWxhdGVkIGRpY3Rpb25hcnlcblx0XHRcdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdID0gdGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdIHx8IHt9O1xuXHRcdFx0XHRjb25zdCBtU2lkZUVmZmVjdENvbnRleHRQYXRoID0gdGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdIHx8IHtcblx0XHRcdFx0XHRwcm9taXNlczogW10sXG5cdFx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBvU2lkZUVmZmVjdFByb3BlcnR5LFxuXHRcdFx0XHRcdHByb2Nlc3NTdGFydGVkOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRtU2lkZUVmZmVjdENvbnRleHRQYXRoLnByb21pc2VzID0gbVNpZGVFZmZlY3RDb250ZXh0UGF0aC5wcm9taXNlcy5jb25jYXQoW1xuXHRcdFx0XHRcdG9GaWVsZFByb21pc2VGb3JGaWVsZEdyb3VwLFxuXHRcdFx0XHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIGFzIFByb21pc2U8YW55PlxuXHRcdFx0XHRdKTtcblx0XHRcdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdID0gbVNpZGVFZmZlY3RDb250ZXh0UGF0aDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIGEgZmllbGQgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9GaWVsZCBGaWVsZFxuXHQgKiBAcGFyYW0gYlN1Y2Nlc3MgU3RhdHVzIG9mIHRoZSBmaWVsZCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIF9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKG9GaWVsZDogRmllbGRDb250cm9sLCBiU3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9GaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRjb25zdCBtRW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRlFOKHNFbnRpdHlUeXBlKTtcblx0XHRpZiAobUVudGl0eVR5cGUpIHtcblx0XHRcdC8vIFJldHJpZXZlcyBhbGwgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBmaWVsZFxuXHRcdFx0Y29uc3Qgb0ZpZWxkQmluZGluZzogYW55ID0gdGhpcy5fZ2V0QmluZGluZ0ZvckZpZWxkKG9GaWVsZCk7XG5cdFx0XHRjb25zdCBhRmllbGRQYXRocyA9IG9GaWVsZEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIilcblx0XHRcdFx0PyAob0ZpZWxkQmluZGluZy5nZXRCaW5kaW5ncygpIHx8IFtdKS5tYXAoKG9CaW5kaW5nOiBhbnkpID0+IG9CaW5kaW5nLnNQYXRoKVxuXHRcdFx0XHQ6IFtvRmllbGRCaW5kaW5nLmdldFBhdGgoKV07XG5cblx0XHRcdC8vIFN0b3JlcyBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzXG5cdFx0XHRhRmllbGRQYXRocy5mb3JFYWNoKChzRmllbGRQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgc0lkID0gdGhpcy5fZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZSwgc0ZpZWxkUGF0aCwgb0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZVtiU3VjY2VzcyA/IFwiZGVsZXRlXCIgOiBcImFkZFwiXShzSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBwcm9wZXJ0eSBiaW5kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRmllbGQgRmllbGRcblx0ICogQHJldHVybnMgIEJpbmRpbmcgdG8gdGhlIHZhbHVlXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRCaW5kaW5nRm9yRmllbGQob0ZpZWxkOiBGaWVsZENvbnRyb2wpOiBCaW5kaW5nIHtcblx0XHRsZXQgc0JpbmRpbmdOYW1lID0gXCJ2YWx1ZVwiO1xuXHRcdGlmIChvRmllbGQuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdHNCaW5kaW5nTmFtZSA9IFwic2VsZWN0ZWRcIjtcblx0XHR9IGVsc2UgaWYgKG9GaWVsZC5pc0EoXCJzYXAuZmUuY29yZS5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0c0JpbmRpbmdOYW1lID0gXCJ1cGxvYWRVcmxcIjtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaWVsZC5nZXRCaW5kaW5nKHNCaW5kaW5nTmFtZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1RE1BLDhCLFdBRExDLGNBQWMsQ0FBQyw4Q0FBRCxDLFVBU2JDLGNBQWMsRSxVQWdCZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVlkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBaUJkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBNkNkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBaUZkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBV2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FjZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWdDZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWtCZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRSxXQThHZEMs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
|
|
@@ -474,10 +474,10 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
474
474
|
*/
|
|
475
475
|
private _getFieldPromise(oEvent: Event): Promise<any> {
|
|
476
476
|
const promise = oEvent.getParameter("promise") || Promise.resolve();
|
|
477
|
-
|
|
477
|
+
const validity = FieldRuntime.getFieldStateOnChange(oEvent).state.validity;
|
|
478
478
|
return promise.then(() => {
|
|
479
479
|
return new Promise(function (resolve, reject) {
|
|
480
|
-
if (!
|
|
480
|
+
if (!validity) {
|
|
481
481
|
reject();
|
|
482
482
|
} else {
|
|
483
483
|
resolve(true);
|