@sapui5/sap.fe.macros 1.142.1 → 1.142.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 +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
- package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +1 -1
- package/src/sap/fe/macros/field/FieldTemplating.js +1 -1
- package/src/sap/fe/macros/field/FieldTemplating.ts +1 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +5 -1
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +4 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -4
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +4 -3
- package/src/sap/fe/macros/table/TableAPI.js +17 -4
- package/src/sap/fe/macros/table/TableAPI.ts +15 -0
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +10 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +10 -0
- package/src/sap/fe/macros/table/TableRuntime.js +6 -4
- package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +25 -9
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -17
|
@@ -701,4 +701,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
701
701
|
_exports.getAvatarShape = getAvatarShape;
|
|
702
702
|
return _exports;
|
|
703
703
|
}, false);
|
|
704
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsIkNvbW1vbkZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsIl9leHBvcnRzIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsInRhcmdldE9iamVjdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0VGV4dEJpbmRpbmciLCJpbnB1dERhdGFNb2RlbFBhdGgiLCJhc09iamVjdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImN1c3RvbUZvcm1hdHRlciIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZpZWxkVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJWYWx1ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0Iiwib1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJvVGFyZ2V0QmluZGluZyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9UYXJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJJbnB1dE1hc2siLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsIm1hc2siLCJNYXNrIiwidG9TdHJpbmciLCJwbGFjZWhvbGRlclN5bWJvbCIsIlBsYWNlaG9sZGVyU3ltYm9sIiwibWFza1J1bGUiLCJfZ2V0TWFza2luZ1J1bGVzIiwiUnVsZXMiLCJDb21tb24iLCJNYXNrZWQiLCJ2YWx1ZU9mIiwiZWRpdFN0eWxlIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd09ubHlVbml0RGVjaW1hbHMiLCJwcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsInNob3dNZWFzdXJlIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiSXNUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJkYXRlVGltZVN0eWxlIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJnZXRWYWx1ZUJpbmRpbmciLCJpZ25vcmVVbml0IiwiaWdub3JlRm9ybWF0dGluZyIsImJpbmRpbmdQYXJhbWV0ZXJzIiwidGFyZ2V0VHlwZUFueSIsImtlZXBVbml0IiwiZGVjaW1hbFBhZGRpbmciLCJmb3JEaXNwbGF5Iiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInB1c2giLCJpc1Byb3BlcnR5IiwiaXNBY3Rpb25QYXJhbWV0ZXIiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsInN0eWxlIiwidGFyZ2V0Rm9ybWF0T3B0aW9ucyIsIlN0cmluZyIsImlzQ3VycmVuY3lPclVuaXRBbGlnbmVkIiwiRXh0ZXJuYWxJRCIsImNvbnN0cmFpbnRzIiwicGFyYW1ldGVycyIsInRhcmdldFR5cGUiLCIkVHlwZSIsImdldEFzc29jaWF0ZWRUZXh0QmluZGluZyIsInRleHRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eUhlbHBlciIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwib1RleHRQcm9wZXJ0eVBhdGgiLCJhbGxvd1BhdGNoIiwidmFsdWVMaXN0T3V0UGFyYW1ldGVycyIsIlZhbHVlTGlzdCIsIlBhcmFtZXRlcnMiLCJtYXAiLCJwYXJhbWV0ZXIiLCJMb2NhbERhdGFQcm9wZXJ0eSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImluY2x1ZGVzIiwiJCRub1BhdGNoIiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsIm9EYXRhTW9kZWxQYXRoIiwib1Byb3BlcnR5IiwiYU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYVNlbWFudGljT2JqZWN0cyIsIlNlbWFudGljS2V5IiwiYklzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJvTmF2UHJvcCIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsIm9SZWZDb25zdHJhaW50Iiwic291cmNlUHJvcGVydHkiLCJuYW1lIiwiUXVpY2tWaWV3RmFjZXRzIiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0RW50aXR5U2V0IiwiYUlzVGFyZ2V0U2VtYW50aWNLZXkiLCJzb21lIiwib1NlbWFudGljIiwiaXNLZXkiLCJpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkIiwib1Byb3BlcnR5UGF0aCIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJ0ZXh0QWxpZ25Nb2RlIiwiZ2V0VGV4dEFsaWdubWVudCIsImRhdGFGaWVsZE1vZGVsUGF0aCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb25zaWRlclRleHRBbm5vdGF0aW9uIiwidHlwZUZvckFsaWdubWVudCIsIlRhcmdldCIsImRpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJ0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiRmllbGRIZWxwZXIiLCJnZXRQcm9wZXJ0eUFsaWdubWVudCIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbiIsInZpc2libGVFeHByZXNzaW9uc0ZvckNvbm5lY3RlZEZpZWxkc0Zvcm1FbGVtZW50IiwiZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsInZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkc0JpbmRpbmdFeHByZXNzaW9ucyIsImNvbm5lY3RlZEZpZWxkcyIsIk9iamVjdCIsInZhbHVlcyIsIkRhdGEiLCJmaWx0ZXIiLCJjb25uZWN0ZWRGaWVsZCIsImhhc093blByb3BlcnR5IiwiZGF0YUZpZWxkIiwiYmluZGluZ0V4cHJlc3Npb25PYmplY3QiLCJvciIsImdldFF1aWNrVmlld0JpbmRpbmciLCJnZXRRdWlja1ZpZXdUeXBlIiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIlVybCIsIklzUGhvbmVOdW1iZXIiLCJnZXRTZW1hbnRpY09iamVjdHMiLCJhU2VtT2JqRXhwclRvUmVzb2x2ZSIsInNDdXN0b21EYXRhS2V5Iiwic0N1c3RvbURhdGFWYWx1ZSIsImFTZW1PYmpDdXN0b21EYXRhIiwiaXRlbSIsImtleSIsInZhbHVlIiwib1NlbWFudGljT2JqZWN0c01vZGVsIiwiSlNPTk1vZGVsIiwiJCR2YWx1ZUFzUHJvbWlzZSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCIsIm9UaGlzIiwiaXNNdWx0aUxpbmVUZXh0Iiwid3JhcCIsIl9oYXNWYWx1ZUhlbHBUb1Nob3ciLCJvUHJvcGVydHlVbml0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUN1cnJlbmN5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRNaW5NYXhEYXRlRXhwcmVzc2lvbiIsImRhdGVBbm5vdGF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImZpeGVkRGF0ZSIsIlZhbGlkYXRpb24iLCIkRGF0ZSIsImRhdGVQcm9wZXJ0eSIsImZvcm1hdFJlc3VsdCIsImNvbnN0YW50IiwidmFsdWVGb3JtYXR0ZXJzIiwicHJvdmlkZURhdGVJbnN0YW5jZSIsIkJpbmRpbmdUb29sa2l0Iiwic2V0RWRpdFN0eWxlUHJvcGVydGllcyIsIm9Qcm9wcyIsIm9EYXRhRmllbGQiLCJvbmx5RWRpdFN0eWxlIiwiTWF4aW11bSIsIk1pbmltdW0iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JEYXRlUGlja2VyIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJQbGFjZWhvbGRlciIsImRhdGFQb2ludEFubm90YXRpb24iLCJpc0RhdGFGaWVsZEZvckFubm90YXRpb24iLCJWaXN1YWxpemF0aW9uIiwiUXVpY2tJbmZvIiwicmF0aW5nSW5kaWNhdG9yVG9vbHRpcCIsInJhdGluZ0luZGljYXRvclRhcmdldFZhbHVlIiwiVGFyZ2V0VmFsdWUiLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsInRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIiwiaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUiLCJ0ZXN0IiwiZGVzY3JpcHRpb24iLCJnZXRSZWxhdGl2ZVBhdGhzIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJtaW5EYXRlRXhwcmVzc2lvbiIsInNob3dUaW1lem9uZSIsIk11bHRpTGluZVRleHQiLCJzdGF0aWNEZXNjcmlwdGlvbiIsIm1hc2tpbmdSdWxlcyIsInN5bWJvbCIsInJlZ2V4IiwibWFza2luZ1J1bGUiLCJNYXNrU3ltYm9sIiwiUmVnRXhwIiwiaGFzU2VtYW50aWNPYmplY3RJbk5hdmlnYXRpb25PclByb3BlcnR5IiwicHJvcGVydHkiLCJTZW1hbnRpY09iamVjdEhlbHBlciIsImhhc1NlbWFudGljT2JqZWN0IiwibGFzdE5hdlByb3AiLCJmaW5kIiwiY29udGV4dE5hdlByb3AiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCIsInZhbHVlUGF0aCIsImlzQW5ub3RhdGlvbk9mVGVybSIsImluZGV4T2YiLCJyZXBsYWNlIiwiaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMiLCJub25JbnNlcnRhYmxlUHJvcGVydGllcyIsImdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uIiwiY2FwYWJpbGl0aWVzIiwiSW5zZXJ0UmVzdHJpY3Rpb25zIiwiTm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMiLCJub25JbnNlcnRhYmxlUHJvcGVydHkiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiZHJhZnRJbmRpY2F0b3JLZXkiLCJnZXRBdmF0YXJTaGFwZSIsIklzSW1hZ2VVUkwiLCJJc05hdHVyYWxQZXJzb24iLCJJc0ltYWdlIiwiZW50aXR5QW5ub3RhdGlvblRhcmdldCIsImF2YXRhclNoYXBlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0VmFsdWVMaXN0UGFyYW1ldGVySW5PdXQsXG5cdFZhbHVlTGlzdFBhcmFtZXRlck91dFR5cGVzLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aEFjdGlvbixcblx0RGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHREYXRhUG9pbnRUeXBlLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdElucHV0TWFza1J1bGVUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzLCB0eXBlIERhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Rm9ybWF0T3B0aW9ucyxcblx0UGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRQcmltaXRpdmVUeXBlXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0ICogYXMgQmluZGluZ1Rvb2xraXQgZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29tcGxleFR5cGVFeHByZXNzaW9uLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0aXNBY3Rpb25QYXJhbWV0ZXIsXG5cdGlzQW5ub3RhdGlvbk9mVGVybSxcblx0aXNBbm5vdGF0aW9uT2ZUeXBlLFxuXHRpc05hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0ICogYXMgQ29tbW9uRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Db21tb25Gb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YUZpZWxkRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFByb3BlcnR5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBoYXNTdGF0aWNQZXJjZW50VW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTZW1hbnRpY09iamVjdEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSwgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRNYXNrUnVsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0lucHV0TWFza1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgQXZhdGFyU2hhcGUgZnJvbSBcInNhcC9tL0F2YXRhclNoYXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4vRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcIi4vRmllbGRIZWxwZXJcIjtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBhZGQgdGhlIHRleHQgYXJyYW5nZW1lbnQgdG8gYSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgY3VycmVudCBjb250ZXh0IHBhdGggd2UncmUgb24gKHRvIHByb3Blcmx5IHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydGllcylcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+ID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdG91dEV4cHJlc3Npb24gPSBDb21tb25Gb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50KG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgsIGV4cHJlc3Npb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdGxldCBvdXRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZnVsbENvbnRleHRQYXRoLCBleHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBleHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMsIHRydWUpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kaW5nID0gZnVuY3Rpb24gKFxuXHRpbnB1dERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGFzT2JqZWN0ID0gZmFsc2UsXG5cdGN1c3RvbUZvcm1hdHRlcj86IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8XG5cdFx0XHR8IERhdGFGaWVsZFxuXHRcdFx0fCBEYXRhUG9pbnRUeXBlXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0fCBEYXRhRmllbGRXaXRoVXJsXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0XHRcdHwgRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdD4oaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgW1xuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdF0pXG5cdCkge1xuXHRcdC8vIElmIHRoZXJlIGlzIG5vIHJlc29sdmVkIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgYXMgYSBjb25zdGFudFxuXHRcdGNvbnN0IGZpZWxkVmFsdWUgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSkgPz8gXCJcIjtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZSk7XG5cdH1cblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpICYmIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGlucHV0RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihpbnB1dERhdGFNb2RlbFBhdGgsIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QucGF0aCk7XG5cdH1cblx0Ly8gV2hlbiB0YXJnZXRPYmplY3QgaXMgYSBjb25zdGFudCB2YWx1ZVxuXHRpZiAodHlwZW9mIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXHRjb25zdCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoaW5wdXREYXRhTW9kZWxQYXRoKSk7XG5cdGxldCBvVGFyZ2V0QmluZGluZztcblx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gaW5wdXREYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+OyAvLyBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBvbmx5IGhhdmUgYSBwcm9wZXJ0eVxuXHRjb25zdCBvVGFyZ2V0UHJvcGVydHkgPSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHQvLyBmb3JtYXR0aW5nXG5cblx0aWYgKG9UYXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2spIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1RhcmdldFByb3BlcnR5LCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0b1RhcmdldEJpbmRpbmcudHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRvVGFyZ2V0QmluZGluZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0bWFzazogb1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogb1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5QbGFjZWhvbGRlclN5bWJvbC50b1N0cmluZygpLFxuXHRcdFx0bWFza1J1bGU6IF9nZXRNYXNraW5nUnVsZXMob1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5SdWxlcylcblx0XHR9IGFzIHVua25vd24gYXMgRm9ybWF0T3B0aW9ucztcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9UYXJnZXRQcm9wZXJ0eSwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdG9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRlZGl0U3R5bGU6IFwiTWFza2VkXCJcblx0XHR9IGFzIHVua25vd24gYXMgRm9ybWF0T3B0aW9ucztcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR7fSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFsc0ZvckN1cnJlbmN5XG5cdFx0KTtcblx0XHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCIgJiYgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpKSB7XG5cdFx0XHQvLyBUT0RPOiBSZWZhY3RvciBvbmNlIHR5cGVzIGFyZSBsZXNzIGdlbmVyaWMgaGVyZVxuXHRcdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0Li4ub1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0c2hvd01lYXN1cmU6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIG9UYXJnZXRQcm9wZXJ0eS50eXBlID09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMgYXMgRmllbGRGb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVGltZXpvbmUocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdH0gZWxzZSBpZiAoXG5cdFx0b1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVybiB8fFxuXHRcdGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZVxuXHQpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBmaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLFxuXHRcdFx0Y3VzdG9tRm9ybWF0dGVyXG5cdFx0KTtcblx0fVxuXG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBvVGFyZ2V0QmluZGluZztcblx0fVxuXHQvLyBXZSBkb24ndCBpbmNsdWRlICQkbm9wYXRjaCBhbmQgcGFyc2VLZWVwRW1wdHlTdHJpbmcgYXMgdGhleSBtYWtlIG5vIHNlbnNlIGluIHRoZSB0ZXh0IGJpbmRpbmcgY2FzZVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlQmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzIHwgQWN0aW9uUGFyYW1ldGVyPixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGlnbm9yZVVuaXQgPSBmYWxzZSxcblx0aWdub3JlRm9ybWF0dGluZyA9IGZhbHNlLFxuXHRiaW5kaW5nUGFyYW1ldGVycz86IG9iamVjdCxcblx0dGFyZ2V0VHlwZUFueSA9IGZhbHNlLFxuXHRrZWVwVW5pdCA9IGZhbHNlLFxuXHRkZWNpbWFsUGFkZGluZz86IG51bWJlcixcblx0Zm9yRGlzcGxheSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGNvbnN0IG9OYXZQYXRoID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgsIHRydWUpO1xuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb05hdlBhdGgudGFyZ2V0O1xuXHRcdG9OYXZQYXRoLnZpc2l0ZWRPYmplY3RzLmZvckVhY2goKG9OYXZPYmo6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkob05hdk9iaikpIHtcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9OYXZPYmopO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgfHwgaXNBY3Rpb25QYXJhbWV0ZXIodGFyZ2V0T2JqZWN0KSkge1xuXHRcdGxldCBvQmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiA9IHBhdGhJbk1vZGVsKFxuXHRcdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKVxuXHRcdCk7XG5cdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbikpIHtcblx0XHRcdGlmICgodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uIGFzIHsgSXNFbWFpbEFkZHJlc3M/OiBib29sZWFuIH0pPy5Jc0VtYWlsQWRkcmVzcykge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRW1haWxcIjtcblx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0bWFzazogdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLlVJLklucHV0TWFzay5NYXNrLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sOiB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUkuSW5wdXRNYXNrLlBsYWNlaG9sZGVyU3ltYm9sLFxuXHRcdFx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VSS5JbnB1dE1hc2suUnVsZXMpXG5cdFx0XHRcdH0gYXMgRm9ybWF0T3B0aW9ucztcblx0XHRcdH0gZWxzZSBpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0c3R5bGU6IFwicGFzc3dvcmRcIlxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVVbml0ICYmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRGb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGlmICgha2VlcFVuaXQpIHtcblx0XHRcdFx0XHR0YXJnZXRGb3JtYXRPcHRpb25zW1wic2hvd01lYXN1cmVcIl0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoU3RyaW5nKGZpZWxkRm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Rm9ybWF0T3B0aW9uc1tcImRlY2ltYWxQYWRkaW5nXCJdID0gZGVjaW1hbFBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRrZWVwVW5pdCA/IHVuZGVmaW5lZCA6IHRhcmdldEZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Zm9yRGlzcGxheSxcblx0XHRcdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JUaW1lem9uZShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIHRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdFx0XHRcdChvQmluZGluZ0V4cHJlc3Npb24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aCArPSBcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdGRlbGV0ZSBvQmluZGluZ0V4cHJlc3Npb24uY29uc3RyYWludHM7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiaW5kaW5nUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRhcmdldFR5cGVBbnkpIHtcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChhc09iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gb0JpbmRpbmdFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgc29tZWhvdyB3ZSBjb3VsZCBub3QgY29tcGlsZSB0aGUgYmluZGluZyAtPiByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0dGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdGlmICh0ZXh0UHJvcGVydHlQYXRoKSB7XG5cdFx0Y29uc3Qgb1RleHRQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Ly9CQ1AgMjM4MDEyMDgwNjogZ2V0VmFsdWVCaW5kaW5nIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IGZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nLlxuXHRcdC8vT3RoZXJ3aXNlIGVtcHR5aW5nIGFuIGlucHV0IGZpZWxkIHRoYXQgaGFzIGEgdGV4dCBhbm5vdGF0aW9uIHRvIGEgbm90IG51bGxhYmxlIHN0cmluZyB3b3VsZCByZXN1bHQgaW5cblx0XHQvL2FuIGVycm9yIG1lc3NhZ2UuIFRoZXJlZm9yZSBpbXBvcnQgcGFyYW0gJ2lnbm9yZUZvcm1hdHRpbmcnIGlzIG5vdyBzZXQgdG8gZmFsc2UuXG5cdFx0bGV0IGFsbG93UGF0Y2ggPSBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RPdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9XG5cdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Py5QYXJhbWV0ZXJzLm1hcChcblx0XHRcdFx0KHBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyVHlwZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoIXBhcmFtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQocGFyYW1ldGVyIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMpPy5Mb2NhbERhdGFQcm9wZXJ0eT8uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KSB8fCBbXTtcblx0XHRpZiAoXG5cdFx0XHRvVGV4dFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgJiZcblx0XHRcdHZhbHVlTGlzdE91dFBhcmFtZXRlcnMuaW5jbHVkZXMob1RleHRQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQpIHtcblx0XHRcdGFsbG93UGF0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVycyA9IGFsbG93UGF0Y2ggPyB1bmRlZmluZWQgOiB7ICQkbm9QYXRjaDogdHJ1ZSB9O1xuXHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgZmFsc2UsIGJpbmRpbmdQYXJhbWV0ZXJzLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0cyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXTtcblx0bGV0IGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZmFsc2U7XG5cdGFOYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChvTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0aWYgKG9OYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludCAmJiBvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQubGVuZ3RoKSB7XG5cdFx0XHRvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQuZm9yRWFjaCgob1JlZkNvbnN0cmFpbnQpID0+IHtcblx0XHRcdFx0aWYgKG9SZWZDb25zdHJhaW50Py5zb3VyY2VQcm9wZXJ0eSA9PT0gb1Byb3BlcnR5Lm5hbWUpIHtcblx0XHRcdFx0XHRpZiAob05hdlByb3A/LnRhcmdldFR5cGU/LmFubm90YXRpb25zPy5VST8uUXVpY2tWaWV3RmFjZXRzKSB7XG5cdFx0XHRcdFx0XHRiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgIT09IG9EYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdGNvbnN0IGFJc1RhcmdldFNlbWFudGljS2V5ID0gYVNlbWFudGljT2JqZWN0cy5zb21lKGZ1bmN0aW9uIChvU2VtYW50aWMpIHtcblx0XHRcdHJldHVybiBvU2VtYW50aWM/LiR0YXJnZXQ/Lm5hbWUgPT09IG9Qcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdGlmICgoYUlzVGFyZ2V0U2VtYW50aWNLZXkgfHwgb1Byb3BlcnR5LmlzS2V5KSAmJiBvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiB7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJlxuXHRcdFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHkpICYmXG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPT09IFwiRm9ybVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0ZXh0IGFsaWdubWVudCBiYXNlZCBvbiB0aGUgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIHByb3BlcnR5J3MgdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgVGhlIGZpZWxkIGZvcm1hdCBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBEaXNwbGF5IGZvcm1hdFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBjb21wdXRlZEVkaXRNb2RlIFRoZSBlZGl0TW9kZSB1c2VkIGluIHRoaXMgY2FzZVxuICogQHBhcmFtIGNvbnNpZGVyVGV4dEFubm90YXRpb24gV2hldGhlciB0byBjb25zaWRlciB0aGUgdGV4dCBhbm5vdGF0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0Zm9ybWF0T3B0aW9uczogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRjb21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Y29uc2lkZXJUZXh0QW5ub3RhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdC8vIGNoZWNrIGZvciB0aGUgdGFyZ2V0IHZhbHVlIHR5cGUgZGlyZWN0bHksIG9yIGluIGNhc2UgaXQgaXMgcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0bGV0IHR5cGVGb3JBbGlnbm1lbnQgPVxuXHRcdChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQudHlwZSB8fFxuXHRcdCgoZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WYWx1ZS4kdGFyZ2V0LnR5cGU7XG5cblx0aWYgKFxuXHRcdFByb3BlcnR5SGVscGVyLmlzS2V5KFxuXHRcdFx0KGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldCB8fFxuXHRcdFx0XHQoKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXRcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBcIkJlZ2luXCI7XG5cdH1cblx0aWYgKFxuXHRcdGNvbnNpZGVyVGV4dEFubm90YXRpb24gJiZcblx0XHRmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlICYmXG5cdFx0W1wiRGVzY3JpcHRpb25cIiwgXCJEZXNjcmlwdGlvblZhbHVlXCIsIFwiVmFsdWVEZXNjcmlwdGlvblwiXS5pbmNsdWRlcyhmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKVxuXHQpIHtcblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LnZhbHVlT2YoKTtcblx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiAhPT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHR0eXBlRm9yQWxpZ25tZW50ID0gdGV4dEFubm90YXRpb24uJHRhcmdldC50eXBlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGaWVsZEhlbHBlci5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlRm9yQWxpZ25tZW50LCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7IGlzQW5hbHl0aWNzPzogYm9vbGVhbiB9XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZE1vZGVsUGF0aCwgZm9ybWF0T3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgRm9ybUVsZW1lbnQuXG4gKiBUaGUgRm9ybUVsZW1lbnQgaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgY29udGVudCBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaW52aXNpYmxlLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHJldHVybnMgQSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gdGhhdCBjYW4gYmUgYm91bmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgdmlzaWJsZUV4cHJlc3Npb25zRm9yQ29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZEZvckFubm90YXRpb24gPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRNb2RlbFBhdGgpKTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zOiAoYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSA9IFtdO1xuXHRpZiAodHlwZW9mIHZpc2libGVFeHByZXNzaW9uID09PSBcInN0cmluZ1wiICYmIHZpc2libGVFeHByZXNzaW9uLmluY2x1ZGVzKFwiez1cIikpIHtcblx0XHRyZXR1cm4gdmlzaWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKFxuXHRcdGRhdGFGaWVsZEZvckFubm90YXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQuRGF0YSkuZmlsdGVyKFxuXHRcdFx0KGNvbm5lY3RlZEZpZWxkKSA9PiBjb25uZWN0ZWRGaWVsZD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdCkgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdGNvbm5lY3RlZEZpZWxkcy5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGQ7XG5cdFx0XHRjb25zdCBiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCA9IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkTW9kZWxQYXRoKTtcblx0XHRcdGlmIChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogQ29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBvciAqL1xuXHRcdHJldHVybiBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA/IGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpKSA6IHZpc2libGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiB2aXNpYmxlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBmb3IgYSBwcm9wZXJ0eSBpbiBhIFF1aWNrVmlld0ZhY2V0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0aGUgdmFsdWUsIG9yIGEgQmluZGluZ0V4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld0JpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcge1xuXHRpZiAoIXByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHt9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgUXVpY2tWaWV3R3JvdXBFbGVtZW50LlxuICogQHBhcmFtIGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIFF1aWNrVmlld0dyb3VwRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tWaWV3VHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzIHwgUHJvcGVydHk+KTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkV2l0aFVybD4odGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJiB0YXJnZXRPYmplY3Q/LlVybCkge1xuXHRcdHJldHVybiBcImxpbmtcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHx8XG5cdFx0KGlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcylcblx0KSB7XG5cdFx0cmV0dXJuIFwiZW1haWxcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikgfHxcblx0XHQoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcInBob25lXCI7XG5cdH1cblx0cmV0dXJuIFwidGV4dFwiO1xufTtcblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3RDdXN0b21EYXRhID0ge1xuXHRrZXk6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoXG5cdGFTZW1PYmpFeHByVG9SZXNvbHZlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfVtdXG4pOiBDb250ZXh0IHtcblx0aWYgKGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgc0N1c3RvbURhdGFLZXkgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiXCI7XG5cdFx0Y29uc3QgYVNlbU9iakN1c3RvbURhdGE6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVNlbU9iakV4cHJUb1Jlc29sdmUpIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gaXRlbS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGl0ZW0udmFsdWUpKTtcblx0XHRcdGFTZW1PYmpDdXN0b21EYXRhLnB1c2goe1xuXHRcdFx0XHRrZXk6IHNDdXN0b21EYXRhS2V5LFxuXHRcdFx0XHR2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYVNlbU9iakN1c3RvbURhdGEpO1xuXHRcdChvU2VtYW50aWNPYmplY3RzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0XHRyZXR1cm4gb1NlbWFudGljT2JqZWN0c01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChbXSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgTXVsdGlwbGVMaW5lcyBmb3IgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0ge2FueX0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlMaW5lVGV4dCBUaGUgcHJvcGVydHkgaXNNdWx0aUxpbmVUZXh0XG4gKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBkYXRhIGZpZWxkIHNob3VsZCBiZSBhIE11bHRpTGluZVRleHQgb3Igbm90XG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQgPSBmdW5jdGlvbiAob1RoaXM6IFBhcnRpYWw8eyB3cmFwPzogYm9vbGVhbiB9PiwgaXNNdWx0aUxpbmVUZXh0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGlmIChvVGhpcy53cmFwID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0O1xufTtcblxuY29uc3QgX2hhc1ZhbHVlSGVscFRvU2hvdyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5LCBtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHQvLyB3ZSBzaG93IGEgdmFsdWUgaGVscCBpZiB0ZWggcHJvcGVydHkgaGFzIG9uZSBvciBpZiBpdHMgdmlzaWJsZSB1bml0IGhhcyBvbmVcblx0Y29uc3Qgb1Byb3BlcnR5VW5pdCA9IFByb3BlcnR5SGVscGVyLmdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3Qgb1Byb3BlcnR5Q3VycmVuY3kgPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRyZXR1cm4gKFxuXHRcdChQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSAmJiBvUHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB8fFxuXHRcdChtZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCIgJiZcblx0XHRcdCgob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdChvUHJvcGVydHlDdXJyZW5jeSAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZGF0ZSBmb3IgdGhlIGRhdGUgZmllbGQuXG4gKiBAcGFyYW0gZGF0ZUFubm90YXRpb24gUHJvcGVydHkgQW5ub3RhdGlvbnMgZm9yIHRoZSBkYXRlIGZpZWxkLlxuICogQHBhcmFtIHR5cGUgRWl0aGVyICdNYXhpbXVtJyBvciAnTWluaW11bScuXG4gKiBAcGFyYW0gcmVsYXRpdmVMb2NhdGlvblxuICogQHJldHVybnMgTWluaW51bSBvciBNYXhpbXVtIGRhdGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pbk1heERhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRlQW5ub3RhdGlvbjogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0dHlwZTogXCJNYXhpbXVtXCIgfCBcIk1pbmltdW1cIixcblx0cmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpeGVkRGF0ZSA9IGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0/LiREYXRlO1xuXHRjb25zdCBkYXRlUHJvcGVydHkgPSBkYXRlQW5ub3RhdGlvbj8uVmFsaWRhdGlvbj8uW3R5cGVdO1xuXHRpZiAoZml4ZWREYXRlKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY29uc3RhbnQoZml4ZWREYXRlKV0sIHZhbHVlRm9ybWF0dGVycy5wcm92aWRlRGF0ZUluc3RhbmNlKTtcblx0fSBlbHNlIGlmIChkYXRlUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0sIHJlbGF0aXZlTG9jYXRpb24pO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFNldHMgRWRpdCBTdHlsZSBwcm9wZXJ0aWVzIGZvciBGaWVsZCBpbiBjYXNlIG9mIE1hY3JvIEZpZWxkIGFuZCBNYXNzRWRpdERpYWxvZyBmaWVsZHMuXG4gKiBAcGFyYW0gb1Byb3BzIEZpZWxkIFByb3BlcnRpZXMgZm9yIHRoZSBNYWNybyBGaWVsZC5cbiAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFGaWVsZCBPYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggRGF0YU1vZGVsIE9iamVjdCBQYXRoIHRvIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvbmx5RWRpdFN0eWxlIFRvIGFkZCBvbmx5IGVkaXRTdHlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRTdHlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wczogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRvbmx5RWRpdFN0eWxlPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0aWYgKFxuXHRcdCFpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkgfHxcblx0XHRbXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdF0uaW5jbHVkZXMob0RhdGFGaWVsZC4kVHlwZSlcblx0KSB7XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghb25seUVkaXRTdHlsZSkge1xuXHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0RhdGFNb2RlbFBhdGgpKTtcblx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlUGlja2VyKFxuXHRcdFx0XHRvRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWUgPyBvUHJvcHMudmFsdWUgOiBnZXRWYWx1ZUJpbmRpbmcob0RhdGFNb2RlbFBhdGgsIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9XG5cdFx0XHQob0RhdGFGaWVsZCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LlBsYWNlaG9sZGVyIHx8XG5cdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5QbGFjZWhvbGRlcjtcblxuXHRcdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlcikge1xuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVkaXRTdHlsZVBsYWNlaG9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0dXAgUmF0aW5nSW5kaWNhdG9yXG5cdGNvbnN0IGRhdGFQb2ludEFubm90YXRpb24gPSAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKG9EYXRhRmllbGQpID8gb0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgOiBvRGF0YUZpZWxkKSBhcyBEYXRhUG9pbnRUeXBlO1xuXHRpZiAoZGF0YVBvaW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlJhdGluZ0luZGljYXRvclwiO1xuXG5cdFx0aWYgKGRhdGFQb2ludEFubm90YXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0XHRvUHJvcHMucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50QW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9Qcm9wcy5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKFxuXHRcdF9oYXNWYWx1ZUhlbHBUb1Nob3cob1Byb3BlcnR5LCBvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlKSB8fFxuXHRcdChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiICYmXG5cdFx0XHQob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgJiYgIWhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpKSlcblx0KSB7XG5cdFx0aWYgKCFvbmx5RWRpdFN0eWxlKSB7XG5cdFx0XHQvKiBUaGUgdGV4dEJpbmRpbmdFeHByZXNzaW9uIGlzIHVzZWQgZm9yIG1kY0ZpZWxkLWF0dHJpYnV0ZSAnYWRkaXRpb25hbFZhbHVlJyBhbmQgbWVhbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSAqL1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSURcblx0XHRcdFx0PyBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob1Byb3BzLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBvUHJvcHMuZm9ybWF0T3B0aW9ucylcblx0XHRcdFx0OiBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob0RhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblxuXHRcdFx0Y29uc3QgaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUgPSAhIW9Qcm9wcy52YWx1ZSAmJiAve1xcdys+Lit9Ly50ZXN0KG9Qcm9wcy52YWx1ZSk7XG5cblx0XHRcdGlmIChpc0pTT05Nb2RlbFVzZWRGb3JWYWx1ZSkge1xuXHRcdFx0XHRpZiAob1Byb3BzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0b1Byb3BzLnRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IG9Qcm9wcy5kZXNjcmlwdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdG9Qcm9wcy5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBPbmx5IHNldCB0ZXh0QmluZGluZ0V4cHJlc3Npb24gd2hlbiBUZXh0QXJyYW5nZW1lbnQgaXMgTk9UIFRleHRTZXBhcmF0ZVxuXHRcdFx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py52YWx1ZU9mKCk7XG5cdFx0XHRcdGlmICh0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uICE9PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdGV4dEJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdC8vIGZvciB0aGUgTURDIEZpZWxkIHdlIG5lZWQgdG8ga2VlcCB0aGUgdW5pdCBpbnNpZGUgdGhlIHZhbHVlQmluZGluZ0V4cHJlc3Npb25cblx0XHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWVcblx0XHRcdFx0XHQ/IG9Qcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogZ2V0VmFsdWVCaW5kaW5nKG9EYXRhTW9kZWxQYXRoLCBvUHJvcHMuZm9ybWF0T3B0aW9ucywgZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiSW5wdXRXaXRoVmFsdWVIZWxwXCI7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c3dpdGNoIChvUHJvcGVydHkudHlwZSkge1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiRGF0ZVBpY2tlclwiO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbFBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pIHtcblx0XHRcdFx0b1Byb3BzLm1heERhdGVFeHByZXNzaW9uID0gZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucywgXCJNYXhpbXVtXCIsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pIHtcblx0XHRcdFx0b1Byb3BzLm1pbkRhdGVFeHByZXNzaW9uID0gZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucywgXCJNaW5pbXVtXCIsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uVGltZVwiOlxuXHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJUaW1lUGlja2VyXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSBcIkVkbS5EYXRlVGltZVwiOlxuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIkRhdGVUaW1lUGlja2VyXCI7XG5cdFx0XHQvLyBObyB0aW1lem9uZSBkZWZpbmVkLiBBbHNvIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuXG5cdFx0XHRpZiAoIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSkge1xuXHRcdFx0XHRvUHJvcHMuc2hvd1RpbWV6b25lID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Byb3BzLnNob3dUaW1lem9uZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJDaGVja0JveFwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uU3RyZWFtXCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJGaWxlXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkpIHtcblx0XHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiVGV4dEFyZWFcIjtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0TWFza1wiO1xuXHRcdFx0XHRvUHJvcHMubWFzayA9IHtcblx0XHRcdFx0XHRtYXNrOiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/Lk1hc2sudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5QbGFjZWhvbGRlclN5bWJvbC50b1N0cmluZygpLFxuXHRcdFx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUnVsZXMpXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTWFza2VkPy52YWx1ZU9mKCkpIHtcblx0XHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiTWFza2VkXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5KSkge1xuXHRcdFx0XHRvUHJvcHMuc3RhdGljRGVzY3JpcHRpb24gPSBcIiVcIjtcblx0XHRcdH1cblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0XCI7XG5cdH1cblxuXHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dFwiO1xufTtcblxuY29uc3QgX2dldE1hc2tpbmdSdWxlcyA9IChtYXNraW5nUnVsZXM6IElucHV0TWFza1J1bGVUeXBlVHlwZXNbXSB8IHVuZGVmaW5lZCk6IElucHV0TWFza1J1bGVbXSA9PiB7XG5cdGlmICghbWFza2luZ1J1bGVzIHx8IG1hc2tpbmdSdWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gW3sgc3ltYm9sOiBcIipcIiwgcmVnZXg6IFwiW2EtekEtWjAtOV1cIiB9XTtcblx0fVxuXG5cdHJldHVybiBtYXNraW5nUnVsZXMubWFwKChtYXNraW5nUnVsZSkgPT4gKHtcblx0XHRzeW1ib2w6IG1hc2tpbmdSdWxlLk1hc2tTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRyZWdleDogbWFza2luZ1J1bGUuUmVnRXhwLnRvU3RyaW5nKClcblx0fSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1NlbWFudGljT2JqZWN0SW5OYXZpZ2F0aW9uT3JQcm9wZXJ0eSA9IChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogYm9vbGVhbiA9PiB7XG5cdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0aWYgKFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KHByb3BlcnR5KSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGNvbnN0IGxhc3ROYXZQcm9wID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoXG5cdFx0PyBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzW3Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCAtIDFdXG5cdFx0OiBudWxsO1xuXHRpZiAoXG5cdFx0IWxhc3ROYXZQcm9wIHx8XG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHQoY29udGV4dE5hdlByb3ApID0+IGNvbnRleHROYXZQcm9wLm5hbWUgPT09IGxhc3ROYXZQcm9wLm5hbWVcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gU2VtYW50aWNPYmplY3RIZWxwZXIuaGFzU2VtYW50aWNPYmplY3QobGFzdE5hdlByb3ApO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGRhdGFNb2RlbE9iamVjdFBhdGggd2l0aCB0aGUgdmFsdWUgcHJvcGVydHkgYXMgdGFyZ2V0T2JqZWN0IGlmIGl0IGV4aXN0c1xuICogZm9yIGEgZGF0YU1vZGVsT2JqZWN0UGF0aCB0YXJnZXRpbmcgYSBEYXRhRmllbGQgb3IgYSBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGRhdGFNb2RlbE9iamVjdFBhdGggdGFyZ2V0aW5nIHRoZSB2YWx1ZSBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZSA9IChcblx0aW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5PlxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHJldHVybiBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0fVxuXHRsZXQgdmFsdWVQYXRoID0gXCJcIjtcblx0Ly8gZGF0YSBwb2ludCBhbm5vdGF0aW9ucyBuZWVkIG5vdCBoYXZlICRUeXBlIGRlZmluZWQsIHNvIGFkZCBpdCBpZiBtaXNzaW5nXG5cdGlmIChpc0Fubm90YXRpb25PZlRlcm0oaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgsIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludCkpIHtcblx0XHRpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUgPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUgfHwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTtcblx0fVxuXHRzd2l0Y2ggKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGlmICh0eXBlb2YgaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHZhbHVlUGF0aCA9IGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGU+KGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCwgW1xuXHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSxcblx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LnZhbHVlLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHQvXFwvQC4qLyxcblx0XHRcdFx0XHRcdFx0YC8ke2luaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldC5WYWx1ZT8ucGF0aH1gXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YWx1ZVBhdGggPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQuVmFsdWU/LnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlUGF0aCA9IChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+KT8ucGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0aWYgKHZhbHVlUGF0aCAmJiB2YWx1ZVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBlbmhhbmNlRGF0YU1vZGVsUGF0aChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCwgdmFsdWVQYXRoKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjb25zaWRlcmVkIHByb3BlcnR5IGlzIGEgbm9uLWluc2VydGFibGUgcHJvcGVydHlcbiAqIEEgZmlyc3QgY2hlY2sgaXMgZG9uZSBvbiB0aGUgbGFzdCBuYXZpZ2F0aW9uIGZyb20gdGhlIGNvbnRleHRMb2NhdGlvbjpcbiAqIC0gSWYgdGhlIGFubm90YXRpb24gJ25vbkluc2VydGFibGVQcm9wZXJ0eScgaXMgZm91bmQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBsaXN0ZWQsIHRoZW4gdGhlIHByb3BlcnR5IGlzIG5vbi1pbnNlcnRhYmxlLFxuICogLSBFbHNlIHRoZSBzYW1lIGNoZWNrIGlzIGRvbmUgb24gdGhlIHRhcmdldCBlbnRpdHkuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgaW5zZXJ0YWJsZVxuICovXG5leHBvcnQgY29uc3QgaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMgPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBub25JbnNlcnRhYmxlUHJvcGVydGllcyA9IGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgKGNhcGFiaWxpdGllcykgPT4ge1xuXHRcdHJldHVybiAoY2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IHVuZGVmaW5lZCk/Lkluc2VydFJlc3RyaWN0aW9ucz8uTm9uSW5zZXJ0YWJsZVByb3BlcnRpZXM7XG5cdH0pO1xuXG5cdHJldHVybiBub25JbnNlcnRhYmxlUHJvcGVydGllcy5zb21lKChub25JbnNlcnRhYmxlUHJvcGVydHkpID0+IHtcblx0XHRyZXR1cm4gbm9uSW5zZXJ0YWJsZVByb3BlcnR5Py4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUgPT09IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0fSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgYmluZGluZyBmb3IgdGhlIGRyYWZ0IGluZGljYXRvciB2aXNpYmlsaXR5LlxuICogQHBhcmFtIGRyYWZ0SW5kaWNhdG9yS2V5XG4gKiBAcmV0dXJucyAgVGhlIHZpc2liaWxpdHkgYmluZGluZyBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyA9IChkcmFmdEluZGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0cmV0dXJuIGRyYWZ0SW5kaWNhdG9yS2V5XG5cdFx0PyBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdGNvbnN0YW50KGRyYWZ0SW5kaWNhdG9yS2V5KSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJIYXNEcmFmdEVudGl0eVwiKSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiSXNBY3RpdmVFbnRpdHlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcImhpZGVEcmFmdEluZm9cIiwgXCJwYWdlSW50ZXJuYWxcIilcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWUuaXNEcmFmdEluZGljYXRvclZpc2libGVcIlxuXHRcdFx0XHQpXG5cdFx0ICApXG5cdFx0OiBcImZhbHNlXCI7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBEaXNwbGF5U2hhcGUgZm9yIHRoZSBBdmF0YXIgZGVwZW5kaW5nIG9uIHRoZSBhbm5vdGF0aW9uIElzTmF0dXJhbFBlcnNvbi5cbiAqXG4gKiBJZiB0aGUgZW50aXR5IHR5cGUgaXMgYW5ub3RhdGVkIHdpdGggXCJJc05hdHVyYWxQZXJzb25cIiwgdGhlbiBhbGwgU3RyZWFtcyBhbmQgSW1hZ2VVUmxzXG4gKiBpbiB0aGlzIGVudGl0eSBhcmUgY29uc2lkZXJlZCB0byBiZSBwZXJzb24gdGhlcmVmb3JlIGhhdmUgc2hhcGUgY2lyY2xlIGJ5IGRlZmF1bHQuXG4gKlxuICogSWYgYSBwcm9wZXJ0eSB3aXRoaW4gc3VjaCBhbiBlbnRpdHkgaXMgYW5ub3RhdGVkIHdpdGggVUkuSXNJbWFnZSBvciBVSS5Jc0ltYWdlVVJMLCBib3RoXG4gKiBvZiB0aGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW5ub3RhdGVkIHdpdGggQ29tbW9uLklzTmF0dXJhbFBlcnNvbi5cbiAqXG4gKiBUaGUgYW5ub3RhdGlvbiBhdCB0aGUgcHJvcGVydHkgbGV2ZWwgb3ZlcnJpZGVzIHRoZSBhbm5vdGF0aW9uIGF0IHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBzaGFwZSBvZiB0aGUgQXZhdGFyIGFzIHN0cmluZyBvciBhcyBhbiBleHByZXNzaW9uXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldEF2YXRhclNoYXBlID0gKGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9XG5cdFx0ZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb24gfHxcblx0XHRkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LklzSW1hZ2U/LmFubm90YXRpb25zPy5Db21tb24/LklzTmF0dXJhbFBlcnNvbjtcblx0Y29uc3QgZW50aXR5QW5ub3RhdGlvblRhcmdldCA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LklzTmF0dXJhbFBlcnNvbjtcblx0bGV0IGF2YXRhclNoYXBlRXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+O1xuXG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRhdmF0YXJTaGFwZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0KTtcblx0fSBlbHNlIGlmIChlbnRpdHlBbm5vdGF0aW9uVGFyZ2V0KSB7XG5cdFx0YXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVudGl0eUFubm90YXRpb25UYXJnZXQpO1xuXHR9IGVsc2UgYXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZmFsc2U7XG5cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShhdmF0YXJTaGFwZUV4cHJlc3Npb24sIEF2YXRhclNoYXBlLkNpcmNsZSwgQXZhdGFyU2hhcGUuU3F1YXJlKSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQ0FBcUMsR0FBRyxTQUFBQSxDQUNw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
|
|
704
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsIkNvbW1vbkZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsIl9leHBvcnRzIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsInRhcmdldE9iamVjdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0VGV4dEJpbmRpbmciLCJpbnB1dERhdGFNb2RlbFBhdGgiLCJhc09iamVjdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImN1c3RvbUZvcm1hdHRlciIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZpZWxkVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJWYWx1ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0Iiwib1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJvVGFyZ2V0QmluZGluZyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9UYXJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJJbnB1dE1hc2siLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsIm1hc2siLCJNYXNrIiwidG9TdHJpbmciLCJwbGFjZWhvbGRlclN5bWJvbCIsIlBsYWNlaG9sZGVyU3ltYm9sIiwibWFza1J1bGUiLCJfZ2V0TWFza2luZ1J1bGVzIiwiUnVsZXMiLCJDb21tb24iLCJNYXNrZWQiLCJ2YWx1ZU9mIiwiZWRpdFN0eWxlIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd09ubHlVbml0RGVjaW1hbHMiLCJwcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsInNob3dNZWFzdXJlIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiSXNUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJkYXRlVGltZVN0eWxlIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJnZXRWYWx1ZUJpbmRpbmciLCJpZ25vcmVVbml0IiwiaWdub3JlRm9ybWF0dGluZyIsImJpbmRpbmdQYXJhbWV0ZXJzIiwidGFyZ2V0VHlwZUFueSIsImtlZXBVbml0IiwiZGVjaW1hbFBhZGRpbmciLCJmb3JEaXNwbGF5Iiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInB1c2giLCJpc1Byb3BlcnR5IiwiaXNBY3Rpb25QYXJhbWV0ZXIiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsInN0eWxlIiwidGFyZ2V0Rm9ybWF0T3B0aW9ucyIsIlN0cmluZyIsImlzQ3VycmVuY3lPclVuaXRBbGlnbmVkIiwiRXh0ZXJuYWxJRCIsImNvbnN0cmFpbnRzIiwicGFyYW1ldGVycyIsInRhcmdldFR5cGUiLCIkVHlwZSIsImdldEFzc29jaWF0ZWRUZXh0QmluZGluZyIsInRleHRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eUhlbHBlciIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwib1RleHRQcm9wZXJ0eVBhdGgiLCJhbGxvd1BhdGNoIiwidmFsdWVMaXN0T3V0UGFyYW1ldGVycyIsIlZhbHVlTGlzdCIsIlBhcmFtZXRlcnMiLCJtYXAiLCJwYXJhbWV0ZXIiLCJMb2NhbERhdGFQcm9wZXJ0eSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImluY2x1ZGVzIiwiJCRub1BhdGNoIiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsIm9EYXRhTW9kZWxQYXRoIiwib1Byb3BlcnR5IiwiYU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYVNlbWFudGljT2JqZWN0cyIsIlNlbWFudGljS2V5IiwiYklzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJvTmF2UHJvcCIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsIm9SZWZDb25zdHJhaW50Iiwic291cmNlUHJvcGVydHkiLCJuYW1lIiwiUXVpY2tWaWV3RmFjZXRzIiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0RW50aXR5U2V0IiwiYUlzVGFyZ2V0U2VtYW50aWNLZXkiLCJzb21lIiwib1NlbWFudGljIiwiaXNLZXkiLCJpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkIiwib1Byb3BlcnR5UGF0aCIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJ0ZXh0QWxpZ25Nb2RlIiwiZ2V0VGV4dEFsaWdubWVudCIsImRhdGFGaWVsZE1vZGVsUGF0aCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb25zaWRlclRleHRBbm5vdGF0aW9uIiwidHlwZUZvckFsaWdubWVudCIsIlRhcmdldCIsImRpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJ0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiRmllbGRIZWxwZXIiLCJnZXRQcm9wZXJ0eUFsaWdubWVudCIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbiIsInZpc2libGVFeHByZXNzaW9uc0ZvckNvbm5lY3RlZEZpZWxkc0Zvcm1FbGVtZW50IiwiZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsInZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkc0JpbmRpbmdFeHByZXNzaW9ucyIsImNvbm5lY3RlZEZpZWxkcyIsIk9iamVjdCIsInZhbHVlcyIsIkRhdGEiLCJmaWx0ZXIiLCJjb25uZWN0ZWRGaWVsZCIsImhhc093blByb3BlcnR5IiwiZGF0YUZpZWxkIiwiYmluZGluZ0V4cHJlc3Npb25PYmplY3QiLCJvciIsImdldFF1aWNrVmlld0JpbmRpbmciLCJnZXRRdWlja1ZpZXdUeXBlIiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIlVybCIsIklzUGhvbmVOdW1iZXIiLCJnZXRTZW1hbnRpY09iamVjdHMiLCJhU2VtT2JqRXhwclRvUmVzb2x2ZSIsInNDdXN0b21EYXRhS2V5Iiwic0N1c3RvbURhdGFWYWx1ZSIsImFTZW1PYmpDdXN0b21EYXRhIiwiaXRlbSIsImtleSIsInZhbHVlIiwib1NlbWFudGljT2JqZWN0c01vZGVsIiwiSlNPTk1vZGVsIiwiJCR2YWx1ZUFzUHJvbWlzZSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCIsIm9UaGlzIiwiaXNNdWx0aUxpbmVUZXh0Iiwid3JhcCIsIl9oYXNWYWx1ZUhlbHBUb1Nob3ciLCJvUHJvcGVydHlVbml0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUN1cnJlbmN5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRNaW5NYXhEYXRlRXhwcmVzc2lvbiIsImRhdGVBbm5vdGF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImZpeGVkRGF0ZSIsIlZhbGlkYXRpb24iLCIkRGF0ZSIsImRhdGVQcm9wZXJ0eSIsImZvcm1hdFJlc3VsdCIsImNvbnN0YW50IiwidmFsdWVGb3JtYXR0ZXJzIiwicHJvdmlkZURhdGVJbnN0YW5jZSIsIkJpbmRpbmdUb29sa2l0Iiwic2V0RWRpdFN0eWxlUHJvcGVydGllcyIsIm9Qcm9wcyIsIm9EYXRhRmllbGQiLCJvbmx5RWRpdFN0eWxlIiwiTWF4aW11bSIsIk1pbmltdW0iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JEYXRlUGlja2VyIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJQbGFjZWhvbGRlciIsImRhdGFQb2ludEFubm90YXRpb24iLCJpc0RhdGFGaWVsZEZvckFubm90YXRpb24iLCJWaXN1YWxpemF0aW9uIiwiUXVpY2tJbmZvIiwicmF0aW5nSW5kaWNhdG9yVG9vbHRpcCIsInJhdGluZ0luZGljYXRvclRhcmdldFZhbHVlIiwiVGFyZ2V0VmFsdWUiLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsInRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIiwiaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUiLCJ0ZXN0IiwiZGVzY3JpcHRpb24iLCJnZXRSZWxhdGl2ZVBhdGhzIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJtaW5EYXRlRXhwcmVzc2lvbiIsInNob3dUaW1lem9uZSIsIk11bHRpTGluZVRleHQiLCJzdGF0aWNEZXNjcmlwdGlvbiIsIm1hc2tpbmdSdWxlcyIsInN5bWJvbCIsInJlZ2V4IiwibWFza2luZ1J1bGUiLCJNYXNrU3ltYm9sIiwiUmVnRXhwIiwiaGFzU2VtYW50aWNPYmplY3RJbk5hdmlnYXRpb25PclByb3BlcnR5IiwicHJvcGVydHkiLCJTZW1hbnRpY09iamVjdEhlbHBlciIsImhhc1NlbWFudGljT2JqZWN0IiwibGFzdE5hdlByb3AiLCJmaW5kIiwiY29udGV4dE5hdlByb3AiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCIsInZhbHVlUGF0aCIsImlzQW5ub3RhdGlvbk9mVGVybSIsImluZGV4T2YiLCJyZXBsYWNlIiwiaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMiLCJub25JbnNlcnRhYmxlUHJvcGVydGllcyIsImdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uIiwiY2FwYWJpbGl0aWVzIiwiSW5zZXJ0UmVzdHJpY3Rpb25zIiwiTm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMiLCJub25JbnNlcnRhYmxlUHJvcGVydHkiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiZHJhZnRJbmRpY2F0b3JLZXkiLCJnZXRBdmF0YXJTaGFwZSIsIklzSW1hZ2VVUkwiLCJJc05hdHVyYWxQZXJzb24iLCJJc0ltYWdlIiwiZW50aXR5QW5ub3RhdGlvblRhcmdldCIsImF2YXRhclNoYXBlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsXG5cdFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0VmFsdWVMaXN0UGFyYW1ldGVySW5PdXQsXG5cdFZhbHVlTGlzdFBhcmFtZXRlck91dFR5cGVzLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aEFjdGlvbixcblx0RGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHREYXRhUG9pbnRUeXBlLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdElucHV0TWFza1J1bGVUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzLCB0eXBlIERhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Rm9ybWF0T3B0aW9ucyxcblx0UGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRQcmltaXRpdmVUeXBlXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0ICogYXMgQmluZGluZ1Rvb2xraXQgZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29tcGxleFR5cGVFeHByZXNzaW9uLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0aXNBY3Rpb25QYXJhbWV0ZXIsXG5cdGlzQW5ub3RhdGlvbk9mVGVybSxcblx0aXNBbm5vdGF0aW9uT2ZUeXBlLFxuXHRpc05hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0ICogYXMgQ29tbW9uRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Db21tb25Gb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YUZpZWxkRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFByb3BlcnR5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBoYXNTdGF0aWNQZXJjZW50VW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTZW1hbnRpY09iamVjdEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSwgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRNYXNrUnVsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0lucHV0TWFza1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgQXZhdGFyU2hhcGUgZnJvbSBcInNhcC9tL0F2YXRhclNoYXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4vRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcIi4vRmllbGRIZWxwZXJcIjtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBhZGQgdGhlIHRleHQgYXJyYW5nZW1lbnQgdG8gYSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgY3VycmVudCBjb250ZXh0IHBhdGggd2UncmUgb24gKHRvIHByb3Blcmx5IHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydGllcylcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+ID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdG91dEV4cHJlc3Npb24gPSBDb21tb25Gb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50KG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgsIGV4cHJlc3Npb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdGxldCBvdXRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZnVsbENvbnRleHRQYXRoLCBleHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBleHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMsIHRydWUpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRCaW5kaW5nID0gZnVuY3Rpb24gKFxuXHRpbnB1dERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGFzT2JqZWN0ID0gZmFsc2UsXG5cdGN1c3RvbUZvcm1hdHRlcj86IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8XG5cdFx0XHR8IERhdGFGaWVsZFxuXHRcdFx0fCBEYXRhUG9pbnRUeXBlXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0fCBEYXRhRmllbGRXaXRoVXJsXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0XHRcdHwgRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdD4oaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgW1xuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdF0pXG5cdCkge1xuXHRcdC8vIElmIHRoZXJlIGlzIG5vIHJlc29sdmVkIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgYXMgYSBjb25zdGFudFxuXHRcdGNvbnN0IGZpZWxkVmFsdWUgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSkgPz8gXCJcIjtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZSk7XG5cdH1cblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpICYmIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGlucHV0RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihpbnB1dERhdGFNb2RlbFBhdGgsIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QucGF0aCk7XG5cdH1cblx0Ly8gV2hlbiB0YXJnZXRPYmplY3QgaXMgYSBjb25zdGFudCB2YWx1ZVxuXHRpZiAodHlwZW9mIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gaW5wdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXHRjb25zdCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoaW5wdXREYXRhTW9kZWxQYXRoKSk7XG5cdGxldCBvVGFyZ2V0QmluZGluZztcblx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gaW5wdXREYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+OyAvLyBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBvbmx5IGhhdmUgYSBwcm9wZXJ0eVxuXHRjb25zdCBvVGFyZ2V0UHJvcGVydHkgPSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHQvLyBmb3JtYXR0aW5nXG5cblx0aWYgKG9UYXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2spIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1RhcmdldFByb3BlcnR5LCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0b1RhcmdldEJpbmRpbmcudHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRvVGFyZ2V0QmluZGluZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0bWFzazogb1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogb1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5QbGFjZWhvbGRlclN5bWJvbC50b1N0cmluZygpLFxuXHRcdFx0bWFza1J1bGU6IF9nZXRNYXNraW5nUnVsZXMob1RhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5SdWxlcylcblx0XHR9IGFzIHVua25vd24gYXMgRm9ybWF0T3B0aW9ucztcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9UYXJnZXRQcm9wZXJ0eSwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdG9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRlZGl0U3R5bGU6IFwiTWFza2VkXCJcblx0XHR9IGFzIHVua25vd24gYXMgRm9ybWF0T3B0aW9ucztcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR7fSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFsc0ZvckN1cnJlbmN5XG5cdFx0KTtcblx0XHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCIgJiYgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpKSB7XG5cdFx0XHQvLyBUT0RPOiBSZWZhY3RvciBvbmNlIHR5cGVzIGFyZSBsZXNzIGdlbmVyaWMgaGVyZVxuXHRcdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0Li4ub1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0c2hvd01lYXN1cmU6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIG9UYXJnZXRQcm9wZXJ0eS50eXBlID09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMgYXMgRmllbGRGb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVGltZXpvbmUocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdH0gZWxzZSBpZiAoXG5cdFx0b1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVybiB8fFxuXHRcdGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZVxuXHQpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBmaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLFxuXHRcdFx0Y3VzdG9tRm9ybWF0dGVyXG5cdFx0KTtcblx0fVxuXG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBvVGFyZ2V0QmluZGluZztcblx0fVxuXHQvLyBXZSBkb24ndCBpbmNsdWRlICQkbm9wYXRjaCBhbmQgcGFyc2VLZWVwRW1wdHlTdHJpbmcgYXMgdGhleSBtYWtlIG5vIHNlbnNlIGluIHRoZSB0ZXh0IGJpbmRpbmcgY2FzZVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlQmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzIHwgQWN0aW9uUGFyYW1ldGVyPixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGlnbm9yZVVuaXQgPSBmYWxzZSxcblx0aWdub3JlRm9ybWF0dGluZyA9IGZhbHNlLFxuXHRiaW5kaW5nUGFyYW1ldGVycz86IG9iamVjdCxcblx0dGFyZ2V0VHlwZUFueSA9IGZhbHNlLFxuXHRrZWVwVW5pdCA9IGZhbHNlLFxuXHRkZWNpbWFsUGFkZGluZz86IG51bWJlcixcblx0Zm9yRGlzcGxheSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGNvbnN0IG9OYXZQYXRoID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgsIHRydWUpO1xuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb05hdlBhdGgudGFyZ2V0O1xuXHRcdG9OYXZQYXRoLnZpc2l0ZWRPYmplY3RzLmZvckVhY2goKG9OYXZPYmo6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkob05hdk9iaikpIHtcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9OYXZPYmopO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgfHwgaXNBY3Rpb25QYXJhbWV0ZXIodGFyZ2V0T2JqZWN0KSkge1xuXHRcdGxldCBvQmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiA9IHBhdGhJbk1vZGVsKFxuXHRcdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKVxuXHRcdCk7XG5cdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbikpIHtcblx0XHRcdGlmICgodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uIGFzIHsgSXNFbWFpbEFkZHJlc3M/OiBib29sZWFuIH0pPy5Jc0VtYWlsQWRkcmVzcykge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRW1haWxcIjtcblx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0bWFzazogdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLlVJLklucHV0TWFzay5NYXNrLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sOiB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUkuSW5wdXRNYXNrLlBsYWNlaG9sZGVyU3ltYm9sLFxuXHRcdFx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VSS5JbnB1dE1hc2suUnVsZXMpXG5cdFx0XHRcdH0gYXMgRm9ybWF0T3B0aW9ucztcblx0XHRcdH0gZWxzZSBpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0c3R5bGU6IFwicGFzc3dvcmRcIlxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVVbml0ICYmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRGb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGlmICgha2VlcFVuaXQpIHtcblx0XHRcdFx0XHR0YXJnZXRGb3JtYXRPcHRpb25zW1wic2hvd01lYXN1cmVcIl0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoU3RyaW5nKGZpZWxkRm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Rm9ybWF0T3B0aW9uc1tcImRlY2ltYWxQYWRkaW5nXCJdID0gZGVjaW1hbFBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRrZWVwVW5pdCA/IHVuZGVmaW5lZCA6IHRhcmdldEZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Zm9yRGlzcGxheSxcblx0XHRcdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JUaW1lem9uZShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIHRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdFx0XHRcdChvQmluZGluZ0V4cHJlc3Npb24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aCArPSBcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdGRlbGV0ZSBvQmluZGluZ0V4cHJlc3Npb24uY29uc3RyYWludHM7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiaW5kaW5nUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRhcmdldFR5cGVBbnkpIHtcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChhc09iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gb0JpbmRpbmdFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgc29tZWhvdyB3ZSBjb3VsZCBub3QgY29tcGlsZSB0aGUgYmluZGluZyAtPiByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0dGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdGlmICh0ZXh0UHJvcGVydHlQYXRoKSB7XG5cdFx0Y29uc3Qgb1RleHRQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Ly9CQ1AgMjM4MDEyMDgwNjogZ2V0VmFsdWVCaW5kaW5nIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IGZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nLlxuXHRcdC8vT3RoZXJ3aXNlIGVtcHR5aW5nIGFuIGlucHV0IGZpZWxkIHRoYXQgaGFzIGEgdGV4dCBhbm5vdGF0aW9uIHRvIGEgbm90IG51bGxhYmxlIHN0cmluZyB3b3VsZCByZXN1bHQgaW5cblx0XHQvL2FuIGVycm9yIG1lc3NhZ2UuIFRoZXJlZm9yZSBpbXBvcnQgcGFyYW0gJ2lnbm9yZUZvcm1hdHRpbmcnIGlzIG5vdyBzZXQgdG8gZmFsc2UuXG5cdFx0bGV0IGFsbG93UGF0Y2ggPSBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RPdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9XG5cdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Py5QYXJhbWV0ZXJzLm1hcChcblx0XHRcdFx0KHBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyVHlwZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoIXBhcmFtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQocGFyYW1ldGVyIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMpPy5Mb2NhbERhdGFQcm9wZXJ0eT8uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KSB8fCBbXTtcblx0XHRpZiAoXG5cdFx0XHRvVGV4dFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgJiZcblx0XHRcdHZhbHVlTGlzdE91dFBhcmFtZXRlcnMuaW5jbHVkZXMob1RleHRQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQpIHtcblx0XHRcdGFsbG93UGF0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVycyA9IGFsbG93UGF0Y2ggPyB1bmRlZmluZWQgOiB7ICQkbm9QYXRjaDogdHJ1ZSB9O1xuXHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgZmFsc2UsIGJpbmRpbmdQYXJhbWV0ZXJzLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0cyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXTtcblx0bGV0IGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZmFsc2U7XG5cdGFOYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChvTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0aWYgKG9OYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludCAmJiBvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQubGVuZ3RoKSB7XG5cdFx0XHRvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQuZm9yRWFjaCgob1JlZkNvbnN0cmFpbnQpID0+IHtcblx0XHRcdFx0aWYgKG9SZWZDb25zdHJhaW50Py5zb3VyY2VQcm9wZXJ0eSA9PT0gb1Byb3BlcnR5Lm5hbWUpIHtcblx0XHRcdFx0XHRpZiAob05hdlByb3A/LnRhcmdldFR5cGU/LmFubm90YXRpb25zPy5VST8uUXVpY2tWaWV3RmFjZXRzKSB7XG5cdFx0XHRcdFx0XHRiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgIT09IG9EYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdGNvbnN0IGFJc1RhcmdldFNlbWFudGljS2V5ID0gYVNlbWFudGljT2JqZWN0cy5zb21lKGZ1bmN0aW9uIChvU2VtYW50aWMpIHtcblx0XHRcdHJldHVybiBvU2VtYW50aWM/LiR0YXJnZXQ/Lm5hbWUgPT09IG9Qcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdGlmICgoYUlzVGFyZ2V0U2VtYW50aWNLZXkgfHwgb1Byb3BlcnR5LmlzS2V5KSAmJiBvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiB7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJlxuXHRcdFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHkpICYmXG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPT09IFwiRm9ybVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0ZXh0IGFsaWdubWVudCBiYXNlZCBvbiB0aGUgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIHByb3BlcnR5J3MgdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgVGhlIGZpZWxkIGZvcm1hdCBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBEaXNwbGF5IGZvcm1hdFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBjb21wdXRlZEVkaXRNb2RlIFRoZSBlZGl0TW9kZSB1c2VkIGluIHRoaXMgY2FzZVxuICogQHBhcmFtIGNvbnNpZGVyVGV4dEFubm90YXRpb24gV2hldGhlciB0byBjb25zaWRlciB0aGUgdGV4dCBhbm5vdGF0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0Zm9ybWF0T3B0aW9uczogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRjb21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Y29uc2lkZXJUZXh0QW5ub3RhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdC8vIGNoZWNrIGZvciB0aGUgdGFyZ2V0IHZhbHVlIHR5cGUgZGlyZWN0bHksIG9yIGluIGNhc2UgaXQgaXMgcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0bGV0IHR5cGVGb3JBbGlnbm1lbnQgPVxuXHRcdChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQudHlwZSB8fFxuXHRcdCgoZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WYWx1ZS4kdGFyZ2V0LnR5cGU7XG5cblx0aWYgKFxuXHRcdFByb3BlcnR5SGVscGVyLmlzS2V5KFxuXHRcdFx0KGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldCB8fFxuXHRcdFx0XHQoKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXRcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBcIkJlZ2luXCI7XG5cdH1cblx0aWYgKFxuXHRcdGNvbnNpZGVyVGV4dEFubm90YXRpb24gJiZcblx0XHRmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlICYmXG5cdFx0W1wiRGVzY3JpcHRpb25cIiwgXCJEZXNjcmlwdGlvblZhbHVlXCIsIFwiVmFsdWVEZXNjcmlwdGlvblwiXS5pbmNsdWRlcyhmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKVxuXHQpIHtcblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LnZhbHVlT2YoKTtcblx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiAhPT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHR0eXBlRm9yQWxpZ25tZW50ID0gdGV4dEFubm90YXRpb24uJHRhcmdldC50eXBlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGaWVsZEhlbHBlci5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlRm9yQWxpZ25tZW50LCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7IGlzQW5hbHl0aWNzPzogYm9vbGVhbiB9XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZE1vZGVsUGF0aCwgZm9ybWF0T3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgRm9ybUVsZW1lbnQuXG4gKiBUaGUgRm9ybUVsZW1lbnQgaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgY29udGVudCBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaW52aXNpYmxlLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHJldHVybnMgQSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gdGhhdCBjYW4gYmUgYm91bmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgdmlzaWJsZUV4cHJlc3Npb25zRm9yQ29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZEZvckFubm90YXRpb24gPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRNb2RlbFBhdGgpKTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zOiAoYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSA9IFtdO1xuXHRpZiAodHlwZW9mIHZpc2libGVFeHByZXNzaW9uID09PSBcInN0cmluZ1wiICYmIHZpc2libGVFeHByZXNzaW9uLmluY2x1ZGVzKFwiez1cIikpIHtcblx0XHRyZXR1cm4gdmlzaWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKFxuXHRcdGRhdGFGaWVsZEZvckFubm90YXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQuRGF0YSkuZmlsdGVyKFxuXHRcdFx0KGNvbm5lY3RlZEZpZWxkKSA9PiBjb25uZWN0ZWRGaWVsZD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdCkgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdGNvbm5lY3RlZEZpZWxkcy5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGQ7XG5cdFx0XHRjb25zdCBiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCA9IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkTW9kZWxQYXRoKTtcblx0XHRcdGlmIChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogQ29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBvciAqL1xuXHRcdHJldHVybiBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA/IGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpKSA6IHZpc2libGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiB2aXNpYmxlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBmb3IgYSBwcm9wZXJ0eSBpbiBhIFF1aWNrVmlld0ZhY2V0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0aGUgdmFsdWUsIG9yIGEgQmluZGluZ0V4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld0JpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcge1xuXHRpZiAoIXByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHt9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgUXVpY2tWaWV3R3JvdXBFbGVtZW50LlxuICogQHBhcmFtIGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIFF1aWNrVmlld0dyb3VwRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tWaWV3VHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzIHwgUHJvcGVydHk+KTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkV2l0aFVybD4odGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJiB0YXJnZXRPYmplY3Q/LlVybCkge1xuXHRcdHJldHVybiBcImxpbmtcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHx8XG5cdFx0KGlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcylcblx0KSB7XG5cdFx0cmV0dXJuIFwiZW1haWxcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikgfHxcblx0XHQoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcInBob25lXCI7XG5cdH1cblx0cmV0dXJuIFwidGV4dFwiO1xufTtcblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3RDdXN0b21EYXRhID0ge1xuXHRrZXk6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoXG5cdGFTZW1PYmpFeHByVG9SZXNvbHZlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfVtdXG4pOiBDb250ZXh0IHtcblx0aWYgKGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgc0N1c3RvbURhdGFLZXkgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiXCI7XG5cdFx0Y29uc3QgYVNlbU9iakN1c3RvbURhdGE6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVNlbU9iakV4cHJUb1Jlc29sdmUpIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gaXRlbS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGl0ZW0udmFsdWUpKTtcblx0XHRcdGFTZW1PYmpDdXN0b21EYXRhLnB1c2goe1xuXHRcdFx0XHRrZXk6IHNDdXN0b21EYXRhS2V5LFxuXHRcdFx0XHR2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYVNlbU9iakN1c3RvbURhdGEpO1xuXHRcdChvU2VtYW50aWNPYmplY3RzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0XHRyZXR1cm4gb1NlbWFudGljT2JqZWN0c01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChbXSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgTXVsdGlwbGVMaW5lcyBmb3IgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0ge2FueX0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlMaW5lVGV4dCBUaGUgcHJvcGVydHkgaXNNdWx0aUxpbmVUZXh0XG4gKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBkYXRhIGZpZWxkIHNob3VsZCBiZSBhIE11bHRpTGluZVRleHQgb3Igbm90XG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQgPSBmdW5jdGlvbiAob1RoaXM6IFBhcnRpYWw8eyB3cmFwPzogYm9vbGVhbiB9PiwgaXNNdWx0aUxpbmVUZXh0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGlmIChvVGhpcy53cmFwID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0O1xufTtcblxuY29uc3QgX2hhc1ZhbHVlSGVscFRvU2hvdyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5LCBtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHQvLyB3ZSBzaG93IGEgdmFsdWUgaGVscCBpZiB0ZWggcHJvcGVydHkgaGFzIG9uZSBvciBpZiBpdHMgdmlzaWJsZSB1bml0IGhhcyBvbmVcblx0Y29uc3Qgb1Byb3BlcnR5VW5pdCA9IFByb3BlcnR5SGVscGVyLmdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3Qgb1Byb3BlcnR5Q3VycmVuY3kgPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRyZXR1cm4gKFxuXHRcdChQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSAmJiBvUHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB8fFxuXHRcdChtZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCIgJiZcblx0XHRcdCgob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdChvUHJvcGVydHlDdXJyZW5jeSAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZGF0ZSBmb3IgdGhlIGRhdGUgZmllbGQuXG4gKiBAcGFyYW0gZGF0ZUFubm90YXRpb24gUHJvcGVydHkgQW5ub3RhdGlvbnMgZm9yIHRoZSBkYXRlIGZpZWxkLlxuICogQHBhcmFtIHR5cGUgRWl0aGVyICdNYXhpbXVtJyBvciAnTWluaW11bScuXG4gKiBAcGFyYW0gcmVsYXRpdmVMb2NhdGlvblxuICogQHJldHVybnMgTWluaW51bSBvciBNYXhpbXVtIGRhdGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pbk1heERhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRlQW5ub3RhdGlvbjogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0dHlwZTogXCJNYXhpbXVtXCIgfCBcIk1pbmltdW1cIixcblx0cmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpeGVkRGF0ZSA9IGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0/LiREYXRlO1xuXHRjb25zdCBkYXRlUHJvcGVydHkgPSBkYXRlQW5ub3RhdGlvbj8uVmFsaWRhdGlvbj8uW3R5cGVdO1xuXHRpZiAoZml4ZWREYXRlKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY29uc3RhbnQoZml4ZWREYXRlKV0sIHZhbHVlRm9ybWF0dGVycy5wcm92aWRlRGF0ZUluc3RhbmNlKTtcblx0fSBlbHNlIGlmIChkYXRlUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0sIHJlbGF0aXZlTG9jYXRpb24pO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFNldHMgRWRpdCBTdHlsZSBwcm9wZXJ0aWVzIGZvciBGaWVsZCBpbiBjYXNlIG9mIE1hY3JvIEZpZWxkIGFuZCBNYXNzRWRpdERpYWxvZyBmaWVsZHMuXG4gKiBAcGFyYW0gb1Byb3BzIEZpZWxkIFByb3BlcnRpZXMgZm9yIHRoZSBNYWNybyBGaWVsZC5cbiAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFGaWVsZCBPYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggRGF0YU1vZGVsIE9iamVjdCBQYXRoIHRvIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvbmx5RWRpdFN0eWxlIFRvIGFkZCBvbmx5IGVkaXRTdHlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRTdHlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wczogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRvbmx5RWRpdFN0eWxlPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0aWYgKFxuXHRcdCFpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkgfHxcblx0XHRbXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdF0uaW5jbHVkZXMob0RhdGFGaWVsZC4kVHlwZSlcblx0KSB7XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghb25seUVkaXRTdHlsZSkge1xuXHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0RhdGFNb2RlbFBhdGgpKTtcblx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlUGlja2VyKFxuXHRcdFx0XHRvRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWUgPyBvUHJvcHMudmFsdWUgOiBnZXRWYWx1ZUJpbmRpbmcob0RhdGFNb2RlbFBhdGgsIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9XG5cdFx0XHQob0RhdGFGaWVsZCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LlBsYWNlaG9sZGVyIHx8XG5cdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5QbGFjZWhvbGRlcjtcblxuXHRcdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlcikge1xuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVkaXRTdHlsZVBsYWNlaG9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0dXAgUmF0aW5nSW5kaWNhdG9yXG5cdGNvbnN0IGRhdGFQb2ludEFubm90YXRpb24gPSAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKG9EYXRhRmllbGQpID8gb0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgOiBvRGF0YUZpZWxkKSBhcyBEYXRhUG9pbnRUeXBlO1xuXHRpZiAoZGF0YVBvaW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlJhdGluZ0luZGljYXRvclwiO1xuXG5cdFx0aWYgKGRhdGFQb2ludEFubm90YXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0XHRvUHJvcHMucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50QW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9Qcm9wcy5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKFxuXHRcdF9oYXNWYWx1ZUhlbHBUb1Nob3cob1Byb3BlcnR5LCBvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlKSB8fFxuXHRcdChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiICYmXG5cdFx0XHQob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgJiYgIWhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpKSlcblx0KSB7XG5cdFx0aWYgKCFvbmx5RWRpdFN0eWxlKSB7XG5cdFx0XHQvKiBUaGUgdGV4dEJpbmRpbmdFeHByZXNzaW9uIGlzIHVzZWQgZm9yIG1kY0ZpZWxkLWF0dHJpYnV0ZSAnYWRkaXRpb25hbFZhbHVlJyBhbmQgbWVhbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSAqL1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSURcblx0XHRcdFx0PyBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob1Byb3BzLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBvUHJvcHMuZm9ybWF0T3B0aW9ucylcblx0XHRcdFx0OiBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob0RhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblxuXHRcdFx0Y29uc3QgaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUgPSAhIW9Qcm9wcy52YWx1ZSAmJiAve1xcdys+Lit9Ly50ZXN0KG9Qcm9wcy52YWx1ZSk7XG5cblx0XHRcdGlmIChpc0pTT05Nb2RlbFVzZWRGb3JWYWx1ZSkge1xuXHRcdFx0XHRpZiAob1Byb3BzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0b1Byb3BzLnRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IG9Qcm9wcy5kZXNjcmlwdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdG9Qcm9wcy5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBPbmx5IHNldCB0ZXh0QmluZGluZ0V4cHJlc3Npb24gd2hlbiBUZXh0QXJyYW5nZW1lbnQgaXMgTk9UIFRleHRTZXBhcmF0ZVxuXHRcdFx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py52YWx1ZU9mKCk7XG5cdFx0XHRcdGlmICh0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uICE9PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdGV4dEJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdC8vIGZvciB0aGUgTURDIEZpZWxkIHdlIG5lZWQgdG8ga2VlcCB0aGUgdW5pdCBpbnNpZGUgdGhlIHZhbHVlQmluZGluZ0V4cHJlc3Npb25cblx0XHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWVcblx0XHRcdFx0XHQ/IG9Qcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogZ2V0VmFsdWVCaW5kaW5nKG9EYXRhTW9kZWxQYXRoLCBvUHJvcHMuZm9ybWF0T3B0aW9ucywgZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiSW5wdXRXaXRoVmFsdWVIZWxwXCI7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c3dpdGNoIChvUHJvcGVydHkudHlwZSkge1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiRGF0ZVBpY2tlclwiO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbFBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pIHtcblx0XHRcdFx0b1Byb3BzLm1heERhdGVFeHByZXNzaW9uID0gZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucywgXCJNYXhpbXVtXCIsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pIHtcblx0XHRcdFx0b1Byb3BzLm1pbkRhdGVFeHByZXNzaW9uID0gZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucywgXCJNaW5pbXVtXCIsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uVGltZVwiOlxuXHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJUaW1lUGlja2VyXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSBcIkVkbS5EYXRlVGltZVwiOlxuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIkRhdGVUaW1lUGlja2VyXCI7XG5cdFx0XHQvLyBObyB0aW1lem9uZSBkZWZpbmVkLiBBbHNvIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuXG5cdFx0XHRpZiAoIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSkge1xuXHRcdFx0XHRvUHJvcHMuc2hvd1RpbWV6b25lID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Byb3BzLnNob3dUaW1lem9uZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJDaGVja0JveFwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uU3RyZWFtXCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJGaWxlXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkpIHtcblx0XHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiVGV4dEFyZWFcIjtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0TWFza1wiO1xuXHRcdFx0XHRvUHJvcHMubWFzayA9IHtcblx0XHRcdFx0XHRtYXNrOiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/Lk1hc2sudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5QbGFjZWhvbGRlclN5bWJvbC50b1N0cmluZygpLFxuXHRcdFx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUnVsZXMpXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTWFza2VkPy52YWx1ZU9mKCkpIHtcblx0XHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiTWFza2VkXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5KSkge1xuXHRcdFx0XHRvUHJvcHMuc3RhdGljRGVzY3JpcHRpb24gPSBcIiVcIjtcblx0XHRcdH1cblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0XCI7XG5cdH1cblxuXHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dFwiO1xufTtcblxuY29uc3QgX2dldE1hc2tpbmdSdWxlcyA9IChtYXNraW5nUnVsZXM6IElucHV0TWFza1J1bGVUeXBlVHlwZXNbXSB8IHVuZGVmaW5lZCk6IElucHV0TWFza1J1bGVbXSA9PiB7XG5cdGlmICghbWFza2luZ1J1bGVzIHx8IG1hc2tpbmdSdWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gW3sgc3ltYm9sOiBcIipcIiwgcmVnZXg6IFwiW2EtekEtWjAtOV1cIiB9XTtcblx0fVxuXG5cdHJldHVybiBtYXNraW5nUnVsZXMubWFwKChtYXNraW5nUnVsZSkgPT4gKHtcblx0XHRzeW1ib2w6IG1hc2tpbmdSdWxlLk1hc2tTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRyZWdleDogbWFza2luZ1J1bGUuUmVnRXhwLnRvU3RyaW5nKClcblx0fSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1NlbWFudGljT2JqZWN0SW5OYXZpZ2F0aW9uT3JQcm9wZXJ0eSA9IChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogYm9vbGVhbiA9PiB7XG5cdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0aWYgKFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KHByb3BlcnR5KSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGNvbnN0IGxhc3ROYXZQcm9wID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoXG5cdFx0PyBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzW3Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCAtIDFdXG5cdFx0OiBudWxsO1xuXHRpZiAoXG5cdFx0IWxhc3ROYXZQcm9wIHx8XG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHQoY29udGV4dE5hdlByb3ApID0+IGNvbnRleHROYXZQcm9wLm5hbWUgPT09IGxhc3ROYXZQcm9wLm5hbWVcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gU2VtYW50aWNPYmplY3RIZWxwZXIuaGFzU2VtYW50aWNPYmplY3QobGFzdE5hdlByb3ApO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGRhdGFNb2RlbE9iamVjdFBhdGggd2l0aCB0aGUgdmFsdWUgcHJvcGVydHkgYXMgdGFyZ2V0T2JqZWN0IGlmIGl0IGV4aXN0c1xuICogZm9yIGEgZGF0YU1vZGVsT2JqZWN0UGF0aCB0YXJnZXRpbmcgYSBEYXRhRmllbGQgb3IgYSBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGRhdGFNb2RlbE9iamVjdFBhdGggdGFyZ2V0aW5nIHRoZSB2YWx1ZSBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZSA9IChcblx0aW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5PlxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHJldHVybiBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0fVxuXHRsZXQgdmFsdWVQYXRoID0gXCJcIjtcblx0Ly8gZGF0YSBwb2ludCBhbm5vdGF0aW9ucyBuZWVkIG5vdCBoYXZlICRUeXBlIGRlZmluZWQsIHNvIGFkZCBpdCBpZiBtaXNzaW5nXG5cdGlmIChpc0Fubm90YXRpb25PZlRlcm0oaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgsIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludCkpIHtcblx0XHRpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUgPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUgfHwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTtcblx0fVxuXHRzd2l0Y2ggKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGlmICh0eXBlb2YgaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHZhbHVlUGF0aCA9IGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGU+KGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCwgW1xuXHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSxcblx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LnZhbHVlLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHQvXFwvQC4qLyxcblx0XHRcdFx0XHRcdFx0YC8ke2luaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldC5WYWx1ZT8ucGF0aH1gXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YWx1ZVBhdGggPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQuVmFsdWU/LnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlUGF0aCA9IChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+KT8ucGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0aWYgKHZhbHVlUGF0aCAmJiB2YWx1ZVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBlbmhhbmNlRGF0YU1vZGVsUGF0aChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aCwgdmFsdWVQYXRoKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjb25zaWRlcmVkIHByb3BlcnR5IGlzIGEgbm9uLWluc2VydGFibGUgcHJvcGVydHlcbiAqIEEgZmlyc3QgY2hlY2sgaXMgZG9uZSBvbiB0aGUgbGFzdCBuYXZpZ2F0aW9uIGZyb20gdGhlIGNvbnRleHRMb2NhdGlvbjpcbiAqIC0gSWYgdGhlIGFubm90YXRpb24gJ25vbkluc2VydGFibGVQcm9wZXJ0eScgaXMgZm91bmQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBsaXN0ZWQsIHRoZW4gdGhlIHByb3BlcnR5IGlzIG5vbi1pbnNlcnRhYmxlLFxuICogLSBFbHNlIHRoZSBzYW1lIGNoZWNrIGlzIGRvbmUgb24gdGhlIHRhcmdldCBlbnRpdHkuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgaW5zZXJ0YWJsZVxuICovXG5leHBvcnQgY29uc3QgaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMgPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBub25JbnNlcnRhYmxlUHJvcGVydGllcyA9IGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgKGNhcGFiaWxpdGllcykgPT4ge1xuXHRcdHJldHVybiAoY2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IHVuZGVmaW5lZCk/Lkluc2VydFJlc3RyaWN0aW9ucz8uTm9uSW5zZXJ0YWJsZVByb3BlcnRpZXM7XG5cdH0pO1xuXG5cdHJldHVybiBub25JbnNlcnRhYmxlUHJvcGVydGllcy5zb21lKChub25JbnNlcnRhYmxlUHJvcGVydHkpID0+IHtcblx0XHRyZXR1cm4gbm9uSW5zZXJ0YWJsZVByb3BlcnR5Py4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUgPT09IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0fSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgYmluZGluZyBmb3IgdGhlIGRyYWZ0IGluZGljYXRvciB2aXNpYmlsaXR5LlxuICogQHBhcmFtIGRyYWZ0SW5kaWNhdG9yS2V5XG4gKiBAcmV0dXJucyAgVGhlIHZpc2liaWxpdHkgYmluZGluZyBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyA9IChkcmFmdEluZGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0cmV0dXJuIGRyYWZ0SW5kaWNhdG9yS2V5XG5cdFx0PyBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdGNvbnN0YW50KGRyYWZ0SW5kaWNhdG9yS2V5KSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJIYXNEcmFmdEVudGl0eVwiKSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiSXNBY3RpdmVFbnRpdHlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcImhpZGVEcmFmdEluZm9cIiwgXCJwYWdlSW50ZXJuYWxcIilcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWUuaXNEcmFmdEluZGljYXRvclZpc2libGVcIlxuXHRcdFx0XHQpXG5cdFx0ICApXG5cdFx0OiBcImZhbHNlXCI7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBEaXNwbGF5U2hhcGUgZm9yIHRoZSBBdmF0YXIgZGVwZW5kaW5nIG9uIHRoZSBhbm5vdGF0aW9uIElzTmF0dXJhbFBlcnNvbi5cbiAqXG4gKiBJZiB0aGUgZW50aXR5IHR5cGUgaXMgYW5ub3RhdGVkIHdpdGggXCJJc05hdHVyYWxQZXJzb25cIiwgdGhlbiBhbGwgU3RyZWFtcyBhbmQgSW1hZ2VVUmxzXG4gKiBpbiB0aGlzIGVudGl0eSBhcmUgY29uc2lkZXJlZCB0byBiZSBwZXJzb24gdGhlcmVmb3JlIGhhdmUgc2hhcGUgY2lyY2xlIGJ5IGRlZmF1bHQuXG4gKlxuICogSWYgYSBwcm9wZXJ0eSB3aXRoaW4gc3VjaCBhbiBlbnRpdHkgaXMgYW5ub3RhdGVkIHdpdGggVUkuSXNJbWFnZSBvciBVSS5Jc0ltYWdlVVJMLCBib3RoXG4gKiBvZiB0aGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW5ub3RhdGVkIHdpdGggQ29tbW9uLklzTmF0dXJhbFBlcnNvbi5cbiAqXG4gKiBUaGUgYW5ub3RhdGlvbiBhdCB0aGUgcHJvcGVydHkgbGV2ZWwgb3ZlcnJpZGVzIHRoZSBhbm5vdGF0aW9uIGF0IHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBzaGFwZSBvZiB0aGUgQXZhdGFyIGFzIHN0cmluZyBvciBhcyBhbiBleHByZXNzaW9uXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldEF2YXRhclNoYXBlID0gKGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9XG5cdFx0ZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb24gfHxcblx0XHRkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LklzSW1hZ2U/LmFubm90YXRpb25zPy5Db21tb24/LklzTmF0dXJhbFBlcnNvbjtcblx0Y29uc3QgZW50aXR5QW5ub3RhdGlvblRhcmdldCA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LklzTmF0dXJhbFBlcnNvbjtcblx0bGV0IGF2YXRhclNoYXBlRXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+O1xuXG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRhdmF0YXJTaGFwZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0KTtcblx0fSBlbHNlIGlmIChlbnRpdHlBbm5vdGF0aW9uVGFyZ2V0KSB7XG5cdFx0YXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVudGl0eUFubm90YXRpb25UYXJnZXQpO1xuXHR9IGVsc2UgYXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZmFsc2U7XG5cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShhdmF0YXJTaGFwZUV4cHJlc3Npb24sIEF2YXRhclNoYXBlLkNpcmNsZSwgQXZhdGFyU2hhcGUuU3F1YXJlKSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQ0FBcUMsR0FBRyxTQUFBQSxDQUNwREMsMEJBQW1FLEVBQ25FQyxlQUEyRCxFQUNqQjtJQUMxQyxPQUFPQyxvQkFBb0IsQ0FBQ0Ys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
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type {
|
|
2
|
+
ActionParameter,
|
|
2
3
|
NavigationProperty,
|
|
3
4
|
PathAnnotationExpression,
|
|
4
5
|
Property,
|
|
5
6
|
PropertyAnnotationValue,
|
|
6
7
|
ServiceObjectAndAnnotation
|
|
7
8
|
} from "@sap-ux/vocabularies-types";
|
|
8
|
-
import type { ActionParameter } from "@sap-ux/vocabularies-types/Edm";
|
|
9
9
|
import type { EntitySetAnnotations_Capabilities } from "@sap-ux/vocabularies-types/vocabularies/Capabilities_Edm";
|
|
10
10
|
import type {
|
|
11
11
|
ValueListParameterInOut,
|