@sapui5/sap.fe.macros 1.136.6 → 1.136.8
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/Field.js +8 -4
- package/src/sap/fe/macros/Field.ts +7 -3
- package/src/sap/fe/macros/ai/EasyFillDialog.js +9 -15
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +8 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +2 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +2 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +1 -1
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +10 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +6 -4
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
package/package.json
CHANGED
|
@@ -770,9 +770,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
770
770
|
*/;
|
|
771
771
|
_proto.onMetadataAvailable = function onMetadataAvailable() {
|
|
772
772
|
if (!this.content) {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
773
|
+
try {
|
|
774
|
+
const preparedProperties = this.prepareProperties();
|
|
775
|
+
if (preparedProperties) {
|
|
776
|
+
this.content = this.createContent(preparedProperties);
|
|
777
|
+
}
|
|
778
|
+
} catch (error) {
|
|
779
|
+
Log.info("Error while preparing properties for Field block", error);
|
|
776
780
|
}
|
|
777
781
|
}
|
|
778
782
|
}
|
|
@@ -1156,4 +1160,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
1156
1160
|
}), _applyDecoratedDescriptor(_class2.prototype, "handleChange", [_dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "handleChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleLiveChange", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "handleLiveChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onValidateFieldGroup", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "onValidateFieldGroup"), _class2.prototype), _class2)) || _class) || _class);
|
|
1157
1161
|
return Field;
|
|
1158
1162
|
}, false);
|
|
1159
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJtaXhpbiIsIklubGluZUVkaXQiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsIl9kZWM0IiwiYmluZFRvU3RhdGUiLCJfZGVjNSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsImFzc29jaWF0aW9uIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiYWdncmVnYXRpb24iLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJyZXF1aXJlZCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMzMiIsIl9kZWMzMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFjcm9BUEkiLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY29tYmluZWRQcm9wcyIsImlkIiwiX2ZsZXhJZCIsInZoSWRQcmVmaXgiLCJpZFByZWZpeCIsIl9hcGlJZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGUiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJmb2N1c0hhbmRsZXJzQXR0YWNoZWQiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldENvbGxhYm9yYXRpb25CaW5kaW5nIiwiZmllbGQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzIiwiY2hhbmdlRXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImlzVHJhbnNpZW50IiwidmFsdWVSZXNvbHZlZCIsImdldFBhcmFtZXRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWQiLCJmaWVsZFZhbGlkaXR5IiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJjdXN0b21WYWx1ZUJpbmRpbmciLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsIiwic2V0UHJvcGVydHkiLCJwYXRoIiwidXBkYXRlQmluZGluZ3MiLCJmZUNvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25Db250cm9sbGVyIiwidW5kZWZpbmVkIiwidGhlbiIsIm9Tb3VyY2UiLCJtUGFyYW1ldGVycyIsImZpcmVFdmVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJpc1ZhbGlkIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImNhdGNoIiwiTG9nIiwiZGVidWciLCJ2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50Iiwic2V0VGltZW91dCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkIiwiYkNvbGxhYm9yYXRpb25FbmFibGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkYXRhIiwiZ2V0QmluZGluZ0luZm8iLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJpbmRleE9mIiwibWFwIiwiZ2V0UGF0aCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkNoYW5nZSIsImNvbnRlbnQiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsImlzRGF0YVVwZGF0ZWQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInVwZGF0ZUNvbGxhYm9yYXRpb24iLCJoYW5kbGVMaXZlQ2hhbmdlIiwiX2V2ZW50Iiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJzb3VyY2VGaWVsZCIsInZpZXciLCJnZXRDb250cm9sbGVyIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsIl9zZXRBcmlhTGFiZWxsZWRCeSIsIm9Db250ZW50IiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJhQXJpYUxhYmVsbGVkQnkiLCJhcmlhTGFiZWxsZWRCeSIsInNJZCIsImFBcmlhTGFiZWxsZWRCeXMiLCJnZXRBcmlhTGFiZWxsZWRCeSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwib25BZnRlclJlbmRlcmluZyIsImNvbGxhYm9yYXRpb25FbmFibGVkIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9uZm9jdXNpbiIsImV2dCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwiZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyIiwiY29udHJvbCIsImZpZWxkV3JhcHBlciIsImNvbnRyb2xzIiwiZ2V0RWRpdE1vZGUiLCJnZXRDb250ZW50RGlzcGxheSIsImdldENvbnRlbnRFZGl0IiwibGVuZ3RoIiwiZ2V0TGFiZWxDb250cm9scyIsInJlZmVyZW5jaW5nTGFiZWxzIiwiX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscyIsIl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzIiwibGFiZWxJZHMiLCJMYWJlbEVuYWJsZW1lbnQiLCJnZXRSZWZlcmVuY2luZ0xhYmVscyIsImxhYmVsQ29udHJvbHMiLCJnZXRWaWV3IiwiZm9yRWFjaCIsImxhYmVsSWQiLCJsYWJlbENvbnRyb2wiLCJieUlkIiwicHVzaCIsImdldElkIiwiZ2V0UGFyZW50IiwiZ2V0TGFiZWxDb250cm9sIiwib0NvbnRyb2wiLCJnZXRJdGVtcyIsImdldFNlbGVjdGVkIiwiZ2V0VGV4dCIsImdldFRpdGxlIiwiRXJyb3IiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJtYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJzZXRWYWx1ZSIsInNldFNlbGVjdGVkIiwic2V0VGV4dCIsImdldEVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsImVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc2FibGVkIiwibGluayIsInNldEVuYWJsZWQiLCJlbmFibGVkIiwiZWRpdE1vZGVUeXBlIiwiRWRpdGFibGUiLCJzZXRFZGl0TW9kZSIsInNldExpbmtFbmFibGVkIiwiYWRkTWVzc2FnZSIsInBhcmFtZXRlcnMiLCJtc2dNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRSZXNvbHZlZFBhdGgiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0YXJnZXQiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwiZGVzY3JpcHRpb24iLCJwZXJzaXN0ZW50IiwiYWRkTWVzc2FnZXMiLCJyZW1vdmVNZXNzYWdlIiwiYXJyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsInJlc3VsdCIsImZpbmQiLCJlIiwicmVtb3ZlTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwicHJlcGFyZWRQcm9wZXJ0aWVzIiwicHJlcGFyZVByb3BlcnRpZXMiLCJjcmVhdGVDb250ZW50IiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJpbnB1dEZpZWxkUHJvcGVydGllcyIsImdldFByb3BlcnR5QmFnIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJyZWFkT25seSIsImJpbmRTdGF0ZSIsInNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJvbkxpdmVDaGFuZ2UiLCJoYXNMaXN0ZW5lcnMiLCJwcmVwcm9jZXNzb3JDb250ZXh0Iiwib2RhdGFNZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJjb21wdXRlZENvbnRleHRQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRDb21wdXRlZENvbnRleHRQYXRoIiwiY29tcHV0ZWRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNQcm9wZXJ0eUluaXRpYWwiLCJ2aXNpYmxlIiwic2V0VXBGaWVsZCIsIm1vZGVscyIsInZpZXdEYXRhIiwiSlNPTk1vZGVsIiwiZ2V0Vmlld0RhdGEiLCJpbnRlcm5hbCIsImdldEFwcENvbXBvbmVudCIsImFwcENvbXBvbmVudCIsInNldE9yQmluZFByb3BlcnR5IiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwiaXNEeW5hbWljSW5zdGFudGlhdGlvbiIsInJlcXVpcmVkRXhwcmVzc2lvbiIsImVkaXRhYmxlRXhwcmVzc2lvbiIsImNvbXB1dGVkRWRpdE1vZGUiLCJldmVudEhhbmRsZXJzIiwiY2hhbmdlIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJvbkhhbmRsZVR5cGVNaXNzbWF0Y2giLCJiaW5kIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJvbkhhbmRsZUZpbGVTaXplRXhjZWVkIiwiaGFuZGxlVXBsb2FkQ29tcGxldGUiLCJldiIsImZpbGVGaWxlbmFtZUV4cHJlc3Npb24iLCJmaWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJ1cGxvYWRTdHJlYW0iLCJvblVwbG9hZFN0cmVhbSIsInJlbW92ZVN0cmVhbSIsImhhbmRsZU9wZW5VcGxvYWRlciIsIm9uSGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9uSGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbk9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJvbkxpbmtQcmVzc2VkIiwib25EYXRhRmllbGRXaXRoSUJOIiwib0RhdGFGaWVsZCIsImdldE9iamVjdCIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsIm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIiwib1RoaXMiLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiJEVudW1NZW1iZXIiLCJiSXNOYXZpZ2FibGUiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiZW50aXRpZXMiLCJzcGxpdCIsImVudGl0eVNldE5hbWUiLCJvUGFyYW1zIiwiY29udGV4dHMiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIkxhYmVsIiwiaXNOYXZpZ2FibGUiLCJpbnZva2VBY3Rpb24iLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwiRmllbGRSdW50aW1lIiwiZGlzcGxheUFnZ3JlZ2F0ZURldGFpbHMiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnZlcnRlZE1ldGFQYXRoIiwiJFR5cGUiLCJvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCIsIlRhcmdldCIsInNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJvblNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJ2YWx1ZUhlbHBJZCIsIkZpZWxkU3RydWN0dXJlIiwiZ2V0UG9zc2libGVWYWx1ZUhlbHBUZW1wbGF0ZUlkIiwiZ2V0RmllbGRTdHJ1Y3R1cmVUZW1wbGF0ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJwcmVzc0xpbmsiLCJoYW5kbGVDb250ZW50Rm9jdXNPdXQiLCJzZXR0aW5ncyIsInByb3BlcnRpZXMiLCJnZXRNZXRhZGF0YSIsImdldEFsbFByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJnZXRBbGxBZ2dyZWdhdGlvbnMiLCJwcm9wZXJ0eU5hbWUiLCJjdXJyZW50UHJvcGVydHlWYWx1ZSIsImFnZ3JlZ2F0aW9uTmFtZSIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGRyZW5BcnJheSIsIm1hbmFnZWRPYmplY3QiLCJnZXRJbmxpbmVFZGl0UHJvcGVydHkiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsInRhcmdldFByb3BlcnR5IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCB0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250YWN0IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRhY3QvQ29udGFjdFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0J1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eVwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgVGV4dExpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvVGV4dExpbmtcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIERhdGFQb2ludCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9EYXRhUG9pbnRcIjtcbmltcG9ydCAqIGFzIEZpZWxkU3RydWN0dXJlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCB7IHNldFVwRmllbGQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSBFeHBhbmRhYmxlVGV4dCBmcm9tIFwic2FwL20vRXhwYW5kYWJsZVRleHRcIjtcbmltcG9ydCB0eXBlIEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIElucHV0QmFzZSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0QmFzZSRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IHR5cGUgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGFiZWxFbmFibGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9MYWJlbEVuYWJsZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQsIGRlZmF1bHQgYXMgbWRjRmllbGQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIFY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRW1haWwgZnJvbSBcIi4vY29udGFjdC9FbWFpbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4vY29udHJvbHMvRmlsZVdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4vZmllbGQvRmllbGRSdW50aW1lSGVscGVyXCI7XG5pbXBvcnQgSW5saW5lRWRpdCBmcm9tIFwiLi9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcblxudHlwZSBDb250cm9sV2l0aEFjY2Vzc2liaWxpdHkgPSBDb250cm9sICYgeyBhZGRBcmlhTGFiZWxsZWRCeT86IChpZDogc3RyaW5nKSA9PiB2b2lkOyBnZXRBcmlhTGFiZWxsZWRCeTogKCkgPT4gc3RyaW5nW10gfTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBmaWVsZCBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCwgYnV0IHRoZSBmaWVsZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3BsYXkgYSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIFdoZW4gY3JlYXRpbmcgYSBGaWVsZCBidWlsZGluZyBibG9jaywgeW91IG11c3QgcHJvdmlkZSBhbiBJRCB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWVsZCBpZD1cIk15RmllbGRcIiBtZXRhUGF0aD1cIk15UHJvcGVydHlcIiAvJmd0O1xuICogPC9wcmU+XG4gKiA8YSBocmVmPVwiL3NhcHVpNS1zZGstaW50ZXJuYWwvdGVzdC1yZXNvdXJjZXMvc2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvYnVpbGRpbmdCbG9ja092ZXJ2aWV3XCIgdGFyZ2V0PVwiX2JsYW5rXCIgPk92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrczwvYT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpZWxkXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuRmllbGRcIiwge1xuXHRyZXR1cm5UeXBlczogW1xuXHRcdFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIgLyosIG5vdCBzdXJlIGkgd2FudCB0byBhZGQgdGhvc2UgeWV0IFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiLCBcInNhcC5tLkhCb3hcIiwgXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkNvbmRpdGlvbmFsV3JhcHBlclwiLCBcInNhcC5tLkJ1dHRvblwiKi9cblx0XVxufSlcbkBtaXhpbihJbmxpbmVFZGl0KVxuY2xhc3MgRmllbGQgZXh0ZW5kcyBNYWNyb0FQSTx7IHJlYWRPbmx5OiBib29sZWFuOyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH0+IHtcblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGVkaXRhYmxlIHN0YXRlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYWdlIGlzIGN1cnJlbnRseSBlZGl0YWJsZS5cblx0ICogUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90IHNldCBhIGZpZWxkIHRvIGVkaXRhYmxlIGlmIGl0IGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb24gYXMgbm90IGVkaXRhYmxlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cHVibGljIHJlYWRvbmx5IGVkaXRhYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgYmluZFRvU3RhdGU6IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHJlYWRPbmx5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCIsIFwiUHJvcGVydHlcIl1cblx0fSlcblx0cHVibGljIHJlYWRvbmx5IG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBXcmFwIGZpZWxkXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSB3cmFwPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0Y2hhbmdlITogRXZlbnRIYW5kbGVyO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBjb250YWluaW5nIGRldGFpbHMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpZWxkIGdldCB0aGUgZm9jdXMuXG5cdCAqXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmb2N1c2luITogRXZlbnRIYW5kbGVyO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBjb250YWluaW5nIGRldGFpbHMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpcyBsaXZlIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2UhOiBFdmVudEhhbmRsZXI7XG5cblx0QGFzc29jaWF0aW9uKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBpZFByZWZpeD86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIHZhbHVlIGhlbHAgdXNlZCBmb3IgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIHZoSWRQcmVmaXghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFjdGlvbiB3aWxsIG5hdmlnYXRlIGFmdGVyIGV4ZWN1dGlvblxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF2aWdhdGVBZnRlckFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkRm9ybWF0T3B0aW9uc1wiIH0pXG5cdHB1YmxpYyByZWFkb25seSBmb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRwdWJsaWMgX2ZsZXhJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogRWRpdCBNb2RlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgdGhlIGVkaXRNb2RlIGlzIHVuZGVmaW5lZCB0aGVuIHdlIGNvbXB1dGUgaXQgYmFzZWQgb24gdGhlIG1ldGFkYXRhXG5cdCAqIE90aGVyd2lzZSB3ZSB1c2UgdGhlIHZhbHVlIHByb3ZpZGVkIGhlcmUuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1kYy5lbnVtcy5GaWVsZEVkaXRNb2RlXCJcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGVkaXRNb2RlPzogRmllbGRFZGl0TW9kZSB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBPcHRpb24gdG8gYWRkIHNlbWFudGljIG9iamVjdHMgZm9yIGEgZmllbGQuXG5cdCAqIFRoaXMgcGFyYW1ldGVyIG92ZXJ3cml0ZXMgdGhlIHNlbWFudGljIG9iamVjdHMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zLlxuXHQgKiBWYWxpZCBvcHRpb25zIGFyZSBlaXRoZXIgYSBzaW5nbGUgc2VtYW50aWMgb2JqZWN0LCBhIHN0cmluZ2lmaWVkIGFycmF5IG9mIHNlbWFudGljIG9iamVjdHMsXG5cdCAqIGEgZm9ybWF0dGVyIG9yIGEgc2luZ2xlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXR1cm5pbmcgZWl0aGVyIGEgc2luZ2xlIHNlbWFudGljIG9iamVjdCBvciBhbiBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3RzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBiaW5kVG9TdGF0ZTogdHJ1ZSB9KVxuXHRwdWJsaWMgcmVhZG9ubHkgc2VtYW50aWNPYmplY3QhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZXh0ZXJuYWwgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IG1vZGVsIHRoYW4gdGhlIE9EYXRhIG1vZGVsLlxuXHQgKiBJdCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggYSBmaWVsZCB3aXRoIHZhbHVlIGhlbHAsIGFuZCB3aXRob3V0IHN1cHBvcnQgZm9yIGNvbXBsZXggdmFsdWUgaGVscCAoY3VycmVuY3kgLyB1bml0KS5cblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gb3B0aW9uYWxseSBwcm92aWRlIGFuIGV4dGVybmFsIGRlc2NyaXB0aW9uIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBvRGF0YSBtb2RlbC5cblx0ICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB2YWx1ZSBwcm9wZXJ0eS5cblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAudWkuY29yZS5UZXh0QWxpZ25cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdGV4dEFsaWduPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzQmluZGluZ0luZm86IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNob3dFcnJvck9iamVjdFN0YXR1cz86IG9iamVjdCB8IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgY29sbGFib3JhdGlvbkVuYWJsZWQ/OiBib29sZWFuOyAvLyBOZWVkIHRvIGJlIGNvbXB1dGVkIG9uIGRlbWFuZFxuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIG1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aD86IHN0cmluZzsgLy8gTmVlZCB0byBiZSBjb21wdXRlZCBvbiBkZW1hbmRcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdGN1c3RvbVZhbHVlQmluZGluZz86IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGlubGluZUVkaXRFbmFibGVkPyA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc0lubGluZUVkaXQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgZm9jdXNIYW5kbGVyc0F0dGFjaGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjb21wdXRlZE1ldGFQYXRoPzogQ29udGV4dDtcblxuXHRwcml2YXRlIGNvbXB1dGVkQ29udGV4dFBhdGg/OiBDb250ZXh0O1xuXG5cdHByaXZhdGUgb2RhdGFNZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdF9hcGlJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaGVscCByZXF1aXJlcyB2YWxpZGF0aW9uIG9yIG5vdC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9yZXF1aXJlc1ZhbGlkYXRpb24/OiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwcmVwcm9jZXNzb3JDb250ZXh0ITogWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluZGluZyB1c2VkIGZvciBjb2xsYWJvcmF0aW9uIG5vdGlmaWNhdGlvbnMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZ1xuXHQgKi9cblx0Z2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoZmllbGQ6IENvbnRyb2wpOiBPRGF0YUxpc3RCaW5kaW5nIHwgT0RhdGFDb250ZXh0QmluZGluZyB7XG5cdFx0bGV0IGJpbmRpbmcgPSAoZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQpLmdldEJpbmRpbmcoKTtcblxuXHRcdGlmICghYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0cyBkYXRhIGZyb20gYSBjaGFuZ2UgZXZlbnQgZm9yIHVzYWdlIGluIHRoZSBoYW5kbGVDaGFuZ2UgbWV0aG9kLlxuXHQgKiBAcGFyYW0gY2hhbmdlRXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgZGV0YWlsc1xuXHQgKi9cblx0cHJpdmF0ZSBleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHtcblx0XHRzb3VyY2U6IG1kY0ZpZWxkO1xuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRcdGlzVHJhbnNpZW50OiBib29sZWFuO1xuXHRcdHZhbHVlUmVzb2x2ZWQ6IFByb21pc2U8dm9pZD47XG5cdFx0dmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbjtcblx0XHRjdXN0b21WYWx1ZUJpbmRpbmc6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvIHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBzb3VyY2UgPSBjaGFuZ2VFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdC8vIElmIHRoZSBmaWVsZCBpcyBib3VuZCB0byBhIEpTT04gbW9kZWwsIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIHJldHVybnMgdW5kZWZpbmVkLlxuXHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIGNhbm5vdCBjYWxsIGlzVHJhbnNpZW50IG9uIGl0LiBEZWZhdWx0aW5nIHRvIGZhbHNlLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gc291cmNlICYmIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpZW50ID0gYmluZGluZ0NvbnRleHQgPyAoYmluZGluZ0NvbnRleHQgYXMgdW5rbm93biBhcyB7IGlzVHJhbnNpZW50OiBGdW5jdGlvbiB9KS5pc1RyYW5zaWVudCgpIDogZmFsc2U7XG5cdFx0Y29uc3QgdmFsdWVSZXNvbHZlZCA9IGNoYW5nZUV2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0Y29uc3QgdmFsaWQgPSBjaGFuZ2VFdmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKTtcblx0XHRjb25zdCBmaWVsZFZhbGlkaXR5ID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShjaGFuZ2VFdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXTtcblx0XHRjb25zdCBjdXN0b21WYWx1ZUJpbmRpbmcgPSB0aGlzPy5jdXN0b21WYWx1ZUJpbmRpbmc7XG5cblx0XHRyZXR1cm4geyBzb3VyY2UsIGNvbnRyb2xsZXIsIGlzVHJhbnNpZW50LCB2YWx1ZVJlc29sdmVkLCB2YWxpZCwgZmllbGRWYWxpZGl0eSwgY3VzdG9tVmFsdWVCaW5kaW5nIH07XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlQ2hhbmdlKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IHsgc291cmNlLCBjb250cm9sbGVyLCBpc1RyYW5zaWVudCwgdmFsdWVSZXNvbHZlZCwgdmFsaWQsIGZpZWxkVmFsaWRpdHksIGN1c3RvbVZhbHVlQmluZGluZyB9ID1cblx0XHRcdHRoaXMuZXh0cmFjdENoYW5nZUV2ZW50RGV0YWlscyhjaGFuZ2VFdmVudCk7XG5cblx0XHRpZiAoY3VzdG9tVmFsdWVCaW5kaW5nKSB7XG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cdFx0XHRjb25zdCB2YWx1ZU1vZGVsID0gc291cmNlPy5nZXRNb2RlbChjdXN0b21WYWx1ZUJpbmRpbmcubW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgQ2hlY2tCb3gkU2VsZWN0RXZlbnQpLmdldFBhcmFtZXRlcihcInNlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgSW5wdXRCYXNlJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHRcdHZhbHVlTW9kZWw/LnNldFByb3BlcnR5KGN1c3RvbVZhbHVlQmluZGluZy5wYXRoLCBuZXdWYWx1ZSk7XG5cdFx0XHR2YWx1ZU1vZGVsPy51cGRhdGVCaW5kaW5ncyh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIEZFIENvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgZXh0ZW5zaW9uQVBJIHRvIGFjY2VzcyBpbnRlcm5hbCBGRSBjb250cm9sbGVyc1xuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgPyBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEN1cnJlbnRseSB3ZSBoYXZlIHVuZGVmaW5lZCBhbmQgdHJ1ZS4uLiBhbmQgb3VyIGNyZWF0aW9uIHJvdyBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhpcy5cblx0XHQvLyBJIHdvdWxkIG1vdmUgdGhpcyBsb2dpYyB0byB0aGlzIHBsYWNlIGFzIGl0J3MgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBmaWVsZCBjb25zdW1lclxuXHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gVGhlIGV2ZW50IGlzIGdvbmUuIEZvciBub3cgd2UnbGwganVzdCByZWNyZWF0ZSBpdCBhZ2FpblxuXHRcdFx0XHQoY2hhbmdlRXZlbnQgYXMgeyBvU291cmNlPzogbWRjRmllbGQgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiB2YWxpZCA/PyB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXM/LmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IHRydWUgfSk7XG5cdFx0XHRcdGlmICghaXNUcmFuc2llbnQpIHtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIHNpZGUgZWZmZWN0cyB3aXRob3V0IHJlZ2lzdGVyaW5nIGRlZmVycmVkIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQgYmVmb3JlIHZhbHVlUmVzb2x2ZWQgaXMgcmVzb2x2ZWQuXG5cdFx0XHRcdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2UoY2hhbmdlRXZlbnQsICEhZmllbGRWYWxpZGl0eSwgdmFsdWVSZXNvbHZlZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmZldGNoUmVjb21tZW5kYXRpb25zKHNvdXJjZSwgY29udHJvbGxlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IG1kY0ZpZWxkIH0pLm9Tb3VyY2UgPSBzb3VyY2U7XG5cdFx0XHRcdChjaGFuZ2VFdmVudCBhcyB7IG1QYXJhbWV0ZXJzPzogeyB2YWxpZD86IGJvb2xlYW4gfSB9KS5tUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHR2YWxpZDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0TG9nLmRlYnVnKFwiUHJlcmVxdWlzaXRlcyBvbiBGaWVsZCBmb3IgdGhlIFNpZGVFZmZlY3RzIGFuZCBSZWNvbW1lbmRhdGlvbnMgaGF2ZSBiZWVuIHJlamVjdGVkXCIpO1xuXHRcdFx0XHQvLyBhcyB0aGUgVUkgbWlnaHQgbmVlZCB0byByZWFjdCBvbi4gV2UgY291bGQgcHJvdmlkZSBhIHBhcmFtZXRlciB0byBpbmZvcm0gaWYgdmFsaWRhdGlvblxuXHRcdFx0XHQvLyB3YXMgc3VjY2Vzc2Z1bD9cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgeyB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLCBpc1ZhbGlkOiB2YWxpZCA/PyBmYWxzZSB9KTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gRm9yIHRoZSBFZGl0RmxvdyBzeW5jaHJvbml6YXRpb24sIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgUEFUQ0ggcmVxdWVzdCB0byBiZSBzZW50IChvciBhbiBlcnJvciB0byBiZSBkZXRlY3RlZCksIG90aGVyd2lzZSB0aGVyZSBjb3VsZCBiZSBlLmcuIGFjdGlvbiBvciBzYXZlIGludm9rZWQgaW4gcGFyYWxsZWwgd2l0aCB0aGUgUEFUQ0ggcmVxdWVzdC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgd2l0aCBhIDAtdGltZW91dCwgdG8gYWxsb3cgZm9yIHRoZSAncGF0Y2hTZW50JyBldmVudCB0byBiZSBzZW50IGJ5IHRoZSBiaW5kaW5nICh0aGVuIHRoZSBpbnRlcm5hbCBlZGl0IGZsb3cgc3luY2hyb25pemF0aW9uIGtpY2tzIGluIHdpdGggRWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50KS5cblx0XHRjb25zdCB2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50ID0gdmFsdWVSZXNvbHZlZFxuXHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdGZlQ29udHJvbGxlcj8uZWRpdEZsb3cuc3luY1Rhc2sodmFsdWVSZXNvbHZlZEFuZFBhdGNoU2VudCk7XG5cblx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQsIGl0IG1lYW5zIHRoZSByZXF1ZXN0IHdvdWxkIGZhaWwgYW55d2F5IGFzIHRoZSByZWNvcmQgZG9lcyBub3QgZXhpc3QgaW4gcmVhbGl0eVxuXHRcdC8vIFNob3VsZCB0aGUgcmVxdWVzdCBiZSBtYWRlIGluIGZ1dHVyZSBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQ/XG5cdFx0aWYgKGlzVHJhbnNpZW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChjaGFuZ2VFdmVudCwgISFmaWVsZFZhbGlkaXR5LCB2YWx1ZVJlc29sdmVkKTtcblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBiQ29sbGFib3JhdGlvbkVuYWJsZWQgPSBjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKTtcblxuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoc291cmNlKTtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtcblx0XHRcdFx0Li4uKChzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSB8fCBzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJzZWxlY3RlZFwiKSk/LnBhcnRzIHx8IFtdKSxcblx0XHRcdFx0Li4uKHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8ucGFydHMgfHwgW10pXG5cdFx0XHRdXG5cdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcGFydD8ucGF0aCAhPT0gdW5kZWZpbmVkICYmIHBhcnQucGF0aC5pbmRleE9mKFwiQEBcIikgPCAwOyAvLyBSZW1vdmUgYmluZGluZyBwYXJ0cyB3aXRoIEBAIHRoYXQgbWFrZSBubyBzZW5zZSBmb3IgY29sbGFib3JhdGlvbiBtZXNzYWdlc1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQubWFwKGZ1bmN0aW9uIChwYXJ0OiB7IHBhdGg6IHN0cmluZyB9KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7cGFydC5wYXRofWA7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGcm9tIHRoaXMgcG9pbnQsIHdlIHdpbGwgYWx3YXlzIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgKFVOTE9DSyBvciBDSEFOR0UpLCBzbyB3ZSByZXRhaW5cblx0XHRcdC8vIGEgcG90ZW50aWFsIFVOTE9DSyB0aGF0IHdvdWxkIGJlIHNlbnQgaW4gaGFuZGxlRm9jdXNPdXQsIHRvIG1ha2Ugc3VyZSBpdCdzIHNlbnQgYWZ0ZXIgdGhlIENIQU5HRSBtZXNzYWdlXG5cdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmV0YWluQXN5bmNNZXNzYWdlcyhkYXRhKTtcblxuXHRcdFx0Y29uc3Qgc2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vIFRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyIC0tPiB3YWl0IHVudGlsIGl0J3Mgc2VudCB0byB0aGUgc2VydmVyIGJlZm9yZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzXG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsIGNvbnRlbnQ6IGRhdGEgfSk7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGlzRGF0YVVwZGF0ZWQgPSBiaW5kaW5nLmhhc1BlbmRpbmdDaGFuZ2VzKCk7XG5cdFx0XHRpZiAoaXNEYXRhVXBkYXRlZCkge1xuXHRcdFx0XHRzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cGRhdGVDb2xsYWJvcmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIWlzRGF0YVVwZGF0ZWQpIHtcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGlmIHRoZSBiaW5kaW5nIGhhcyBzb21lIHBlbmRpbmcgY2hhbmdlcywgc2luY2UgaXQgbWF5IGhhdmUgYmVlbiB1cGRhdGVkIG9uY2UgdGhlIEZpZWxkIHZhbHVlIGlzIHJlc29sdmVkXG5cdFx0XHRcdFx0aWYgKGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0c2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fCAoc291cmNlIGFzIENvbnRyb2wpLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVMaXZlQ2hhbmdlKF9ldmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25WYWxpZGF0ZUZpZWxkR3JvdXAoX2V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlRmllbGQgPSBfZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhzb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKTtcblx0XHRmZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoX2V2ZW50KTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogUHJvcGVydGllc09mPEZpZWxkLCBcImNoYW5nZVwiIHwgXCJsaXZlQ2hhbmdlXCIgfCBcImZvY3VzaW5cIj4sIG90aGVycz86IFByb3BlcnRpZXNPZjxGaWVsZD4pIHtcblx0XHRsZXQgY29tYmluZWRQcm9wcztcblxuXHRcdGlmIChwcm9wcykge1xuXHRcdFx0aWYgKHR5cGVvZiBwcm9wcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5vdGhlcnMsIGlkOiBwcm9wcyB9IGFzIFByb3BlcnRpZXNPZjxGaWVsZD47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5wcm9wcywgLi4ub3RoZXJzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgeyBfZmxleElkLCB2aElkUHJlZml4LCBpZFByZWZpeCwgaWQsIF9hcGlJZCB9ID0gY29tYmluZWRQcm9wcztcblxuXHRcdFx0aWYgKF9mbGV4SWQgJiYgIV9mbGV4SWQuaW5jbHVkZXMoXCItY29udGVudFwiKSkge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9hcGlJZCA9IF9mbGV4SWQ7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuX2ZsZXhJZCA9IGAke19mbGV4SWR9LWNvbnRlbnRgO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXZoSWRQcmVmaXgpIHtcblx0XHRcdFx0Ly9ubyB2aElkUHJlZml4IG1lYW5zIFwicHVibGljIHVzZSBjYXNlXCJcblx0XHRcdFx0Y29tYmluZWRQcm9wcy52aElkUHJlZml4ID0gXCJGaWVsZFZhbHVlSGVscFwiO1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9mbGV4SWQgPSBpZDtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5pZFByZWZpeCA9IGlkUHJlZml4IHx8IGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpZCkge1xuXHRcdFx0XHRpZiAoY29tYmluZWRQcm9wcy5fYXBpSWQpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gY29tYmluZWRQcm9wcy5fYXBpSWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaWRQcmVmaXgpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gZ2VuZXJhdGUoW2lkUHJlZml4LCBcIkZpZWxkXCJdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRzdXBlcihjb21iaW5lZFByb3BzKTtcblx0fVxuXG5cdF9zZXRBcmlhTGFiZWxsZWRCeShvQ29udGVudD86IENvbnRyb2xXaXRoQWNjZXNzaWJpbGl0eSk6IHZvaWQge1xuXHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5hZGRBcmlhTGFiZWxsZWRCeSkge1xuXHRcdFx0Y29uc3QgYUFyaWFMYWJlbGxlZEJ5ID0gdGhpcy5hcmlhTGFiZWxsZWRCeTtcblxuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgYUFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRcdGNvbnN0IGFBcmlhTGFiZWxsZWRCeXMgPSBvQ29udGVudC5nZXRBcmlhTGFiZWxsZWRCeSgpIHx8IFtdO1xuXHRcdFx0XHRpZiAoIWFBcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoc0lkKSkge1xuXHRcdFx0XHRcdG9Db250ZW50LmFkZEFyaWFMYWJlbGxlZEJ5KHNJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHQvLyBiZWZvcmUgY2FsbGluZyB0aGUgcmVuZGVyZXIgb2YgdGhlIEZpZWxkIHBhcmVudCBjb250cm9sIG1heSBoYXZlIHNldCBhcmlhTGFiZWxsZWRCeVxuXHRcdC8vIHdlIGVuc3VyZSBpdCBpcyBwYXNzZWQgdG8gaXRzIGlubmVyIGNvbnRyb2xzXG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgIXRoaXMuZm9jdXNIYW5kbGVyc0F0dGFjaGVkKSB7XG5cdFx0XHQvLyBUaGUgZXZlbnQgZGVsZWdhdGUgZG9lc24ndCB3b3JrIG9uIHRoZSBGaWVsZCwgd2UgbmVlZCB0byBwdXQgaXQgb24gaXRzIGNvbnRlbnQgKEZpZWxkV3JhcHBlcilcblx0XHRcdHRoaXMuY29udGVudD8uYWRkRXZlbnREZWxlZ2F0ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uZm9jdXNpbjogKGV2dDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNJbih0aGlzLCBldnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsZXJzQXR0YWNoZWQgPSB0cnVlOyAvLyBUbyBhdm9pZCBhdHRhY2hpbmcgZXZlbnRzIHR3aWNlXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZpcnN0IHZpc2libGUgY29udHJvbCBpbiB0aGUgRmllbGRXcmFwcGVyLlxuXHQgKiBAcGFyYW0gY29udHJvbCBGaWVsZFdyYXBwZXJcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IHZpc2libGUgY29udHJvbFxuXHQgKi9cblx0c3RhdGljIGdldENvbnRyb2xJbkZpZWxkV3JhcHBlcihjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFjb250cm9sPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBjb250cm9sIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj47XG5cdFx0XHRjb25zdCBjb250cm9scyA9IGZpZWxkV3JhcHBlci5nZXRFZGl0TW9kZSgpID09PSBcIkRpc3BsYXlcIiA/IFtmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKV0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPj0gMSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGRcblx0ICogd2hlbiBiZWluZyByZWZlcmVuY2VkIGJ5IHRoZSAnbGFiZWxGb3InIGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgb3Igd2hlbiBpbiBhIGZvcm0uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBjb250cm9sc1xuXHQgKi9cblx0Z2V0TGFiZWxDb250cm9scygpOiBMYWJlbFtdIHtcblx0XHRjb25zdCByZWZlcmVuY2luZ0xhYmVscyA9IHRoaXMuX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscygpO1xuXHRcdHJldHVybiByZWZlcmVuY2luZ0xhYmVscy5sZW5ndGggPiAwID8gcmVmZXJlbmNpbmdMYWJlbHMgOiB0aGlzLl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIHdoZW4gcmVmZXJlbmNlZCBieSBhIGxhYmVsLlxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwgY29udHJvbHNcblx0ICovXG5cdF9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMoKTogTGFiZWxbXSB7XG5cdFx0Y29uc3QgbGFiZWxJZHMgPSBMYWJlbEVuYWJsZW1lbnQuZ2V0UmVmZXJlbmNpbmdMYWJlbHModGhpcyk7XG5cdFx0Y29uc3QgbGFiZWxDb250cm9sczogTGFiZWxbXSA9IFtdO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdGxhYmVsSWRzLmZvckVhY2goKGxhYmVsSWQpID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsQ29udHJvbCA9IHZpZXcuYnlJZChsYWJlbElkKTtcblx0XHRcdGlmIChsYWJlbENvbnRyb2wpIHtcblx0XHRcdFx0bGFiZWxDb250cm9scy5wdXNoKGxhYmVsQ29udHJvbCBhcyBMYWJlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxhYmVsQ29udHJvbHM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIG9yIGNvbm5lY3RlZCBmaWVsZCB3aGVuIGluIGEgZm9ybS5cblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGNvbnRyb2xzXG5cdCAqL1xuXHRfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcygpOiBMYWJlbFtdIHtcblx0XHQvLyBpZiB0aGUgZmllbGQgaXMgbm90IGluIGEgZm9ybSwgd2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICghdGhpcy5nZXRJZCgpLmluY2x1ZGVzKFwiRm9ybUVsZW1lbnRcIikpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdC8vIHNlYXJjaCB0aGUgcGFyZW50cyBvZiB0aGUgY29udHJvbCB1bnRpbCB3ZSBmaW5kIGEgc2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XG5cdFx0Ly8gb3Igd2UgcmVhY2ggdGhlIHJvb3QgY29udHJvbFxuXHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IChjb250cm9sIGFzIE1hbmFnZWRPYmplY3QpPy5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2wgPyBbKGNvbnRyb2wgYXMgRm9ybUVsZW1lbnQpLmdldExhYmVsQ29udHJvbCgpIGFzIExhYmVsXSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgZmxvYXQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQ29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICghb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIG9Db250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRvQ29udHJvbCA9IChvQ29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRTZWxlY3RlZCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBSYXRpbmdJbmRpY2F0b3IpLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIExpbmspLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MYWJlbFwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgVGV4dCkuZ2V0VGV4dChmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEVuaGFuY2VXaXRoVUk1PFRleHRMaW5rPj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBPYmplY3RTdGF0dXMpLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIE9iamVjdElkZW50aWZpZXIpLmdldFRpdGxlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbC5nZXRWYWx1ZSgpOyAvLyBGaWVsZFdyYXBwZXJcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRyb2w/LmlzQTxEYXRhUG9pbnQ+KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIikgfHxcblx0XHRcdG9Db250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpIHx8XG5cdFx0XHRvQ29udHJvbD8uaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIilcblx0XHQpIHtcblx0XHRcdC8vIHRoaXMgaXMgYSBCQnY0IHVuZGVybmVhdGgsIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgQkJWNFxuXHRcdFx0cmV0dXJuIG9Db250cm9sLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImdldHRpbmcgdmFsdWUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRWYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IENvbnRyb2wge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gKGNvbnRyb2wgYXMgSEJveCkuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRTZWxlY3RlZCh2YWx1ZSBhcyBib29sZWFuKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8VGV4dD4oXCJzYXAubS5UZXh0XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFRleHQodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgXCJzZXR0aW5nIHZhbHVlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmIChjb250cm9sICE9PSBudWxsICYmIGNvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiAhY29udHJvbD8uaXNBKFwic2FwLm0uVGV4dFwiKSkge1xuXHRcdFx0Ly9jaGVjayBuZWVkZWQgZm9yIGZpbGUgd3JhcHBlciB3aGljaCBkb2VzIG5vdCBoYXZlIGEgY29udGVudFxuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgY29udHJvbC5pc0E8SEJveD4oXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHRcdH1cblx0XHRcdGlmIChjb250cm9sLmlzQTxWQm94PihcInNhcC5tLlZCb3hcIikpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYWluaW5nIHJlYXNvbnMsIGxldMK0cyBrZWVwIGl0IGxpa2UgdGhhdFxuXHRcdFx0XHRjb250cm9sID0gY29udHJvbC5nZXRJdGVtcygpWzBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNhbGwgdGhlIGdldFByb3BlcnR5IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXNcblx0XHRcdC8vIG90aGVyd2lzZSB3ZSBlbmQgdXAgaW4gYSBtYXggY2FsbCBzdGFjayBzaXplXG5cdFx0XHRpZiAoY29udHJvbC5pc0E8Q2hlY2tCb3g+KFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZ2V0UHJvcGVydHkoXCJlbmFibGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8QnV0dG9uPihcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPE9iamVjdFN0YXR1cz4oXCJzYXAubS5PYmplY3RTdGF0dXNcIikpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPE9iamVjdElkZW50aWZpZXI+KFwic2FwLm0uT2JqZWN0SWRlbnRpZmllclwiKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8Rm9ybUVsZW1lbnRXcmFwcGVyPihcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZvcm1FbGVtZW50V3JhcHBlclwiKSkge1xuXHRcdFx0XHQvLyBJdCBpcyBmb3IgYSBEcmFmdCBJbmRpY2F0b3Jcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPERhdGFQb2ludD4oXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludFwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRFbmFibGVkKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPEVtYWlsPihcInNhcC5mZS5tYWNyb3MuY29udGFjdC5FbWFpbFwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImxpbmtFbmFibGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxDb250YWN0PihcInNhcC5mZS5tYWNyb3MuY29udGFjdC5Db250YWN0XCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldEVuYWJsZWQoKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8RXhwYW5kYWJsZVRleHQ+KFwic2FwLm0uRXhwYW5kYWJsZVRleHRcIikpIHtcblx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHNob3cgbW9yZSB3b3VsZCBiZSBpbmFjdGl2ZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBlZGl0TW9kZSA9IGNvbnRyb2wuZ2V0RWRpdE1vZGUoKTtcblx0XHRcdFx0Ly8gVGhlIG1kYyBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IFwiZW5hYmxlZFwiLCB0aGVyZWZvcmUgd2UgbWFwXG5cdFx0XHRcdC8vIHRoZSBpbnRlcm5hbCBkaXNhYmxlZCBzZXR0aW5nIG9mIHRoZSBlZGl0IG1vZGUgaW4gdGhpcyBncmFjZWZ1bCBwYXR0ZXJuXG5cdFx0XHRcdHJldHVybiBlZGl0TW9kZSAhPT0gRmllbGRFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8RmlsZVdyYXBwZXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0XHQvLyBUaGUgZmlsZSB3cmFwcGVyIGNvdWxkIGNvbnRhaW4gYSBsaW5rIG9yIGFuIGF2YXRhciB3aXRoIGEgZGVsZXRlIGJ1dHRvbixcblx0XHRcdFx0Ly8gd2UgbXVzdCBlbnN1cmUgdGhlIGVuYWJsZW1lbnQgaW4gYm90aCBjYXNlc1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5saW5rID8gY29udHJvbC5saW5rLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKSA6IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuQ29uZGl0aW9uYWxXcmFwcGVyXCIpIHx8XG5cdFx0XHRcdChjb250cm9sIGFzIENvbnRyb2wpLmlzQTxUZXh0TGluaz4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZpZWxkIHJlZmVyZW5jZVxuXHQgKi9cblx0c2V0RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogQ29udHJvbCB7XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0E8SEJveD4oXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gY29udHJvbC5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblxuXHRcdC8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgc2V0UHJvcGVydHkgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlc1xuXHRcdC8vIG90aGVyd2lzZSB3ZSBlbmQgdXAgaW4gYSBtYXggY2FsbCBzdGFjayBzaXplXG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPElucHV0QmFzZT4oXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxMaW5rPihcInNhcC5tLkxpbmtcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImVuYWJsZWRcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJhY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcInRpdGxlQWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdC8vIFRoZSBtZGMgZmllbGQgZG9lcyBub3QgaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBcImVuYWJsZWRcIiwgdGhlcmVmb3JlIHdlIG1hcFxuXHRcdFx0Ly8gdGhlIGVuYWJsZWQgcHJvcGVydHkgdG8gdGhlIHJlc3BlY3RpdmUgZGlzYWJsZWQgc2V0dGluZyBvZiB0aGUgZWRpdCBtb2RlXG5cdFx0XHQvLyB3aXRoIHRoaXMgZ3JhY2VmdWwgcGF0dGVyblxuXHRcdFx0bGV0IGVkaXRNb2RlVHlwZTtcblx0XHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRcdGVkaXRNb2RlVHlwZSA9IEZpZWxkRWRpdE1vZGUuRWRpdGFibGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0TW9kZVR5cGUgPSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRFZGl0TW9kZShlZGl0TW9kZVR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPEVtYWlsPihcInNhcC5mZS5tYWNyb3MuY29udGFjdC5FbWFpbFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRMaW5rRW5hYmxlZChlbmFibGVkKTtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPERhdGFQb2ludD4oXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRFbmFibGVkKGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbWVzc2FnZSB0byB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gVGhlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMudHlwZSBUeXBlIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm1lc3NhZ2UgTWVzc2FnZSB0ZXh0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uIE1lc3NhZ2UgZGVzY3JpcHRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGVyc2lzdGVudCBUcnVlIGlmIHRoZSBtZXNzYWdlIGlzIHBlcnNpc3RlbnRcblx0ICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZE1lc3NhZ2UocGFyYW1ldGVyczogeyB0eXBlPzogTWVzc2FnZVR5cGU7IG1lc3NhZ2U/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyBwZXJzaXN0ZW50PzogYm9vbGVhbiB9KTogc3RyaW5nIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IG9Db250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuY29udGVudCk7XG5cblx0XHRsZXQgcGF0aDsgLy90YXJnZXQgZm9yIG9NZXNzYWdlXG5cdFx0aWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0cGF0aCA9IChvQ29udHJvbCBhcyBDaGVja0JveCkuZ2V0QmluZGluZyhcInNlbGVjdGVkXCIpPy5nZXRSZXNvbHZlZFBhdGgoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdHBhdGggPSAob0NvbnRyb2wgYXMgSW5wdXRCYXNlKS5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQTxGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRwYXRoID0gb0NvbnRyb2wuZ2V0QmluZGluZyhcInZhbHVlXCIpIS5nZXRSZXNvbHZlZFBhdGgoKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdHRhcmdldDogcGF0aCxcblx0XHRcdHR5cGU6IHBhcmFtZXRlcnMudHlwZSxcblx0XHRcdG1lc3NhZ2U6IHBhcmFtZXRlcnMubWVzc2FnZSxcblx0XHRcdHByb2Nlc3Nvcjogb0NvbnRyb2w/LmdldE1vZGVsKCksXG5cdFx0XHRkZXNjcmlwdGlvbjogcGFyYW1ldGVycy5kZXNjcmlwdGlvbixcblx0XHRcdHBlcnNpc3RlbnQ6IHBhcmFtZXRlcnMucGVyc2lzdGVudFxuXHRcdH0pO1xuXG5cdFx0bXNnTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0cmV0dXJuIG9NZXNzYWdlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlTWVzc2FnZShpZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgbXNnTWFuYWdlciA9IHRoaXMuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHRjb25zdCBhcnIgPSBtc2dNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCByZXN1bHQgPSBhcnIuZmluZCgoZTogTWVzc2FnZSkgPT4gZT8uZ2V0SWQ/LigpID09PSBpZCk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0bXNnTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZXN1bHQpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1lc3NhZ2VNYW5hZ2VyKCk6IE1lc3NhZ2luZyB7XG5cdFx0cmV0dXJuIE1lc3NhZ2luZztcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IHByZXBhcmVkUHJvcGVydGllcyA9IHRoaXMucHJlcGFyZVByb3BlcnRpZXMoKTtcblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMpIHtcblx0XHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KHByZXBhcmVkUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByZXBhcmVzIHRoZSBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIG1ldGEgcGF0aCBhbmQgY29udGV4dCBwYXRoLCBzZXRzIHVwIHRoZSBpbnB1dCBmaWVsZCBwcm9wZXJ0aWVzLFxuXHQgKiBhbmQgY2FsbHMgdGhlIHNldFVwRmllbGQgZnVuY3Rpb24gdG8gcHJlcGFyZSB0aGUgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKiBBZGRpdGlvbmFsbHksIGl0IHNldHMgdGhlIG1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCBhbmQgY29sbGFib3JhdGlvbkVuYWJsZWQgcHJvcGVydGllcy5cblx0ICogQHJldHVybnMgVGhlIHByZXBhcmVkIHByb3BlcnRpZXMgZm9yIHRoZSBGaWVsZCBibG9jaywgb3IgdW5kZWZpbmVkIGlmIHRoZSBwcmVwcm9jZXNzb3IgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlLlxuXHQgKi9cblx0cHJlcGFyZVByb3BlcnRpZXMoKTogRmllbGRCbG9ja1Byb3BlcnRpZXMgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0UGF0aCA9IHRoaXMuZ2V0TWV0YVBhdGhPYmplY3QodGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cblx0XHRpZiAoIW1ldGFDb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGNvbnN0IGlucHV0RmllbGRQcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0eUJhZygpIGFzIElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXM7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RmllbGRQcm9wZXJ0aWVzLCBcInZhbHVlXCIsIHtcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5wdXRGaWVsZFByb3BlcnRpZXMsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmRlc2NyaXB0aW9uO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMucmVhZE9ubHkgPSB0aGlzLmJpbmRTdGF0ZShcInJlYWRPbmx5XCIpO1xuXHRcdC8vIGlmIHRoZXJlIGlzIGEgYmluZGluZyBmb3IgdGhlIHByb3BlcnR5IHNlbWFudGljT2JqZWN0IHdlIHdpbGwgcmVseSBvbiB0aGUgYmluZGluZyB0byB0aGUgc3RhdGUgdG8gZW5zdXJlXG5cdFx0Ly8gYmluZGluZyBtYW5pcHVsYXRpb24gaXMgcG9zc2libGVcblx0XHRpZiAodGhpcy5nZXRCaW5kaW5nSW5mbyhcInNlbWFudGljT2JqZWN0XCIpKSB7XG5cdFx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5zZW1hbnRpY09iamVjdCA9IGNvbXBpbGVFeHByZXNzaW9uKHRoaXMuYmluZFN0YXRlKFwic2VtYW50aWNPYmplY3RcIikpO1xuXHRcdH1cblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy52aElkUHJlZml4ID0gdGhpcy52aElkUHJlZml4O1xuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLmlkUHJlZml4ID0gdGhpcy5pZFByZWZpeDtcblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5fZmxleElkID0gdGhpcy5fZmxleElkO1xuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLm9uTGl2ZUNoYW5nZSA9IHRoaXMuaGFzTGlzdGVuZXJzKFwibGl2ZUNoYW5nZVwiKSA/IFwiU29tZXRoaW5nXCIgOiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnByZXByb2Nlc3NvckNvbnRleHQgPSBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dDtcblx0XHR0aGlzLm9kYXRhTWV0YU1vZGVsID0gdGhpcy5nZXRNZXRhTW9kZWwoKTtcblx0XHR0aGlzLmNvbXB1dGVkQ29udGV4dFBhdGggPSB0aGlzLm9kYXRhTWV0YU1vZGVsPy5nZXRNZXRhQ29udGV4dCh0aGlzLmdldENvbXB1dGVkQ29udGV4dFBhdGgodGhpcy5jb250ZXh0UGF0aCkpO1xuXG5cdFx0dGhpcy5jb21wdXRlZE1ldGFQYXRoID0gdGhpcy5vZGF0YU1ldGFNb2RlbD8uY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YUNvbnRleHRQYXRoLmdldFBhdGgoKSkgYXMgQ29udGV4dDtcblxuXHRcdC8vIFNvbWUgY29kZSByZWx5IG9uIHVzIGNoZWNraW5nIGlmIHZpc2libGUgaXMgZGVmaW5lZCBvciBub3QsIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0aHJvdWdoIHRoZSBpc1Byb3BlcnR5SW5pdGlhbCBtZXRob2Rcblx0XHRpZiAodGhpcy5pc1Byb3BlcnR5SW5pdGlhbChcInZpc2libGVcIikpIHtcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnZpc2libGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly9pZiAodGhpcy5wcmVwcm9jZXNzb3JDb250ZXh0KSB7XG5cdFx0Ly8gSWYgdGhlIElEIGlzIG5vdCBzZXQgYnkgdGhlIGNvbnN1bWVyLCB1c2UgdGhlIElEIHByb3ZpZGVkIGJ5IFVJNS5cblx0XHQvLyAoVGhlIGxvZ2ljIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSBoZWxwIHJlbGllcyBvbiBhbHdheXMgaGF2aW5nIGFuIElELilcblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5pZCA9IGlucHV0RmllbGRQcm9wZXJ0aWVzLmlkID8/IHRoaXMuZ2V0SWQoKTtcblxuXHRcdGNvbnN0IHByZXBhcmVkUHJvcGVydGllcyA9IHNldFVwRmllbGQoXG5cdFx0XHRpbnB1dEZpZWxkUHJvcGVydGllcyxcblx0XHRcdHt9IGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHQodGhpcy5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMudmlld0RhdGEgYXMgSlNPTk1vZGVsKSA/PyBuZXcgSlNPTk1vZGVsKHRoaXMuX2dldE93bmVyKCk/LmdldFZpZXdEYXRhPy4oKSA/PyB7fSksXG5cdFx0XHQodGhpcy5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMuaW50ZXJuYWwgYXMgSlNPTk1vZGVsKSA/PyB0aGlzLl9nZXRPd25lcigpIS5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbChcImludGVybmFsXCIpLFxuXHRcdFx0dGhpcy5wcmVwcm9jZXNzb3JDb250ZXh0Py5hcHBDb21wb25lbnQgPz8gdGhpcy5fZ2V0T3duZXIoKSEuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHR0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwicmVhZE9ubHlcIiksXG5cdFx0XHR0aGlzLmNvbXB1dGVkTWV0YVBhdGgsXG5cdFx0XHR0aGlzLmNvbXB1dGVkQ29udGV4dFBhdGhcblx0XHQpO1xuXHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJpbmxpbmVFZGl0RW5hYmxlZFwiLCBwcmVwYXJlZFByb3BlcnRpZXMuaW5saW5lRWRpdEVuYWJsZWQpO1xuXHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJoYXNJbmxpbmVFZGl0XCIsIGNvbXBpbGVFeHByZXNzaW9uKHByZXBhcmVkUHJvcGVydGllcy5oYXNJbmxpbmVFZGl0KSk7XG5cblx0XHRwcmVwYXJlZFByb3BlcnRpZXMuaXNEeW5hbWljSW5zdGFudGlhdGlvbiA9IHRydWU7XG5cdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5tYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgpIHRoaXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoID0gcHJlcGFyZWRQcm9wZXJ0aWVzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aDtcblx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbGxhYm9yYXRpb25FbmFibGVkKSB0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkID0gcHJlcGFyZWRQcm9wZXJ0aWVzLmNvbGxhYm9yYXRpb25FbmFibGVkO1xuXHRcdHJldHVybiBwcmVwYXJlZFByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY29udGVudCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHByZXBhcmVkIHByb3BlcnRpZXMgdG8gY3JlYXRlIGFuZCByZXR1cm4gdGhlIGNvbnRlbnQgY29udHJvbCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKiBAcGFyYW0gcHJlcGFyZWRQcm9wZXJ0aWVzIFRoZSBwcmVwYXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRlbnQgY29udHJvbC5cblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IENvbnRyb2wge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0Ly8gV2UgaGF2ZSB0byBzZXQgKG9yIGJpbmQpIHNvbWUgcHJvcGVydGllcyB0byB0aGUgRmllbGQgc28gdGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgY29uc3VtZXJzL1VJNVxuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJyZXF1aXJlZFwiLCBwcmVwYXJlZFByb3BlcnRpZXMucmVxdWlyZWRFeHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJlZGl0YWJsZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdGFibGVFeHByZXNzaW9uKTtcblxuXHRcdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcInZpc2libGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLnZpc2libGUpO1xuXHRcdFx0aWYgKHR5cGVvZiBwcmVwYXJlZFByb3BlcnRpZXMudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5jdXN0b21WYWx1ZUJpbmRpbmcgPSBwcmVwYXJlZFByb3BlcnRpZXMudmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29tcHV0ZWRFZGl0TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJlZGl0TW9kZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdE1vZGUgPz8gY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbXB1dGVkRWRpdE1vZGUpKTtcblx0XHRcdH1cblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmNoYW5nZSA9IChGaWVsZCBhcyB1bmtub3duIGFzIHsgaGFuZGxlQ2hhbmdlOiBFdmVudEhhbmRsZXIgfSkuaGFuZGxlQ2hhbmdlO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZSA9IChGaWVsZCBhcyB1bmtub3duIGFzIHsgaGFuZGxlTGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyIH0pLmhhbmRsZUxpdmVDaGFuZ2U7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgPSAoXG5cdFx0XHRcdEZpZWxkIGFzIHVua25vd24gYXMgeyBvblZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyIH1cblx0XHRcdCkub25WYWxpZGF0ZUZpZWxkR3JvdXA7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVUeXBlTWlzc21hdGNoID0gdGhpcy5vbkhhbmRsZVR5cGVNaXNzbWF0Y2guYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZUZpbGVTaXplRXhjZWVkID0gdGhpcy5vbkhhbmRsZUZpbGVTaXplRXhjZWVkLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVVcGxvYWRDb21wbGV0ZSA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlVXBsb2FkQ29tcGxldGUoXG5cdFx0XHRcdFx0ZXYsXG5cdFx0XHRcdFx0eyBwYXRoOiBwcmVwYXJlZFByb3BlcnRpZXMuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiB9LFxuXHRcdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udHJvbGxlclxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnVwbG9hZFN0cmVhbSA9IHRoaXMub25VcGxvYWRTdHJlYW0uYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnJlbW92ZVN0cmVhbSA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIucmVtb3ZlU3RyZWFtKFxuXHRcdFx0XHRcdGV2IGFzIEZpZWxkJENoYW5nZUV2ZW50ICYgVUk1RXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdFx0XHRcdHsgcGF0aDogcHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gfSxcblx0XHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXJcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVPcGVuVXBsb2FkZXIgPSB0aGlzLm9uSGFuZGxlT3BlblVwbG9hZGVyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVDbG9zZVVwbG9hZGVyID0gdGhpcy5vbkhhbmRsZUNsb3NlVXBsb2FkZXIuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9wZW5FeHRlcm5hbExpbmsgPSB0aGlzLm9uT3BlbkV4dGVybmFsTGluay5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25Gb2N1c091dCA9IHRoaXMub25Gb2N1c091dC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWQgPSB0aGlzLm9uTGlua1ByZXNzZWQuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTiA9IChldjogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IHByZXBhcmVkUHJvcGVydGllcy5tZXRhUGF0aC5nZXRPYmplY3QoKTtcblx0XHRcdFx0aWYgKCFvRGF0YUZpZWxkKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHR9ID0ge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogZXYuZ2V0U291cmNlKCk/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YUZpZWxkLk1hcHBpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0b0RhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGV2LmdldFNvdXJjZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b24gPSAoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IG9UaGlzOiBGaWVsZEJsb2NrUHJvcGVydGllcyA9IHByZXBhcmVkUHJvcGVydGllcztcblx0XHRcdFx0Y29uc3Qgb0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ID0gcHJlcGFyZWRQcm9wZXJ0aWVzLm1ldGFQYXRoLmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgc0ludm9jYXRpb25Hcm91cGluZyA9IFwiSXNvbGF0ZWRcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxPcGVyYXRpb25Hcm91cGluZ1R5cGU+KS4kRW51bU1lbWJlciA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIkNoYW5nZVNldFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBiSXNOYXZpZ2FibGUgPSBvVGhpcy5uYXZpZ2F0ZUFmdGVyQWN0aW9uIGFzIGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0XHRcdGJJc05hdmlnYWJsZSA9IGJJc05hdmlnYWJsZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGVudGl0aWVzOiBBcnJheTxzdHJpbmc+ID0gb1RoaXM/LmNvbnRleHRQYXRoPy5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblxuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0ge1xuXHRcdFx0XHRcdGNvbnRleHRzOiBldi5nZXRTb3VyY2UoKS5nZXRCaW5kaW5nQ29udGV4dCgpISBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHNJbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdFx0bW9kZWw6IGV2LmdldFNvdXJjZSgpLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRsYWJlbDogb0RhdGFGaWVsZC5MYWJlbCxcblx0XHRcdFx0XHRpc05hdmlnYWJsZTogYklzTmF2aWdhYmxlLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IGVudGl0eVNldE5hbWVcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihvRGF0YUZpZWxkLkFjdGlvbiEsIG9QYXJhbXMpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmRpc3BsYXlBZ2dyZWdhdGlvbkRldGFpbHMgPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0RmllbGRSdW50aW1lLmRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzKGV2LCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByZXBhcmVkUHJvcGVydGllcy5kYXRhTW9kZWxQYXRoKSk7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIikge1xuXHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdEZpZWxkUnVudGltZUhlbHBlci5vbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aChcblx0XHRcdFx0XHRcdGV2LmdldFNvdXJjZSgpLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdChwcmVwYXJlZFByb3BlcnRpZXMuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKS5UYXJnZXQudmFsdWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuc2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlciA9IHRoaXMub25TaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMudmFsdWVIZWxwSWQgPSBGaWVsZFN0cnVjdHVyZS5nZXRQb3NzaWJsZVZhbHVlSGVscFRlbXBsYXRlSWQoXG5cdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcyxcblx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLFxuXHRcdFx0XHR0aGlzLmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuY29udGVudCA9IEZpZWxkU3RydWN0dXJlLmdldEZpZWxkU3RydWN0dXJlVGVtcGxhdGUocHJlcGFyZWRQcm9wZXJ0aWVzKSBhcyB1bmtub3duIGFzIENvbnRyb2w7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhlLm1lc3NhZ2UgKyBcIiBpbiBjcmVhdGVDb250ZW50IG9mIEZpZWxkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jb250ZW50O1xuXHR9XG5cblx0b25IYW5kbGVUeXBlTWlzc21hdGNoKGV2OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZVR5cGVNaXNzbWF0Y2goZXYpO1xuXHR9XG5cblx0b25IYW5kbGVGaWxlU2l6ZUV4Y2VlZChldjogRmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlRmlsZVNpemVFeGNlZWQoZXYpO1xuXHR9XG5cblx0b25IYW5kbGVPcGVuVXBsb2FkZXIoZXY6IFVJNUV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZU9wZW5VcGxvYWRlcihldik7XG5cdH1cblxuXHRvblVwbG9hZFN0cmVhbShldjogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLnVwbG9hZFN0cmVhbSh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCksIGV2KTtcblx0fVxuXG5cdG9uSGFuZGxlQ2xvc2VVcGxvYWRlcihldjogVUk1RXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlQ2xvc2VVcGxvYWRlcihldik7XG5cdH1cblxuXHRvbk9wZW5FeHRlcm5hbExpbmsoZXY6IFVJNUV2ZW50PHt9LCBMaW5rPik6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5vcGVuRXh0ZXJuYWxMaW5rKGV2KTtcblx0fVxuXG5cdG9uTGlua1ByZXNzZWQoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLnByZXNzTGluayhldik7XG5cdH1cblxuXHRvbkZvY3VzT3V0KGV2OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNPdXQoZXYpO1xuXHR9XG5cblx0b25TaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyKGV2OiBVSTVFdmVudDx7fSwgQXZhdGFyPik6IHZvaWQge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5zaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyKHNvdXJjZSwgdmlldyk7XG5cdH1cblxuXHRnZXRQcm9wZXJ0eUJhZygpOiBQcm9wZXJ0aWVzT2Y8dGhpcz4ge1xuXHRcdGNvbnN0IHNldHRpbmdzOiBQcm9wZXJ0aWVzT2Y8dGhpcz4gPSB7fSBhcyBQcm9wZXJ0aWVzT2Y8dGhpcz47XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25zID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRQcm9wZXJ0eVZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0c2V0dGluZ3NbcHJvcGVydHlOYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBjdXJyZW50UHJvcGVydHlWYWx1ZTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGlvbk5hbWUgaW4gYWdncmVnYXRpb25zKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSk7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhZ2dyZWdhdGlvbkNvbnRlbnQpKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuQXJyYXkgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBtYW5hZ2VkT2JqZWN0IG9mIGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRcdGlmIChtYW5hZ2VkT2JqZWN0LmlzQTxCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHk+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIikpIHtcblx0XHRcdFx0XHRcdGNoaWxkcmVuQXJyYXkucHVzaChtYW5hZ2VkT2JqZWN0LmdldFByb3BlcnR5QmFnKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGNoaWxkcmVuQXJyYXk7XG5cdFx0XHR9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25Db250ZW50LmlzQTxCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHk+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5nZXRQcm9wZXJ0eUJhZygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gYWdncmVnYXRpb25Db250ZW50LmdldElkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNldHRpbmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIHRhcmdldCBwcm9wZXJ0eSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSB0YXJnZXRQcm9wZXJ0eSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqL1xuXHRnZXRJbmxpbmVFZGl0UHJvcGVydHkoKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGFNb2RlbFBhdGggPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+KFxuXHRcdFx0dGhpcy5tZXRhUGF0aCxcblx0XHRcdHRoaXMuY29udGV4dFBhdGhcblx0XHQpO1xuXHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlKFxuXHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+XG5cdFx0KT8udGFyZ2V0T2JqZWN0O1xuXHRcdHJldHVybiB0YXJnZXRQcm9wZXJ0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBmdWxseVF1YWxpZmllZE5hbWUgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZnVsbHlRdWFsaWZpZWROYW1lIG9mIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICovXG5cdGdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKT8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFkQSxJQXFCTUEsS0FBSyxJQUFBQyxJQUFBLEdBTlZDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtJQUN0Q0MsV0FBVyxFQUFFLENBQ1oseUNBQXlDLENBQUM7RUFFNUMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FDREMsS0FBSyxDQUFDQyxVQUFVLENBQUMsRUFBQUMsS0FBQSxHQVVoQkMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUzdCRixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUUsV0FBVyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNaERKLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUksS0FBQSxHQU81QkwsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxRQUFRO0lBQ2RLLG1CQUFtQixFQUFFLEVBQUU7SUFDdkJDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFVBQVU7RUFDekYsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNRFIsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBUSxLQUFBLEdBUURULFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkTSxhQUFhLEVBQUUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxv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
|
|
1163
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJtaXhpbiIsIklubGluZUVkaXQiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsIl9kZWM0IiwiYmluZFRvU3RhdGUiLCJfZGVjNSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsImFzc29jaWF0aW9uIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiYWdncmVnYXRpb24iLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJyZXF1aXJlZCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMzMiIsIl9kZWMzMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFjcm9BUEkiLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY29tYmluZWRQcm9wcyIsImlkIiwiX2ZsZXhJZCIsInZoSWRQcmVmaXgiLCJpZFByZWZpeCIsIl9hcGlJZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGUiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJmb2N1c0hhbmRsZXJzQXR0YWNoZWQiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldENvbGxhYm9yYXRpb25CaW5kaW5nIiwiZmllbGQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzIiwiY2hhbmdlRXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImlzVHJhbnNpZW50IiwidmFsdWVSZXNvbHZlZCIsImdldFBhcmFtZXRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWQiLCJmaWVsZFZhbGlkaXR5IiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJjdXN0b21WYWx1ZUJpbmRpbmciLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsIiwic2V0UHJvcGVydHkiLCJwYXRoIiwidXBkYXRlQmluZGluZ3MiLCJmZUNvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25Db250cm9sbGVyIiwidW5kZWZpbmVkIiwidGhlbiIsIm9Tb3VyY2UiLCJtUGFyYW1ldGVycyIsImZpcmVFdmVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJpc1ZhbGlkIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImNhdGNoIiwiTG9nIiwiZGVidWciLCJ2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50Iiwic2V0VGltZW91dCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkIiwiYkNvbGxhYm9yYXRpb25FbmFibGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkYXRhIiwiZ2V0QmluZGluZ0luZm8iLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJpbmRleE9mIiwibWFwIiwiZ2V0UGF0aCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkNoYW5nZSIsImNvbnRlbnQiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsImlzRGF0YVVwZGF0ZWQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInVwZGF0ZUNvbGxhYm9yYXRpb24iLCJoYW5kbGVMaXZlQ2hhbmdlIiwiX2V2ZW50Iiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJzb3VyY2VGaWVsZCIsInZpZXciLCJnZXRDb250cm9sbGVyIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsIl9zZXRBcmlhTGFiZWxsZWRCeSIsIm9Db250ZW50IiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJhQXJpYUxhYmVsbGVkQnkiLCJhcmlhTGFiZWxsZWRCeSIsInNJZCIsImFBcmlhTGFiZWxsZWRCeXMiLCJnZXRBcmlhTGFiZWxsZWRCeSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwib25BZnRlclJlbmRlcmluZyIsImNvbGxhYm9yYXRpb25FbmFibGVkIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9uZm9jdXNpbiIsImV2dCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwiZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyIiwiY29udHJvbCIsImZpZWxkV3JhcHBlciIsImNvbnRyb2xzIiwiZ2V0RWRpdE1vZGUiLCJnZXRDb250ZW50RGlzcGxheSIsImdldENvbnRlbnRFZGl0IiwibGVuZ3RoIiwiZ2V0TGFiZWxDb250cm9scyIsInJlZmVyZW5jaW5nTGFiZWxzIiwiX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscyIsIl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzIiwibGFiZWxJZHMiLCJMYWJlbEVuYWJsZW1lbnQiLCJnZXRSZWZlcmVuY2luZ0xhYmVscyIsImxhYmVsQ29udHJvbHMiLCJnZXRWaWV3IiwiZm9yRWFjaCIsImxhYmVsSWQiLCJsYWJlbENvbnRyb2wiLCJieUlkIiwicHVzaCIsImdldElkIiwiZ2V0UGFyZW50IiwiZ2V0TGFiZWxDb250cm9sIiwib0NvbnRyb2wiLCJnZXRJdGVtcyIsImdldFNlbGVjdGVkIiwiZ2V0VGV4dCIsImdldFRpdGxlIiwiRXJyb3IiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJtYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJzZXRWYWx1ZSIsInNldFNlbGVjdGVkIiwic2V0VGV4dCIsImdldEVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsImVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc2FibGVkIiwibGluayIsInNldEVuYWJsZWQiLCJlbmFibGVkIiwiZWRpdE1vZGVUeXBlIiwiRWRpdGFibGUiLCJzZXRFZGl0TW9kZSIsInNldExpbmtFbmFibGVkIiwiYWRkTWVzc2FnZSIsInBhcmFtZXRlcnMiLCJtc2dNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRSZXNvbHZlZFBhdGgiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0YXJnZXQiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwiZGVzY3JpcHRpb24iLCJwZXJzaXN0ZW50IiwiYWRkTWVzc2FnZXMiLCJyZW1vdmVNZXNzYWdlIiwiYXJyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsInJlc3VsdCIsImZpbmQiLCJlIiwicmVtb3ZlTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwicHJlcGFyZWRQcm9wZXJ0aWVzIiwicHJlcGFyZVByb3BlcnRpZXMiLCJjcmVhdGVDb250ZW50IiwiZXJyb3IiLCJpbmZvIiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJpbnB1dEZpZWxkUHJvcGVydGllcyIsImdldFByb3BlcnR5QmFnIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJyZWFkT25seSIsImJpbmRTdGF0ZSIsInNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJvbkxpdmVDaGFuZ2UiLCJoYXNMaXN0ZW5lcnMiLCJwcmVwcm9jZXNzb3JDb250ZXh0Iiwib2RhdGFNZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJjb21wdXRlZENvbnRleHRQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRDb21wdXRlZENvbnRleHRQYXRoIiwiY29tcHV0ZWRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNQcm9wZXJ0eUluaXRpYWwiLCJ2aXNpYmxlIiwic2V0VXBGaWVsZCIsIm1vZGVscyIsInZpZXdEYXRhIiwiSlNPTk1vZGVsIiwiZ2V0Vmlld0RhdGEiLCJpbnRlcm5hbCIsImdldEFwcENvbXBvbmVudCIsImFwcENvbXBvbmVudCIsInNldE9yQmluZFByb3BlcnR5IiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwiaXNEeW5hbWljSW5zdGFudGlhdGlvbiIsInJlcXVpcmVkRXhwcmVzc2lvbiIsImVkaXRhYmxlRXhwcmVzc2lvbiIsImNvbXB1dGVkRWRpdE1vZGUiLCJldmVudEhhbmRsZXJzIiwiY2hhbmdlIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJvbkhhbmRsZVR5cGVNaXNzbWF0Y2giLCJiaW5kIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJvbkhhbmRsZUZpbGVTaXplRXhjZWVkIiwiaGFuZGxlVXBsb2FkQ29tcGxldGUiLCJldiIsImZpbGVGaWxlbmFtZUV4cHJlc3Npb24iLCJmaWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJ1cGxvYWRTdHJlYW0iLCJvblVwbG9hZFN0cmVhbSIsInJlbW92ZVN0cmVhbSIsImhhbmRsZU9wZW5VcGxvYWRlciIsIm9uSGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9uSGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbk9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJvbkxpbmtQcmVzc2VkIiwib25EYXRhRmllbGRXaXRoSUJOIiwib0RhdGFGaWVsZCIsImdldE9iamVjdCIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsIm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIiwib1RoaXMiLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiJEVudW1NZW1iZXIiLCJiSXNOYXZpZ2FibGUiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiZW50aXRpZXMiLCJzcGxpdCIsImVudGl0eVNldE5hbWUiLCJvUGFyYW1zIiwiY29udGV4dHMiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIkxhYmVsIiwiaXNOYXZpZ2FibGUiLCJpbnZva2VBY3Rpb24iLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwiRmllbGRSdW50aW1lIiwiZGlzcGxheUFnZ3JlZ2F0ZURldGFpbHMiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnZlcnRlZE1ldGFQYXRoIiwiJFR5cGUiLCJvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCIsIlRhcmdldCIsInNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJvblNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJ2YWx1ZUhlbHBJZCIsIkZpZWxkU3RydWN0dXJlIiwiZ2V0UG9zc2libGVWYWx1ZUhlbHBUZW1wbGF0ZUlkIiwiZ2V0RmllbGRTdHJ1Y3R1cmVUZW1wbGF0ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJwcmVzc0xpbmsiLCJoYW5kbGVDb250ZW50Rm9jdXNPdXQiLCJzZXR0aW5ncyIsInByb3BlcnRpZXMiLCJnZXRNZXRhZGF0YSIsImdldEFsbFByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJnZXRBbGxBZ2dyZWdhdGlvbnMiLCJwcm9wZXJ0eU5hbWUiLCJjdXJyZW50UHJvcGVydHlWYWx1ZSIsImFnZ3JlZ2F0aW9uTmFtZSIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGRyZW5BcnJheSIsIm1hbmFnZWRPYmplY3QiLCJnZXRJbmxpbmVFZGl0UHJvcGVydHkiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsInRhcmdldFByb3BlcnR5IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCB0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250YWN0IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRhY3QvQ29udGFjdFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0J1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eVwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgVGV4dExpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvVGV4dExpbmtcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIERhdGFQb2ludCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9EYXRhUG9pbnRcIjtcbmltcG9ydCAqIGFzIEZpZWxkU3RydWN0dXJlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCB7IHNldFVwRmllbGQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSBFeHBhbmRhYmxlVGV4dCBmcm9tIFwic2FwL20vRXhwYW5kYWJsZVRleHRcIjtcbmltcG9ydCB0eXBlIEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIElucHV0QmFzZSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0QmFzZSRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IHR5cGUgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGFiZWxFbmFibGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9MYWJlbEVuYWJsZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQsIGRlZmF1bHQgYXMgbWRjRmllbGQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIFY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRW1haWwgZnJvbSBcIi4vY29udGFjdC9FbWFpbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4vY29udHJvbHMvRmlsZVdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4vZmllbGQvRmllbGRSdW50aW1lSGVscGVyXCI7XG5pbXBvcnQgSW5saW5lRWRpdCBmcm9tIFwiLi9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcblxudHlwZSBDb250cm9sV2l0aEFjY2Vzc2liaWxpdHkgPSBDb250cm9sICYgeyBhZGRBcmlhTGFiZWxsZWRCeT86IChpZDogc3RyaW5nKSA9PiB2b2lkOyBnZXRBcmlhTGFiZWxsZWRCeTogKCkgPT4gc3RyaW5nW10gfTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBmaWVsZCBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCwgYnV0IHRoZSBmaWVsZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3BsYXkgYSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIFdoZW4gY3JlYXRpbmcgYSBGaWVsZCBidWlsZGluZyBibG9jaywgeW91IG11c3QgcHJvdmlkZSBhbiBJRCB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWVsZCBpZD1cIk15RmllbGRcIiBtZXRhUGF0aD1cIk15UHJvcGVydHlcIiAvJmd0O1xuICogPC9wcmU+XG4gKiA8YSBocmVmPVwiL3NhcHVpNS1zZGstaW50ZXJuYWwvdGVzdC1yZXNvdXJjZXMvc2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvYnVpbGRpbmdCbG9ja092ZXJ2aWV3XCIgdGFyZ2V0PVwiX2JsYW5rXCIgPk92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrczwvYT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpZWxkXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuRmllbGRcIiwge1xuXHRyZXR1cm5UeXBlczogW1xuXHRcdFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIgLyosIG5vdCBzdXJlIGkgd2FudCB0byBhZGQgdGhvc2UgeWV0IFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiLCBcInNhcC5tLkhCb3hcIiwgXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkNvbmRpdGlvbmFsV3JhcHBlclwiLCBcInNhcC5tLkJ1dHRvblwiKi9cblx0XVxufSlcbkBtaXhpbihJbmxpbmVFZGl0KVxuY2xhc3MgRmllbGQgZXh0ZW5kcyBNYWNyb0FQSTx7IHJlYWRPbmx5OiBib29sZWFuOyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH0+IHtcblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGVkaXRhYmxlIHN0YXRlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYWdlIGlzIGN1cnJlbnRseSBlZGl0YWJsZS5cblx0ICogUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90IHNldCBhIGZpZWxkIHRvIGVkaXRhYmxlIGlmIGl0IGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb24gYXMgbm90IGVkaXRhYmxlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cHVibGljIHJlYWRvbmx5IGVkaXRhYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgYmluZFRvU3RhdGU6IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHJlYWRPbmx5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCIsIFwiUHJvcGVydHlcIl1cblx0fSlcblx0cHVibGljIHJlYWRvbmx5IG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBXcmFwIGZpZWxkXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSB3cmFwPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0Y2hhbmdlITogRXZlbnRIYW5kbGVyO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBjb250YWluaW5nIGRldGFpbHMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpZWxkIGdldCB0aGUgZm9jdXMuXG5cdCAqXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmb2N1c2luITogRXZlbnRIYW5kbGVyO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBjb250YWluaW5nIGRldGFpbHMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpcyBsaXZlIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2UhOiBFdmVudEhhbmRsZXI7XG5cblx0QGFzc29jaWF0aW9uKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBpZFByZWZpeD86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIHZhbHVlIGhlbHAgdXNlZCBmb3IgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIHZoSWRQcmVmaXghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFjdGlvbiB3aWxsIG5hdmlnYXRlIGFmdGVyIGV4ZWN1dGlvblxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF2aWdhdGVBZnRlckFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkRm9ybWF0T3B0aW9uc1wiIH0pXG5cdHB1YmxpYyByZWFkb25seSBmb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRwdWJsaWMgX2ZsZXhJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogRWRpdCBNb2RlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgdGhlIGVkaXRNb2RlIGlzIHVuZGVmaW5lZCB0aGVuIHdlIGNvbXB1dGUgaXQgYmFzZWQgb24gdGhlIG1ldGFkYXRhXG5cdCAqIE90aGVyd2lzZSB3ZSB1c2UgdGhlIHZhbHVlIHByb3ZpZGVkIGhlcmUuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1kYy5lbnVtcy5GaWVsZEVkaXRNb2RlXCJcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGVkaXRNb2RlPzogRmllbGRFZGl0TW9kZSB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBPcHRpb24gdG8gYWRkIHNlbWFudGljIG9iamVjdHMgZm9yIGEgZmllbGQuXG5cdCAqIFRoaXMgcGFyYW1ldGVyIG92ZXJ3cml0ZXMgdGhlIHNlbWFudGljIG9iamVjdHMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zLlxuXHQgKiBWYWxpZCBvcHRpb25zIGFyZSBlaXRoZXIgYSBzaW5nbGUgc2VtYW50aWMgb2JqZWN0LCBhIHN0cmluZ2lmaWVkIGFycmF5IG9mIHNlbWFudGljIG9iamVjdHMsXG5cdCAqIGEgZm9ybWF0dGVyIG9yIGEgc2luZ2xlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXR1cm5pbmcgZWl0aGVyIGEgc2luZ2xlIHNlbWFudGljIG9iamVjdCBvciBhbiBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3RzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBiaW5kVG9TdGF0ZTogdHJ1ZSB9KVxuXHRwdWJsaWMgcmVhZG9ubHkgc2VtYW50aWNPYmplY3QhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZXh0ZXJuYWwgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IG1vZGVsIHRoYW4gdGhlIE9EYXRhIG1vZGVsLlxuXHQgKiBJdCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggYSBmaWVsZCB3aXRoIHZhbHVlIGhlbHAsIGFuZCB3aXRob3V0IHN1cHBvcnQgZm9yIGNvbXBsZXggdmFsdWUgaGVscCAoY3VycmVuY3kgLyB1bml0KS5cblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gb3B0aW9uYWxseSBwcm92aWRlIGFuIGV4dGVybmFsIGRlc2NyaXB0aW9uIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBvRGF0YSBtb2RlbC5cblx0ICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB2YWx1ZSBwcm9wZXJ0eS5cblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAudWkuY29yZS5UZXh0QWxpZ25cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdGV4dEFsaWduPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzQmluZGluZ0luZm86IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNob3dFcnJvck9iamVjdFN0YXR1cz86IG9iamVjdCB8IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgY29sbGFib3JhdGlvbkVuYWJsZWQ/OiBib29sZWFuOyAvLyBOZWVkIHRvIGJlIGNvbXB1dGVkIG9uIGRlbWFuZFxuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIG1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aD86IHN0cmluZzsgLy8gTmVlZCB0byBiZSBjb21wdXRlZCBvbiBkZW1hbmRcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdGN1c3RvbVZhbHVlQmluZGluZz86IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGlubGluZUVkaXRFbmFibGVkPyA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc0lubGluZUVkaXQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgZm9jdXNIYW5kbGVyc0F0dGFjaGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjb21wdXRlZE1ldGFQYXRoPzogQ29udGV4dDtcblxuXHRwcml2YXRlIGNvbXB1dGVkQ29udGV4dFBhdGg/OiBDb250ZXh0O1xuXG5cdHByaXZhdGUgb2RhdGFNZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdF9hcGlJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaGVscCByZXF1aXJlcyB2YWxpZGF0aW9uIG9yIG5vdC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9yZXF1aXJlc1ZhbGlkYXRpb24/OiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwcmVwcm9jZXNzb3JDb250ZXh0ITogWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluZGluZyB1c2VkIGZvciBjb2xsYWJvcmF0aW9uIG5vdGlmaWNhdGlvbnMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZ1xuXHQgKi9cblx0Z2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoZmllbGQ6IENvbnRyb2wpOiBPRGF0YUxpc3RCaW5kaW5nIHwgT0RhdGFDb250ZXh0QmluZGluZyB7XG5cdFx0bGV0IGJpbmRpbmcgPSAoZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQpLmdldEJpbmRpbmcoKTtcblxuXHRcdGlmICghYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0cyBkYXRhIGZyb20gYSBjaGFuZ2UgZXZlbnQgZm9yIHVzYWdlIGluIHRoZSBoYW5kbGVDaGFuZ2UgbWV0aG9kLlxuXHQgKiBAcGFyYW0gY2hhbmdlRXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgZGV0YWlsc1xuXHQgKi9cblx0cHJpdmF0ZSBleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHtcblx0XHRzb3VyY2U6IG1kY0ZpZWxkO1xuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRcdGlzVHJhbnNpZW50OiBib29sZWFuO1xuXHRcdHZhbHVlUmVzb2x2ZWQ6IFByb21pc2U8dm9pZD47XG5cdFx0dmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbjtcblx0XHRjdXN0b21WYWx1ZUJpbmRpbmc6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvIHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBzb3VyY2UgPSBjaGFuZ2VFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdC8vIElmIHRoZSBmaWVsZCBpcyBib3VuZCB0byBhIEpTT04gbW9kZWwsIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIHJldHVybnMgdW5kZWZpbmVkLlxuXHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIGNhbm5vdCBjYWxsIGlzVHJhbnNpZW50IG9uIGl0LiBEZWZhdWx0aW5nIHRvIGZhbHNlLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gc291cmNlICYmIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpZW50ID0gYmluZGluZ0NvbnRleHQgPyAoYmluZGluZ0NvbnRleHQgYXMgdW5rbm93biBhcyB7IGlzVHJhbnNpZW50OiBGdW5jdGlvbiB9KS5pc1RyYW5zaWVudCgpIDogZmFsc2U7XG5cdFx0Y29uc3QgdmFsdWVSZXNvbHZlZCA9IGNoYW5nZUV2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0Y29uc3QgdmFsaWQgPSBjaGFuZ2VFdmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKTtcblx0XHRjb25zdCBmaWVsZFZhbGlkaXR5ID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShjaGFuZ2VFdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXTtcblx0XHRjb25zdCBjdXN0b21WYWx1ZUJpbmRpbmcgPSB0aGlzPy5jdXN0b21WYWx1ZUJpbmRpbmc7XG5cblx0XHRyZXR1cm4geyBzb3VyY2UsIGNvbnRyb2xsZXIsIGlzVHJhbnNpZW50LCB2YWx1ZVJlc29sdmVkLCB2YWxpZCwgZmllbGRWYWxpZGl0eSwgY3VzdG9tVmFsdWVCaW5kaW5nIH07XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlQ2hhbmdlKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IHsgc291cmNlLCBjb250cm9sbGVyLCBpc1RyYW5zaWVudCwgdmFsdWVSZXNvbHZlZCwgdmFsaWQsIGZpZWxkVmFsaWRpdHksIGN1c3RvbVZhbHVlQmluZGluZyB9ID1cblx0XHRcdHRoaXMuZXh0cmFjdENoYW5nZUV2ZW50RGV0YWlscyhjaGFuZ2VFdmVudCk7XG5cblx0XHRpZiAoY3VzdG9tVmFsdWVCaW5kaW5nKSB7XG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cdFx0XHRjb25zdCB2YWx1ZU1vZGVsID0gc291cmNlPy5nZXRNb2RlbChjdXN0b21WYWx1ZUJpbmRpbmcubW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgQ2hlY2tCb3gkU2VsZWN0RXZlbnQpLmdldFBhcmFtZXRlcihcInNlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgSW5wdXRCYXNlJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHRcdHZhbHVlTW9kZWw/LnNldFByb3BlcnR5KGN1c3RvbVZhbHVlQmluZGluZy5wYXRoLCBuZXdWYWx1ZSk7XG5cdFx0XHR2YWx1ZU1vZGVsPy51cGRhdGVCaW5kaW5ncyh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIEZFIENvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgZXh0ZW5zaW9uQVBJIHRvIGFjY2VzcyBpbnRlcm5hbCBGRSBjb250cm9sbGVyc1xuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgPyBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEN1cnJlbnRseSB3ZSBoYXZlIHVuZGVmaW5lZCBhbmQgdHJ1ZS4uLiBhbmQgb3VyIGNyZWF0aW9uIHJvdyBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhpcy5cblx0XHQvLyBJIHdvdWxkIG1vdmUgdGhpcyBsb2dpYyB0byB0aGlzIHBsYWNlIGFzIGl0J3MgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBmaWVsZCBjb25zdW1lclxuXHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gVGhlIGV2ZW50IGlzIGdvbmUuIEZvciBub3cgd2UnbGwganVzdCByZWNyZWF0ZSBpdCBhZ2FpblxuXHRcdFx0XHQoY2hhbmdlRXZlbnQgYXMgeyBvU291cmNlPzogbWRjRmllbGQgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiB2YWxpZCA/PyB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXM/LmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IHRydWUgfSk7XG5cdFx0XHRcdGlmICghaXNUcmFuc2llbnQpIHtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIHNpZGUgZWZmZWN0cyB3aXRob3V0IHJlZ2lzdGVyaW5nIGRlZmVycmVkIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQgYmVmb3JlIHZhbHVlUmVzb2x2ZWQgaXMgcmVzb2x2ZWQuXG5cdFx0XHRcdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2UoY2hhbmdlRXZlbnQsICEhZmllbGRWYWxpZGl0eSwgdmFsdWVSZXNvbHZlZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmZldGNoUmVjb21tZW5kYXRpb25zKHNvdXJjZSwgY29udHJvbGxlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IG1kY0ZpZWxkIH0pLm9Tb3VyY2UgPSBzb3VyY2U7XG5cdFx0XHRcdChjaGFuZ2VFdmVudCBhcyB7IG1QYXJhbWV0ZXJzPzogeyB2YWxpZD86IGJvb2xlYW4gfSB9KS5tUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHR2YWxpZDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0TG9nLmRlYnVnKFwiUHJlcmVxdWlzaXRlcyBvbiBGaWVsZCBmb3IgdGhlIFNpZGVFZmZlY3RzIGFuZCBSZWNvbW1lbmRhdGlvbnMgaGF2ZSBiZWVuIHJlamVjdGVkXCIpO1xuXHRcdFx0XHQvLyBhcyB0aGUgVUkgbWlnaHQgbmVlZCB0byByZWFjdCBvbi4gV2UgY291bGQgcHJvdmlkZSBhIHBhcmFtZXRlciB0byBpbmZvcm0gaWYgdmFsaWRhdGlvblxuXHRcdFx0XHQvLyB3YXMgc3VjY2Vzc2Z1bD9cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgeyB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLCBpc1ZhbGlkOiB2YWxpZCA/PyBmYWxzZSB9KTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gRm9yIHRoZSBFZGl0RmxvdyBzeW5jaHJvbml6YXRpb24sIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgUEFUQ0ggcmVxdWVzdCB0byBiZSBzZW50IChvciBhbiBlcnJvciB0byBiZSBkZXRlY3RlZCksIG90aGVyd2lzZSB0aGVyZSBjb3VsZCBiZSBlLmcuIGFjdGlvbiBvciBzYXZlIGludm9rZWQgaW4gcGFyYWxsZWwgd2l0aCB0aGUgUEFUQ0ggcmVxdWVzdC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgd2l0aCBhIDAtdGltZW91dCwgdG8gYWxsb3cgZm9yIHRoZSAncGF0Y2hTZW50JyBldmVudCB0byBiZSBzZW50IGJ5IHRoZSBiaW5kaW5nICh0aGVuIHRoZSBpbnRlcm5hbCBlZGl0IGZsb3cgc3luY2hyb25pemF0aW9uIGtpY2tzIGluIHdpdGggRWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50KS5cblx0XHRjb25zdCB2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50ID0gdmFsdWVSZXNvbHZlZFxuXHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdGZlQ29udHJvbGxlcj8uZWRpdEZsb3cuc3luY1Rhc2sodmFsdWVSZXNvbHZlZEFuZFBhdGNoU2VudCk7XG5cblx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQsIGl0IG1lYW5zIHRoZSByZXF1ZXN0IHdvdWxkIGZhaWwgYW55d2F5IGFzIHRoZSByZWNvcmQgZG9lcyBub3QgZXhpc3QgaW4gcmVhbGl0eVxuXHRcdC8vIFNob3VsZCB0aGUgcmVxdWVzdCBiZSBtYWRlIGluIGZ1dHVyZSBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQ/XG5cdFx0aWYgKGlzVHJhbnNpZW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChjaGFuZ2VFdmVudCwgISFmaWVsZFZhbGlkaXR5LCB2YWx1ZVJlc29sdmVkKTtcblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBiQ29sbGFib3JhdGlvbkVuYWJsZWQgPSBjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKTtcblxuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoc291cmNlKTtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtcblx0XHRcdFx0Li4uKChzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSB8fCBzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJzZWxlY3RlZFwiKSk/LnBhcnRzIHx8IFtdKSxcblx0XHRcdFx0Li4uKHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8ucGFydHMgfHwgW10pXG5cdFx0XHRdXG5cdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcGFydD8ucGF0aCAhPT0gdW5kZWZpbmVkICYmIHBhcnQucGF0aC5pbmRleE9mKFwiQEBcIikgPCAwOyAvLyBSZW1vdmUgYmluZGluZyBwYXJ0cyB3aXRoIEBAIHRoYXQgbWFrZSBubyBzZW5zZSBmb3IgY29sbGFib3JhdGlvbiBtZXNzYWdlc1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQubWFwKGZ1bmN0aW9uIChwYXJ0OiB7IHBhdGg6IHN0cmluZyB9KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7cGFydC5wYXRofWA7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGcm9tIHRoaXMgcG9pbnQsIHdlIHdpbGwgYWx3YXlzIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgKFVOTE9DSyBvciBDSEFOR0UpLCBzbyB3ZSByZXRhaW5cblx0XHRcdC8vIGEgcG90ZW50aWFsIFVOTE9DSyB0aGF0IHdvdWxkIGJlIHNlbnQgaW4gaGFuZGxlRm9jdXNPdXQsIHRvIG1ha2Ugc3VyZSBpdCdzIHNlbnQgYWZ0ZXIgdGhlIENIQU5HRSBtZXNzYWdlXG5cdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmV0YWluQXN5bmNNZXNzYWdlcyhkYXRhKTtcblxuXHRcdFx0Y29uc3Qgc2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vIFRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyIC0tPiB3YWl0IHVudGlsIGl0J3Mgc2VudCB0byB0aGUgc2VydmVyIGJlZm9yZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzXG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsIGNvbnRlbnQ6IGRhdGEgfSk7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGlzRGF0YVVwZGF0ZWQgPSBiaW5kaW5nLmhhc1BlbmRpbmdDaGFuZ2VzKCk7XG5cdFx0XHRpZiAoaXNEYXRhVXBkYXRlZCkge1xuXHRcdFx0XHRzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cGRhdGVDb2xsYWJvcmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIWlzRGF0YVVwZGF0ZWQpIHtcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGlmIHRoZSBiaW5kaW5nIGhhcyBzb21lIHBlbmRpbmcgY2hhbmdlcywgc2luY2UgaXQgbWF5IGhhdmUgYmVlbiB1cGRhdGVkIG9uY2UgdGhlIEZpZWxkIHZhbHVlIGlzIHJlc29sdmVkXG5cdFx0XHRcdFx0aWYgKGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0c2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fCAoc291cmNlIGFzIENvbnRyb2wpLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVMaXZlQ2hhbmdlKF9ldmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25WYWxpZGF0ZUZpZWxkR3JvdXAoX2V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlRmllbGQgPSBfZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhzb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKTtcblx0XHRmZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoX2V2ZW50KTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogUHJvcGVydGllc09mPEZpZWxkLCBcImNoYW5nZVwiIHwgXCJsaXZlQ2hhbmdlXCIgfCBcImZvY3VzaW5cIj4sIG90aGVycz86IFByb3BlcnRpZXNPZjxGaWVsZD4pIHtcblx0XHRsZXQgY29tYmluZWRQcm9wcztcblxuXHRcdGlmIChwcm9wcykge1xuXHRcdFx0aWYgKHR5cGVvZiBwcm9wcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5vdGhlcnMsIGlkOiBwcm9wcyB9IGFzIFByb3BlcnRpZXNPZjxGaWVsZD47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5wcm9wcywgLi4ub3RoZXJzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgeyBfZmxleElkLCB2aElkUHJlZml4LCBpZFByZWZpeCwgaWQsIF9hcGlJZCB9ID0gY29tYmluZWRQcm9wcztcblxuXHRcdFx0aWYgKF9mbGV4SWQgJiYgIV9mbGV4SWQuaW5jbHVkZXMoXCItY29udGVudFwiKSkge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9hcGlJZCA9IF9mbGV4SWQ7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuX2ZsZXhJZCA9IGAke19mbGV4SWR9LWNvbnRlbnRgO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXZoSWRQcmVmaXgpIHtcblx0XHRcdFx0Ly9ubyB2aElkUHJlZml4IG1lYW5zIFwicHVibGljIHVzZSBjYXNlXCJcblx0XHRcdFx0Y29tYmluZWRQcm9wcy52aElkUHJlZml4ID0gXCJGaWVsZFZhbHVlSGVscFwiO1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9mbGV4SWQgPSBpZDtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5pZFByZWZpeCA9IGlkUHJlZml4IHx8IGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpZCkge1xuXHRcdFx0XHRpZiAoY29tYmluZWRQcm9wcy5fYXBpSWQpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gY29tYmluZWRQcm9wcy5fYXBpSWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaWRQcmVmaXgpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gZ2VuZXJhdGUoW2lkUHJlZml4LCBcIkZpZWxkXCJdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRzdXBlcihjb21iaW5lZFByb3BzKTtcblx0fVxuXG5cdF9zZXRBcmlhTGFiZWxsZWRCeShvQ29udGVudD86IENvbnRyb2xXaXRoQWNjZXNzaWJpbGl0eSk6IHZvaWQge1xuXHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5hZGRBcmlhTGFiZWxsZWRCeSkge1xuXHRcdFx0Y29uc3QgYUFyaWFMYWJlbGxlZEJ5ID0gdGhpcy5hcmlhTGFiZWxsZWRCeTtcblxuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgYUFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRcdGNvbnN0IGFBcmlhTGFiZWxsZWRCeXMgPSBvQ29udGVudC5nZXRBcmlhTGFiZWxsZWRCeSgpIHx8IFtdO1xuXHRcdFx0XHRpZiAoIWFBcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoc0lkKSkge1xuXHRcdFx0XHRcdG9Db250ZW50LmFkZEFyaWFMYWJlbGxlZEJ5KHNJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHQvLyBiZWZvcmUgY2FsbGluZyB0aGUgcmVuZGVyZXIgb2YgdGhlIEZpZWxkIHBhcmVudCBjb250cm9sIG1heSBoYXZlIHNldCBhcmlhTGFiZWxsZWRCeVxuXHRcdC8vIHdlIGVuc3VyZSBpdCBpcyBwYXNzZWQgdG8gaXRzIGlubmVyIGNvbnRyb2xzXG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgIXRoaXMuZm9jdXNIYW5kbGVyc0F0dGFjaGVkKSB7XG5cdFx0XHQvLyBUaGUgZXZlbnQgZGVsZWdhdGUgZG9lc24ndCB3b3JrIG9uIHRoZSBGaWVsZCwgd2UgbmVlZCB0byBwdXQgaXQgb24gaXRzIGNvbnRlbnQgKEZpZWxkV3JhcHBlcilcblx0XHRcdHRoaXMuY29udGVudD8uYWRkRXZlbnREZWxlZ2F0ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uZm9jdXNpbjogKGV2dDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNJbih0aGlzLCBldnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsZXJzQXR0YWNoZWQgPSB0cnVlOyAvLyBUbyBhdm9pZCBhdHRhY2hpbmcgZXZlbnRzIHR3aWNlXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZpcnN0IHZpc2libGUgY29udHJvbCBpbiB0aGUgRmllbGRXcmFwcGVyLlxuXHQgKiBAcGFyYW0gY29udHJvbCBGaWVsZFdyYXBwZXJcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IHZpc2libGUgY29udHJvbFxuXHQgKi9cblx0c3RhdGljIGdldENvbnRyb2xJbkZpZWxkV3JhcHBlcihjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFjb250cm9sPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBjb250cm9sIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj47XG5cdFx0XHRjb25zdCBjb250cm9scyA9IGZpZWxkV3JhcHBlci5nZXRFZGl0TW9kZSgpID09PSBcIkRpc3BsYXlcIiA/IFtmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKV0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPj0gMSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGRcblx0ICogd2hlbiBiZWluZyByZWZlcmVuY2VkIGJ5IHRoZSAnbGFiZWxGb3InIGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgb3Igd2hlbiBpbiBhIGZvcm0uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBjb250cm9sc1xuXHQgKi9cblx0Z2V0TGFiZWxDb250cm9scygpOiBMYWJlbFtdIHtcblx0XHRjb25zdCByZWZlcmVuY2luZ0xhYmVscyA9IHRoaXMuX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscygpO1xuXHRcdHJldHVybiByZWZlcmVuY2luZ0xhYmVscy5sZW5ndGggPiAwID8gcmVmZXJlbmNpbmdMYWJlbHMgOiB0aGlzLl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIHdoZW4gcmVmZXJlbmNlZCBieSBhIGxhYmVsLlxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwgY29udHJvbHNcblx0ICovXG5cdF9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMoKTogTGFiZWxbXSB7XG5cdFx0Y29uc3QgbGFiZWxJZHMgPSBMYWJlbEVuYWJsZW1lbnQuZ2V0UmVmZXJlbmNpbmdMYWJlbHModGhpcyk7XG5cdFx0Y29uc3QgbGFiZWxDb250cm9sczogTGFiZWxbXSA9IFtdO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdGxhYmVsSWRzLmZvckVhY2goKGxhYmVsSWQpID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsQ29udHJvbCA9IHZpZXcuYnlJZChsYWJlbElkKTtcblx0XHRcdGlmIChsYWJlbENvbnRyb2wpIHtcblx0XHRcdFx0bGFiZWxDb250cm9scy5wdXNoKGxhYmVsQ29udHJvbCBhcyBMYWJlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxhYmVsQ29udHJvbHM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIG9yIGNvbm5lY3RlZCBmaWVsZCB3aGVuIGluIGEgZm9ybS5cblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGNvbnRyb2xzXG5cdCAqL1xuXHRfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcygpOiBMYWJlbFtdIHtcblx0XHQvLyBpZiB0aGUgZmllbGQgaXMgbm90IGluIGEgZm9ybSwgd2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICghdGhpcy5nZXRJZCgpLmluY2x1ZGVzKFwiRm9ybUVsZW1lbnRcIikpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdC8vIHNlYXJjaCB0aGUgcGFyZW50cyBvZiB0aGUgY29udHJvbCB1bnRpbCB3ZSBmaW5kIGEgc2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XG5cdFx0Ly8gb3Igd2UgcmVhY2ggdGhlIHJvb3QgY29udHJvbFxuXHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IChjb250cm9sIGFzIE1hbmFnZWRPYmplY3QpPy5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2wgPyBbKGNvbnRyb2wgYXMgRm9ybUVsZW1lbnQpLmdldExhYmVsQ29udHJvbCgpIGFzIExhYmVsXSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgZmxvYXQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQ29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICghb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIG9Db250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRvQ29udHJvbCA9IChvQ29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRTZWxlY3RlZCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBSYXRpbmdJbmRpY2F0b3IpLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIExpbmspLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MYWJlbFwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgVGV4dCkuZ2V0VGV4dChmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEVuaGFuY2VXaXRoVUk1PFRleHRMaW5rPj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBPYmplY3RTdGF0dXMpLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIE9iamVjdElkZW50aWZpZXIpLmdldFRpdGxlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbC5nZXRWYWx1ZSgpOyAvLyBGaWVsZFdyYXBwZXJcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRyb2w/LmlzQTxEYXRhUG9pbnQ+KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIikgfHxcblx0XHRcdG9Db250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpIHx8XG5cdFx0XHRvQ29udHJvbD8uaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIilcblx0XHQpIHtcblx0XHRcdC8vIHRoaXMgaXMgYSBCQnY0IHVuZGVybmVhdGgsIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgQkJWNFxuXHRcdFx0cmV0dXJuIG9Db250cm9sLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImdldHRpbmcgdmFsdWUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRWYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IENvbnRyb2wge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gKGNvbnRyb2wgYXMgSEJveCkuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRTZWxlY3RlZCh2YWx1ZSBhcyBib29sZWFuKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8VGV4dD4oXCJzYXAubS5UZXh0XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFRleHQodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgXCJzZXR0aW5nIHZhbHVlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmIChjb250cm9sICE9PSBudWxsICYmIGNvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiAhY29udHJvbD8uaXNBKFwic2FwLm0uVGV4dFwiKSkge1xuXHRcdFx0Ly9jaGVjayBuZWVkZWQgZm9yIGZpbGUgd3JhcHBlciB3aGljaCBkb2VzIG5vdCBoYXZlIGEgY29udGVudFxuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgY29udHJvbC5pc0E8SEJveD4oXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHRcdH1cblx0XHRcdGlmIChjb250cm9sLmlzQTxWQm94PihcInNhcC5tLlZCb3hcIikpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYWluaW5nIHJlYXNvbnMsIGxldMK0cyBrZWVwIGl0IGxpa2UgdGhhdFxuXHRcdFx0XHRjb250cm9sID0gY29udHJvbC5nZXRJdGVtcygpWzBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNhbGwgdGhlIGdldFByb3BlcnR5IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXNcblx0XHRcdC8vIG90aGVyd2lzZSB3ZSBlbmQgdXAgaW4gYSBtYXggY2FsbCBzdGFjayBzaXplXG5cdFx0XHRpZiAoY29udHJvbC5pc0E8Q2hlY2tCb3g+KFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZ2V0UHJvcGVydHkoXCJlbmFibGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8QnV0dG9uPihcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPE9iamVjdFN0YXR1cz4oXCJzYXAubS5PYmplY3RTdGF0dXNcIikpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPE9iamVjdElkZW50aWZpZXI+KFwic2FwLm0uT2JqZWN0SWRlbnRpZmllclwiKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8Rm9ybUVsZW1lbnRXcmFwcGVyPihcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZvcm1FbGVtZW50V3JhcHBlclwiKSkge1xuXHRcdFx0XHQvLyBJdCBpcyBmb3IgYSBEcmFmdCBJbmRpY2F0b3Jcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPERhdGFQb2ludD4oXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludFwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRFbmFibGVkKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPEVtYWlsPihcInNhcC5mZS5tYWNyb3MuY29udGFjdC5FbWFpbFwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImxpbmtFbmFibGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxDb250YWN0PihcInNhcC5mZS5tYWNyb3MuY29udGFjdC5Db250YWN0XCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldEVuYWJsZWQoKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8RXhwYW5kYWJsZVRleHQ+KFwic2FwLm0uRXhwYW5kYWJsZVRleHRcIikpIHtcblx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHNob3cgbW9yZSB3b3VsZCBiZSBpbmFjdGl2ZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBlZGl0TW9kZSA9IGNvbnRyb2wuZ2V0RWRpdE1vZGUoKTtcblx0XHRcdFx0Ly8gVGhlIG1kYyBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IFwiZW5hYmxlZFwiLCB0aGVyZWZvcmUgd2UgbWFwXG5cdFx0XHRcdC8vIHRoZSBpbnRlcm5hbCBkaXNhYmxlZCBzZXR0aW5nIG9mIHRoZSBlZGl0IG1vZGUgaW4gdGhpcyBncmFjZWZ1bCBwYXR0ZXJuXG5cdFx0XHRcdHJldHVybiBlZGl0TW9kZSAhPT0gRmllbGRFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8RmlsZVdyYXBwZXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0XHQvLyBUaGUgZmlsZSB3cmFwcGVyIGNvdWxkIGNvbnRhaW4gYSBsaW5rIG9yIGFuIGF2YXRhciB3aXRoIGEgZGVsZXRlIGJ1dHRvbixcblx0XHRcdFx0Ly8gd2UgbXVzdCBlbnN1cmUgdGhlIGVuYWJsZW1lbnQgaW4gYm90aCBjYXNlc1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5saW5rID8gY29udHJvbC5saW5rLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKSA6IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuQ29uZGl0aW9uYWxXcmFwcGVyXCIpIHx8XG5cdFx0XHRcdChjb250cm9sIGFzIENvbnRyb2wpLmlzQTxUZXh0TGluaz4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZpZWxkIHJlZmVyZW5jZVxuXHQgKi9cblx0c2V0RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogQ29udHJvbCB7XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0E8SEJveD4oXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gY29udHJvbC5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblxuXHRcdC8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgc2V0UHJvcGVydHkgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlc1xuXHRcdC8vIG90aGVyd2lzZSB3ZSBlbmQgdXAgaW4gYSBtYXggY2FsbCBzdGFjayBzaXplXG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPElucHV0QmFzZT4oXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxMaW5rPihcInNhcC5tLkxpbmtcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImVuYWJsZWRcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJhY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcInRpdGxlQWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdC8vIFRoZSBtZGMgZmllbGQgZG9lcyBub3QgaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBcImVuYWJsZWRcIiwgdGhlcmVmb3JlIHdlIG1hcFxuXHRcdFx0Ly8gdGhlIGVuYWJsZWQgcHJvcGVydHkgdG8gdGhlIHJlc3BlY3RpdmUgZGlzYWJsZWQgc2V0dGluZyBvZiB0aGUgZWRpdCBtb2RlXG5cdFx0XHQvLyB3aXRoIHRoaXMgZ3JhY2VmdWwgcGF0dGVyblxuXHRcdFx0bGV0IGVkaXRNb2RlVHlwZTtcblx0XHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRcdGVkaXRNb2RlVHlwZSA9IEZpZWxkRWRpdE1vZGUuRWRpdGFibGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0TW9kZVR5cGUgPSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRFZGl0TW9kZShlZGl0TW9kZVR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPEVtYWlsPihcInNhcC5mZS5tYWNyb3MuY29udGFjdC5FbWFpbFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRMaW5rRW5hYmxlZChlbmFibGVkKTtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPERhdGFQb2ludD4oXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRFbmFibGVkKGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbWVzc2FnZSB0byB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gVGhlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMudHlwZSBUeXBlIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm1lc3NhZ2UgTWVzc2FnZSB0ZXh0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uIE1lc3NhZ2UgZGVzY3JpcHRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGVyc2lzdGVudCBUcnVlIGlmIHRoZSBtZXNzYWdlIGlzIHBlcnNpc3RlbnRcblx0ICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZE1lc3NhZ2UocGFyYW1ldGVyczogeyB0eXBlPzogTWVzc2FnZVR5cGU7IG1lc3NhZ2U/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyBwZXJzaXN0ZW50PzogYm9vbGVhbiB9KTogc3RyaW5nIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IG9Db250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuY29udGVudCk7XG5cblx0XHRsZXQgcGF0aDsgLy90YXJnZXQgZm9yIG9NZXNzYWdlXG5cdFx0aWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0cGF0aCA9IChvQ29udHJvbCBhcyBDaGVja0JveCkuZ2V0QmluZGluZyhcInNlbGVjdGVkXCIpPy5nZXRSZXNvbHZlZFBhdGgoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdHBhdGggPSAob0NvbnRyb2wgYXMgSW5wdXRCYXNlKS5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQTxGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRwYXRoID0gb0NvbnRyb2wuZ2V0QmluZGluZyhcInZhbHVlXCIpIS5nZXRSZXNvbHZlZFBhdGgoKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdHRhcmdldDogcGF0aCxcblx0XHRcdHR5cGU6IHBhcmFtZXRlcnMudHlwZSxcblx0XHRcdG1lc3NhZ2U6IHBhcmFtZXRlcnMubWVzc2FnZSxcblx0XHRcdHByb2Nlc3Nvcjogb0NvbnRyb2w/LmdldE1vZGVsKCksXG5cdFx0XHRkZXNjcmlwdGlvbjogcGFyYW1ldGVycy5kZXNjcmlwdGlvbixcblx0XHRcdHBlcnNpc3RlbnQ6IHBhcmFtZXRlcnMucGVyc2lzdGVudFxuXHRcdH0pO1xuXG5cdFx0bXNnTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0cmV0dXJuIG9NZXNzYWdlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlTWVzc2FnZShpZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgbXNnTWFuYWdlciA9IHRoaXMuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHRjb25zdCBhcnIgPSBtc2dNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCByZXN1bHQgPSBhcnIuZmluZCgoZTogTWVzc2FnZSkgPT4gZT8uZ2V0SWQ/LigpID09PSBpZCk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0bXNnTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZXN1bHQpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1lc3NhZ2VNYW5hZ2VyKCk6IE1lc3NhZ2luZyB7XG5cdFx0cmV0dXJuIE1lc3NhZ2luZztcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHByZXBhcmVkUHJvcGVydGllcyA9IHRoaXMucHJlcGFyZVByb3BlcnRpZXMoKTtcblx0XHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcykge1xuXHRcdFx0XHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29udGVudChwcmVwYXJlZFByb3BlcnRpZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHByZXBhcmluZyBwcm9wZXJ0aWVzIGZvciBGaWVsZCBibG9ja1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcmVwYXJlcyB0aGUgcHJvcGVydGllcyByZXF1aXJlZCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBtZXRhIHBhdGggYW5kIGNvbnRleHQgcGF0aCwgc2V0cyB1cCB0aGUgaW5wdXQgZmllbGQgcHJvcGVydGllcyxcblx0ICogYW5kIGNhbGxzIHRoZSBzZXRVcEZpZWxkIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIHByb3BlcnRpZXMgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICogQWRkaXRpb25hbGx5LCBpdCBzZXRzIHRoZSBtYWluUHJvcGVydHlSZWxhdGl2ZVBhdGggYW5kIGNvbGxhYm9yYXRpb25FbmFibGVkIHByb3BlcnRpZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBwcmVwYXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2ssIG9yIHVuZGVmaW5lZCBpZiB0aGUgcHJlcHJvY2Vzc29yIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZS5cblx0ICovXG5cdHByZXBhcmVQcm9wZXJ0aWVzKCk6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtZXRhQ29udGV4dFBhdGggPSB0aGlzLmdldE1ldGFQYXRoT2JqZWN0KHRoaXMubWV0YVBhdGgsIHRoaXMuY29udGV4dFBhdGgpO1xuXG5cdFx0aWYgKCFtZXRhQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHRjb25zdCBpbnB1dEZpZWxkUHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydHlCYWcoKSBhcyBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEZpZWxkUHJvcGVydGllcywgXCJ2YWx1ZVwiLCB7XG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RmllbGRQcm9wZXJ0aWVzLCBcImRlc2NyaXB0aW9uXCIsIHtcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZXNjcmlwdGlvbjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnJlYWRPbmx5ID0gdGhpcy5iaW5kU3RhdGUoXCJyZWFkT25seVwiKTtcblx0XHQvLyBpZiB0aGVyZSBpcyBhIGJpbmRpbmcgZm9yIHRoZSBwcm9wZXJ0eSBzZW1hbnRpY09iamVjdCB3ZSB3aWxsIHJlbHkgb24gdGhlIGJpbmRpbmcgdG8gdGhlIHN0YXRlIHRvIGVuc3VyZVxuXHRcdC8vIGJpbmRpbmcgbWFuaXB1bGF0aW9uIGlzIHBvc3NpYmxlXG5cdFx0aWYgKHRoaXMuZ2V0QmluZGluZ0luZm8oXCJzZW1hbnRpY09iamVjdFwiKSkge1xuXHRcdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuc2VtYW50aWNPYmplY3QgPSBjb21waWxlRXhwcmVzc2lvbih0aGlzLmJpbmRTdGF0ZShcInNlbWFudGljT2JqZWN0XCIpKTtcblx0XHR9XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMudmhJZFByZWZpeCA9IHRoaXMudmhJZFByZWZpeDtcblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5pZFByZWZpeCA9IHRoaXMuaWRQcmVmaXg7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuX2ZsZXhJZCA9IHRoaXMuX2ZsZXhJZDtcblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5vbkxpdmVDaGFuZ2UgPSB0aGlzLmhhc0xpc3RlbmVycyhcImxpdmVDaGFuZ2VcIikgPyBcIlNvbWV0aGluZ1wiIDogdW5kZWZpbmVkO1xuXG5cdFx0dGhpcy5wcmVwcm9jZXNzb3JDb250ZXh0ID0gb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ7XG5cdFx0dGhpcy5vZGF0YU1ldGFNb2RlbCA9IHRoaXMuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0dGhpcy5jb21wdXRlZENvbnRleHRQYXRoID0gdGhpcy5vZGF0YU1ldGFNb2RlbD8uZ2V0TWV0YUNvbnRleHQodGhpcy5nZXRDb21wdXRlZENvbnRleHRQYXRoKHRoaXMuY29udGV4dFBhdGgpKTtcblxuXHRcdHRoaXMuY29tcHV0ZWRNZXRhUGF0aCA9IHRoaXMub2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aC5nZXRQYXRoKCkpIGFzIENvbnRleHQ7XG5cblx0XHQvLyBTb21lIGNvZGUgcmVseSBvbiB1cyBjaGVja2luZyBpZiB2aXNpYmxlIGlzIGRlZmluZWQgb3Igbm90LCB0aGUgb25seSB3YXkgdG8gZG8gaXQgaXMgdGhyb3VnaCB0aGUgaXNQcm9wZXJ0eUluaXRpYWwgbWV0aG9kXG5cdFx0aWYgKHRoaXMuaXNQcm9wZXJ0eUluaXRpYWwoXCJ2aXNpYmxlXCIpKSB7XG5cdFx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy52aXNpYmxlID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vaWYgKHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dCkge1xuXHRcdC8vIElmIHRoZSBJRCBpcyBub3Qgc2V0IGJ5IHRoZSBjb25zdW1lciwgdXNlIHRoZSBJRCBwcm92aWRlZCBieSBVSTUuXG5cdFx0Ly8gKFRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aGUgdmFsdWUgaGVscCByZWxpZXMgb24gYWx3YXlzIGhhdmluZyBhbiBJRC4pXG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuaWQgPSBpbnB1dEZpZWxkUHJvcGVydGllcy5pZCA/PyB0aGlzLmdldElkKCk7XG5cblx0XHRjb25zdCBwcmVwYXJlZFByb3BlcnRpZXMgPSBzZXRVcEZpZWxkKFxuXHRcdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMsXG5cdFx0XHR7fSBhcyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHRcdFx0KHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLnZpZXdEYXRhIGFzIEpTT05Nb2RlbCkgPz8gbmV3IEpTT05Nb2RlbCh0aGlzLl9nZXRPd25lcigpPy5nZXRWaWV3RGF0YT8uKCkgPz8ge30pLFxuXHRcdFx0KHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLmludGVybmFsIGFzIEpTT05Nb2RlbCkgPz8gdGhpcy5fZ2V0T3duZXIoKSEuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dD8uYXBwQ29tcG9uZW50ID8/IHRoaXMuX2dldE93bmVyKCkhLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0dGhpcy5pc1Byb3BlcnR5SW5pdGlhbChcInJlYWRPbmx5XCIpLFxuXHRcdFx0dGhpcy5jb21wdXRlZE1ldGFQYXRoLFxuXHRcdFx0dGhpcy5jb21wdXRlZENvbnRleHRQYXRoXG5cdFx0KTtcblx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwiaW5saW5lRWRpdEVuYWJsZWRcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLmlubGluZUVkaXRFbmFibGVkKTtcblx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiLCBjb21waWxlRXhwcmVzc2lvbihwcmVwYXJlZFByb3BlcnRpZXMuaGFzSW5saW5lRWRpdCkpO1xuXG5cdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmlzRHluYW1pY0luc3RhbnRpYXRpb24gPSB0cnVlO1xuXHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoKSB0aGlzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCA9IHByZXBhcmVkUHJvcGVydGllcy5tYWluUHJvcGVydHlSZWxhdGl2ZVBhdGg7XG5cdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCkgdGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9IHByZXBhcmVkUHJvcGVydGllcy5jb2xsYWJvcmF0aW9uRW5hYmxlZDtcblx0XHRyZXR1cm4gcHJlcGFyZWRQcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBwcmVwYXJlZCBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhbmQgcmV0dXJuIHRoZSBjb250ZW50IGNvbnRyb2wgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICogQHBhcmFtIHByZXBhcmVkUHJvcGVydGllcyBUaGUgcHJlcGFyZWQgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRjcmVhdGVDb250ZW50KHByZXBhcmVkUHJvcGVydGllczogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb250cm9sIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRcdC8vIFdlIGhhdmUgdG8gc2V0IChvciBiaW5kKSBzb21lIHByb3BlcnRpZXMgdG8gdGhlIEZpZWxkIHNvIHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGJ5IGNvbnN1bWVycy9VSTVcblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwicmVxdWlyZWRcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwiZWRpdGFibGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLmVkaXRhYmxlRXhwcmVzc2lvbik7XG5cblx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHByZXBhcmVkUHJvcGVydGllcy52aXNpYmxlKTtcblx0XHRcdGlmICh0eXBlb2YgcHJlcGFyZWRQcm9wZXJ0aWVzLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuY3VzdG9tVmFsdWVCaW5kaW5nID0gcHJlcGFyZWRQcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbXB1dGVkRWRpdE1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwiZWRpdE1vZGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLmVkaXRNb2RlID8/IGNvbXBpbGVFeHByZXNzaW9uKHByZXBhcmVkUHJvcGVydGllcy5jb21wdXRlZEVkaXRNb2RlKSk7XG5cdFx0XHR9XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5jaGFuZ2UgPSAoRmllbGQgYXMgdW5rbm93biBhcyB7IGhhbmRsZUNoYW5nZTogRXZlbnRIYW5kbGVyIH0pLmhhbmRsZUNoYW5nZTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmxpdmVDaGFuZ2UgPSAoRmllbGQgYXMgdW5rbm93biBhcyB7IGhhbmRsZUxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlciB9KS5oYW5kbGVMaXZlQ2hhbmdlO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwID0gKFxuXHRcdFx0XHRGaWVsZCBhcyB1bmtub3duIGFzIHsgb25WYWxpZGF0ZUZpZWxkR3JvdXA6IEV2ZW50SGFuZGxlciB9XG5cdFx0XHQpLm9uVmFsaWRhdGVGaWVsZEdyb3VwO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlVHlwZU1pc3NtYXRjaCA9IHRoaXMub25IYW5kbGVUeXBlTWlzc21hdGNoLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVGaWxlU2l6ZUV4Y2VlZCA9IHRoaXMub25IYW5kbGVGaWxlU2l6ZUV4Y2VlZC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlVXBsb2FkQ29tcGxldGUgPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZVVwbG9hZENvbXBsZXRlKFxuXHRcdFx0XHRcdGV2LFxuXHRcdFx0XHRcdHsgcGF0aDogcHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gfSxcblx0XHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXJcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy51cGxvYWRTdHJlYW0gPSB0aGlzLm9uVXBsb2FkU3RyZWFtLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5yZW1vdmVTdHJlYW0gPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLnJlbW92ZVN0cmVhbShcblx0XHRcdFx0XHRldiBhcyBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pixcblx0XHRcdFx0XHR7IHBhdGg6IHByZXBhcmVkUHJvcGVydGllcy5maWxlRmlsZW5hbWVFeHByZXNzaW9uIH0sXG5cdFx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlT3BlblVwbG9hZGVyID0gdGhpcy5vbkhhbmRsZU9wZW5VcGxvYWRlci5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlQ2xvc2VVcGxvYWRlciA9IHRoaXMub25IYW5kbGVDbG9zZVVwbG9hZGVyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vcGVuRXh0ZXJuYWxMaW5rID0gdGhpcy5vbk9wZW5FeHRlcm5hbExpbmsuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRm9jdXNPdXQgPSB0aGlzLm9uRm9jdXNPdXQuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkID0gdGhpcy5vbkxpbmtQcmVzc2VkLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhJQk4gPSAoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBwcmVwYXJlZFByb3BlcnRpZXMubWV0YVBhdGguZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IHN0cmluZztcblx0XHRcdFx0fSA9IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGV2LmdldFNvdXJjZSgpPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFGaWVsZC5NYXBwaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHRvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRldi5nZXRTb3VyY2UoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uID0gKGV2OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBvVGhpczogRmllbGRCbG9ja1Byb3BlcnRpZXMgPSBwcmVwYXJlZFByb3BlcnRpZXM7XG5cdFx0XHRcdGNvbnN0IG9EYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uPiA9IHByZXBhcmVkUHJvcGVydGllcy5tZXRhUGF0aC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIklzb2xhdGVkXCI7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0XHRcdChvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08T3BlcmF0aW9uR3JvdXBpbmdUeXBlPikuJEVudW1NZW1iZXIgPT09XG5cdFx0XHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJDaGFuZ2VTZXRcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgYklzTmF2aWdhYmxlID0gb1RoaXMubmF2aWdhdGVBZnRlckFjdGlvbiBhcyBib29sZWFuIHwgc3RyaW5nO1xuXHRcdFx0XHRiSXNOYXZpZ2FibGUgPSBiSXNOYXZpZ2FibGUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBlbnRpdGllczogQXJyYXk8c3RyaW5nPiA9IG9UaGlzPy5jb250ZXh0UGF0aD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZTogc3RyaW5nID0gZW50aXRpZXNbZW50aXRpZXMubGVuZ3RoIC0gMV07XG5cblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogZXYuZ2V0U291cmNlKCkuZ2V0QmluZGluZ0NvbnRleHQoKSEgYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBzSW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRcdG1vZGVsOiBldi5nZXRTb3VyY2UoKS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwsXG5cdFx0XHRcdFx0bGFiZWw6IG9EYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGJJc05hdmlnYWJsZSxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiBlbnRpdHlTZXROYW1lXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5pbnZva2VBY3Rpb24ob0RhdGFGaWVsZC5BY3Rpb24hLCBvUGFyYW1zKTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5kaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzID0gKGV2KTogdm9pZCA9PiB7XG5cdFx0XHRcdEZpZWxkUnVudGltZS5kaXNwbGF5QWdncmVnYXRlRGV0YWlscyhldiwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcmVwYXJlZFByb3BlcnRpZXMuZGF0YU1vZGVsUGF0aCkpO1xuXHRcdFx0fTtcblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29udmVydGVkTWV0YVBhdGguJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCIpIHtcblx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIub25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRldi5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHQocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkuVGFyZ2V0LnZhbHVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIgPSB0aGlzLm9uU2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlci5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLnZhbHVlSGVscElkID0gRmllbGRTdHJ1Y3R1cmUuZ2V0UG9zc2libGVWYWx1ZUhlbHBUZW1wbGF0ZUlkKFxuXHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMsXG5cdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSxcblx0XHRcdFx0dGhpcy5nZXRNZXRhTW9kZWwoKSFcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSBGaWVsZFN0cnVjdHVyZS5nZXRGaWVsZFN0cnVjdHVyZVRlbXBsYXRlKHByZXBhcmVkUHJvcGVydGllcykgYXMgdW5rbm93biBhcyBDb250cm9sO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coZS5tZXNzYWdlICsgXCIgaW4gY3JlYXRlQ29udGVudCBvZiBGaWVsZFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KFwiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudDtcblx0fVxuXG5cdG9uSGFuZGxlVHlwZU1pc3NtYXRjaChldjogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVUeXBlTWlzc21hdGNoKGV2KTtcblx0fVxuXG5cdG9uSGFuZGxlRmlsZVNpemVFeGNlZWQoZXY6IEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZUZpbGVTaXplRXhjZWVkKGV2KTtcblx0fVxuXG5cdG9uSGFuZGxlT3BlblVwbG9hZGVyKGV2OiBVSTVFdmVudDx7fSwgRmlsZVVwbG9hZGVyPik6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVPcGVuVXBsb2FkZXIoZXYpO1xuXHR9XG5cblx0b25VcGxvYWRTdHJlYW0oZXY6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci51cGxvYWRTdHJlYW0odGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLCBldik7XG5cdH1cblxuXHRvbkhhbmRsZUNsb3NlVXBsb2FkZXIoZXY6IFVJNUV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZUNsb3NlVXBsb2FkZXIoZXYpO1xuXHR9XG5cblx0b25PcGVuRXh0ZXJuYWxMaW5rKGV2OiBVSTVFdmVudDx7fSwgTGluaz4pOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIub3BlbkV4dGVybmFsTGluayhldik7XG5cdH1cblxuXHRvbkxpbmtQcmVzc2VkKGV2OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5wcmVzc0xpbmsoZXYpO1xuXHR9XG5cblx0b25Gb2N1c091dChldjogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuaGFuZGxlQ29udGVudEZvY3VzT3V0KGV2KTtcblx0fVxuXG5cdG9uU2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcihldjogVUk1RXZlbnQ8e30sIEF2YXRhcj4pOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldi5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKTtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuc2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcihzb3VyY2UsIHZpZXcpO1xuXHR9XG5cblx0Z2V0UHJvcGVydHlCYWcoKTogUHJvcGVydGllc09mPHRoaXM+IHtcblx0XHRjb25zdCBzZXR0aW5nczogUHJvcGVydGllc09mPHRoaXM+ID0ge30gYXMgUHJvcGVydGllc09mPHRoaXM+O1xuXHRcdGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWxsUHJvcGVydGllcygpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50UHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTtcblx0XHRcdHNldHRpbmdzW3Byb3BlcnR5TmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gY3VycmVudFByb3BlcnR5VmFsdWU7XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgYWdncmVnYXRpb25OYW1lIGluIGFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWdncmVnYXRpb25Db250ZW50KSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZHJlbkFycmF5ID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgbWFuYWdlZE9iamVjdCBvZiBhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAobWFuYWdlZE9iamVjdC5pc0E8QnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5XCIpKSB7XG5cdFx0XHRcdFx0XHRjaGlsZHJlbkFycmF5LnB1c2gobWFuYWdlZE9iamVjdC5nZXRQcm9wZXJ0eUJhZygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBjaGlsZHJlbkFycmF5O1xuXHRcdFx0fSBlbHNlIGlmIChhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0aW9uQ29udGVudC5pc0E8QnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5XCIpKSB7XG5cdFx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZ2V0UHJvcGVydHlCYWcoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5nZXRJZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSB0YXJnZXQgcHJvcGVydHkgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgdGFyZ2V0UHJvcGVydHkgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0SW5saW5lRWRpdFByb3BlcnR5KCk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRhTW9kZWxQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPihcblx0XHRcdHRoaXMubWV0YVBhdGgsXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0KTtcblx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eSA9IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZShcblx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPlxuXHRcdCk/LnRhcmdldE9iamVjdDtcblx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZnVsbHlRdWFsaWZpZWROYW1lIG9mIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICogQHJldHVybnMgVGhlIGZ1bGx5UXVhbGlmaWVkTmFtZSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqL1xuXHRnZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SW5saW5lRWRpdFByb3BlcnR5KCk/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBZEEsSUFxQk1BLEtBQUssSUFBQUMsSUFBQSxHQU5WQyxjQUFjLENBQUMscUJBQXFCLEVBQUU7SUFDdENDLFdBQVcsRUFBRSxDQUNaLHlDQUF5QyxDQUFDO0VBRTVDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ0RDLEtBQUssQ0FBQ0MsVUFBVSxDQUFDLEVBQUFDLEtBQUEsR0FVaEJDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVM3QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVFLFdBQVcsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTWhESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FPNUJMLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkSyxtQkFBbUIsRUFBRSxFQUFFO0lBQ3ZCQyxhQUFhLEVBQUUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxVQUFVO0VBQ3pGLENBQUMsQ0FB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RUFBQSxJQUFBdlUsYUFBQSxHQUFBbVUseUJBQUEsQ0FBQXpXLE9BQUEsQ0FBQThDLFNBQUEsd0JBQUF4RCxNQUFBO0lBQUFvWCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQWdGOUIsS0FBSztJQUFBO0VBQUEsSUFBQXRVLGFBQUEsR0FBQWtVLHlCQUFBLENBQUF6VyxPQUFBLENBQUE4QyxTQUFBLG9CQUFBdkQsTUFBQTtJQUFBbVgsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFwVSxhQUFBLEdBQUFnVSx5QkFBQSxDQUFBelcsT0FBQSxDQUFBOEMsU0FBQSxhQUFBdEQsTUFBQTtJQUFBa1gsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFuVSxhQUFBLEdBQUErVCx5QkFBQSxDQUFBelcsT0FBQSxDQUFBOEMsU0FBQSxlQUFBckQsTUFBQTtJQUFBaVgsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFsVSxhQUFBLEdBQUE4VCx5QkFBQSxDQUFBelcsT0FBQSxDQUFBOEMsU0FBQSwwQkFBQXBELE1BQUE7SUFBQWdYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BdUJNLEtBQUs7SUFBQTtFQUFBLElBQUFKLHlCQUFBLENBQUF6VyxPQUFBLENBQUE4QyxTQUFBLG1CQUFBbkQsTUFBQSxHQUFBNk8sTUFBQSxDQUFBc0ksd0JBQUEsQ0FBQTlXLE9BQUEsQ0FBQThDLFNBQUEsbUJBQUE5QyxPQUFBLENBQUE4QyxTQUFBLEdBQUEyVCx5QkFBQSxDQUFBelcsT0FBQSxDQUFBOEMsU0FBQSx1QkFBQWpELE1BQUEsR0FBQTJPLE1BQUEsQ0FBQXNJLHdCQUFBLENBQUE5VyxPQUFBLENBQUE4QyxTQUFBLHVCQUFBOUMsT0FBQSxDQUFBOEMsU0FBQSxHQUFBMlQseUJBQUEsQ0FBQXpXLE9BQUEsQ0FBQThDLFNBQUEsMkJBQUFoRCxNQUFBLEdBQUEwTyxNQUFBLENBQUFzSSx3QkFBQSxDQUFBOVcsT0FBQSxDQUFBOEMsU0FBQSwyQkFBQTlDLE9BQUEsQ0FBQThDLFNBQUEsR0FBQTlDLE9BQUEsTUFBQUQsTUFBQSxLQUFBQSxNQUFBO0VBQUEsT0F3M0J2QmxELEtBQUs7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|