@sapui5/sap.fe.macros 1.120.13 → 1.120.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -25,7 +25,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/macros/filter/type/MultiValue", "s
|
|
|
25
25
|
controls: [],
|
|
26
26
|
elements: [],
|
|
27
27
|
// eslint-disable-next-line no-template-curly-in-string
|
|
28
|
-
version: "1.120.
|
|
28
|
+
version: "1.120.14",
|
|
29
29
|
noLibraryCSS: true
|
|
30
30
|
});
|
|
31
31
|
thisLib.NavigationType = {
|
|
@@ -1017,7 +1017,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
1017
1017
|
technicalKeys: technicalKeys
|
|
1018
1018
|
};
|
|
1019
1019
|
}
|
|
1020
|
-
return {
|
|
1020
|
+
return {
|
|
1021
|
+
technicalKeys: [],
|
|
1022
|
+
semanticKeys: []
|
|
1023
|
+
};
|
|
1021
1024
|
};
|
|
1022
1025
|
_proto.getIdentifierColumn = function getIdentifierColumn(isRecommendationRelevant) {
|
|
1023
1026
|
const oTable = this.getContent();
|
|
@@ -1025,11 +1028,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
1025
1028
|
const oMetaModel = oTable && oTable.getModel().getMetaModel(),
|
|
1026
1029
|
sCurrentEntitySetName = oTable.data("metaPath");
|
|
1027
1030
|
const aTechnicalKeys = oMetaModel.getObject(`${sCurrentEntitySetName}/$Type/$Key`);
|
|
1028
|
-
const
|
|
1031
|
+
const filteredTechnicalKeys = [];
|
|
1029
1032
|
if (aTechnicalKeys && aTechnicalKeys.length > 0) {
|
|
1030
1033
|
aTechnicalKeys.forEach(function (technicalKey) {
|
|
1031
1034
|
if (technicalKey !== "IsActiveEntity") {
|
|
1032
|
-
|
|
1035
|
+
filteredTechnicalKeys.push(technicalKey);
|
|
1033
1036
|
}
|
|
1034
1037
|
});
|
|
1035
1038
|
}
|
|
@@ -1055,10 +1058,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
1055
1058
|
let column;
|
|
1056
1059
|
if (isRecommendationRelevant) {
|
|
1057
1060
|
const rootKeys = this.getRootKeys();
|
|
1058
|
-
if (semanticKeyColumns
|
|
1061
|
+
if ((semanticKeyColumns === null || semanticKeyColumns === void 0 ? void 0 : semanticKeyColumns.length) > 0) {
|
|
1059
1062
|
column = semanticKeyColumns.filter(key => !rootKeys.semanticKeys.includes(key));
|
|
1060
|
-
} else if (
|
|
1061
|
-
column =
|
|
1063
|
+
} else if ((filteredTechnicalKeys === null || filteredTechnicalKeys === void 0 ? void 0 : filteredTechnicalKeys.length) > 0) {
|
|
1064
|
+
column = filteredTechnicalKeys.filter(key => !rootKeys.technicalKeys.includes(key));
|
|
1062
1065
|
}
|
|
1063
1066
|
return column;
|
|
1064
1067
|
}
|
|
@@ -1066,8 +1069,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
1066
1069
|
column = headerInfoTitlePath;
|
|
1067
1070
|
} else if (semanticKeyColumns !== undefined && semanticKeyColumns.length === 1 && this.checkIfColumnExists(aFilteredColummns, semanticKeyColumns[0])) {
|
|
1068
1071
|
column = semanticKeyColumns[0];
|
|
1069
|
-
} else if (
|
|
1070
|
-
column =
|
|
1072
|
+
} else if ((filteredTechnicalKeys === null || filteredTechnicalKeys === void 0 ? void 0 : filteredTechnicalKeys.length) === 1 && this.checkIfColumnExists(aFilteredColummns, filteredTechnicalKeys[0])) {
|
|
1073
|
+
column = filteredTechnicalKeys[0];
|
|
1071
1074
|
}
|
|
1072
1075
|
return column;
|
|
1073
1076
|
}
|
|
@@ -1633,4 +1636,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
1633
1636
|
}), _applyDecoratedDescriptor(_class2.prototype, "onContextChange", [_dec39], Object.getOwnPropertyDescriptor(_class2.prototype, "onContextChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onFieldLiveChange", [_dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onFieldLiveChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onQuickFilterSelectionChange", [_dec41], Object.getOwnPropertyDescriptor(_class2.prototype, "onQuickFilterSelectionChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onTableRowPress", [_dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "onTableRowPress"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalPatchCompleted", [_dec43], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalPatchCompleted"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataReceived", [_dec44], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataReceived"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectAvailableCards", [_dec45], Object.getOwnPropertyDescriptor(_class2.prototype, "collectAvailableCards"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataRequested", [_dec46], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataRequested"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPaste", [_dec47], Object.getOwnPropertyDescriptor(_class2.prototype, "onPaste"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onCut", [_dec48], Object.getOwnPropertyDescriptor(_class2.prototype, "onCut"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeExport", [_dec49], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeExport"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDataStateChange", [_dec50], Object.getOwnPropertyDescriptor(_class2.prototype, "onDataStateChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAddCardToInsightsPressed", [_dec51], Object.getOwnPropertyDescriptor(_class2.prototype, "onAddCardToInsightsPressed"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onMassEditButtonPressed", [_dec52], Object.getOwnPropertyDescriptor(_class2.prototype, "onMassEditButtonPressed"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onTableSelectionChange", [_dec53], Object.getOwnPropertyDescriptor(_class2.prototype, "onTableSelectionChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onActionPress", [_dec54], Object.getOwnPropertyDescriptor(_class2.prototype, "onActionPress"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleCreateActivate", [_dec55], Object.getOwnPropertyDescriptor(_class2.prototype, "handleCreateActivate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDragEnterDocument", [_dec56], Object.getOwnPropertyDescriptor(_class2.prototype, "onDragEnterDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDragStartDocument", [_dec57], Object.getOwnPropertyDescriptor(_class2.prototype, "onDragStartDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDropDocument", [_dec58], Object.getOwnPropertyDescriptor(_class2.prototype, "onDropDocument"), _class2.prototype)), _class2)) || _class);
|
|
1634
1637
|
return TableAPI;
|
|
1635
1638
|
}, false);
|
|
1636
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSSIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJwcm9wZXJ0eSIsInR5cGUiLCJleHBlY3RlZFR5cGVzIiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImRlZmF1bHRWYWx1ZSIsImFsbG93ZWRWYWx1ZXMiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZXZlbnQiLCJuYW1lIiwiY3JlYXRlQXRFbmQiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwieG1sRXZlbnRIYW5kbGVyIiwiY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIiLCJtU2V0dGluZ3MiLCJvdGhlcnMiLCJ1cGRhdGVGaWx0ZXJCYXIiLCJjb250ZW50IiwiYXR0YWNoRXZlbnQiLCJvblRhYmxlU2VsZWN0aW9uQ2hhbmdlIiwiZ2V0QVBJIiwidWk1RXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJ0YWJsZUFQSSIsImlzQSIsImluc3RhbmNlTWFwIiwiZ2V0IiwiZmluZCIsImFwaSIsImdldFJvd0JpbmRpbmciLCJnZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5IiwidGFibGUiLCJzb3J0Q29uZGl0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwic29ydGVycyIsIm1hcCIsInNvcnRDb25kaXRpb24iLCJzb3J0Q29uZGl0aW9uc1BhdGgiLCJnZXRQcm9wZXJ0eUhlbHBlciIsImdldFByb3BlcnR5IiwicGF0aCIsImRlc2NlbmRpbmciLCJqb2luIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImFkZE1lc3NhZ2UiLCJwYXJhbWV0ZXJzIiwibXNnTWFuYWdlciIsIl9nZXRNZXNzYWdlTWFuYWdlciIsIm9UYWJsZSIsIm9NZXNzYWdlIiwiTWVzc2FnZSIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJnZXRNb2RlbCIsImRlc2NyaXB0aW9uIiwicGVyc2lzdGVudCIsImFkZE1lc3NhZ2VzIiwiZ2V0SWQiLCJjaGVja0lmUmVjb21tZW5kYXRpb25SZWxldmFudCIsIm9FdmVudCIsImlzVGFibGVSZWFkT25seSIsImlzRWRpdGFibGUiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJyZW1vdmVNZXNzYWdlIiwiaWQiLCJtZXNzYWdlcyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJyZXN1bHQiLCJlIiwicmVtb3ZlTWVzc2FnZXMiLCJyZWZyZXNoIiwic2V0UXVpY2tGaWx0ZXJDb3VudHNBc0xvYWRpbmciLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdG9yIiwiZ2V0UXVpY2tGaWx0ZXIiLCJxdWlja0ZpbHRlckNvdW50cyIsImsiLCJnZXRJdGVtcyIsInNldFByb3BlcnR5IiwiY291bnRzIiwicmVmcmVzaFNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudCIsImNvdW50IiwiZ2V0Q291bnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwiZmlsdGVycyIsInF1aWNrRmlsdGVycyIsInNob3dDb3VudHMiLCJ1bmRlZmluZWQiLCJpdGVtSW5kZXgiLCJmaW5kSW5kZXgiLCJzZWxlY3Rvckl0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIlRhYmxlVXRpbHMiLCJnZXRDb3VudEZvcm1hdHRlZCIsInJlZnJlc2hVblNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudHMiLCJpdGVtcyIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiY2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJjaGFydEFQSSIsImdldFBhcmVudCIsInNldEl0ZW1Db3VudHMiLCJpdGVtIiwiaXRlbUtleSIsIml0ZW1GaWx0ZXJzIiwiZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uIiwiZ2V0TGlzdEJpbmRpbmdGb3JDb3VudCIsImJhdGNoR3JvdXBJZCIsImFkZGl0aW9uYWxGaWx0ZXJzIiwiYmFzZVRhYmxlRmlsdGVycyIsImNoYXJ0RmlsdGVyIiwiaGFzU2VsZWN0aW9ucyIsImdldEZpbHRlciIsImdldEhpZGRlbkZpbHRlcnMiLCJwdXNoIiwiYmluZGluZ1Byb21pc2VzIiwiZmlsdGVyIiwiUHJvbWlzZSIsImFsbCIsImVycm9yIiwiTG9nIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJfZ2V0Um93QmluZGluZyIsImdldENvbnRlbnQiLCJnZXRDb3VudHMiLCJkYXRhIiwidGhlbiIsImlWYWx1ZSIsImNhdGNoIiwib25Db250ZXh0Q2hhbmdlIiwiZmlyZUV2ZW50IiwiZ2V0UGFyYW1ldGVycyIsInNldEZhc3RDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJvbkZpZWxkTGl2ZUNoYW5nZSIsImZpZWxkIiwiYmluZGluZ0NvbnRleHQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZyIsImlzSW5hY3RpdmUiLCJjcmVhdGVFbXB0eVJvd3MiLCJvblF1aWNrRmlsdGVyU2VsZWN0aW9uQ2hhbmdlIiwiZmlsdGVyQmFySUQiLCJmaWx0ZXJCYXIiLCJDb3JlIiwiYnlJZCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJyZWJpbmQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVGFibGVSb3dQcmVzcyIsIm9Db250cm9sbGVyIiwib0NvbnRleHQiLCJtUGFyYW1ldGVycyIsImlzVHJhbnNpZW50IiwiZW5hYmxlQW5hbHl0aWNzIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiUm93UHJlc3MiLCJfcm91dGluZyIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsIm9uSW50ZXJuYWxQYXRjaENvbXBsZXRlZCIsImludGVybmFsTW9kZWxDb250ZXh0Iiwic2VsZWN0ZWRDb250ZXh0cyIsIkRlbGV0ZUhlbHBlciIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwib25JbnRlcm5hbERhdGFSZWNlaXZlZCIsImlzUmVjb21tZW5kYXRpb25SZWxldmFudCIsImNvbnRleHRJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJlc3BvbnNlQ29udGV4dHNBcnJheSIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsIm5ld0NvbnRleHRzIiwiY29udGV4dCIsInJlY29tbWVuZGF0aW9ucyIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJnZXRQYXJhbWV0ZXIiLCJtZXNzYWdlSGFuZGxlciIsInNob3dNZXNzYWdlRGlhbG9nIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZHMiLCJhY3Rpb25Ub29sYmFySXRlbXMiLCJnZXRBY3Rpb25zIiwiaGFzSW5zaWdodEFjdGlvbkVuYWJsZWQiLCJUYWJsZUluc2lnaHRzSGVscGVyIiwiZ2V0SW5zaWdodHNSZWxldmFudENvbHVtbnMiLCJjYXJkIiwiZ2V0Q2FyZE1hbmlmZXN0VGFibGUiLCJ0aXRsZSIsImhlYWRlckluZm9UeXBlTmFtZSIsImNhbGxiYWNrIiwib25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrIiwiYmluZCIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwib25QYXN0ZSIsImV2dCIsInJhd1Bhc3RlZERhdGEiLCJ0YWJsZURlZmluaXRpb24iLCJlbmFibGVQYXN0ZSIsInRhcmdldENvbnRleHRQYXRoIiwibmV3UGFyZW50Q29udGV4dCIsInRhcmdldENvbnRleHQiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJnZXRQYXRoIiwibW92ZSIsInBhcmVudCIsImdldEVuYWJsZVBhc3RlIiwiUGFzdGVIZWxwZXIiLCJwYXN0ZURhdGEiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiTWVzc2FnZUJveCIsImdldFRleHQiLCJvbkN1dCIsImxlbmd0aCIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImNsZWFyU2VsZWN0aW9uIiwib25CZWZvcmVFeHBvcnQiLCJleHBvcnRFdmVudCIsImlzU3BsaXRNb2RlIiwic3BsaXRDZWxscyIsInRhYmxlQ29udHJvbGxlciIsImV4cG9ydFNldHRpbmdzIiwidXBkYXRlRXhwb3J0U2V0dGluZ3MiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJzVGFibGVDb250ZXh0QmluZGluZ1BhdGgiLCJzVGFibGVSb3dCaW5kaW5nIiwiZ2V0VGFyZ2V0cyIsIm9uRGF0YVN0YXRlQ2hhbmdlIiwiZGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyZWRNZXNzYWdlcyIsImhpZGRlbk1hbmRhdG9yeVByb3BlcnRpZXMiLCJtc2ciLCJ0ZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImVtcHR5Um93TWVzc2FnZSIsIm1pc3NpbmdDb2x1bW4iLCJoaWRkZW5Qcm9wZXJ0eSIsIm1lc3NhZ2VTdHJpcEVycm9yIiwic2hvd01lc3NhZ2UiLCJwcmV2ZW50RGVmYXVsdCIsImludGVybmFsTW9kZWwiLCJjb2x1bW5zIiwic2V0U3RhdGljU2l6ZUxpbWl0IiwiZmlsZVR5cGUiLCJ3b3JrYm9vayIsInJlbW92ZU11bHRpVmFsdWVGaWVsZHNGcm9tQ29sdW1uc1RvQmVFeHBvcnRlZCIsImV4cG9ydENvbHVtbnMiLCJpbmRleCIsImV4cG9ydENvbHVtbiIsInJlc291cmNlQnVuZGxlIiwibGFiZWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0IiwiYWRkVGFyZ2V0VmFsdWVDb2x1bW4iLCJjb2x1bW4iLCJjb2x1bVByb3BlcnR5IiwiY29sdW1uSWQiLCJnZXRQcm9wZXJ0eUtleSIsImNvbHVtbkRlZmluaXRpb24iLCJpc011bHRpVmFsdWUiLCJkYXRhU291cmNlIiwic2l6ZUxpbWl0IiwiY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkIiwiY29sdW1uRXhwb3J0IiwiY29sdW1uTmVlZHNUb0JlQWRkZWQiLCJleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSIsInByb3BlcnR5SW5mb3MiLCJ0ZW1wbGF0ZSIsImlzUHJvcGVydHlGcm9tRXhwb3J0IiwicmVsYXRpdmVQYXRoIiwiaW5jbHVkZXMiLCJmYWxzZVZhbHVlIiwidHJ1ZVZhbHVlIiwidGFyZ2V0VmFsdWVDb2x1bW4iLCJjb2x1bW5Ub0JlQWRkZWQiLCJBcnJheSIsImlzQXJyYXkiLCJzcGxpY2UiLCJyZXN1bWVCaW5kaW5nIiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiZ2V0RGF0YUluaXRpYWxpemVkIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvRmlsdGVyQ29udHJvbCIsIkZpbHRlclV0aWxzIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJzdXNwZW5kQmluZGluZyIsImludmFsaWRhdGVDb250ZW50IiwiZmFzdENyZWF0aW9uUm93IiwiZ2V0Q3JlYXRpb25Sb3ciLCJ0YWJsZUJpbmRpbmciLCJnZXRDb250ZXh0IiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCIsImluc2lnaHRzUmVsZXZhbnRDb2x1bW5zIiwiaW5zaWdodHNQYXJhbXMiLCJjcmVhdGVUYWJsZUNhcmRQYXJhbXMiLCJpc05hdmlnYXRpb25FbmFibGVkIiwidGV4dCIsImNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UiLCJJbnNpZ2h0c1NlcnZpY2UiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlIiwiZ2V0Q2FyZE1hbmlmZXN0Iiwic2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXciLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsImdldFNlcnZpY2UiLCJzY29wZSIsIm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkIiwicGFnZUNvbnRyb2xsZXIiLCJtYXNzRWRpdCIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIndhcm5pbmciLCJvbkFjdGlvblByZXNzIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiZXhlY3V0ZUFjdGlvbiIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZUZ1bGx5UXVhbGlmaWVkTmFtZSIsIm15VW5hcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsIk5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nIiwiY29udGV4dHMiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJvcGVuIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJpbmZvIiwiZmlsdGVyQmFyUmVmSWQiLCJnZXRGaWx0ZXJCYXIiLCJfc2V0RmlsdGVyQmFyIiwidGFibGVBUElJZCIsInRhYmxlQVBJTG9jYWxJZCIsInBvdGVudGlhbGZpbHRlckJhcklkIiwicmVwbGFjZSIsIlJlZ0V4cCIsInNldEZpbHRlciIsImNoZWNrSWZDb2x1bW5FeGlzdHMiLCJhRmlsdGVyZWRDb2x1bW1ucyIsImNvbHVtbk5hbWUiLCJzb21lIiwib0NvbHVtbiIsInNDb2x1bW5OYW1lVmlzaWJsZSIsInNUZXh0QXJyYW5nZW1lbnQiLCJnZXRSb290S2V5cyIsInJvb3RDb250ZXh0Iiwic3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciIsImdldEN1cnJlbnRSb290Q29udGV4dCIsIm1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJkYXRhTW9kZWwiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRNZXRhQ29udGV4dCIsInJvb3RTZW1hbnRpY0tleXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNlbWFudGljS2V5cyIsImtleSIsInZhbHVlIiwicm9vdFRlY2huaWNhbEtleXMiLCJrZXlzIiwidGVjaG5pY2FsS2V5cyIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJoZWFkZXJJbmZvVGl0bGUiLCJvTWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJhRmlsdGVyZWRUZWNobmljYWxLZXlzIiwiZm9yRWFjaCIsInRlY2huaWNhbEtleSIsInNlbWFudGljS2V5Q29sdW1ucyIsImFWaXNpYmxlQ29sdW1ucyIsImFUYWJsZUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwiZ2V0RGF0YVByb3BlcnR5Iiwib1RleHRBcnJhbmdlbWVudCIsIiRQYXRoIiwic1RleHRQbGFjZW1lbnQiLCIkRW51bU1lbWJlciIsInJvb3RLZXlzIiwic2V0RW1wdHlSb3dzRW5hYmxlZCIsImVuYWJsZW1lbnQiLCJuYXZpZ2F0aW9uUGF0aCIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2siLCJ1cGRhdGVFbXB0eVJvd3MiLCJkZXJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2siLCJzZXRVcEVtcHR5Um93cyIsImhhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJ2YWxpZGF0ZUVtcHR5Um93IiwidHJhbnNpZW50UGF0aCIsImNyZWF0ZWQiLCJyZXNvbHZlIiwiQWN0aXZpdHlTeW5jIiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiQ3JlYXRlIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsImJpbmRpbmdIZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwiY29udGV4dFBhdGgiLCJfZGVsZXRlRW1wdHlSb3dzIiwiY3JlYXRlQnV0dG9uV2FzUHJlc3NlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJ3YXRjaEJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCJmbkhhbmRsZXIiLCJkZXRhY2hDaGFuZ2UiLCJkZXN0cm95IiwiYXR0YWNoQ2hhbmdlIiwiZW1wdHlSb3dzRW5hYmxlZCIsInJlbW92ZUVtcHR5Um93c01lc3NhZ2VzIiwiaW5hY3RpdmVDb250ZXh0Iiwic3RhcnRzV2l0aCIsImRlbGV0ZSIsImdldEluYWN0aXZlQ29udGV4dE51bWJlciIsInJlcXVpcmVkUHJvcGVydGllcyIsImFubm90YXRpb24iLCJtaXNzaW5nUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJkaXNwbGF5ZWRDb2x1bW4iLCJtaXNzaW5nUHJvcGVydHkiLCJlcnJvck1lc3NhZ2UiLCJ0YWJsZUNvbHVtbiIsIm1kY0NvbHVtbiIsImdldEhlYWRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJ0ZWNobmljYWwiLCJ0YWJsZUlkIiwibWVzc2FnZU1hbmFnZXIiLCJyZWNyZWF0ZU9uZVJvdyIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGluZ0VtcHR5Um93cyIsImZyb20iLCJhdEVuZCIsImluYWN0aXZlIiwiZGF0YUZvckNyZWF0ZSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwib25CZWZvcmVDcmVhdGUiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjYW5jZWxlZCIsImdldERvd25sb2FkVXJsV2l0aEZpbHRlcnMiLCJmaWx0ZXJQcm9wU1YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZmlsdGVyc1dpdGhTZW1hbnRpY0RhdGVPcHNJbmZvIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U2VtYW50aWNPcHNGaWx0ZXJQcm9wZXJ0aWVzIiwiX2dldFNlbGVjdE9wdGlvbnMiLCJmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcyIsImdldEFsbEZpbHRlckluZm8iLCJmaWx0ZXJJbmZvIiwiZmlsdGVyTmFtZSIsInByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmxwTWFwcGVkUGxhY2Vob2xkZXJzIiwic2VtYW50aWNEYXRlRmlsdGVycyIsImdldFNlbWFudGljRGF0ZUZpbHRlcnNXaXRoRmxwUGxhY2Vob2xkZXJzIiwiYWxsUmVsZXZhbnRGaWx0ZXJzIiwiY29uY2F0IiwiYWxsRmlsdGVycyIsIkZpbHRlciIsImFuZCIsInRlbXBUYWJsZUJpbmRpbmciLCJiaW5kTGlzdCIsInVybCIsInJlcXVlc3REb3dubG9hZFVybCIsInBsYWNlaG9sZGVyIiwiZW50cmllcyIsIm9uRHJhZ0VudGVyRG9jdW1lbnQiLCJkcmFnQ29udGV4dCIsImlzTW92ZUFsbG93ZWRJbmZvIiwiaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQiLCJwYXJlbnRDb250ZXh0IiwiZGlzYWJsZWRPblBhcmVudCIsImRpc2FibGVkT25Ob2RlIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsImlzQW5jZXN0b3JPZiIsInNldERyb3BQb3NpdGlvbiIsIm9uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJpc01vdmFibGVJbmZvIiwiaXNOb2RlTW92YWJsZSIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImN1c3RvbURpc2FibGVkIiwiX2Vycm9yIiwib25Ecm9wRG9jdW1lbnQiLCJCdXN5TG9ja2VyIiwibG9jayIsImZpbmFsbHkiLCJ1bmxvY2siLCJNYWNyb0FQSSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVBUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGl2aXR5U3luYyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9Ob3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZ1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgeyBIb3Jpem9udGFsQWxpZ24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbHVtbkV4cG9ydFNldHRpbmdzLFxuXHRUYWJsZUNvbHVtbixcblx0VGFibGVWaXN1YWxpemF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUGFzdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUGFzdGVIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyLCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgKiBhcyBJbnNpZ2h0c1NlcnZpY2UgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBUYWJsZUluc2lnaHRzSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL1RhYmxlSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IHR5cGUgRGF0YVN0YXRlSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9wbHVnaW5zL0RhdGFTdGF0ZUluZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhU3RhdGVJbmRpY2F0b3IkRGF0YVN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vcGx1Z2lucy9EYXRhU3RhdGVJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIHsgUGFzdGVQcm92aWRlciRQYXN0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL3BsdWdpbnMvUGFzdGVQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgRHJhZ0Ryb3BJbmZvIGZyb20gXCJzYXAvdWkvY29yZS9kbmQvRHJhZ0Ryb3BJbmZvXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgVGFibGUkQmVmb3JlRXhwb3J0RXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIE1EQ0NvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0RXJyb3JUeXBlIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi4vTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwiLi4vZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHsgaGFzSW5zaWdodEFjdGlvbkVuYWJsZWQsIHNob3dHZW5lcmljRXJyb3JNZXNzYWdlIH0gZnJvbSBcIi4uL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEluc2lnaHRzUGFyYW1zLCBUYWJsZUNvbnRlbnQgfSBmcm9tIFwiLi4vaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcIi4vVGFibGVIZWxwZXJcIjtcblxuLyoqXG4gKiBDcmVhdGUgb3B0aW9ucyBmb3IgdGhlIHRhYmxlLlxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQ3JlYXRpb25PcHRpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFRhYmxlQ3JlYXRpb25PcHRpb25zID0ge1xuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgY3JlYXRpb24gbW9kZSB0byBiZSB1c2VkIGJ5IHRoZSB0YWJsZS5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBOZXdQYWdlYCwgYElubGluZWAsIGBJbmxpbmVDcmVhdGlvbnNSb3dzYCBvciBgRXh0ZXJuYWxgLjxici8+XG5cdCAqIDxici8+XG5cdCAqIE5ld1BhZ2UgLSB0aGUgY3JlYXRlZCBkb2N1bWVudCBpcyBzaG93biBpbiBhIG5ldyBwYWdlLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZXRhZGF0YSAnU3luYycsICdBc3luYycgb3IgJ0RlZmVycmVkJyBpcyB1c2VkPGJyLz5cblx0ICogSW5saW5lIC0gVGhlIGNyZWF0aW9uIGlzIGRvbmUgaW5saW5lPGJyLz5cblx0ICogSW5saW5lQ3JlYXRpb25zUm93cyAtIFRoZSBjcmVhdGlvbiBpcyBkb25lIGlubGluZSB3aXRoIGFuIGVtcHR5IHJvdzxici8+XG5cdCAqIEV4dGVybmFsIC0gVGhlIGNyZWF0aW9uIGlzIGRvbmUgaW4gYSBkaWZmZXJlbnQgYXBwbGljYXRpb24gc3BlY2lmaWVkIHZpYSB0aGUgcGFyYW1ldGVyICdvdXRib3VuZCdcblx0ICpcblx0ICogSWYgbm90IHNldCB3aXRoIGFueSB2YWx1ZTo8YnIvPlxuXHQgKiBpZiBuYXZpZ2F0aW9uIGlzIGRlZmluZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzICdOZXdQYWdlJy4gT3RoZXJ3aXNlIGl0IGlzICdJbmxpbmUnLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRuYW1lPzogXCJOZXdQYWdlXCIgfCBcIklubGluZVwiIHwgXCJJbmxpbmVDcmVhdGlvblJvd3NcIiB8IFwiRXh0ZXJuYWxcIjtcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIGlmIHRoZSBuZXcgZW50cnkgc2hvdWxkIGJlIGNyZWF0ZWQgYXQgdGhlIHRvcCBvciBib3R0b20gb2YgYSB0YWJsZSBpbiBjYXNlIG9mIGNyZWF0aW9uTW9kZSAnSW5saW5lJzxici8+XG5cdCAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdmYWxzZSdcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgaWYgdGhlIG5ldyBlbnRyeSBzaG91bGQgYmUgaGlkZGVuIGluIGNhc2Ugb2YgY3JlYXRpb25Nb2RlICdJbmxpbmVDcmVhdGlvblJvd3MnLiBUaGlzIG9ubHkgYXBwbGllcyB0byByZXNwb25zaXZlIHRhYmxlcy48YnIvPlxuXHQgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnZmFsc2UnXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgd2hlcmUgdGhlIGRvY3VtZW50IGlzIGNyZWF0ZWQgaW4gY2FzZSBvZiBjcmVhdGlvbk1vZGUgJ0V4dGVybmFsJzxici8+XG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdG91dGJvdW5kPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGFjdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUgdG9vbGJhclxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBBY3Rpb24gPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGtleTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGlzIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR0ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGFjdGlvbiBhbHJlYWR5IGRpc3BsYXllZCBpbiB0aGUgdG9vbGJhciB0byBwcm9wZXJseSBwbGFjZSB0aGlzIG9uZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIGRlZmluZWQgYW5jaG9yXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQmVmb3JlYCBhbmQgYEFmdGVyYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwbGFjZW1lbnQ/OiBcIkJlZm9yZVwiIHwgXCJBZnRlclwiO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNob29zZXMgdGhlIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwcmVzczogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGlmIHRoZSBhY3Rpb24gcmVxdWlyZXMgYSBzZWxlY3Rpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlcXVpcmVzU2VsZWN0aW9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGVuYWJsZWQ/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIEFjdGlvbkdyb3VwIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0YWJsZSB0b29sYmFyXG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uR3JvdXBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uR3JvdXAgPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgQWN0aW9uR3JvdXBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0a2V5OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgbmVzdGVkIGFjdGlvbnNcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWN0aW9uczogQWN0aW9uW107XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgYWN0aW9uIGdyb3VwXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHRleHQ6IHN0cmluZztcblxuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgb2YgYW5vdGhlciBhY3Rpb24gb3IgYWN0aW9uIGdyb3VwIGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSB0b29sYmFyIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGVyZSB0aGlzIGFjdGlvbiBncm91cCBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSBkZWZpbmVkIGFuY2hvclxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEJlZm9yZWAgYW5kIGBBZnRlcmBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cGxhY2VtZW50PzogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIjtcbn07XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGN1c3RvbSBjb2x1bW4gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbHVtbiBoYXMgdG8gYmUgcHJvdmlkZWQgYXMgdGhlIGRlZmF1bHQgYWdncmVnYXRpb25cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy50YWJsZS5Db2x1bW5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29sdW1uID0ge1xuXHQvKipcblx0ICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbHVtblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRrZXk6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBjb2x1bW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhlYWRlcjogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBjb2x1bW4ncyB3aWR0aC5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBhdXRvYCwgYHZhbHVlYCBhbmQgYGluaGVyaXRgIGFjY29yZGluZyB0byB7QGxpbmsgc2FwLnVpLmNvcmUuQ1NTU2l6ZX1cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0d2lkdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIGNvbHVtbiBpbXBvcnRhbmNlLlxuXHQgKlxuXHQgKiBZb3UgY2FuIGRlZmluZSB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBwb3AtaW4gYXJlYSBiYXNlZCBvbiB0aGVpciBpbXBvcnRhbmNlXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGltcG9ydGFuY2U/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEFsaWducyB0aGUgaGVhZGVyIGFzIHdlbGwgYXMgdGhlIGNvbnRlbnQgaG9yaXpvbnRhbGx5XG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhvcml6b250YWxBbGlnbj86IEhvcml6b250YWxBbGlnbjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaGVhZGVyIHNob3VsZCBiZSBhIHBhcnQgb2YgdGhlIHdpZHRoIGNhbGN1bGF0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUga2V5IG9mIGFub3RoZXIgY29sdW1uIGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSB0YWJsZSB0byBwcm9wZXJseSBwbGFjZSB0aGlzIG9uZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hlcmUgdGhpcyBjb2x1bW4gc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgZGVmaW5lZCBhbmNob3Jcblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBCZWZvcmVgIGFuZCBgQWZ0ZXJgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHBsYWNlbWVudD86IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCI7XG59O1xuXG50eXBlIEV4cG9ydENvbHVtbiA9IENvbHVtbkV4cG9ydFNldHRpbmdzICYge1xuXHRwcm9wZXJ0eTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPjtcblx0bGFiZWw6IHN0cmluZztcblx0Y29sdW1uSWQ/OiBzdHJpbmc7XG5cdHdpZHRoPzogbnVtYmVyO1xuXHR0ZXh0QWxpZ24/OiBzdHJpbmc7XG5cdGRpc3BsYXlVbml0PzogYm9vbGVhbjtcblx0dHJ1ZVZhbHVlPzogc3RyaW5nO1xuXHRmYWxzZVZhbHVlPzogc3RyaW5nO1xuXHR2YWx1ZU1hcD86IHN0cmluZztcbn07XG5cbnR5cGUgVXNlckV4cG9ydFNldHRpbmdzID0ge1xuXHRzcGxpdENlbGxzPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBFeHBvcnRTZXR0aW5ncyA9IHtcblx0ZmlsZVR5cGU/OiBzdHJpbmc7XG5cdGRhdGFTb3VyY2U6IHtcblx0XHRzaXplTGltaXQ/OiBudW1iZXI7XG5cdH07XG5cdHdvcmtib29rOiB7XG5cdFx0Y29sdW1uczogRXhwb3J0Q29sdW1uW107XG5cdH07XG59O1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHVzZWQgdG8gY3JlYXRlIGEgdGFibGUgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogVXN1YWxseSwgYSBMaW5lSXRlbSBvciBQcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb24gaXMgZXhwZWN0ZWQsIGJ1dCB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2sgY2FuIGFsc28gYmUgdXNlZCB0byBkaXNwbGF5IGFuIEVudGl0eVNldC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm86VGFibGUgaWQ9XCJNeVRhYmxlXCIgbWV0YVBhdGg9XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIiAvJmd0O1xuICogPC9wcmU+XG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiLCB7IHJldHVyblR5cGVzOiBbXCJzYXAuZmUubWFjcm9zLk1hY3JvQVBJXCJdIH0pXG5jbGFzcyBUYWJsZUFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdGNvbnRlbnQhOiBUYWJsZTtcblxuXHRjb25zdHJ1Y3RvcihtU2V0dGluZ3M/OiBQcm9wZXJ0aWVzT2Y8VGFibGVBUEk+LCAuLi5vdGhlcnM6IGFueVtdKSB7XG5cdFx0c3VwZXIobVNldHRpbmdzIGFzIGFueSwgLi4ub3RoZXJzKTtcblxuXHRcdHRoaXMudXBkYXRlRmlsdGVyQmFyKCk7XG5cblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuYXR0YWNoRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwge30sIHRoaXMub25UYWJsZVNlbGVjdGlvbkNoYW5nZSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXSxcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXG5cdFx0XVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIgfSlcblx0dGFibGVEZWZpbml0aW9uITogVGFibGVWaXN1YWxpemF0aW9uO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZW50aXR5VHlwZUZ1bGx5UXVhbGlmaWVkTmFtZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgJ3JlYWQtb25seScgc3RhdGUgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBJZiB5b3UgZG8gbm90IHNldCBhbnkgZXhwcmVzc2lvbiwgU0FQIEZpb3JpIGVsZW1lbnRzIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIGxpZmVjeWNsZSB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHJlYWRPbmx5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSAnYnVzeScgc3RhdGUgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRidXN5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgdHlwZSBvZiB0YWJsZSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgYnVpbGRpbmcgYmxvY2sgdG8gcmVuZGVyIHRoZSBkYXRhLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEdyaWRUYWJsZWAgYW5kIGBSZXNwb25zaXZlVGFibGVgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHRWYWx1ZTogXCJSZXNwb25zaXZlVGFibGVcIiwgYWxsb3dlZFZhbHVlczogW1wiR3JpZFRhYmxlXCIsIFwiUmVzcG9uc2l2ZVRhYmxlXCJdIH0pXG5cdHR5cGUhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIGlmIHRoZSBleHBvcnQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFibGUgaXMgZW5hYmxlZCBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0ZW5hYmxlRXhwb3J0ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIHBhc3RlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIGlzIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVQYXN0ZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRhYmxlIGNhbiBiZSBvcGVuZWQgaW4gZnVsbHNjcmVlbiBtb2RlIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZW5hYmxlRnVsbFNjcmVlbiE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIElEIG9mIHRoZSBGaWx0ZXJCYXIgYnVpbGRpbmcgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRmaWx0ZXJCYXI/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHNlbGVjdGlvbiBtb2RlIHRvIGJlIHVzZWQgYnkgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYE5vbmVgLCBgU2luZ2xlYCwgYEZvcmNlU2luZ2xlYCwgYE11bHRpYCwgYEZvcmNlTXVsdGlgIG9yIGBBdXRvYC5cblx0ICogSWYgc2V0IHRvICdTaW5nbGUnLCAnTXVsdGknIG9yICdBdXRvJywgU0FQIEZpb3JpIGVsZW1lbnRzIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIGxpZmVjeWNsZSB0byBkZXRlcm1pbmUgdGhlIGNvbnNpc3RlbnQgc2VsZWN0aW9uIG1vZGUuXG5cdCAqIElmIHNldCB0byAnRm9yY2VTaW5nbGUnIG9yICdGb3JjZU11bHRpJyB5b3VyIGNob2ljZSB3aWxsIGJlIHJlc3BlY3RlZCBidXQgdGhpcyBtaWdodCBub3QgcmVzcGVjdCB0aGUgRmlvcmkgZ3VpZGVsaW5lcy5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgYWxsb3dlZFZhbHVlczogW1wiTm9uZVwiLCBcIlNpbmdsZVwiLCBcIk11bHRpXCIsIFwiQXV0b1wiLCBcIkZvcmNlTXVsdGlcIiwgXCJGb3JjZVNpbmdsZVwiXSB9KVxuXHRzZWxlY3Rpb25Nb2RlITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIGhlYWRlciB0ZXh0IHRoYXQgaXMgc2hvd24gaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGhlYWRlciE6IHN0cmluZztcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIGlmIHRoZSBjb2x1bW4gd2lkdGggaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyBpdCB0aGUgdGFibGUgaXMgZGVzaWduZWQgZm9yIGEgbW9iaWxlIGRldmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGlzT3B0aW1pemVkRm9yU21hbGxEZXZpY2UhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgaGVhZGVyIHRleHQgc2hvdWxkIGJlIHNob3duIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRoZWFkZXJWaXNpYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBhcmUgZml4ZWQgb24gdGhlIGxlZnQuIE9ubHkgY29sdW1ucyB3aGljaCBhcmUgbm90IGZpeGVkIGNhbiBiZSBzY3JvbGxlZCBob3Jpem9udGFsbHkuXG5cdCAqXG5cdCAqIFRoaXMgcHJvcGVydHkgaXMgbm90IHJlbGV2YW50IGZvciByZXNwb25zaXZlIHRhYmxlc1xuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm51bWJlclwiIH0pXG5cdGZyb3plbkNvbHVtbkNvdW50PzogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBoZWFkZXIgc2hvdWxkIGJlIGEgcGFydCBvZiB0aGUgd2lkdGggY2FsY3VsYXRpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyBob3cgdGhlIHRhYmxlIGhhbmRsZXMgdGhlIHZpc2libGUgcm93cy4gRG9lcyBub3QgYXBwbHkgdG8gUmVzcG9uc2l2ZSB0YWJsZXMuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQXV0b2AsIGBGaXhlZGAuPGJyLz5cblx0ICogLSBJZiBzZXQgdG8gYEZpeGVkYCwgdGhlIHRhYmxlIGFsd2F5cyBoYXMgYXMgbWFueSByb3dzIGFzIGRlZmluZWQgaW4gdGhlIHJvd0NvdW50IHByb3BlcnR5Ljxici8+XG5cdCAqIC0gSWYgc2V0IHRvIGBBdXRvYCwgdGhlIG51bWJlciBvZiByb3dzIGlzIGNoYW5nZWQgYnkgdGhlIHRhYmxlIGF1dG9tYXRpY2FsbHkuIEl0IHdpbGwgdGhlbiBhZGp1c3QgaXRzIHJvdyBjb3VudCB0byB0aGUgc3BhY2UgaXQgaXMgYWxsb3dlZCB0byBjb3ZlciAobGltaXRlZCBieSB0aGUgc3Vycm91bmRpbmcgY29udGFpbmVyKSBidXQgaXQgY2Fubm90IGhhdmUgbGVzcyB0aGFuIGRlZmluZWQgaW4gdGhlIGByb3dDb3VudGAgcHJvcGVydHkuPGJyLz5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdFZhbHVlOiBcIkZpeGVkXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIkF1dG9cIiwgXCJGaXhlZFwiXSB9KVxuXHRyb3dDb3VudE1vZGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIE51bWJlciBvZiByb3dzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuIERvZXMgbm90IGFwcGx5IHRvIHJlc3BvbnNpdmUgdGFibGVzLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm51bWJlclwiLCBkZWZhdWx0VmFsdWU6IDUgfSlcblx0cm93Q291bnQ/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIEFnZ3JlZ2F0ZSBhY3Rpb25zIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvblwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRhY3Rpb25zITogQWN0aW9uW107XG5cblx0LyoqXG5cdCAqIEFnZ3JlZ2F0ZSBjb2x1bW5zIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlLkNvbHVtblwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRjb2x1bW5zITogQ29sdW1uW107XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRkYXRhSW5pdGlhbGl6ZWQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0YmluZGluZ1N1c3BlbmRlZCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRvdXREYXRlZEJpbmRpbmchOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0cGVuZGluZ1JlcXVlc3QhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgaWYgdGhlIGVtcHR5IHJvd3MgYXJlIGVuYWJsZWQuIFRoaXMgYWxsb3dzIHRvIGhhdmUgZHluYW1pYyBlbmFibGVtZW50IG9mIHRoZSBlbXB0eSByb3dzIHZpYSB0aGUgc2V0dGVyIGZ1bmN0aW9uLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZW1wdHlSb3dzRW5hYmxlZCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNob29zZXMgYSByb3c7IHRoZSBldmVudCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCByb3cgaXMgY2hvc2VuLlxuXHQgKlxuXHQgKiBZb3UgY2FuIHNldCB0aGlzIGluIG9yZGVyIHRvIGhhbmRsZSB0aGUgbmF2aWdhdGlvbiBtYW51YWxseS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0cm93UHJlc3MhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIFRhYmxlIFN0YXRlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIFlvdSBjYW4gc2V0IHRoaXMgaW4gb3JkZXIgdG8gc3RvcmUgdGhlIHRhYmxlIHN0YXRlIGluIHRoZSBhcHBzdGF0ZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdHN0YXRlQ2hhbmdlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBUYWJsZSBjb250ZXh0IGNoYW5nZXMuXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRjb250ZXh0Q2hhbmdlPzogRnVuY3Rpb247XG5cblx0QGV2ZW50KClcblx0aW50ZXJuYWxEYXRhUmVxdWVzdGVkITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHdoaWNoIG9wdGlvbnMgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKlxuXHQgKiBJZiBpdCBpcyBzZXQgdG8gYHRydWVgLCBhbGwgcG9zc2libGUgb3B0aW9ucyBmb3IgdGhpcyBraW5kIG9mIHRhYmxlIGFyZSBlbmFibGVkLjxici8+XG5cdCAqIElmIGl0IGlzIHNldCB0byBgZmFsc2VgLCBwZXJzb25hbGl6YXRpb24gaXMgZGlzYWJsZWQuPGJyLz5cblx0ICo8YnIvPlxuXHQgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBmb3IgdGhlIHBlcnNvbmFsaXphdGlvbiBieSBwcm92aWRpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCB3aXRoIHRoZSBvcHRpb25zIHlvdSB3YW50IHRvIGJlIGF2YWlsYWJsZS48YnIvPlxuXHQgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6PGJyLz5cblx0ICogIC0gU29ydDxici8+XG5cdCAqICAtIENvbHVtbjxici8+XG5cdCAqICAtIEZpbHRlcjxici8+XG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhbiB8IHN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0cGVyc29uYWxpemF0aW9uITogYm9vbGVhbiB8IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgdGhlIGtpbmQgb2YgdmFyaWFudCBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZSBpcyBgQ29udHJvbGAuPGJyLz5cblx0ICogSWYgc2V0IHdpdGggdmFsdWUgYENvbnRyb2xgLCBhIHZhcmlhbnQgbWFuYWdlbWVudCBjb250cm9sIGlzIHNlZW4gd2l0aGluIHRoZSB0YWJsZSBhbmQgdGhlIHRhYmxlIGlzIGxpbmtlZCB0byB0aGlzLjxici8+XG5cdCAqIElmIG5vdCBzZXQgd2l0aCBhbnkgdmFsdWUsIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIkNvbnRyb2xcIl0gfSlcblx0dmFyaWFudE1hbmFnZW1lbnQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBzZWFyY2ggYWN0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdGlzU2VhcmNoYWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVDcmVhdGlvbk9wdGlvbnNcIixcblx0XHRkZWZhdWx0VmFsdWU6IHtcblx0XHRcdG5hbWU6IFwiSW5saW5lXCIsXG5cdFx0XHRjcmVhdGVBdEVuZDogZmFsc2UsXG5cdFx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlOiBmYWxzZVxuXHRcdH1cblx0fSlcblx0Y3JlYXRpb25Nb2RlPzogVGFibGVDcmVhdGlvbk9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGV2YW50IHRhYmxlQVBJIGZvciBhIFVJNSBldmVudC5cblx0ICogQW4gZXZlbnQgY2FuIGJlIHRyaWdnZXJlZCBlaXRoZXIgYnkgdGhlIGlubmVyIGNvbnRyb2wgKHRoZSB0YWJsZSkgb3IgdGhlIE9kYXRhIGxpc3RCaW5kaW5nXG5cdCAqIFRoZSBmaXJzdCBpbml0aWF0b3IgaXMgdGhlIHVzdWFsIG9uZSBzbyBpdCdzIG1hbmFnZWQgYnkgdGhlIE1hY3JvQVBJIHdoZXJlYXNcblx0ICogdGhlIHNlY29uZCBvbmUgaXMgc3BlY2lmaWMgdG8gdGhpcyBBUEkgYW5kIGhhcyB0byBtYW5hZ2VkIGJ5IHRoZSBUYWJsZUFQSS5cblx0ICpcblx0ICogQHBhcmFtIHVpNUV2ZW50IFRoZSBVSTUgZXZlbnRcblx0ICogQHJldHVybnMgVGhlIFRhYmxlQVBJIG9yIGZhbHNlIGlmIG5vdCBmb3VuZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c3RhdGljIGdldEFQSSh1aTVFdmVudDogVUk1RXZlbnQpOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gdWk1RXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc291cmNlLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHR0YWJsZUFQSSA9ICh0aGlzLmluc3RhbmNlTWFwPy5nZXQodGhpcykgYXMgVGFibGVBUElbXSk/LmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRlbnQ/LmdldFJvd0JpbmRpbmcoKSA9PT0gc291cmNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlQVBJIHx8IChzdXBlci5nZXRBUEkodWk1RXZlbnQsIFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSBhcyBUYWJsZUFQSSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzb3J0IGNvbmRpdGlvbnMgcXVlcnkgc3RyaW5nLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIHF1ZXJ5IHN0cmluZ1xuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnNRdWVyeSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5jb250ZW50O1xuXHRcdHR5cGUgU29ydENvbmRpdGlvbnMgPSB7XG5cdFx0XHRzb3J0ZXJzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0ZGVzY2VuZGluZzogYm9vbGVhbjtcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9O1xuXHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0gKHRhYmxlLmdldFNvcnRDb25kaXRpb25zKCkgYXMgU29ydENvbmRpdGlvbnMpPy5zb3J0ZXJzO1xuXHRcdHJldHVybiBzb3J0Q29uZGl0aW9uc1xuXHRcdFx0PyBzb3J0Q29uZGl0aW9uc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKHNvcnRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zUGF0aCA9IHRhYmxlLmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoc29ydENvbmRpdGlvbi5uYW1lKT8ucGF0aDtcblx0XHRcdFx0XHRcdGlmIChzb3J0Q29uZGl0aW9uc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGAke3NvcnRDb25kaXRpb25zUGF0aH0ke3NvcnRDb25kaXRpb24uZGVzY2VuZGluZyA/IFwiIGRlc2NcIiA6IFwiXCJ9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIsXCIpXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBjb250ZXh0cyBmcm9tIHRoZSB0YWJsZSB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlci5cblx0ICpcblx0ICogQHJldHVybnMgQ29udGV4dHMgb2YgdGhlIHJvd3Mgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0U2VsZWN0ZWRDb250ZXh0cygpOiBDb250ZXh0W10ge1xuXHRcdHJldHVybiAodGhpcy5jb250ZW50IGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSB0YWJsZS5cblx0ICpcblx0ICogVGhlIG1lc3NhZ2UgYXBwbGllcyB0byB0aGUgd2hvbGUgdGFibGUgYW5kIG5vdCB0byBhbiBpbmRpdmlkdWFsIHRhYmxlIHJvdy5cblx0ICpcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBUaGUgcGFyYW1ldGVycyB0byBjcmVhdGUgdGhlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMudHlwZSBNZXNzYWdlIHR5cGVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMubWVzc2FnZSBNZXNzYWdlIHRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gTWVzc2FnZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wZXJzaXN0ZW50IFRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgcGVyc2lzdGVudFxuXHQgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkTWVzc2FnZShwYXJhbWV0ZXJzOiB7IHR5cGU/OiBNZXNzYWdlVHlwZTsgbWVzc2FnZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IHBlcnNpc3RlbnQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLl9nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5jb250ZW50IGFzIGFueSBhcyBUYWJsZTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0dGFyZ2V0OiBvVGFibGUuZ2V0Um93QmluZGluZygpLmdldFJlc29sdmVkUGF0aCgpLFxuXHRcdFx0dHlwZTogcGFyYW1ldGVycy50eXBlLFxuXHRcdFx0bWVzc2FnZTogcGFyYW1ldGVycy5tZXNzYWdlLFxuXHRcdFx0cHJvY2Vzc29yOiBvVGFibGUuZ2V0TW9kZWwoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0cGVyc2lzdGVudDogcGFyYW1ldGVycy5wZXJzaXN0ZW50XG5cdFx0fSk7XG5cblx0XHRtc2dNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRyZXR1cm4gb01lc3NhZ2UuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdGhlIHRhYmxlIHNob3VsZCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBmdW5jdGlvbi5cblx0ICogVGhlIHRhYmxlIGluIHZpZXcgc2hvdWxkIG9ubHkgcmVxdWVzdCByZWNvbW1lbmRhdGlvbnMgaWZcblx0ICogICAxLiBUaGUgUGFnZSBpcyBpbiBFZGl0IG1vZGVcblx0ICogICAyLiBUYWJsZSBpcyBub3QgcmVhZCBvbmx5XG5cdCAqICAgMy4gSXQgaGFzIGFubm90YXRpb24gZm9yIENvbW1vbi5SZWNvbW1lbmRlZFZhbHVlc0Z1bmN0aW9uXG5cdCAqICAgNC4gVmlldyBpcyBub3QgTGlzdFJlcG9ydCwgZm9yIE9QL1N1Yk9QIGFuZCBmb3J3YXJkIHZpZXdzIHJlY29tbWVuZGF0aW9ucyBzaG91bGQgYmUgcmVxdWVzdGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgcmVjb21tZW5kYXRpb25zIG5lZWRzIHRvIGJlIHJlcXVlc3RlZFxuXHQgKi9cblx0Y2hlY2tJZlJlY29tbWVuZGF0aW9uUmVsZXZhbnQob0V2ZW50OiBVSTVFdmVudCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzVGFibGVSZWFkT25seSA9IHRoaXMuZ2V0UHJvcGVydHkoXCJyZWFkT25seVwiKTtcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Ly8gcmVxdWVzdCBmb3IgYWN0aW9uIG9ubHkgaWYgd2UgYXJlIGluIE9QL1N1Yk9QIGFuZCBpbiBFZGl0IG1vZGUsIGFsc28gdGFibGUgaXMgbm90IHJlYWRPbmx5XG5cdFx0aWYgKCFpc1RhYmxlUmVhZE9ubHkgJiYgaXNFZGl0YWJsZSAmJiB2aWV3RGF0YS5jb252ZXJ0ZXJUeXBlICE9PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlKGlkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5fZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IG1zZ01hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG1lc3NhZ2VzLmZpbmQoKGU6IGFueSkgPT4gZS5pZCA9PT0gaWQpO1xuXHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdG1zZ01hbmFnZXIucmVtb3ZlTWVzc2FnZXMocmVzdWx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgYSByZWZyZXNoIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVmcmVzaCgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQuZ2V0Um93QmluZGluZygpLnJlZnJlc2goKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudCBpbiBhIHBlbmRpbmcgc3RhdGUuXG5cdCAqXG5cdCAqL1xuXHRzZXRRdWlja0ZpbHRlckNvdW50c0FzTG9hZGluZygpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudCxcblx0XHRcdGludGVybmFsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCxcblx0XHRcdHNlbGVjdG9yID0gdGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSBhcyBTZWxlY3QgfCBTZWdtZW50ZWRCdXR0b24sXG5cdFx0XHRxdWlja0ZpbHRlckNvdW50cyA9IHt9IGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz47XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gc2VsZWN0b3IuZ2V0SXRlbXMoKSkge1xuXHRcdFx0cXVpY2tGaWx0ZXJDb3VudHNba10gPSBcIi4uLlwiO1xuXHRcdH1cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJxdWlja0ZpbHRlcnNcIiwgeyBjb3VudHM6IHF1aWNrRmlsdGVyQ291bnRzIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGNvdW50IG9mIHRoZSBzZWxlY3RlZCBxdWlja0ZpbHRlci5cblx0ICpcblx0ICovXG5cdHJlZnJlc2hTZWxlY3RlZFF1aWNrRmlsdGVyQ291bnQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3QgY291bnQgPSAodGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvdW50KCk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0YWJsZS5nZXRRdWlja0ZpbHRlcigpIGFzIFNlbGVjdCB8IFNlZ21lbnRlZEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc2VsZWN0b3IgJiYgdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycz8uc2hvd0NvdW50cyAmJiBjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBpdGVtSW5kZXggPSBzZWxlY3Rvci5nZXRJdGVtcygpLmZpbmRJbmRleCgoc2VsZWN0b3JJdGVtKSA9PiBzZWxlY3Rvckl0ZW0uZ2V0S2V5KCkgPT09IHNlbGVjdG9yLmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdFx0aWYgKGl0ZW1JbmRleCA+IC0xKSB7XG5cdFx0XHRcdHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LnNldFByb3BlcnR5KGBxdWlja0ZpbHRlcnMvY291bnRzLyR7aXRlbUluZGV4fWAsIFRhYmxlVXRpbHMuZ2V0Q291bnRGb3JtYXR0ZWQoY291bnQpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgY291bnRzIG9mIHRoZSB1bnNlbGVjdGVkIHF1aWNrRmlsdGVycy5cblx0ICpcblx0ICogQHJldHVybnMgIFByb21pc2UgcmVzb2x2ZXMgb25jZSB0aGUgY291bnQgYXJlIHVwZGF0ZWRcblx0ICovXG5cdGFzeW5jIHJlZnJlc2hVblNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQsXG5cdFx0XHRzZWxlY3RvciA9IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkgYXMgU2VsZWN0IHwgU2VnbWVudGVkQnV0dG9uLFxuXHRcdFx0aXRlbXMgPSBzZWxlY3Rvci5nZXRJdGVtcygpLFxuXHRcdFx0aW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0LFxuXHRcdFx0Y29udHJvbGxlciA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk/LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdGNoYXJ0ID0gKGNvbnRyb2xsZXIgYXMgQ29udHJvbGxlciAmIHsgZ2V0Q2hhcnRDb250cm9sPzogRnVuY3Rpb24gfSkuZ2V0Q2hhcnRDb250cm9sPy4oKSxcblx0XHRcdGNoYXJ0QVBJID0gY2hhcnQgJiYgY2hhcnQuZ2V0UGFyZW50KCksXG5cdFx0XHRzZXRJdGVtQ291bnRzID0gYXN5bmMgKGl0ZW06IEl0ZW0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUtleSA9IGl0ZW0uZ2V0S2V5KCk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1GaWx0ZXJzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uKHRhYmxlLCBpdGVtS2V5KTtcblx0XHRcdFx0Y29uc3QgY291bnQgPSBhd2FpdCBUYWJsZVV0aWxzLmdldExpc3RCaW5kaW5nRm9yQ291bnQodGFibGUsIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCksIHtcblx0XHRcdFx0XHRiYXRjaEdyb3VwSWQ6IFwiJGF1dG9cIixcblx0XHRcdFx0XHRhZGRpdGlvbmFsRmlsdGVyczogWy4uLmJhc2VUYWJsZUZpbHRlcnMsIC4uLml0ZW1GaWx0ZXJzXVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgaXRlbUluZGV4ID0gaXRlbXMuZmluZEluZGV4KChzZWxlY3Rvckl0ZW0pID0+IHNlbGVjdG9ySXRlbS5nZXRLZXkoKSA9PT0gaXRlbUtleSk7XG5cdFx0XHRcdGlmIChpdGVtSW5kZXggPiAtMSkge1xuXHRcdFx0XHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShgcXVpY2tGaWx0ZXJzL2NvdW50cy8ke2l0ZW1JbmRleH1gLCBUYWJsZVV0aWxzLmdldENvdW50Rm9ybWF0dGVkKGNvdW50KSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRjb25zdCBjaGFydEZpbHRlciA9IGNoYXJ0QVBJICYmIGNoYXJ0QVBJLmhhc1NlbGVjdGlvbnMoKSAmJiBjaGFydEFQSS5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBiYXNlVGFibGVGaWx0ZXJzID0gVGFibGVVdGlscy5nZXRIaWRkZW5GaWx0ZXJzKHRhYmxlKTtcblx0XHRpZiAoY2hhcnRGaWx0ZXIpIHtcblx0XHRcdGJhc2VUYWJsZUZpbHRlcnMucHVzaChjaGFydEZpbHRlcik7XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmdQcm9taXNlcyA9IGl0ZW1zXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmdldEtleSgpICE9PSBzZWxlY3Rvci5nZXRTZWxlY3RlZEtleSgpKVxuXHRcdFx0Lm1hcChhc3luYyAoaXRlbSkgPT4gc2V0SXRlbUNvdW50cyhpdGVtKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGJpbmRpbmdQcm9taXNlcyk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGJpbmRpbmcgcHJvbWlzZXNcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0TWVzc2FnZU1hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRzZWxlY3Rpb25DaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRfZ2V0Um93QmluZGluZygpIHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRyZXR1cm4gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdGdldENvdW50cygpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBUYWJsZVV0aWxzLmdldExpc3RCaW5kaW5nRm9yQ291bnQob1RhYmxlLCBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKSwge1xuXHRcdFx0YmF0Y2hHcm91cElkOiAhdGhpcy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIikgPyBvVGFibGUuZGF0YShcImJhdGNoR3JvdXBJZFwiKSA6IFwiJGF1dG9cIixcblx0XHRcdGFkZGl0aW9uYWxGaWx0ZXJzOiBUYWJsZVV0aWxzLmdldEhpZGRlbkZpbHRlcnMob1RhYmxlKVxuXHRcdH0pXG5cdFx0XHQudGhlbigoaVZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0Q291bnRGb3JtYXR0ZWQoaVZhbHVlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gXCIwXCI7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBjb250ZXh0IGNoYW5nZSBvbiB0aGUgdGFibGUuXG5cdCAqIEFuIGV2ZW50IGlzIGZpcmVkIHRvIHByb3BhZ2F0ZSB0aGUgT2RhdGFMaXN0QmluZGluZyBldmVudCBhbmQgdGhlIGVuYWJsZW1lbnRcblx0ICogb2YgdGhlIGNyZWF0aW9uIHJvdyBpcyBjYWxjdWxhdGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVGhlIFVJNSBldmVudFxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uQ29udGV4dENoYW5nZSh1aTVFdmVudDogVUk1RXZlbnQpIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImNvbnRleHRDaGFuZ2VcIiwgdWk1RXZlbnQuZ2V0UGFyYW1ldGVycygpKTtcblx0XHR0aGlzLnNldEZhc3RDcmVhdGlvblJvd0VuYWJsZW1lbnQoKTtcblx0XHR0aGlzLnJlZnJlc2hTZWxlY3RlZFF1aWNrRmlsdGVyQ291bnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqXG5cdCAqIEBuYW1lIG9uRmllbGRMaXZlQ2hhbmdlXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkZpZWxkTGl2ZUNoYW5nZSh1aTVFdmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpIGFzIENvbnRyb2wsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9IGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCxcblx0XHRcdGJpbmRpbmcgPSBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0Ly8gY3JlYXRpb24gb2YgYSBuZXcgaW5hY3RpdmUgcm93IGlmIHJlbGV2YW50XG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0LmlzSW5hY3RpdmUoKSkge1xuXHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzPy5jb250ZW50IGFzIFRhYmxlO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBjaGFuZ2Ugb24gYSBxdWlja0ZpbHRlclxuXHQgKiBUaGUgdGFibGUgaXMgcmVib3VuZCBpZiB0aGUgRmlsdGVyQmFyIGlzIG5vdCBzdXNwZW5kZWQgYW5kIHVwZGF0ZSB0aGUgQXBwU3RhdGUuXG5cdCAqXG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpIHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudDtcblx0XHQvLyBSZWJpbmQgdGhlIHRhYmxlIHRvIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBxdWljayBmaWx0ZXIga2V5LlxuXHRcdC8vIFdlIGRvbid0IHJlYmluZCB0aGUgdGFibGUgaWYgdGhlIGZpbHRlckJhciBmb3IgdGhlIHRhYmxlIGlzIHN1c3BlbmRlZFxuXHRcdC8vIGFzIHJlYmluZCB3aWxsIGJlIGRvbmUgd2hlbiB0aGUgZmlsdGVyQmFyIGlzIHJlc3VtZWRcblx0XHRjb25zdCBmaWx0ZXJCYXJJRCA9IHRhYmxlLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IChmaWx0ZXJCYXJJRCAmJiBDb3JlLmJ5SWQoZmlsdGVyQmFySUQpKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFmaWx0ZXJCYXI/LmdldFN1c3BlbmRTZWxlY3Rpb24/LigpKSB7XG5cdFx0XHR0YWJsZS5yZWJpbmQoKTtcblx0XHR9XG5cdFx0KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlciB8IHVuZGVmaW5lZCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25UYWJsZVJvd1ByZXNzKG9FdmVudDogVUk1RXZlbnQsIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgb0NvbnRleHQ6IENvbnRleHQsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBwcmV2ZW50IG5hdmlnYXRpb24gdG8gYW4gZW1wdHkgcm93XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzSW5hY3RpdmUoKSAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIEluIHRoZSBjYXNlIG9mIGFuIGFuYWx5dGljYWwgdGFibGUsIGlmIHdlJ3JlIHRyeWluZyB0byBuYXZpZ2F0ZSB0byBhIGNvbnRleHQgY29ycmVzcG9uZGluZyB0byBhIHZpc3VhbCBncm91cCBvciBncmFuZCB0b3RhbFxuXHRcdC8vIC0tPiBDYW5jZWwgbmF2aWdhdGlvblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICYmXG5cdFx0XHRvQ29udGV4dCAmJlxuXHRcdFx0b0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikgJiZcblx0XHRcdHR5cGVvZiBvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkAkdWk1Lm5vZGUuaXNFeHBhbmRlZFwiKSA9PT0gXCJib29sZWFuXCJcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBtUGFyYW1ldGVycywgeyByZWFzb246IE5hdmlnYXRpb25SZWFzb24uUm93UHJlc3MgfSk7XG5cdFx0XHQob0NvbnRyb2xsZXIgYXMgYW55KS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQob0NvbnRleHQsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25JbnRlcm5hbFBhdGNoQ29tcGxldGVkKCkge1xuXHRcdC8vIEJDUDogMjM4MDAyMzA5MFxuXHRcdC8vIFdlIGhhbmRsZSBlbmFibGVtZW50IG9mIERlbGV0ZSBmb3IgdGhlIHRhYmxlIGhlcmUuXG5cdFx0Ly8gRWRpdEZsb3cudHMjaGFuZGxlUGF0Y2hTZW50IGlzIGhhbmRsaW5nIHRoZSBhY3Rpb24gZW5hYmxlbWVudC5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKGludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkludGVybmFsRGF0YVJlY2VpdmVkKG9FdmVudDogVUk1RXZlbnQ8eyBlcnJvcjogc3RyaW5nIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgaXNSZWNvbW1lbmRhdGlvblJlbGV2YW50ID0gdGhpcy5jaGVja0lmUmVjb21tZW5kYXRpb25SZWxldmFudChvRXZlbnQpO1xuXHRcdGlmIChpc1JlY29tbWVuZGF0aW9uUmVsZXZhbnQpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRJZGVudGlmaWVyID0gdGhpcy5nZXRJZGVudGlmaWVyQ29sdW1uKGlzUmVjb21tZW5kYXRpb25SZWxldmFudCkgYXMgc3RyaW5nW107XG5cdFx0XHRjb25zdCByZXNwb25zZUNvbnRleHRzQXJyYXkgPSAob0V2ZW50LmdldFNvdXJjZSgpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldEFsbEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0Y29uc3QgbmV3Q29udGV4dHM6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10gPSBbXTtcblx0XHRcdHJlc3BvbnNlQ29udGV4dHNBcnJheS5tYXAoKGNvbnRleHQpID0+IHtcblx0XHRcdFx0bmV3Q29udGV4dHMucHVzaCh7XG5cdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllclxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5nZXRDb250cm9sbGVyKCkucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMobmV3Q29udGV4dHMsIHRydWUpO1xuXHRcdH1cblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImVycm9yXCIpKSB7XG5cdFx0XHR0aGlzLmdldENvbnRyb2xsZXIoKS5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdH1cblx0fVxuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcImNvbGxhYm9yYXRpb25NYW5hZ2VyXCIsIFwiY29sbGVjdEF2YWlsYWJsZUNhcmRzXCIpXG5cdGNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkczogUHJvbWlzZTxXcmFwcGVkQ2FyZD5bXSk6IHZvaWQge1xuXHRcdGNvbnN0IGFjdGlvblRvb2xiYXJJdGVtcyA9IHRoaXMuY29udGVudC5nZXRBY3Rpb25zKCkgYXMgQWN0aW9uVG9vbGJhckFjdGlvbltdO1xuXHRcdGlmIChoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZChhY3Rpb25Ub29sYmFySXRlbXMsIHRoaXMuY29udGVudC5nZXRGaWx0ZXIoKSwgVGFibGVJbnNpZ2h0c0hlbHBlci5nZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyh0aGlzKSkpIHtcblx0XHRcdGNhcmRzLnB1c2goXG5cdFx0XHRcdChhc3luYyAoKTogUHJvbWlzZTxXcmFwcGVkQ2FyZD4gPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNhcmQgPSBhd2FpdCB0aGlzLmdldENhcmRNYW5pZmVzdFRhYmxlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGNhcmQ6IGNhcmQsXG5cdFx0XHRcdFx0XHR0aXRsZTogKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1R5cGVOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gXCJcIixcblx0XHRcdFx0XHRcdGNhbGxiYWNrOiB0aGlzLm9uQWRkQ2FyZFRvQ29sbGFib3JhdGlvbk1hbmFnZXJDYWxsYmFjay5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSkoKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5jb250ZW50O1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJkYXRhSW5pdGlhbGl6ZWRcIiwgdHJ1ZSk7XG5cdFx0KHRoaXMgYXMgYW55KS5maXJlRXZlbnQoXCJpbnRlcm5hbERhdGFSZXF1ZXN0ZWRcIiwgb0V2ZW50LmdldFBhcmFtZXRlcnMoKSk7XG5cdFx0aWYgKHRhYmxlLmdldFF1aWNrRmlsdGVyKCkgJiYgdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycz8uc2hvd0NvdW50cykge1xuXHRcdFx0dGhpcy5zZXRRdWlja0ZpbHRlckNvdW50c0FzTG9hZGluZygpO1xuXHRcdFx0dGhpcy5yZWZyZXNoVW5TZWxlY3RlZFF1aWNrRmlsdGVyQ291bnRzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIFBhc3RlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgZXZlbnRcblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHQgKlxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGFzeW5jIG9uUGFzdGUoZXZ0OiBQYXN0ZVByb3ZpZGVyJFBhc3RlRXZlbnQsIGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgcmF3UGFzdGVkRGF0YSA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0c291cmNlID0gZXZ0LmdldFNvdXJjZSgpLFxuXHRcdFx0dGFibGUgPSAoc291cmNlLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyBzb3VyY2UgOiAoc291cmNlIGFzIENvbnRyb2wpLmdldFBhcmVudCgpKSBhcyBUYWJsZSxcblx0XHRcdGludGVybmFsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXG5cdFx0Ly8gSWYgcGFzdGUgaXMgZGlzYWJsZSBvciBpZiB3ZSdyZSBub3QgaW4gZWRpdCBtb2RlLCB3ZSBjYW4ndCBwYXN0ZSBhbnl0aGluZ1xuXHRcdGlmICghdGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVQYXN0ZSB8fCAhKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvL1RoaXMgY29kZSBpcyBleGVjdXRlZCBvbmx5IGluIGNhc2Ugb2YgVHJlZVRhYmxlXG5cdFx0aWYgKGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIpKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRDb250ZXh0UGF0aCA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIilbMF0gYXMgc3RyaW5nO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50Q29udGV4dCA9IHRhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKVswXSBhcyBDb250ZXh0O1xuXHRcdFx0Y29uc3QgdGFyZ2V0Q29udGV4dCA9IHRhYmxlXG5cdFx0XHRcdC5nZXRSb3dCaW5kaW5nKClcblx0XHRcdFx0LmdldEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHRcdC5maW5kKChjb250ZXh0KSA9PiBjb250ZXh0LmdldFBhdGgoKSA9PT0gdGFyZ2V0Q29udGV4dFBhdGgpO1xuXG5cdFx0XHRpZiAoIXRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiVGhlIEN1dCBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsIGJlY2F1c2UgdGhlIHJlbGV2YW50IGNvbnRleHQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdGFyZ2V0Q29udGV4dC5tb3ZlKHsgcGFyZW50OiBuZXdQYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiVGhlIG1vdmUgY29udGV4dCBmYWlscyBcIiwgZSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9UaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZm9yIHRhYmxlcyBleGNlcHRlZCBUcmVlVGFibGVcblx0XHRpZiAodGFibGUuZ2V0RW5hYmxlUGFzdGUoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0UGFzdGVIZWxwZXIucGFzdGVEYXRhKHJhd1Bhc3RlZERhdGEsIHRhYmxlLCBjb250cm9sbGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfT1BfQ09OVFJPTExFUl9TQVBGRV9QQVNURV9ESVNBQkxFRF9NRVNTQUdFXCIpLCB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dCBvcGVyYXRpb24uXG5cdCAqIEBwYXJhbSBldnQgVGhlIFVJNSBldmVudFxuXHQgKlxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uQ3V0KGV2dDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9IChldnQuZ2V0U291cmNlKCkgYXMgVUk1RWxlbWVudCkuZ2V0UGFyZW50KCkgYXMgVGFibGU7XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAodGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpLmxlbmd0aCA+IDEpIHtcblx0XHRcdExvZy5lcnJvcihcIk11bHRpIGN1dHRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcInBhc3RhYmxlQ29udGV4dHNcIixcblx0XHRcdHRhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKS5tYXAoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdCk7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3coUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9DVVRfUkVBRFlcIikpO1xuXHRcdHRhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3V0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0fVxuXG5cdC8vIFRoaXMgZXZlbnQgd2lsbCBhbGxvdyB1cyB0byBpbnRlcmNlcHQgdGhlIGV4cG9ydCBiZWZvcmUgaXMgdHJpZ2dlcmVkIHRvIGNvdmVyIHNwZWNpZmljIGNhc2VzXG5cdC8vIHRoYXQgY291bGRuJ3QgYmUgYWRkcmVzc2VkIG9uIHRoZSBwcm9wZXJ0eUluZm9zIGZvciBlYWNoIGNvbHVtbi5cblx0Ly8gZS5nLiBGaXhlZCBUYXJnZXQgVmFsdWUgZm9yIHRoZSBkYXRhcG9pbnRzXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkJlZm9yZUV4cG9ydChleHBvcnRFdmVudDogVGFibGUkQmVmb3JlRXhwb3J0RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBpc1NwbGl0TW9kZSA9ICEhKGV4cG9ydEV2ZW50LmdldFBhcmFtZXRlcihcInVzZXJFeHBvcnRTZXR0aW5nc1wiKSBhcyBVc2VyRXhwb3J0U2V0dGluZ3MpPy5zcGxpdENlbGxzO1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbGxlciA9IGV4cG9ydEV2ZW50LmdldFNvdXJjZSgpIGFzIFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3MgPSBleHBvcnRFdmVudC5nZXRQYXJhbWV0ZXIoXCJleHBvcnRTZXR0aW5nc1wiKSBhcyBFeHBvcnRTZXR0aW5ncyxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cblx0XHRUYWJsZUFQSS51cGRhdGVFeHBvcnRTZXR0aW5ncyhleHBvcnRTZXR0aW5ncywgdGFibGVEZWZpbml0aW9uLCB0YWJsZUNvbnRyb2xsZXIsIGlzU3BsaXRNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBNREMgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiB0byBkaXNwbGF5IG1lc3NhZ2VTdHJpcCBvbiBhIHRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb01lc3NhZ2Vcblx0ICogQHBhcmFtIG9UYWJsZVxuXHQgKiBAbmFtZSBkYXRhU3RhdGVGaWx0ZXJcblx0ICogQHJldHVybnMgV2hldGhlciB0byByZW5kZXIgdGhlIG1lc3NhZ2VTdHJpcCB2aXNpYmxlXG5cdCAqL1xuXHRzdGF0aWMgZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKG9NZXNzYWdlOiBhbnksIG9UYWJsZTogYW55KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc1RhYmxlQ29udGV4dEJpbmRpbmdQYXRoID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRjb25zdCBzVGFibGVSb3dCaW5kaW5nID0gKHNUYWJsZUNvbnRleHRCaW5kaW5nUGF0aCA/IGAke3NUYWJsZUNvbnRleHRCaW5kaW5nUGF0aH0vYCA6IFwiXCIpICsgb1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIHNUYWJsZVJvd0JpbmRpbmcgPT09IG9NZXNzYWdlLmdldFRhcmdldHMoKVswXSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGhhbmRsZXMgdGhlIERhdGFTdGF0ZSBvZiB0aGUgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiBmcm9tIE1EQyBvbiBhIHRhYmxlLlxuXHQgKiBJdCdzIGZpcmVkIHdoZW4gbmV3IGVycm9yIG1lc3NhZ2VzIGFyZSBzZW50IGZyb20gdGhlIGJhY2tlbmQgdG8gdXBkYXRlIHJvdyBoaWdobGlnaHRpbmcuXG5cdCAqXG5cdCAqIEBuYW1lIG9uRGF0YVN0YXRlQ2hhbmdlXG5cdCAqIEBwYXJhbSBldnQgRXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25EYXRhU3RhdGVDaGFuZ2UoZXZ0OiBEYXRhU3RhdGVJbmRpY2F0b3IkRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBkYXRhU3RhdGVJbmRpY2F0b3IgPSBldnQuZ2V0U291cmNlKCkgYXMgRGF0YVN0YXRlSW5kaWNhdG9yO1xuXHRcdGNvbnN0IGZpbHRlcmVkTWVzc2FnZXMgPSBldnQuZ2V0UGFyYW1ldGVyKFwiZmlsdGVyZWRNZXNzYWdlc1wiKSBhcyBNZXNzYWdlW107XG5cdFx0aWYgKGZpbHRlcmVkTWVzc2FnZXMpIHtcblx0XHRcdGNvbnN0IGhpZGRlbk1hbmRhdG9yeVByb3BlcnRpZXMgPSBmaWx0ZXJlZE1lc3NhZ2VzXG5cdFx0XHRcdC5tYXAoKG1zZykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHMgPSAobXNnLmdldFRlY2huaWNhbERldGFpbHMoKSB8fCB7fSkgYXMge1xuXHRcdFx0XHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdFx0XHRcdGVtcHR5Um93TWVzc2FnZT86IGJvb2xlYW47XG5cdFx0XHRcdFx0XHRtaXNzaW5nQ29sdW1uPzogc3RyaW5nO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0cmV0dXJuIHRlY2huaWNhbERldGFpbHMuZW1wdHlSb3dNZXNzYWdlID09PSB0cnVlICYmIHRlY2huaWNhbERldGFpbHMubWlzc2luZ0NvbHVtbjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbHRlcigoaGlkZGVuUHJvcGVydHkpID0+ICEhaGlkZGVuUHJvcGVydHkpO1xuXHRcdFx0aWYgKGhpZGRlbk1hbmRhdG9yeVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VTdHJpcEVycm9yID0gc2FwLnVpXG5cdFx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHRcdC5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpXG5cdFx0XHRcdFx0LmdldFRleHQoXG5cdFx0XHRcdFx0XHRoaWRkZW5NYW5kYXRvcnlQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0XHQ/IFwiTV9NRVNTQUdFU1RSSVBfRU1QVFlST1dfTUFOREFUT1JZX0hJRERFTlwiXG5cdFx0XHRcdFx0XHRcdDogXCJNX01FU1NBR0VTVFJJUF9FTVBUWVJPV19NQU5EQVRPUllfSElEREVOX1BMVVJBTFwiLFxuXHRcdFx0XHRcdFx0W2hpZGRlbk1hbmRhdG9yeVByb3BlcnRpZXMuam9pbihcIiwgXCIpXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGRhdGFTdGF0ZUluZGljYXRvci5zaG93TWVzc2FnZShtZXNzYWdlU3RyaXBFcnJvciwgXCJFcnJvclwiKTtcblx0XHRcdFx0ZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZGF0YVN0YXRlSW5kaWNhdG9yLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcImZpbHRlcmVkTWVzc2FnZXNcIiwgZmlsdGVyZWRNZXNzYWdlcywgZGF0YVN0YXRlSW5kaWNhdG9yLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGNvbHVtbnMgdG8gYmUgZXhwb3J0ZWQgb2YgYSB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSB0YWJsZSBleHBvcnQgc2V0dGluZ3Ncblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIHRhYmxlQ29udHJvbGxlciBUaGUgdGFibGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gaXNTcGxpdE1vZGUgRGVmaW5lcyBpZiB0aGUgZXhwb3J0IGhhcyBiZWVuIGxhdW5jaGVkIHVzaW5nIHNwbGl0IG1vZGVcblx0ICogQHJldHVybnMgVGhlIHVwZGF0ZWQgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKi9cblx0c3RhdGljIHVwZGF0ZUV4cG9ydFNldHRpbmdzKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBFeHBvcnRTZXR0aW5ncyxcblx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0XHR0YWJsZUNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRcdGlzU3BsaXRNb2RlOiBib29sZWFuXG5cdCk6IEV4cG9ydFNldHRpbmdzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGFibGVEZWZpbml0aW9uLmNvbHVtbnM7XG5cdFx0dGhpcy5zZXRTdGF0aWNTaXplTGltaXQodGFibGVEZWZpbml0aW9uLCBleHBvcnRTZXR0aW5ncyk7XG5cblx0XHRpZiAoZXhwb3J0U2V0dGluZ3MuZmlsZVR5cGUgPT09IFwiUERGXCIpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbHVtbnMgPSB0aGlzLnJlbW92ZU11bHRpVmFsdWVGaWVsZHNGcm9tQ29sdW1uc1RvQmVFeHBvcnRlZChcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3Mud29ya2Jvb2suY29sdW1ucyxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCBleHBvcnRDb2x1bW5zID0gZXhwb3J0U2V0dGluZ3Mud29ya2Jvb2suY29sdW1ucztcblx0XHRmb3IgKGxldCBpbmRleCA9IGV4cG9ydENvbHVtbnMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuXHRcdFx0Y29uc3QgZXhwb3J0Q29sdW1uID0gZXhwb3J0Q29sdW1uc1tpbmRleF07XG5cdFx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKTtcblx0XHRcdGV4cG9ydENvbHVtbi5sYWJlbCA9IGdldExvY2FsaXplZFRleHQoZXhwb3J0Q29sdW1uLmxhYmVsLCB0YWJsZUNvbnRyb2xsZXIpO1xuXHRcdFx0dGhpcy50cmFuc2xhdGVCb29sZWFuVmFsdWVGb3JFeHBvcnQoZXhwb3J0Q29sdW1uLCByZXNvdXJjZUJ1bmRsZSk7XG5cdFx0XHRpZiAoaXNTcGxpdE1vZGUpIHtcblx0XHRcdFx0dGhpcy5hZGRUYXJnZXRWYWx1ZUNvbHVtbihjb2x1bW5zLCBleHBvcnRDb2x1bW4sIGV4cG9ydENvbHVtbnMsIHJlc291cmNlQnVuZGxlLCBpbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGNvbHVtbiBjb250YWluaW5nIG11bHRpdmFsdWUgZmllbGRzIGZyb20gdGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBleHBvcnRlZC5cblx0ICpcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbnMgVGhlIGluaXRpYWwgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEBwYXJhbSB0YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEByZXR1cm5zIFRoZSBuZXcgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGluZyBleGNsdWRpbmcgY29sdW1ucyB3aXRoIG11bHRpdmFsdWVzXG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlTXVsdGlWYWx1ZUZpZWxkc0Zyb21Db2x1bW5zVG9CZUV4cG9ydGVkKFxuXHRcdGV4cG9ydENvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uXG5cdCk6IEV4cG9ydENvbHVtbltdIHtcblx0XHQvL1xuXHRcdHJldHVybiBleHBvcnRDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB7XG5cdFx0XHRjb25zdCBjb2x1bVByb3BlcnR5ID0gKENvcmUuYnlJZChjb2x1bW4uY29sdW1uSWQgYXMgc3RyaW5nKSBhcyBNRENDb2x1bW4pPy5nZXRQcm9wZXJ0eUtleSgpO1xuXHRcdFx0aWYgKGNvbHVtUHJvcGVydHkpIHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQodGFibGVEZWZpbml0aW9uLmNvbHVtbnMuZmluZCgoY29sdW1uRGVmaW5pdGlvbikgPT4gY29sdW1uRGVmaW5pdGlvbi5uYW1lID09PSBjb2x1bVByb3BlcnR5KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pXG5cdFx0XHRcdFx0XHQ/LmlzTXVsdGlWYWx1ZSAhPT0gdHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgc3RhdGljIHNpemUgbGltaXQgZm9yIHRoZSB0YWJsZSBleHBvcnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgdGFibGUgZXhwb3J0IHNldHRpbmdzXG5cdCAqL1xuXHRzdGF0aWMgc2V0U3RhdGljU2l6ZUxpbWl0KHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLCBleHBvcnRTZXR0aW5nczogRXhwb3J0U2V0dGluZ3MpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHQhdGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyAmJlxuXHRcdFx0KHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfHwgdGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIilcblx0XHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLmRhdGFTb3VyY2Uuc2l6ZUxpbWl0ID0gMTAwMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyBpZiBhIGNvbHVtbiB0aGF0IGlzIHRvIGJlIGV4cG9ydGVkIGFuZCBjb250YWlucyBhIERhdGFQb2ludCB3aXRoIGEgZml4ZWQgdGFyZ2V0IHZhbHVlIG5lZWRzIHRvIGJlIGFkZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZnJvbSB0aGUgYW5ub3RhdGlvbnMgY29sdW1uXG5cdCAqIEBwYXJhbSBjb2x1bW5FeHBvcnQgVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlZmVyZW5jZWQgY29sdW1uIGhhcyBkZWZpbmVkIGEgdGFyZ2V0VmFsdWUgZm9yIHRoZSBkYXRhUG9pbnQsIGZhbHNlIGVsc2Vcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHN0YXRpYyBjb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQoY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGNvbHVtbkV4cG9ydDogRXhwb3J0Q29sdW1uKTogYm9vbGVhbiB7XG5cdFx0bGV0IGNvbHVtbk5lZWRzVG9CZUFkZGVkID0gZmFsc2U7XG5cdFx0aWYgKGNvbHVtbi5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSAmJiBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvL0FkZCBUYXJnZXRWYWx1ZSBjb2x1bW4gd2hlbiBleHBvcnRpbmcgb24gc3BsaXQgbW9kZVxuXHRcdFx0Ly8gcGFydCBvZiBhIEZpZWxkR3JvdXAgb3IgZnJvbSBhIGxpbmVJdGVtIG9yIGZyb20gYSBjb2x1bW4gb24gdGhlIGVudGl0eVNldFxuXHRcdFx0ZGVsZXRlIGNvbHVtbkV4cG9ydC50ZW1wbGF0ZTtcblx0XHRcdGNvbHVtbk5lZWRzVG9CZUFkZGVkID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbHVtbk5lZWRzVG9CZUFkZGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY29sdW1uJ3MgcHJvcGVydHkgY29ycmVzcG9uZHMgdG8gdGhlIGV4cG9ydENvbHVtbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIFdoZXRoZXIgdGhlIGNvbHVtbiBoYXMgdGhlIGV4cG9ydENvbHVtbiBwcm9wZXJ0eVxuXHQgKi9cblx0c3RhdGljIGlzUHJvcGVydHlGcm9tRXhwb3J0KGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdGNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGV4cG9ydENvbHVtbi5wcm9wZXJ0eSB8fFxuXHRcdFx0ZXhwb3J0Q29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKGNvbHVtbi5yZWxhdGl2ZVBhdGgpIHx8XG5cdFx0XHRleHBvcnRDb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoY29sdW1uLm5hbWUpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXNcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSAmJiBleHBvcnRDb2x1bW4ucHJvcGVydHlbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eUluZm9zWzBdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHRyYW5zbGF0ZWQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbHVtbiB3aXRoIGJvb2xlYW4gdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKi9cblx0c3RhdGljIHRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKTogdm9pZCB7XG5cdFx0aWYgKGV4cG9ydENvbHVtbi50eXBlID09PSBcIkJvb2xlYW5cIikge1xuXHRcdFx0ZXhwb3J0Q29sdW1uLmZhbHNlVmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwibm9cIik7XG5cdFx0XHRleHBvcnRDb2x1bW4udHJ1ZVZhbHVlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcInllc1wiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIHRhcmdldCB2YWx1ZSBjb2x1bW4gd2hlbiB0aGVyZSBpcyBhIGRhdGFwb2ludCBjb2x1bW4uXG5cdCAqXG5cdCAqIEBwYXJhbSBjb2x1bW5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICovXG5cdHN0YXRpYyBhZGRUYXJnZXRWYWx1ZUNvbHVtbihcblx0XHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdGV4cG9ydENvbHVtbjogRXhwb3J0Q29sdW1uLFxuXHRcdGV4cG9ydENvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuXHRcdHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSxcblx0XHRpbmRleDogbnVtYmVyXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlQ29sdW1uID0gKGNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pPy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghdGhpcy5pc1Byb3BlcnR5RnJvbUV4cG9ydChjb2x1bW4sIGV4cG9ydENvbHVtbikpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkKGNvbHVtbiwgZXhwb3J0Q29sdW1uKTtcblx0XHR9KTtcblx0XHRpZiAodGFyZ2V0VmFsdWVDb2x1bW4pIHtcblx0XHRcdGNvbnN0IGNvbHVtblRvQmVBZGRlZCA9IHtcblx0XHRcdFx0bGFiZWw6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUYXJnZXRWYWx1ZVwiKSxcblx0XHRcdFx0cHJvcGVydHk6IEFycmF5LmlzQXJyYXkoZXhwb3J0Q29sdW1uLnByb3BlcnR5KSA/IGV4cG9ydENvbHVtbi5wcm9wZXJ0eSA6IFtleHBvcnRDb2x1bW4ucHJvcGVydHldLFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGFyZ2V0VmFsdWVDb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWVcblx0XHRcdH07XG5cdFx0XHRleHBvcnRDb2x1bW5zLnNwbGljZShpbmRleCArIDEsIDAsIGNvbHVtblRvQmVBZGRlZCk7XG5cdFx0fVxuXHR9XG5cblx0cmVzdW1lQmluZGluZyhiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiLCBmYWxzZSk7XG5cdFx0aWYgKChiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgJiYgISh0aGlzIGFzIGFueSkuZ2V0RGF0YUluaXRpYWxpemVkKCkpIHx8IHRoaXMuZ2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIikpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgZmFsc2UpO1xuXHRcdFx0KHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk/LnJlYmluZCgpO1xuXHRcdH1cblx0fVxuXG5cdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzKG9GaWx0ZXJDb250cm9sOiBDb250cm9sKTogYW55W10ge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQ29udHJvbCwgb1RhYmxlKTtcblx0fVxuXG5cdHN1c3BlbmRCaW5kaW5nKCkge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIsIHRydWUpO1xuXHR9XG5cblx0aW52YWxpZGF0ZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImRhdGFJbml0aWFsaXplZFwiLCBmYWxzZSk7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZW5hYmxlbWVudCBvZiB0aGUgY3JlYXRpb24gcm93LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0RmFzdENyZWF0aW9uUm93RW5hYmxlbWVudCgpIHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXG5cdFx0aWYgKGZhc3RDcmVhdGlvblJvdyAmJiAhZmFzdENyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdGFibGVCaW5kaW5nLmdldENvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0XHRpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdGZhc3RDcmVhdGlvblJvdyxcblx0XHRcdFx0XHR0YWJsZUJpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0KHRhYmxlLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gY3JlYXRlIGluc2lnaHRzUGFyYW1zIGFuZCBjYWxsIHRoZSBBUEkgdG8gc2hvdyBpbnNpZ2h0cyBjYXJkIHByZXZpZXcgZm9yIHRhYmxlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgdGhlIGNhcmQgcHJldmlldyBpcyByZW5kZXJlZC5cblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRhc3luYyBvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5zaWdodHNSZWxldmFudENvbHVtbnMgPSBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpO1xuXHRcdFx0Y29uc3QgaW5zaWdodHNQYXJhbXMgPSBhd2FpdCBUYWJsZUluc2lnaHRzSGVscGVyLmNyZWF0ZVRhYmxlQ2FyZFBhcmFtcyh0aGlzLCBpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyk7XG5cdFx0XHRpZiAoaW5zaWdodHNQYXJhbXMpIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZTogQ2FyZE1lc3NhZ2UgPSBpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzLmlzTmF2aWdhdGlvbkVuYWJsZWRcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIldhcm5pbmdcIixcblx0XHRcdFx0XHRcdFx0dGV4dDogdGhpcy5jcmVhdGVOYXZpZ2F0aW9uRXJyb3JNZXNzYWdlKHRoaXMuY29udGVudClcblx0XHRcdFx0XHQgIH07XG5cblx0XHRcdFx0SW5zaWdodHNTZXJ2aWNlLnNob3dJbnNpZ2h0c0NhcmRQcmV2aWV3KGluc2lnaHRzUGFyYW1zLCBtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlKHRoaXMuY29udGVudCk7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjYXJkIG1hbmlmZXN0IG9wdGltaXplZCBmb3IgdGhlIHRhYmxlIGNhc2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgQ2FyZE1hbmlmZXN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldENhcmRNYW5pZmVzdFRhYmxlKCk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdFx0Y29uc3QgaW5zaWdodHNSZWxldmFudENvbHVtbnMgPSBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpO1xuXHRcdGNvbnN0IGluc2lnaHRzUGFyYW1zID0gKGF3YWl0IFRhYmxlSW5zaWdodHNIZWxwZXIuY3JlYXRlVGFibGVDYXJkUGFyYW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zXG5cdFx0KSkgYXMgSW5zaWdodHNQYXJhbXM8VGFibGVDb250ZW50Pjtcblx0XHRyZXR1cm4gSW5zaWdodHNTZXJ2aWNlLmdldENhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtcyk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBjYXJkIFRoZSBjYXJkIG1hbmlmZXN0IHRvIGJlIHVzZWQgZm9yIHRoZSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgb25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrKGNhcmQ6IENhcmRNYW5pZmVzdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoY2FyZCkge1xuXHRcdFx0XHRhd2FpdCBJbnNpZ2h0c1NlcnZpY2Uuc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXcoY2FyZCwgdGhpcy5nZXRDb250cm9sbGVyKCkuY29sbGFib3JhdGlvbk1hbmFnZXIuZ2V0U2VydmljZSgpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlKHRoaXMuY29udGVudCk7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2Uoc2NvcGU6IENvbnRyb2wpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwoc2NvcGUpO1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1JPV19MRVZFTF9OQVZJR0FUSU9OX0RJU0FCTEVEX01TR19SRUFTT05fRVhURVJOQUxfTkFWSUdBVElPTl9DT05GSUdVUkVEXCIpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKG9FdmVudDogVUk1RXZlbnQsIHBhZ2VDb250cm9sbGVyOiBhbnkpIHtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKHBhZ2VDb250cm9sbGVyICYmIHBhZ2VDb250cm9sbGVyLm1hc3NFZGl0KSB7XG5cdFx0XHRwYWdlQ29udHJvbGxlci5tYXNzRWRpdC5vcGVuTWFzc0VkaXREaWFsb2cob1RhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJUaGUgQ29udHJvbGxlciBpcyBub3QgZW5oYW5jZWQgd2l0aCBNYXNzIEVkaXQgZnVuY3Rpb25hbGl0eVwiKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25UYWJsZVNlbGVjdGlvbkNoYW5nZShvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwgb0V2ZW50LmdldFBhcmFtZXRlcnMoKSk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0YXN5bmMgb25BY3Rpb25QcmVzcyhvRXZlbnQ6IFVJNUV2ZW50LCBwYWdlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyYW1ldGVyczogYW55KSB7XG5cdFx0cGFyYW1ldGVycy5tb2RlbCA9IChvRXZlbnQuZ2V0U291cmNlKCkgYXMgQ29udHJvbCkuZ2V0TW9kZWwoKTtcblx0XHRsZXQgZXhlY3V0ZUFjdGlvbiA9IHRydWU7XG5cdFx0aWYgKHBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzICYmIHBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIHdlIGhhdmUgbm9uIGFwcGxpY2FibGUgY29udGV4dHMsIHdlIG5lZWQgdG8gb3BlbiBhIGRpYWxvZyB0byBhc2sgdGhlIHVzZXIgaWYgaGUgd2FudHMgdG8gY29udGludWVcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKHBhcmFtZXRlcnMubW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPEVudGl0eVR5cGU+KHRoaXMuZW50aXR5VHlwZUZ1bGx5UXVhbGlmaWVkTmFtZSkudGFyZ2V0ITtcblx0XHRcdGNvbnN0IG15VW5hcHBsaWNhYmxlQ29udGV4dERpYWxvZyA9IG5ldyBOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyh7XG5cdFx0XHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0czogcGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdHRpdGxlOiBwYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpXG5cdFx0XHR9KTtcblx0XHRcdHBhcmFtZXRlcnMuY29udGV4dHMgPSBwYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cztcblx0XHRcdGV4ZWN1dGVBY3Rpb24gPSBhd2FpdCBteVVuYXBwbGljYWJsZUNvbnRleHREaWFsb2cub3Blbih0aGlzKTtcblx0XHR9XG5cdFx0aWYgKGV4ZWN1dGVBY3Rpb24pIHtcblx0XHRcdC8vIERpcmVjdCBleGVjdXRpb24gb2YgdGhlIGFjdGlvblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHBhZ2VDb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihhY3Rpb25OYW1lLCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0TG9nLmluZm8oZSBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBvc2UgdGhlIGludGVybmFsIHRhYmxlIGRlZmluaXRpb24gZm9yIGV4dGVybmFsIHVzYWdlIGluIGRlbGVnYXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdGFibGVEZWZpbml0aW9uXG5cdCAqL1xuXHRnZXRUYWJsZURlZmluaXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFibGVEZWZpbml0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIGNvbm5lY3QgdGhlIGZpbHRlciB0byB0aGUgdGFibGVBUEkgaWYgcmVxdWlyZWRcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVBUElcblx0ICovXG5cblx0dXBkYXRlRmlsdGVyQmFyKCkge1xuXHRcdGNvbnN0IHRhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgZmlsdGVyQmFyUmVmSWQgPSAodGhpcyBhcyBhbnkpLmdldEZpbHRlckJhcigpO1xuXHRcdGlmICh0YWJsZSAmJiBmaWx0ZXJCYXJSZWZJZCAmJiB0YWJsZS5nZXRGaWx0ZXIoKSAhPT0gZmlsdGVyQmFyUmVmSWQpIHtcblx0XHRcdHRoaXMuX3NldEZpbHRlckJhcihmaWx0ZXJCYXJSZWZJZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZpbHRlciBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZmlsdGVyQmFyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyUmVmSWQgSWQgb2YgdGhlIGZpbHRlciBiYXJcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVBUElcblx0ICovXG5cdF9zZXRGaWx0ZXJCYXIoZmlsdGVyQmFyUmVmSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cblx0XHQvLyAnZmlsdGVyQmFyJyBwcm9wZXJ0eSBvZiBtYWNybzpUYWJsZShwYXNzZWQgYXMgY3VzdG9tRGF0YSkgbWlnaHQgYmVcblx0XHQvLyAxLiBBIGxvY2FsSWQgd3J0IFZpZXcoRlBNIGV4cGxvcmVyIGV4YW1wbGUpLlxuXHRcdC8vIDIuIEFic29sdXRlIElkKHRoaXMgd2FzIG5vdCBzdXBwb3J0ZWQgaW4gb2xkZXIgdmVyc2lvbnMpLlxuXHRcdC8vIDMuIEEgbG9jYWxJZCB3cnQgRnJhZ21lbnRJZCh3aGVuIGFuIFhNTENvbXBvc2l0ZSBvciBGcmFnbWVudCBpcyBpbmRlcGVuZGVudGx5IHByb2Nlc3NlZCkgaW5zdGVhZCBvZiBWaWV3SWQuXG5cdFx0Ly8gICAgJ2ZpbHRlckJhcicgd2FzIHN1cHBvcnRlZCBlYXJsaWVyIGFzIGFuICdhc3NvY2lhdGlvbicgdG8gdGhlICdtZGM6VGFibGUnIGNvbnRyb2wgaW5zaWRlICdtYWNybzpUYWJsZScgaW4gcHJpb3IgdmVyc2lvbnMuXG5cdFx0Ly8gICAgSW4gbmV3ZXIgdmVyc2lvbnMgJ2ZpbHRlckJhcicgaXMgdXNlZCBsaWtlIGFuIGFzc29jaWF0aW9uIHRvICdtYWNybzpUYWJsZUFQSScuXG5cdFx0Ly8gICAgVGhpcyBtZWFucyB0aGF0IHRoZSBJZCBpcyByZWxhdGl2ZSB0byAnbWFjcm86VGFibGVBUEknLlxuXHRcdC8vICAgIFRoaXMgc2NlbmFyaW8gaGFwcGVucyBpbiBjYXNlIG9mIEZpbHRlckJhciBhbmQgVGFibGUgaW4gYSBjdXN0b20gc2VjdGlvbnMgaW4gT1Agb2YgRkVWNC5cblxuXHRcdGNvbnN0IHRhYmxlQVBJSWQgPSB0aGlzPy5nZXRJZCgpO1xuXHRcdGNvbnN0IHRhYmxlQVBJTG9jYWxJZCA9IHRoaXMuZGF0YShcInRhYmxlQVBJTG9jYWxJZFwiKTtcblx0XHRjb25zdCBwb3RlbnRpYWxmaWx0ZXJCYXJJZCA9XG5cdFx0XHR0YWJsZUFQSUxvY2FsSWQgJiYgZmlsdGVyQmFyUmVmSWQgJiYgdGFibGVBUElJZCAmJiB0YWJsZUFQSUlkLnJlcGxhY2UobmV3IFJlZ0V4cCh0YWJsZUFQSUxvY2FsSWQgKyBcIiRcIiksIGZpbHRlckJhclJlZklkKTsgLy8gM1xuXG5cdFx0Y29uc3QgZmlsdGVyQmFyID1cblx0XHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk/LmJ5SWQoZmlsdGVyQmFyUmVmSWQpIHx8IENvcmUuYnlJZChmaWx0ZXJCYXJSZWZJZCkgfHwgQ29yZS5ieUlkKHBvdGVudGlhbGZpbHRlckJhcklkKTtcblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGlmIChmaWx0ZXJCYXIuaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRcdFx0dGFibGUuc2V0RmlsdGVyKGAke2ZpbHRlckJhci5nZXRJZCgpfS1jb250ZW50YCk7XG5cdFx0XHR9IGVsc2UgaWYgKGZpbHRlckJhci5pc0E8RmlsdGVyQmFyPihcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdHRhYmxlLnNldEZpbHRlcihmaWx0ZXJCYXIuZ2V0SWQoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tJZkNvbHVtbkV4aXN0cyhhRmlsdGVyZWRDb2x1bW1uczogYW55LCBjb2x1bW5OYW1lOiBhbnkpIHtcblx0XHRyZXR1cm4gYUZpbHRlcmVkQ29sdW1tbnMuc29tZShmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChvQ29sdW1uPy5jb2x1bW5OYW1lID09PSBjb2x1bW5OYW1lICYmIG9Db2x1bW4/LnNDb2x1bW5OYW1lVmlzaWJsZSkgfHxcblx0XHRcdFx0KG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ID09PSBjb2x1bW5OYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBjb2x1bW5OYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlZCB0aGUgdGVjaG5pY2FsIGFuZCBzZW1hbnRpYyBrZXlzIG9mIHJvb3QgZW50aXR5IHNldHMuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgY29udGFpbmluZyB0ZWNobmljYWwgYW5kIHNlbWFudGljIGtleXMgb2YgdGhlIGVudGl0eS5cblx0ICovXG5cdGdldFJvb3RLZXlzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdFx0Y29uc3Qgcm9vdENvbnRleHQgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEN1cnJlbnRSb290Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHJvb3RDb250ZXh0Py5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAobWV0YU1vZGVsKSB7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChyb290Q29udGV4dD8uZ2V0UGF0aCgpIGFzIHN0cmluZyk7XG5cdFx0XHRjb25zdCBkYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG1ldGFQYXRoKSk7XG5cdFx0XHRjb25zdCByb290U2VtYW50aWNLZXlzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleTtcblx0XHRcdGxldCBzZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRpZiAocm9vdFNlbWFudGljS2V5cykge1xuXHRcdFx0XHRzZW1hbnRpY0tleXMgPSByb290U2VtYW50aWNLZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGtleS52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByb290VGVjaG5pY2FsS2V5cyA9IGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmtleXM7XG5cdFx0XHRsZXQgdGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChyb290VGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHR0ZWNobmljYWxLZXlzID0gcm9vdFRlY2huaWNhbEtleXMubWFwKChrZXkpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXMsXG5cdFx0XHRcdHRlY2huaWNhbEtleXM6IHRlY2huaWNhbEtleXNcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldElkZW50aWZpZXJDb2x1bW4oaXNSZWNvbW1lbmRhdGlvblJlbGV2YW50PzogYm9vbGVhbik6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVGl0bGU7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNDdXJyZW50RW50aXR5U2V0TmFtZSA9IG9UYWJsZS5kYXRhKFwibWV0YVBhdGhcIik7XG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyRLZXlgKTtcblx0XHRjb25zdCBhRmlsdGVyZWRUZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChhVGVjaG5pY2FsS2V5cyAmJiBhVGVjaG5pY2FsS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhVGVjaG5pY2FsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZWNobmljYWxLZXk6IHN0cmluZykge1xuXHRcdFx0XHRpZiAodGVjaG5pY2FsS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzLnB1c2godGVjaG5pY2FsS2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlbWFudGljS2V5Q29sdW1ucyA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuc2VtYW50aWNLZXlzO1xuXG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zOiBhbnkgPSBbXTtcblx0XHRjb25zdCBhRmlsdGVyZWRDb2x1bW1uczogYW55ID0gW107XG5cdFx0Y29uc3QgYVRhYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0YVRhYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IG9Db2x1bW4/LmdldERhdGFQcm9wZXJ0eSgpO1xuXHRcdFx0YVZpc2libGVDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHR9KTtcblxuXHRcdGFWaXNpYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyR7b0NvbHVtbn1AYCk7XG5cdFx0XHRjb25zdCBzVGV4dEFycmFuZ2VtZW50ID0gb1RleHRBcnJhbmdlbWVudCAmJiBvVGV4dEFycmFuZ2VtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdPy4kUGF0aDtcblx0XHRcdGNvbnN0IHNUZXh0UGxhY2VtZW50ID1cblx0XHRcdFx0b1RleHRBcnJhbmdlbWVudCAmJlxuXHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXT8uJEVudW1NZW1iZXI7XG5cdFx0XHRhRmlsdGVyZWRDb2x1bW1ucy5wdXNoKHtcblx0XHRcdFx0Y29sdW1uTmFtZTogb0NvbHVtbixcblx0XHRcdFx0c1RleHRBcnJhbmdlbWVudDogc1RleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0c0NvbHVtbk5hbWVWaXNpYmxlOiAhKHNUZXh0UGxhY2VtZW50ID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIilcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGxldCBjb2x1bW46IGFueTtcblx0XHRpZiAoaXNSZWNvbW1lbmRhdGlvblJlbGV2YW50KSB7XG5cdFx0XHRjb25zdCByb290S2V5cyA9IHRoaXMuZ2V0Um9vdEtleXMoKTtcblx0XHRcdGlmIChzZW1hbnRpY0tleUNvbHVtbnMgIT09IHVuZGVmaW5lZCAmJiBzZW1hbnRpY0tleUNvbHVtbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW4gPSBzZW1hbnRpY0tleUNvbHVtbnMuZmlsdGVyKChrZXkpID0+ICFyb290S2V5cy5zZW1hbnRpY0tleXMuaW5jbHVkZXMoa2V5KSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFGaWx0ZXJlZFRlY2huaWNhbEtleXMgIT09IHVuZGVmaW5lZCAmJiBhRmlsdGVyZWRUZWNobmljYWxLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uID0gYUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5maWx0ZXIoKGtleSkgPT4gIXJvb3RLZXlzLnRlY2huaWNhbEtleXMuaW5jbHVkZXMoa2V5KSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uO1xuXHRcdH1cblxuXHRcdGlmIChoZWFkZXJJbmZvVGl0bGVQYXRoICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jaGVja0lmQ29sdW1uRXhpc3RzKGFGaWx0ZXJlZENvbHVtbW5zLCBoZWFkZXJJbmZvVGl0bGVQYXRoKSkge1xuXHRcdFx0Y29sdW1uID0gaGVhZGVySW5mb1RpdGxlUGF0aDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5sZW5ndGggPT09IDEgJiZcblx0XHRcdHRoaXMuY2hlY2tJZkNvbHVtbkV4aXN0cyhhRmlsdGVyZWRDb2x1bW1ucywgc2VtYW50aWNLZXlDb2x1bW5zWzBdKVxuXHRcdCkge1xuXHRcdFx0Y29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMubGVuZ3RoID09PSAxICYmXG5cdFx0XHR0aGlzLmNoZWNrSWZDb2x1bW5FeGlzdHMoYUZpbHRlcmVkQ29sdW1tbnMsIGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF0pXG5cdFx0KSB7XG5cdFx0XHRjb2x1bW4gPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gY29sdW1uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVtcHR5Um93c0VuYWJsZWQgc2V0dGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW5hYmxlbWVudFxuXHQgKi9cblx0c2V0RW1wdHlSb3dzRW5hYmxlZChlbmFibGVtZW50OiBib29sZWFuKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVtcHR5Um93c0VuYWJsZWRcIiwgZW5hYmxlbWVudCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSB0aGlzLmNvbnRlbnQuZGF0YSgpLm5hdmlnYXRpb25QYXRoO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmNvbnRlbnQpO1xuXHRcdGlmIChlbmFibGVtZW50KSB7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkucmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCwgdGhpcy51cGRhdGVFbXB0eVJvd3MuYmluZCh0aGlzKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5kZXJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2sobmF2aWdhdGlvblBhdGgpO1xuXHRcdH1cblx0XHR0aGlzLnNldFVwRW1wdHlSb3dzKHRoaXMuY29udGVudCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3JlYXRlQWN0aXZhdGUgZXZlbnQgZnJvbSB0aGUgT0RhdGFMaXN0QmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIGFjdGl2YXRlRXZlbnQgVGhlIGV2ZW50IHNlbnQgYnkgdGhlIGJpbmRpbmdcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRhc3luYyBoYW5kbGVDcmVhdGVBY3RpdmF0ZShhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhY3RpdmF0ZWRDb250ZXh0ID0gYWN0aXZhdGVFdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250ZXh0XCIpO1xuXHRcdC8vIHdlIHN0YXJ0IGJ5IGFza2luZyB0byByZWNyZWF0ZSBhbiBlbXB0eSByb3cgKGlmIGxpdmUgY2hhbmdlIGhhcyBhbHJlYWR5IGRvbmUgaXQgdGhpcyB3b24ndCBoYXZlIGFueSBlZmZlY3QpXG5cdFx0Ly8gYnV0IHdlIGRvIG5vdCB3YWl0XG5cdFx0dGhpcy5jcmVhdGVFbXB0eVJvd3MoYWN0aXZhdGVFdmVudC5nZXRTb3VyY2UoKSBhcyBPRGF0YUxpc3RCaW5kaW5nLCB0aGlzLmNvbnRlbnQsIHRydWUpO1xuXHRcdGlmICghdGhpcy52YWxpZGF0ZUVtcHR5Um93KGFjdGl2YXRlZENvbnRleHQpKSB7XG5cdFx0XHRhY3RpdmF0ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRyYW5zaWVudFBhdGggPSBhY3RpdmF0ZWRDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IChhY3RpdmF0ZWRDb250ZXh0LmNyZWF0ZWQoKSA/PyBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBGYWlsZWQgdG8gYWN0aXZhdGUgY29udGV4dCAke2FjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb250ZW50ID0gYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRcdC8vIFNlbmQgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzIG9ubHkgYWZ0ZXIgdGhlIGNyZWF0aW9uIGhhcyBiZWVuIGZpbmFsaXplZFxuXHRcdFx0QWN0aXZpdHlTeW5jLnNlbmQodmlldywgeyBhY3Rpb246IEFjdGl2aXR5LkNyZWF0ZSwgY29udGVudCB9KTtcblx0XHRcdC8vIFNpbmNlIHRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkIGR1cmluZyBhY3RpdmF0aW9uLCB3ZSBuZWVkIHRvIHVwZGF0ZSBhbGwgY29sbGFib3JhdGlvbiBsb2Nrc1xuXHRcdFx0Ly8gdGhhdCB3ZXJlIHVzaW5nIHRoZSB0cmFuc2llbnQgcGF0aFxuXHRcdFx0QWN0aXZpdHlTeW5jLnVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgodmlldywgdHJhbnNpZW50UGF0aCwgYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gYWN0aXZhdGUgbmV3IHJvdyAtXCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGFuZCByZWNyZWF0ZSB0aGUgZW1wdHkgcm93cyBpbiBvcmRlciB0byBnZXQgYW55IHVwZGF0ZWQgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqXG5cdCAqL1xuXHRhc3luYyB1cGRhdGVFbXB0eVJvd3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBiaW5kaW5nSGVhZGVyQ29udGV4dCA9IGJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdGlmIChiaW5kaW5nICYmIGJpbmRpbmcuaXNSZXNvbHZlZCgpICYmIGJpbmRpbmcuaXNMZW5ndGhGaW5hbCgpICYmIGJpbmRpbmdIZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGJpbmRpbmdIZWFkZXJDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHRoaXMuX2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRhd2FpdCB0aGlzLmNyZWF0ZUVtcHR5Um93cyhiaW5kaW5nLCB0YWJsZSk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGFzeW5jIHNldFVwRW1wdHlSb3dzKHRhYmxlOiBUYWJsZSwgY3JlYXRlQnV0dG9uV2FzUHJlc3NlZCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2w/LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVpTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXVpTW9kZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIikpIHtcblx0XHRcdC8vIFRoZSBlZGl0IG1vZGUgaXMgc3RpbGwgYmVpbmcgY29tcHV0ZWQsIHNvIHdlIHdhaXQgdW50aWwgdGhpcyBjb21wdXRhdGlvbiBpcyBkb25lIGJlZm9yZSBjaGVja2luZyBpdHMgdmFsdWVcblx0XHRcdGNvbnN0IHdhdGNoQmluZGluZyA9IHVpTW9kZWwuYmluZFByb3BlcnR5KFwiL2lzRWRpdGFibGVQZW5kaW5nXCIpO1xuXHRcdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVyID0gKCkgPT4ge1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVyKTtcblx0XHRcdFx0XHR3YXRjaEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0d2F0Y2hCaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nSGVhZGVyQ29udGV4dCA9IGJpbmRpbmc/LmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoIXRoaXMuZW1wdHlSb3dzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF1aU1vZGVsLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlICYmXG5cdFx0XHRcdCF0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcImNyZWF0ZU1vZGVcIikgJiZcblx0XHRcdFx0IWNyZWF0ZUJ1dHRvbldhc1ByZXNzZWRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmFjdGl2ZUNvbnRleHQgPSBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbmQoZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0XHRcdFx0Ly8gd2hlbiB0aGlzIGlzIGNhbGxlZCBmcm9tIGNvbnRyb2xsZXIgY29kZSB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgaW5hY3RpdmUgY29udGV4dHMgYXJlIHN0aWxsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRleHRcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGNvbnRleHQuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoY29udGV4dFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIWluYWN0aXZlQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcsIHRhYmxlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBpbmFjdGl2ZSByb3dzIGZyb20gdGhlIHRhYmxlIGxpc3RCaW5kaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0gYmluZGluZ1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICovXG5cdF9kZWxldGVFbXB0eVJvd3MoYmluZGluZzogT0RhdGFMaXN0QmluZGluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0Y29udGV4dC5kZWxldGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgd2l0aGluIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHNcblx0ICovXG5cdGdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNJbmFjdGl2ZSgpKS5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZW1wdHkgcm93LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZW1wdHkgcm93XG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuXHQgKi9cblx0dmFsaWRhdGVFbXB0eVJvdyhjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnJlcXVpcmVkUHJvcGVydGllcztcblx0XHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoY29udGV4dCk7XG5cdFx0XHRjb25zdCBtaXNzaW5nUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydGllcy5maWx0ZXIoKHJlcXVpcmVkUHJvcGVydHkpID0+ICFjb250ZXh0LmdldE9iamVjdChyZXF1aXJlZFByb3BlcnR5KSk7XG5cdFx0XHRpZiAobWlzc2luZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIik7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdFx0bGV0IGRpc3BsYXllZENvbHVtbjogTURDQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1pc3NpbmdQcm9wZXJ0eSBvZiBtaXNzaW5nUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcblx0XHRcdFx0XHRjb25zdCBtaXNzaW5nQ29sdW1uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoXG5cdFx0XHRcdFx0XHQodGFibGVDb2x1bW4pID0+XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gbWlzc2luZ1Byb3BlcnR5IHx8XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5jbHVkZXMobWlzc2luZ1Byb3BlcnR5KSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFtaXNzaW5nQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWVwiLCBbbWlzc2luZ1Byb3BlcnR5XSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRpc3BsYXllZENvbHVtbiA9IHRoaXMuY29udGVudC5nZXRDb2x1bW5zKCkuZmluZCgobWRjQ29sdW1uKSA9PiBtZGNDb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSA9PT0gbWlzc2luZ0NvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHRcdGVycm9yTWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID8gXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWVwiIDogXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWV9ISURERU5cIixcblx0XHRcdFx0XHRcdFx0W2Rpc3BsYXllZENvbHVtbj8uZ2V0SGVhZGVyKCkgfHwgbWlzc2luZ0NvbHVtbi5sYWJlbF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVzc2FnZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkOiB0aGlzLmNvbnRlbnQuZ2V0SWQoKSwgLy8gTmVlZCB0byBkbyBpdCBzaW5jZSBoYW5kbGVDcmVhdGVBY3RpdmF0ZSBjYW4gYmUgdHJpZ2dlcmVkIG11bHRpcGxlIHRpbWVzIChleHRyYSBwcm9wZXJ0aWVzIHNldCBieSB2YWx1ZSBoZWxwKSBiZWZvcmUgY29udHJvbElkcyBhcmUgc2V0IG9uIHRoZSBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlSb3dNZXNzYWdlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdG1pc3NpbmdDb2x1bW46IGRpc3BsYXllZENvbHVtbiA/IHVuZGVmaW5lZCA6IG1pc3NpbmdQcm9wZXJ0eSAvLyBuZWVkZWQgdG8gY2hhbmdlIHRoZSBtZXNzYWdlU3RyaXAgbWVzc2FnZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IGAke2NvbnRleHQ/LmdldFBhdGgoKX0vJHttaXNzaW5nUHJvcGVydHl9YFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgZW1wdHkgcm93cy5cblx0ICpcblx0ICogQHBhcmFtIGluYWN0aXZlQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZW1wdHkgcm93LCBpZiBub3QgcHJvdmlkZWQgdGhlIG1lc3NhZ2VzIG9mIGFsbCBlbXB0eSByb3dzIGFyZSByZW1vdmVkXG5cdCAqL1xuXHRyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyhpbmFjdGl2ZUNvbnRleHQ/OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0bWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoXG5cdFx0XHQobWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpIGFzIE1lc3NhZ2VbXSkuZmlsdGVyKChtc2cpID0+IHtcblx0XHRcdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IChtc2cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyB7IHRhYmxlSWQ/OiBzdHJpbmc7IGVtcHR5Um93TWVzc2FnZT86IGJvb2xlYW4gfTtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQoaW5hY3RpdmVDb250ZXh0ID8gbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChpbmFjdGl2ZUNvbnRleHQuZ2V0UGF0aCgpKSkgOiB0cnVlKSAmJlxuXHRcdFx0XHRcdHRlY2huaWNhbERldGFpbHMuZW1wdHlSb3dNZXNzYWdlICYmXG5cdFx0XHRcdFx0dGVjaG5pY2FsRGV0YWlscy50YWJsZUlkID09PSB0aGlzLmNvbnRlbnQuZ2V0SWQoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0aW9uIG9mIGluYWN0aXZlIHJvd3MgZm9yIHRoZSB0YWJsZSBpbiBjcmVhdGlvbiBtb2RlIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIuXG5cdCAqXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgZWRpdGVkXG5cdCAqIEBwYXJhbSByZWNyZWF0ZU9uZVJvdyBgdHJ1ZWAgaWYgdGhlIGNhbGwgaXMgdG8gcmVjcmVhdGUgYW4gZW1wdHlMaW5lXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eVJvd3MoYmluZGluZzogT0RhdGFMaXN0QmluZGluZywgdGFibGU6IFRhYmxlLCByZWNyZWF0ZU9uZVJvdyA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA9IHRoaXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2w/LmlubGluZUNyZWF0aW9uUm93Q291bnQgfHwgMTtcblx0XHRpZiAodGhpcy5jcmVhdGluZ0VtcHR5Um93cyB8fCB0aGlzLmdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nKSA+IGlubGluZUNyZWF0aW9uUm93Q291bnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGlubGluZUNyZWF0aW9uUm93Q291bnQgfSwgKCkgPT4gKHt9KSksXG5cdFx0XHRhdEVuZCA9IHRhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIikgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRpbmFjdGl2ZSA9IHRydWUsXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3csXG5cdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXG5cdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFGb3JDcmVhdGUgPSByZWNyZWF0ZU9uZVJvdyA/IFt7fV0gOiBkYXRhO1xuXHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBlZGl0Rmxvdy5jcmVhdGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0YmluZGluZyxcblx0XHRcdFx0Ly8gZHVyaW5nIGEgbGl2ZSBjaGFuZ2UsIG9ubHkgMSBuZXcgZG9jdW1lbnQgaXMgY3JlYXRlZFxuXHRcdFx0XHRkYXRhRm9yQ3JlYXRlLFxuXHRcdFx0XHQvLyBXaGVuIGVkaXRpbmcgYW4gZW1wdHkgcm93LCB0aGUgbmV3IGVtcHR5IHJvdyBpcyB0byBiZSBjcmVhdGVkIGp1c3QgYmVsb3cgYW5kIG5vdCBhYm92ZVxuXHRcdFx0XHRyZWNyZWF0ZU9uZVJvdyA/IHRydWUgOiBhdEVuZCxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cub25CZWZvcmVDcmVhdGUsXG5cdFx0XHRcdGluYWN0aXZlXG5cdFx0XHQpO1xuXHRcdFx0Y29udGV4dHM/LmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eShiaW5kaW5nLmdldFBhdGgoKSwgdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGlmICghKGVycm9yIGFzIENvbnRleHRFcnJvclR5cGUpLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXREb3dubG9hZFVybFdpdGhGaWx0ZXJzKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gQ29yZS5ieUlkKHRhYmxlPy5nZXRGaWx0ZXIoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFmaWx0ZXJCYXIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpbHRlciBiYXIgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCBmaWx0ZXJQcm9wU1YgPSBhd2FpdCAoZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdC8vIGlnbm9yZSBmaWx0ZXJzIHdpdGggc2VtYW50aWMgb3BlcmF0b3JzIHdoaWNoIG5lZWRzIHRvIGJlIGFkZGVkIGxhdGVyIGFzIGZpbHRlcnMgd2l0aCBmbHAgc2VtYW50aWMgZGF0ZSBwbGFjZWhvbGRlcnNcblx0XHRjb25zdCBmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8gPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNPcHNGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlclByb3BTVi5fZ2V0U2VsZWN0T3B0aW9ucygpKTtcblx0XHRjb25zdCBmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhcblx0XHRcdHRhYmxlLFxuXHRcdFx0ZmlsdGVyc1dpdGhTZW1hbnRpY0RhdGVPcHNJbmZvLm1hcCgoZmlsdGVySW5mbykgPT4gZmlsdGVySW5mby5maWx0ZXJOYW1lKVxuXHRcdCk7XG5cdFx0Y29uc3QgcHJvcGVydGllc0luZm8gPSBmaWx0ZXJCYXIuZ2V0UHJvcGVydHlJbmZvU2V0KCk7XG5cdFx0Ly8gZ2V0IHRoZSBmaWx0ZXJzIHdpdGggc2VtYW50aWMgZGF0ZSBvcGVyYXRvcnMgd2l0aCBmbHAgcGxhY2Vob2xkZXIgZm9ybWF0IGFuZCBhcHBlbmQgdG8gdGhlIGV4aXNpdGluZyBmaWx0ZXJzXG5cdFx0Y29uc3QgW2ZscE1hcHBlZFBsYWNlaG9sZGVycywgc2VtYW50aWNEYXRlRmlsdGVyc10gPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMoXG5cdFx0XHRmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8sXG5cdFx0XHRwcm9wZXJ0aWVzSW5mb1xuXHRcdCk7XG5cblx0XHRsZXQgYWxsUmVsZXZhbnRGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuXHRcdGlmIChmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFsbFJlbGV2YW50RmlsdGVycyA9IGFsbFJlbGV2YW50RmlsdGVycy5jb25jYXQoZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMuZmlsdGVycyk7XG5cdFx0fVxuXHRcdGlmIChzZW1hbnRpY0RhdGVGaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFsbFJlbGV2YW50RmlsdGVycy5wdXNoKC4uLnNlbWFudGljRGF0ZUZpbHRlcnMpO1xuXHRcdH1cblx0XHRjb25zdCBhbGxGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhbGxSZWxldmFudEZpbHRlcnMsXG5cdFx0XHRhbmQ6IHRydWVcblx0XHR9KTtcblxuXHRcdC8vIGNyZWF0ZSBoaWRkZW4gYmluZGluZyB3aXRoIGFsbCBmaWx0ZXJzIGUuZy4gc3RhdGljIGZpbHRlcnMgYW5kIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBvcGVyYXRvcnNcblx0XHRjb25zdCB0ZW1wVGFibGVCaW5kaW5nID0gbW9kZWwuYmluZExpc3QoYmluZGluZy5nZXRQYXRoKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhbGxGaWx0ZXJzKTtcblx0XHRsZXQgdXJsID0gYXdhaXQgdGVtcFRhYmxlQmluZGluZy5yZXF1ZXN0RG93bmxvYWRVcmwoKTtcblx0XHRmb3IgKGNvbnN0IFtwbGFjZWhvbGRlciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZscE1hcHBlZFBsYWNlaG9sZGVycykpIHtcblx0XHRcdHVybCA9IHVybC5yZXBsYWNlKHBsYWNlaG9sZGVyLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1cmw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGRyYWdnZWQgZWxlbWVudCBlbnRlcnMgYSB0YWJsZSByb3cuXG5cdCAqXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uRHJhZ0VudGVyRG9jdW1lbnQodWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQgfT4pOiB2b2lkIHtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Ly8gVGhlIGRyYWcgaXMgZG9uZSBvbiB0aGUgdGFibGUgaXRzZWxmLT4gbm90IHlldCBhdXRob3JpemVkKVxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmNvbnRlbnQuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBkcmFnQ29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyYWdTb3VyY2VcIik7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCk7XG5cdFx0bGV0IGRpc2FibGVkT25QYXJlbnQgPSAhcGFyZW50Q29udGV4dCxcblx0XHRcdGRpc2FibGVkT25Ob2RlID0gZmFsc2U7XG5cdFx0bGV0IGFsbG93ZWREcm9wUG9zaXRpb246IFwiT25PckJldHdlZW5cIiB8IFwiT25cIiB8IFwiQmV0d2VlblwiID0gXCJPbk9yQmV0d2VlblwiO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoaXNNb3ZlQWxsb3dlZEluZm8pIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHRzOiBDb250ZXh0W10pID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHQodWk1RXZlbnQuZ2V0U291cmNlKCkgYXMgRHJhZ0Ryb3BJbmZvKS5nZXRQYXJlbnQoKSBhcyBDb250cm9sXG5cdFx0XHRcdCkgYXMgRnVuY3Rpb247XG5cblx0XHRcdFx0ZGlzYWJsZWRPbk5vZGUgPSBjdXN0b21GdW5jdGlvbihkcmFnQ29udGV4dCwgdGFyZ2V0Q29udGV4dCkgPT09IGZhbHNlO1xuXHRcdFx0XHRkaXNhYmxlZE9uUGFyZW50ID0gZGlzYWJsZWRPblBhcmVudCB8fCBjdXN0b21GdW5jdGlvbihkcmFnQ29udGV4dCwgcGFyZW50Q29udGV4dCkgPT09IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBleGVjdXRlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0ZHJhZ0NvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpIHx8IC8vIFRoZSBhbmNlc3RvciBpcyBkcm9wcGVkIGludG8gYSBkZXNjZW5kYW50IC0+IG5vdCBhdXRob3JpemVkXG5cdFx0XHR0YXJnZXRDb250ZXh0LmdldEJpbmRpbmcoKSAhPT0gZHJhZ0NvbnRleHQuZ2V0QmluZGluZygpIHx8IC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdChkaXNhYmxlZE9uUGFyZW50ICYmIGRpc2FibGVkT25Ob2RlKSAvLyBcIk9uXCIgYW5kIFwiQmV0d2VlblwiIGFyZSBub3QgYXV0aG9yaXplZFxuXHRcdCkge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkT25QYXJlbnQpIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBcIk9uXCI7XG5cdFx0fSBlbHNlIGlmIChkaXNhYmxlZE9uTm9kZSkge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IFwiQmV0d2VlblwiO1xuXHRcdH1cblx0XHQodWk1RXZlbnQuZ2V0U291cmNlKCkgYXMgRHJhZ0Ryb3BJbmZvKS5zZXREcm9wUG9zaXRpb24oYWxsb3dlZERyb3BQb3NpdGlvbik7XG5cdH1cblxuXHQvKipcblx0ICogU3RhcnRzIHRoZSBkcmFnIG9mIHRoZSBkb2N1bWVudC5cblx0ICpcblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25EcmFnU3RhcnREb2N1bWVudCh1aTVFdmVudDogVUk1RXZlbnQ8eyBiaW5kaW5nQ29udGV4dDogQ29udGV4dCB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblx0XHRsZXQgY3VzdG9tRGlzYWJsZWQgPSBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGlzTW92YWJsZUluZm8pIHtcblx0XHRcdFx0Y3VzdG9tRGlzYWJsZWQgPVxuXHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwoY29udGV4dHM6IENvbnRleHRbXSkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0XHRcdGlzTW92YWJsZUluZm8ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdFx0XHR1aTVFdmVudC5nZXRTb3VyY2UoKSBhcyBDb250cm9sXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRjdXN0b21EaXNhYmxlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoKHVwZGF0YWJsZVByb3BlcnR5UGF0aCAmJiAhY29udGV4dC5nZXRQcm9wZXJ0eSh1cGRhdGFibGVQcm9wZXJ0eVBhdGgpKSB8fCBjdXN0b21EaXNhYmxlZCkge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyYWdnYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRHJvcHMgdGhlIGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICogQHJldHVybnMgVGhlIFByb21pc2Vcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRhc3luYyBvbkRyb3BEb2N1bWVudChcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIk9uXCIgPyBiaW5kaW5nQ29udGV4dCA6IGJpbmRpbmdDb250ZXh0LmdldFBhcmVudCgpO1xuXHRcdHJldHVybiB1aTVFdmVudFxuXHRcdFx0LmdldFBhcmFtZXRlcihcImRyYWdTb3VyY2VcIilcblx0XHRcdC5tb3ZlKHtcblx0XHRcdFx0cGFyZW50OiB0YXJnZXRDb250ZXh0XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuY29udGVudCk7XG5cdFx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUFQSTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFiQSxJQWVNQSxRQUFRLFdBRGJDLGNBQWMsQ0FBQyw4QkFBOEIsRUFBRTtJQUFFQyxXQUFXLEVBQUUs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QUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtFQUFBLE9BK3REaEIxaEIsUUFBUTtBQUFBIn0=
|
|
1639
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSSIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJwcm9wZXJ0eSIsInR5cGUiLCJleHBlY3RlZFR5cGVzIiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImRlZmF1bHRWYWx1ZSIsImFsbG93ZWRWYWx1ZXMiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZXZlbnQiLCJuYW1lIiwiY3JlYXRlQXRFbmQiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwieG1sRXZlbnRIYW5kbGVyIiwiY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIiLCJtU2V0dGluZ3MiLCJvdGhlcnMiLCJ1cGRhdGVGaWx0ZXJCYXIiLCJjb250ZW50IiwiYXR0YWNoRXZlbnQiLCJvblRhYmxlU2VsZWN0aW9uQ2hhbmdlIiwiZ2V0QVBJIiwidWk1RXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJ0YWJsZUFQSSIsImlzQSIsImluc3RhbmNlTWFwIiwiZ2V0IiwiZmluZCIsImFwaSIsImdldFJvd0JpbmRpbmciLCJnZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5IiwidGFibGUiLCJzb3J0Q29uZGl0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwic29ydGVycyIsIm1hcCIsInNvcnRDb25kaXRpb24iLCJzb3J0Q29uZGl0aW9uc1BhdGgiLCJnZXRQcm9wZXJ0eUhlbHBlciIsImdldFByb3BlcnR5IiwicGF0aCIsImRlc2NlbmRpbmciLCJqb2luIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImFkZE1lc3NhZ2UiLCJwYXJhbWV0ZXJzIiwibXNnTWFuYWdlciIsIl9nZXRNZXNzYWdlTWFuYWdlciIsIm9UYWJsZSIsIm9NZXNzYWdlIiwiTWVzc2FnZSIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJnZXRNb2RlbCIsImRlc2NyaXB0aW9uIiwicGVyc2lzdGVudCIsImFkZE1lc3NhZ2VzIiwiZ2V0SWQiLCJjaGVja0lmUmVjb21tZW5kYXRpb25SZWxldmFudCIsIm9FdmVudCIsImlzVGFibGVSZWFkT25seSIsImlzRWRpdGFibGUiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJyZW1vdmVNZXNzYWdlIiwiaWQiLCJtZXNzYWdlcyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJyZXN1bHQiLCJlIiwicmVtb3ZlTWVzc2FnZXMiLCJyZWZyZXNoIiwic2V0UXVpY2tGaWx0ZXJDb3VudHNBc0xvYWRpbmciLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdG9yIiwiZ2V0UXVpY2tGaWx0ZXIiLCJxdWlja0ZpbHRlckNvdW50cyIsImsiLCJnZXRJdGVtcyIsInNldFByb3BlcnR5IiwiY291bnRzIiwicmVmcmVzaFNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudCIsImNvdW50IiwiZ2V0Q291bnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwiZmlsdGVycyIsInF1aWNrRmlsdGVycyIsInNob3dDb3VudHMiLCJ1bmRlZmluZWQiLCJpdGVtSW5kZXgiLCJmaW5kSW5kZXgiLCJzZWxlY3Rvckl0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIlRhYmxlVXRpbHMiLCJnZXRDb3VudEZvcm1hdHRlZCIsInJlZnJlc2hVblNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudHMiLCJpdGVtcyIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiY2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJjaGFydEFQSSIsImdldFBhcmVudCIsInNldEl0ZW1Db3VudHMiLCJpdGVtIiwiaXRlbUtleSIsIml0ZW1GaWx0ZXJzIiwiZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uIiwiZ2V0TGlzdEJpbmRpbmdGb3JDb3VudCIsImJhdGNoR3JvdXBJZCIsImFkZGl0aW9uYWxGaWx0ZXJzIiwiYmFzZVRhYmxlRmlsdGVycyIsImNoYXJ0RmlsdGVyIiwiaGFzU2VsZWN0aW9ucyIsImdldEZpbHRlciIsImdldEhpZGRlbkZpbHRlcnMiLCJwdXNoIiwiYmluZGluZ1Byb21pc2VzIiwiZmlsdGVyIiwiUHJvbWlzZSIsImFsbCIsImVycm9yIiwiTG9nIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJfZ2V0Um93QmluZGluZyIsImdldENvbnRlbnQiLCJnZXRDb3VudHMiLCJkYXRhIiwidGhlbiIsImlWYWx1ZSIsImNhdGNoIiwib25Db250ZXh0Q2hhbmdlIiwiZmlyZUV2ZW50IiwiZ2V0UGFyYW1ldGVycyIsInNldEZhc3RDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJvbkZpZWxkTGl2ZUNoYW5nZSIsImZpZWxkIiwiYmluZGluZ0NvbnRleHQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZyIsImlzSW5hY3RpdmUiLCJjcmVhdGVFbXB0eVJvd3MiLCJvblF1aWNrRmlsdGVyU2VsZWN0aW9uQ2hhbmdlIiwiZmlsdGVyQmFySUQiLCJmaWx0ZXJCYXIiLCJDb3JlIiwiYnlJZCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJyZWJpbmQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVGFibGVSb3dQcmVzcyIsIm9Db250cm9sbGVyIiwib0NvbnRleHQiLCJtUGFyYW1ldGVycyIsImlzVHJhbnNpZW50IiwiZW5hYmxlQW5hbHl0aWNzIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiUm93UHJlc3MiLCJfcm91dGluZyIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsIm9uSW50ZXJuYWxQYXRjaENvbXBsZXRlZCIsImludGVybmFsTW9kZWxDb250ZXh0Iiwic2VsZWN0ZWRDb250ZXh0cyIsIkRlbGV0ZUhlbHBlciIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwib25JbnRlcm5hbERhdGFSZWNlaXZlZCIsImlzUmVjb21tZW5kYXRpb25SZWxldmFudCIsImNvbnRleHRJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJlc3BvbnNlQ29udGV4dHNBcnJheSIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsIm5ld0NvbnRleHRzIiwiY29udGV4dCIsInJlY29tbWVuZGF0aW9ucyIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJnZXRQYXJhbWV0ZXIiLCJtZXNzYWdlSGFuZGxlciIsInNob3dNZXNzYWdlRGlhbG9nIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZHMiLCJhY3Rpb25Ub29sYmFySXRlbXMiLCJnZXRBY3Rpb25zIiwiaGFzSW5zaWdodEFjdGlvbkVuYWJsZWQiLCJUYWJsZUluc2lnaHRzSGVscGVyIiwiZ2V0SW5zaWdodHNSZWxldmFudENvbHVtbnMiLCJjYXJkIiwiZ2V0Q2FyZE1hbmlmZXN0VGFibGUiLCJ0aXRsZSIsImhlYWRlckluZm9UeXBlTmFtZSIsImNhbGxiYWNrIiwib25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrIiwiYmluZCIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwib25QYXN0ZSIsImV2dCIsInJhd1Bhc3RlZERhdGEiLCJ0YWJsZURlZmluaXRpb24iLCJlbmFibGVQYXN0ZSIsInRhcmdldENvbnRleHRQYXRoIiwibmV3UGFyZW50Q29udGV4dCIsInRhcmdldENvbnRleHQiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJnZXRQYXRoIiwibW92ZSIsInBhcmVudCIsImdldEVuYWJsZVBhc3RlIiwiUGFzdGVIZWxwZXIiLCJwYXN0ZURhdGEiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiTWVzc2FnZUJveCIsImdldFRleHQiLCJvbkN1dCIsImxlbmd0aCIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImNsZWFyU2VsZWN0aW9uIiwib25CZWZvcmVFeHBvcnQiLCJleHBvcnRFdmVudCIsImlzU3BsaXRNb2RlIiwic3BsaXRDZWxscyIsInRhYmxlQ29udHJvbGxlciIsImV4cG9ydFNldHRpbmdzIiwidXBkYXRlRXhwb3J0U2V0dGluZ3MiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJzVGFibGVDb250ZXh0QmluZGluZ1BhdGgiLCJzVGFibGVSb3dCaW5kaW5nIiwiZ2V0VGFyZ2V0cyIsIm9uRGF0YVN0YXRlQ2hhbmdlIiwiZGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyZWRNZXNzYWdlcyIsImhpZGRlbk1hbmRhdG9yeVByb3BlcnRpZXMiLCJtc2ciLCJ0ZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImVtcHR5Um93TWVzc2FnZSIsIm1pc3NpbmdDb2x1bW4iLCJoaWRkZW5Qcm9wZXJ0eSIsIm1lc3NhZ2VTdHJpcEVycm9yIiwic2hvd01lc3NhZ2UiLCJwcmV2ZW50RGVmYXVsdCIsImludGVybmFsTW9kZWwiLCJjb2x1bW5zIiwic2V0U3RhdGljU2l6ZUxpbWl0IiwiZmlsZVR5cGUiLCJ3b3JrYm9vayIsInJlbW92ZU11bHRpVmFsdWVGaWVsZHNGcm9tQ29sdW1uc1RvQmVFeHBvcnRlZCIsImV4cG9ydENvbHVtbnMiLCJpbmRleCIsImV4cG9ydENvbHVtbiIsInJlc291cmNlQnVuZGxlIiwibGFiZWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0IiwiYWRkVGFyZ2V0VmFsdWVDb2x1bW4iLCJjb2x1bW4iLCJjb2x1bVByb3BlcnR5IiwiY29sdW1uSWQiLCJnZXRQcm9wZXJ0eUtleSIsImNvbHVtbkRlZmluaXRpb24iLCJpc011bHRpVmFsdWUiLCJkYXRhU291cmNlIiwic2l6ZUxpbWl0IiwiY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkIiwiY29sdW1uRXhwb3J0IiwiY29sdW1uTmVlZHNUb0JlQWRkZWQiLCJleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSIsInByb3BlcnR5SW5mb3MiLCJ0ZW1wbGF0ZSIsImlzUHJvcGVydHlGcm9tRXhwb3J0IiwicmVsYXRpdmVQYXRoIiwiaW5jbHVkZXMiLCJmYWxzZVZhbHVlIiwidHJ1ZVZhbHVlIiwidGFyZ2V0VmFsdWVDb2x1bW4iLCJjb2x1bW5Ub0JlQWRkZWQiLCJBcnJheSIsImlzQXJyYXkiLCJzcGxpY2UiLCJyZXN1bWVCaW5kaW5nIiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiZ2V0RGF0YUluaXRpYWxpemVkIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvRmlsdGVyQ29udHJvbCIsIkZpbHRlclV0aWxzIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJzdXNwZW5kQmluZGluZyIsImludmFsaWRhdGVDb250ZW50IiwiZmFzdENyZWF0aW9uUm93IiwiZ2V0Q3JlYXRpb25Sb3ciLCJ0YWJsZUJpbmRpbmciLCJnZXRDb250ZXh0IiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCIsImluc2lnaHRzUmVsZXZhbnRDb2x1bW5zIiwiaW5zaWdodHNQYXJhbXMiLCJjcmVhdGVUYWJsZUNhcmRQYXJhbXMiLCJpc05hdmlnYXRpb25FbmFibGVkIiwidGV4dCIsImNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UiLCJJbnNpZ2h0c1NlcnZpY2UiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlIiwiZ2V0Q2FyZE1hbmlmZXN0Iiwic2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXciLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsImdldFNlcnZpY2UiLCJzY29wZSIsIm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkIiwicGFnZUNvbnRyb2xsZXIiLCJtYXNzRWRpdCIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIndhcm5pbmciLCJvbkFjdGlvblByZXNzIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiZXhlY3V0ZUFjdGlvbiIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZUZ1bGx5UXVhbGlmaWVkTmFtZSIsIm15VW5hcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsIk5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nIiwiY29udGV4dHMiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJvcGVuIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJpbmZvIiwiZmlsdGVyQmFyUmVmSWQiLCJnZXRGaWx0ZXJCYXIiLCJfc2V0RmlsdGVyQmFyIiwidGFibGVBUElJZCIsInRhYmxlQVBJTG9jYWxJZCIsInBvdGVudGlhbGZpbHRlckJhcklkIiwicmVwbGFjZSIsIlJlZ0V4cCIsInNldEZpbHRlciIsImNoZWNrSWZDb2x1bW5FeGlzdHMiLCJhRmlsdGVyZWRDb2x1bW1ucyIsImNvbHVtbk5hbWUiLCJzb21lIiwib0NvbHVtbiIsInNDb2x1bW5OYW1lVmlzaWJsZSIsInNUZXh0QXJyYW5nZW1lbnQiLCJnZXRSb290S2V5cyIsInJvb3RDb250ZXh0Iiwic3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciIsImdldEN1cnJlbnRSb290Q29udGV4dCIsIm1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJkYXRhTW9kZWwiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRNZXRhQ29udGV4dCIsInJvb3RTZW1hbnRpY0tleXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNlbWFudGljS2V5cyIsImtleSIsInZhbHVlIiwicm9vdFRlY2huaWNhbEtleXMiLCJrZXlzIiwidGVjaG5pY2FsS2V5cyIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJoZWFkZXJJbmZvVGl0bGUiLCJvTWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJmaWx0ZXJlZFRlY2huaWNhbEtleXMiLCJmb3JFYWNoIiwidGVjaG5pY2FsS2V5Iiwic2VtYW50aWNLZXlDb2x1bW5zIiwiYVZpc2libGVDb2x1bW5zIiwiYVRhYmxlQ29sdW1ucyIsImdldENvbHVtbnMiLCJnZXREYXRhUHJvcGVydHkiLCJvVGV4dEFycmFuZ2VtZW50IiwiJFBhdGgiLCJzVGV4dFBsYWNlbWVudCIsIiRFbnVtTWVtYmVyIiwicm9vdEtleXMiLCJzZXRFbXB0eVJvd3NFbmFibGVkIiwiZW5hYmxlbWVudCIsIm5hdmlnYXRpb25QYXRoIiwiYXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInNldFVwRW1wdHlSb3dzIiwiaGFuZGxlQ3JlYXRlQWN0aXZhdGUiLCJhY3RpdmF0ZUV2ZW50IiwiYWN0aXZhdGVkQ29udGV4dCIsInZhbGlkYXRlRW1wdHlSb3ciLCJ0cmFuc2llbnRQYXRoIiwiY3JlYXRlZCIsInJlc29sdmUiLCJBY3Rpdml0eVN5bmMiLCJzZW5kIiwiYWN0aW9uIiwiQWN0aXZpdHkiLCJDcmVhdGUiLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiYmluZGluZ0hlYWRlckNvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0IiwiaXNSZXNvbHZlZCIsImlzTGVuZ3RoRmluYWwiLCJjb250ZXh0UGF0aCIsIl9kZWxldGVFbXB0eVJvd3MiLCJjcmVhdGVCdXR0b25XYXNQcmVzc2VkIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwidWlNb2RlbCIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJlbXB0eVJvd3NFbmFibGVkIiwicmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMiLCJpbmFjdGl2ZUNvbnRleHQiLCJzdGFydHNXaXRoIiwiZGVsZXRlIiwiZ2V0SW5hY3RpdmVDb250ZXh0TnVtYmVyIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiYW5ub3RhdGlvbiIsIm1pc3NpbmdQcm9wZXJ0aWVzIiwicmVxdWlyZWRQcm9wZXJ0eSIsImRpc3BsYXllZENvbHVtbiIsIm1pc3NpbmdQcm9wZXJ0eSIsImVycm9yTWVzc2FnZSIsInRhYmxlQ29sdW1uIiwibWRjQ29sdW1uIiwiZ2V0SGVhZGVyIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInRlY2huaWNhbCIsInRhYmxlSWQiLCJtZXNzYWdlTWFuYWdlciIsInJlY3JlYXRlT25lUm93IiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0aW5nRW1wdHlSb3dzIiwiZnJvbSIsImF0RW5kIiwiaW5hY3RpdmUiLCJkYXRhRm9yQ3JlYXRlIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJvbkJlZm9yZUNyZWF0ZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsImNhbmNlbGVkIiwiZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyIsImZpbHRlclByb3BTViIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8iLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRTZW1hbnRpY09wc0ZpbHRlclByb3BlcnRpZXMiLCJfZ2V0U2VsZWN0T3B0aW9ucyIsImZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzIiwiZ2V0QWxsRmlsdGVySW5mbyIsImZpbHRlckluZm8iLCJmaWx0ZXJOYW1lIiwicHJvcGVydGllc0luZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmbHBNYXBwZWRQbGFjZWhvbGRlcnMiLCJzZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMiLCJhbGxSZWxldmFudEZpbHRlcnMiLCJjb25jYXQiLCJhbGxGaWx0ZXJzIiwiRmlsdGVyIiwiYW5kIiwidGVtcFRhYmxlQmluZGluZyIsImJpbmRMaXN0IiwidXJsIiwicmVxdWVzdERvd25sb2FkVXJsIiwicGxhY2Vob2xkZXIiLCJlbnRyaWVzIiwib25EcmFnRW50ZXJEb2N1bWVudCIsImRyYWdDb250ZXh0IiwiaXNNb3ZlQWxsb3dlZEluZm8iLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsInBhcmVudENvbnRleHQiLCJkaXNhYmxlZE9uUGFyZW50IiwiZGlzYWJsZWRPbk5vZGUiLCJhbGxvd2VkRHJvcFBvc2l0aW9uIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwiaXNBbmNlc3Rvck9mIiwic2V0RHJvcFBvc2l0aW9uIiwib25EcmFnU3RhcnREb2N1bWVudCIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiY3VzdG9tRGlzYWJsZWQiLCJfZXJyb3IiLCJvbkRyb3BEb2N1bWVudCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZmluYWxseSIsInVubG9jayIsIk1hY3JvQVBJIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aXZpdHlTeW5jIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L05vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSB7IEhvcml6b250YWxBbGlnbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdFRhYmxlQ29sdW1uLFxuXHRUYWJsZVZpc3VhbGl6YXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IERlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYXN0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9QYXN0ZUhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIsIHsgZ2V0TG9jYWxpemVkVGV4dCwgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCAqIGFzIEluc2lnaHRzU2VydmljZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnNpZ2h0cy9JbnNpZ2h0c1NlcnZpY2VcIjtcbmltcG9ydCAqIGFzIFRhYmxlSW5zaWdodHNIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvVGFibGVJbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2FyZE1hbmlmZXN0LCBDYXJkTWVzc2FnZSB9IGZyb20gXCJzYXAvaW5zaWdodHMvQ2FyZEhlbHBlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCB0eXBlIFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgdHlwZSBEYXRhU3RhdGVJbmRpY2F0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvRGF0YVN0YXRlSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFTdGF0ZUluZGljYXRvciREYXRhU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9wbHVnaW5zL0RhdGFTdGF0ZUluZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBQYXN0ZVByb3ZpZGVyJFBhc3RlRXZlbnQgfSBmcm9tIFwic2FwL20vcGx1Z2lucy9QYXN0ZVByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJdGVtIGZyb20gXCJzYXAvdWkvY29yZS9JdGVtXCI7XG5pbXBvcnQgdHlwZSBEcmFnRHJvcEluZm8gZnJvbSBcInNhcC91aS9jb3JlL2RuZC9EcmFnRHJvcEluZm9cIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZSRCZWZvcmVFeHBvcnRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCIuLi9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgeyBoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCwgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UgfSBmcm9tIFwiLi4vaW5zaWdodHMvQ29tbW9uSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW5zaWdodHNQYXJhbXMsIFRhYmxlQ29udGVudCB9IGZyb20gXCIuLi9pbnNpZ2h0cy9JbnNpZ2h0c1NlcnZpY2VcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwiLi9UYWJsZUhlbHBlclwiO1xuXG4vKipcbiAqIENyZWF0ZSBvcHRpb25zIGZvciB0aGUgdGFibGUuXG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVDcmVhdGlvbk9wdGlvbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVGFibGVDcmVhdGlvbk9wdGlvbnMgPSB7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBjcmVhdGlvbiBtb2RlIHRvIGJlIHVzZWQgYnkgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYE5ld1BhZ2VgLCBgSW5saW5lYCwgYElubGluZUNyZWF0aW9uc1Jvd3NgIG9yIGBFeHRlcm5hbGAuPGJyLz5cblx0ICogPGJyLz5cblx0ICogTmV3UGFnZSAtIHRoZSBjcmVhdGVkIGRvY3VtZW50IGlzIHNob3duIGluIGEgbmV3IHBhZ2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIG1ldGFkYXRhICdTeW5jJywgJ0FzeW5jJyBvciAnRGVmZXJyZWQnIGlzIHVzZWQ8YnIvPlxuXHQgKiBJbmxpbmUgLSBUaGUgY3JlYXRpb24gaXMgZG9uZSBpbmxpbmU8YnIvPlxuXHQgKiBJbmxpbmVDcmVhdGlvbnNSb3dzIC0gVGhlIGNyZWF0aW9uIGlzIGRvbmUgaW5saW5lIHdpdGggYW4gZW1wdHkgcm93PGJyLz5cblx0ICogRXh0ZXJuYWwgLSBUaGUgY3JlYXRpb24gaXMgZG9uZSBpbiBhIGRpZmZlcmVudCBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgdmlhIHRoZSBwYXJhbWV0ZXIgJ291dGJvdW5kJ1xuXHQgKlxuXHQgKiBJZiBub3Qgc2V0IHdpdGggYW55IHZhbHVlOjxici8+XG5cdCAqIGlmIG5hdmlnYXRpb24gaXMgZGVmaW5lZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgJ05ld1BhZ2UnLiBPdGhlcndpc2UgaXQgaXMgJ0lubGluZScuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdG5hbWU/OiBcIk5ld1BhZ2VcIiB8IFwiSW5saW5lXCIgfCBcIklubGluZUNyZWF0aW9uUm93c1wiIHwgXCJFeHRlcm5hbFwiO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgaWYgdGhlIG5ldyBlbnRyeSBzaG91bGQgYmUgY3JlYXRlZCBhdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiBhIHRhYmxlIGluIGNhc2Ugb2YgY3JlYXRpb25Nb2RlICdJbmxpbmUnPGJyLz5cblx0ICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2ZhbHNlJ1xuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRjcmVhdGVBdEVuZD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyBpZiB0aGUgbmV3IGVudHJ5IHNob3VsZCBiZSBoaWRkZW4gaW4gY2FzZSBvZiBjcmVhdGlvbk1vZGUgJ0lubGluZUNyZWF0aW9uUm93cycuIFRoaXMgb25seSBhcHBsaWVzIHRvIHJlc3BvbnNpdmUgdGFibGVzLjxici8+XG5cdCAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdmYWxzZSdcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCB3aGVyZSB0aGUgZG9jdW1lbnQgaXMgY3JlYXRlZCBpbiBjYXNlIG9mIGNyZWF0aW9uTW9kZSAnRXh0ZXJuYWwnPGJyLz5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0b3V0Ym91bmQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjdXN0b20gYWN0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0YWJsZSB0b29sYmFyXG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHtcblx0LyoqXG5cdCAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0a2V5OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHRleHQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUga2V5IG9mIGFub3RoZXIgYWN0aW9uIGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSB0b29sYmFyIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcblx0LyoqXG5cdCAqIERlZmluZXMgd2hlcmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgZGVmaW5lZCBhbmNob3Jcblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBCZWZvcmVgIGFuZCBgQWZ0ZXJgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHBsYWNlbWVudD86IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCI7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHByZXNzOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgaWYgdGhlIGFjdGlvbiByZXF1aXJlcyBhIHNlbGVjdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0ZW5hYmxlZD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjdXN0b20gQWN0aW9uR3JvdXAgdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlIHRvb2xiYXJcbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25Hcm91cFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBBY3Rpb25Hcm91cCA9IHtcblx0LyoqXG5cdCAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBBY3Rpb25Hcm91cFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRrZXk6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyBuZXN0ZWQgYWN0aW9uc1xuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhY3Rpb25zOiBBY3Rpb25bXTtcblxuXHQvKipcblx0ICogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBhY3Rpb24gZ3JvdXBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0dGV4dDogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGFjdGlvbiBvciBhY3Rpb24gZ3JvdXAgYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRvb2xiYXIgdG8gcHJvcGVybHkgcGxhY2UgdGhpcyBvbmVcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YW5jaG9yPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXJlIHRoaXMgYWN0aW9uIGdyb3VwIHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIGRlZmluZWQgYW5jaG9yXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQmVmb3JlYCBhbmQgYEFmdGVyYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwbGFjZW1lbnQ/OiBcIkJlZm9yZVwiIHwgXCJBZnRlclwiO1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGNvbHVtbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUuXG4gKlxuICogVGhlIHRlbXBsYXRlIGZvciB0aGUgY29sdW1uIGhhcyB0byBiZSBwcm92aWRlZCBhcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdGlvblxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLnRhYmxlLkNvbHVtblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDb2x1bW4gPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29sdW1uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGtleTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGlzIGNvbHVtbiBoZWFkZXJcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aGVhZGVyOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIGNvbHVtbidzIHdpZHRoLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYGF1dG9gLCBgdmFsdWVgIGFuZCBgaW5oZXJpdGAgYWNjb3JkaW5nIHRvIHtAbGluayBzYXAudWkuY29yZS5DU1NTaXplfVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR3aWR0aD86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgY29sdW1uIGltcG9ydGFuY2UuXG5cdCAqXG5cdCAqIFlvdSBjYW4gZGVmaW5lIHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIHBvcC1pbiBhcmVhIGJhc2VkIG9uIHRoZWlyIGltcG9ydGFuY2Vcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aW1wb3J0YW5jZT86IHN0cmluZztcblxuXHQvKipcblx0ICogQWxpZ25zIHRoZSBoZWFkZXIgYXMgd2VsbCBhcyB0aGUgY29udGVudCBob3Jpem9udGFsbHlcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBoZWFkZXIgc2hvdWxkIGJlIGEgcGFydCBvZiB0aGUgd2lkdGggY2FsY3VsYXRpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgb2YgYW5vdGhlciBjb2x1bW4gYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGVyZSB0aGlzIGNvbHVtbiBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSBkZWZpbmVkIGFuY2hvclxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEJlZm9yZWAgYW5kIGBBZnRlcmBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cGxhY2VtZW50PzogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIjtcbn07XG5cbnR5cGUgRXhwb3J0Q29sdW1uID0gQ29sdW1uRXhwb3J0U2V0dGluZ3MgJiB7XG5cdHByb3BlcnR5OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+O1xuXHRsYWJlbDogc3RyaW5nO1xuXHRjb2x1bW5JZD86IHN0cmluZztcblx0d2lkdGg/OiBudW1iZXI7XG5cdHRleHRBbGlnbj86IHN0cmluZztcblx0ZGlzcGxheVVuaXQ/OiBib29sZWFuO1xuXHR0cnVlVmFsdWU/OiBzdHJpbmc7XG5cdGZhbHNlVmFsdWU/OiBzdHJpbmc7XG5cdHZhbHVlTWFwPzogc3RyaW5nO1xufTtcblxudHlwZSBVc2VyRXhwb3J0U2V0dGluZ3MgPSB7XG5cdHNwbGl0Q2VsbHM/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEV4cG9ydFNldHRpbmdzID0ge1xuXHRmaWxlVHlwZT86IHN0cmluZztcblx0ZGF0YVNvdXJjZToge1xuXHRcdHNpemVMaW1pdD86IG51bWJlcjtcblx0fTtcblx0d29ya2Jvb2s6IHtcblx0XHRjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXTtcblx0fTtcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdXNlZCB0byBjcmVhdGUgYSB0YWJsZSBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIExpbmVJdGVtIG9yIFByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCwgYnV0IHRoZSBUYWJsZSBidWlsZGluZyBibG9jayBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3BsYXkgYW4gRW50aXR5U2V0LlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNybzpUYWJsZSBpZD1cIk15VGFibGVcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZVxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIsIHsgcmV0dXJuVHlwZXM6IFtcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIl0gfSlcbmNsYXNzIFRhYmxlQVBJIGV4dGVuZHMgTWFjcm9BUEkge1xuXHRjcmVhdGluZ0VtcHR5Um93cz86IGJvb2xlYW47XG5cblx0Y29udGVudCE6IFRhYmxlO1xuXG5cdGNvbnN0cnVjdG9yKG1TZXR0aW5ncz86IFByb3BlcnRpZXNPZjxUYWJsZUFQST4sIC4uLm90aGVyczogYW55W10pIHtcblx0XHRzdXBlcihtU2V0dGluZ3MgYXMgYW55LCAuLi5vdGhlcnMpO1xuXG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJCYXIoKTtcblxuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuY29udGVudC5hdHRhY2hFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiLCB7fSwgdGhpcy5vblRhYmxlU2VsZWN0aW9uQ2hhbmdlLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdLFxuXHRcdGV4cGVjdGVkQW5ub3RhdGlvbnM6IFtcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiLFxuXHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCJcblx0XHRdXG5cdH0pXG5cdG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IHVzZWQgaW4gdGhlIGN1cnJlbnQgcGFnZSBvciBibG9jay5cblx0ICogVGhpcyBzZXR0aW5nIGlzIGRlZmluZWQgYnkgdGhlIGZyYW1ld29yay5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIkVudGl0eVR5cGVcIiwgXCJTaW5nbGV0b25cIiwgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIl1cblx0fSlcblx0Y29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJvYmplY3RcIiB9KVxuXHR0YWJsZURlZmluaXRpb24hOiBUYWJsZVZpc3VhbGl6YXRpb247XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRlbnRpdHlUeXBlRnVsbHlRdWFsaWZpZWROYW1lITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSAncmVhZC1vbmx5JyBzdGF0ZSBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cmVhZE9ubHkhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgdGFibGUgY29udHJvbC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlICdidXN5JyBzdGF0ZSBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGJ1c3khOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIHRhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBidWlsZGluZyBibG9jayB0byByZW5kZXIgdGhlIGRhdGEuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgR3JpZFRhYmxlYCBhbmQgYFJlc3BvbnNpdmVUYWJsZWBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdFZhbHVlOiBcIlJlc3BvbnNpdmVUYWJsZVwiLCBhbGxvd2VkVmFsdWVzOiBbXCJHcmlkVGFibGVcIiwgXCJSZXNwb25zaXZlVGFibGVcIl0gfSlcblx0dHlwZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIGV4cG9ydCBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YWJsZSBpcyBlbmFibGVkIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRlbmFibGVFeHBvcnQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgcGFzdGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFibGUgaXMgZW5hYmxlZCBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGVuYWJsZVBhc3RlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hldGhlciB0aGUgdGFibGUgY2FuIGJlIG9wZW5lZCBpbiBmdWxsc2NyZWVuIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVGdWxsU2NyZWVuITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSUQgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGZpbHRlckJhcj86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgc2VsZWN0aW9uIG1vZGUgdG8gYmUgdXNlZCBieSB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgTm9uZWAsIGBTaW5nbGVgLCBgRm9yY2VTaW5nbGVgLCBgTXVsdGlgLCBgRm9yY2VNdWx0aWAgb3IgYEF1dG9gLlxuXHQgKiBJZiBzZXQgdG8gJ1NpbmdsZScsICdNdWx0aScgb3IgJ0F1dG8nLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY29uc2lzdGVudCBzZWxlY3Rpb24gbW9kZS5cblx0ICogSWYgc2V0IHRvICdGb3JjZVNpbmdsZScgb3IgJ0ZvcmNlTXVsdGknIHlvdXIgY2hvaWNlIHdpbGwgYmUgcmVzcGVjdGVkIGJ1dCB0aGlzIG1pZ2h0IG5vdCByZXNwZWN0IHRoZSBGaW9yaSBndWlkZWxpbmVzLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBhbGxvd2VkVmFsdWVzOiBbXCJOb25lXCIsIFwiU2luZ2xlXCIsIFwiTXVsdGlcIiwgXCJBdXRvXCIsIFwiRm9yY2VNdWx0aVwiLCBcIkZvcmNlU2luZ2xlXCJdIH0pXG5cdHNlbGVjdGlvbk1vZGUhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgaGVhZGVyIHRleHQgdGhhdCBpcyBzaG93biBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aGVhZGVyITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIGl0IHRoZSB0YWJsZSBpcyBkZXNpZ25lZCBmb3IgYSBtb2JpbGUgZGV2aWNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0aXNPcHRpbWl6ZWRGb3JTbWFsbERldmljZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIGlmIHRoZSBoZWFkZXIgdGV4dCBzaG91bGQgYmUgc2hvd24gb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdGhlYWRlclZpc2libGUhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBOdW1iZXIgb2YgY29sdW1ucyB0aGF0IGFyZSBmaXhlZCBvbiB0aGUgbGVmdC4gT25seSBjb2x1bW5zIHdoaWNoIGFyZSBub3QgZml4ZWQgY2FuIGJlIHNjcm9sbGVkIGhvcml6b250YWxseS5cblx0ICpcblx0ICogVGhpcyBwcm9wZXJ0eSBpcyBub3QgcmVsZXZhbnQgZm9yIHJlc3BvbnNpdmUgdGFibGVzXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwibnVtYmVyXCIgfSlcblx0ZnJvemVuQ29sdW1uQ291bnQ/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGhlYWRlciBzaG91bGQgYmUgYSBwYXJ0IG9mIHRoZSB3aWR0aCBjYWxjdWxhdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGhvdyB0aGUgdGFibGUgaGFuZGxlcyB0aGUgdmlzaWJsZSByb3dzLiBEb2VzIG5vdCBhcHBseSB0byBSZXNwb25zaXZlIHRhYmxlcy5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBBdXRvYCwgYEZpeGVkYC48YnIvPlxuXHQgKiAtIElmIHNldCB0byBgRml4ZWRgLCB0aGUgdGFibGUgYWx3YXlzIGhhcyBhcyBtYW55IHJvd3MgYXMgZGVmaW5lZCBpbiB0aGUgcm93Q291bnQgcHJvcGVydHkuPGJyLz5cblx0ICogLSBJZiBzZXQgdG8gYEF1dG9gLCB0aGUgbnVtYmVyIG9mIHJvd3MgaXMgY2hhbmdlZCBieSB0aGUgdGFibGUgYXV0b21hdGljYWxseS4gSXQgd2lsbCB0aGVuIGFkanVzdCBpdHMgcm93IGNvdW50IHRvIHRoZSBzcGFjZSBpdCBpcyBhbGxvd2VkIHRvIGNvdmVyIChsaW1pdGVkIGJ5IHRoZSBzdXJyb3VuZGluZyBjb250YWluZXIpIGJ1dCBpdCBjYW5ub3QgaGF2ZSBsZXNzIHRoYW4gZGVmaW5lZCBpbiB0aGUgYHJvd0NvdW50YCBwcm9wZXJ0eS48YnIvPlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IFwiRml4ZWRcIiwgYWxsb3dlZFZhbHVlczogW1wiQXV0b1wiLCBcIkZpeGVkXCJdIH0pXG5cdHJvd0NvdW50TW9kZT86IHN0cmluZztcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIHJvd3MgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS4gRG9lcyBub3QgYXBwbHkgdG8gcmVzcG9uc2l2ZSB0YWJsZXMuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwibnVtYmVyXCIsIGRlZmF1bHRWYWx1ZTogNSB9KVxuXHRyb3dDb3VudD86IG51bWJlcjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGFjdGlvbnMgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGFjdGlvbnMhOiBBY3Rpb25bXTtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGNvbHVtbnMgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MudGFibGUuQ29sdW1uXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGNvbHVtbnMhOiBDb2x1bW5bXTtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGRhdGFJbml0aWFsaXplZCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRiaW5kaW5nU3VzcGVuZGVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdG91dERhdGVkQmluZGluZyE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRwZW5kaW5nUmVxdWVzdCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyBpZiB0aGUgZW1wdHkgcm93cyBhcmUgZW5hYmxlZC4gVGhpcyBhbGxvd3MgdG8gaGF2ZSBkeW5hbWljIGVuYWJsZW1lbnQgb2YgdGhlIGVtcHR5IHJvd3MgdmlhIHRoZSBzZXR0ZXIgZnVuY3Rpb24uXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbXB0eVJvd3NFbmFibGVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhIHJvdzsgdGhlIGV2ZW50IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHJvdyBpcyBjaG9zZW4uXG5cdCAqXG5cdCAqIFlvdSBjYW4gc2V0IHRoaXMgaW4gb3JkZXIgdG8gaGFuZGxlIHRoZSBuYXZpZ2F0aW9uIG1hbnVhbGx5LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRyb3dQcmVzcyE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgVGFibGUgU3RhdGUgY2hhbmdlcy5cblx0ICpcblx0ICogWW91IGNhbiBzZXQgdGhpcyBpbiBvcmRlciB0byBzdG9yZSB0aGUgdGFibGUgc3RhdGUgaW4gdGhlIGFwcHN0YXRlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0c3RhdGVDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIFRhYmxlIGNvbnRleHQgY2hhbmdlcy5cblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGNvbnRleHRDaGFuZ2U/OiBGdW5jdGlvbjtcblxuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbERhdGFSZXF1ZXN0ZWQhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hpY2ggb3B0aW9ucyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqIElmIGl0IGlzIHNldCB0byBgdHJ1ZWAsIGFsbCBwb3NzaWJsZSBvcHRpb25zIGZvciB0aGlzIGtpbmQgb2YgdGFibGUgYXJlIGVuYWJsZWQuPGJyLz5cblx0ICogSWYgaXQgaXMgc2V0IHRvIGBmYWxzZWAsIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZC48YnIvPlxuXHQgKjxici8+XG5cdCAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgbW9yZSBncmFudWxhciBjb250cm9sIGZvciB0aGUgcGVyc29uYWxpemF0aW9uIGJ5IHByb3ZpZGluZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggdGhlIG9wdGlvbnMgeW91IHdhbnQgdG8gYmUgYXZhaWxhYmxlLjxici8+XG5cdCAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTo8YnIvPlxuXHQgKiAgLSBTb3J0PGJyLz5cblx0ICogIC0gQ29sdW1uPGJyLz5cblx0ICogIC0gRmlsdGVyPGJyLz5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuIHwgc3RyaW5nXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRwZXJzb25hbGl6YXRpb24hOiBib29sZWFuIHwgc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB0aGUga2luZCBvZiB2YXJpYW50IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlIGlzIGBDb250cm9sYC48YnIvPlxuXHQgKiBJZiBzZXQgd2l0aCB2YWx1ZSBgQ29udHJvbGAsIGEgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2wgaXMgc2VlbiB3aXRoaW4gdGhlIHRhYmxlIGFuZCB0aGUgdGFibGUgaXMgbGlua2VkIHRvIHRoaXMuPGJyLz5cblx0ICogSWYgbm90IHNldCB3aXRoIGFueSB2YWx1ZSwgY29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgYWxsb3dlZFZhbHVlczogW1wiQ29udHJvbFwiXSB9KVxuXHR2YXJpYW50TWFuYWdlbWVudCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIHNlYXJjaCBhY3Rpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0aXNTZWFyY2hhYmxlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSBjb25maWd1cmVkLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUNyZWF0aW9uT3B0aW9uc1wiLFxuXHRcdGRlZmF1bHRWYWx1ZToge1xuXHRcdFx0bmFtZTogXCJJbmxpbmVcIixcblx0XHRcdGNyZWF0ZUF0RW5kOiBmYWxzZSxcblx0XHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU6IGZhbHNlXG5cdFx0fVxuXHR9KVxuXHRjcmVhdGlvbk1vZGU/OiBUYWJsZUNyZWF0aW9uT3B0aW9ucztcblxuXHQvKipcblx0ICogR2V0cyB0aGUgcmVsZXZhbnQgdGFibGVBUEkgZm9yIGEgVUk1IGV2ZW50LlxuXHQgKiBBbiBldmVudCBjYW4gYmUgdHJpZ2dlcmVkIGVpdGhlciBieSB0aGUgaW5uZXIgY29udHJvbCAodGhlIHRhYmxlKSBvciB0aGUgT2RhdGEgbGlzdEJpbmRpbmdcblx0ICogVGhlIGZpcnN0IGluaXRpYXRvciBpcyB0aGUgdXN1YWwgb25lIHNvIGl0J3MgbWFuYWdlZCBieSB0aGUgTWFjcm9BUEkgd2hlcmVhc1xuXHQgKiB0aGUgc2Vjb25kIG9uZSBpcyBzcGVjaWZpYyB0byB0aGlzIEFQSSBhbmQgaGFzIHRvIG1hbmFnZWQgYnkgdGhlIFRhYmxlQVBJLlxuXHQgKlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVGhlIFVJNSBldmVudFxuXHQgKiBAcmV0dXJucyBUaGUgVGFibGVBUEkgb3IgZmFsc2UgaWYgbm90IGZvdW5kXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzdGF0aWMgZ2V0QVBJKHVpNUV2ZW50OiBVSTVFdmVudCk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzb3VyY2UgPSB1aTVFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChzb3VyY2UuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdHRhYmxlQVBJID0gKHRoaXMuaW5zdGFuY2VNYXA/LmdldCh0aGlzKSBhcyBUYWJsZUFQSVtdKT8uZmluZCgoYXBpKSA9PiBhcGkuY29udGVudD8uZ2V0Um93QmluZGluZygpID09PSBzb3VyY2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFibGVBUEkgfHwgKHN1cGVyLmdldEFQSSh1aTVFdmVudCwgXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpIGFzIFRhYmxlQVBJKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNvcnQgY29uZGl0aW9ucyBxdWVyeSBzdHJpbmcuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzb3J0IGNvbmRpdGlvbnMgcXVlcnkgc3RyaW5nXG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0dHlwZSBTb3J0Q29uZGl0aW9ucyA9IHtcblx0XHRcdHNvcnRlcnM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0XHRkZXNjZW5kaW5nOiBib29sZWFuO1xuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdH07XG5cdFx0Y29uc3Qgc29ydENvbmRpdGlvbnMgPSAodGFibGUuZ2V0U29ydENvbmRpdGlvbnMoKSBhcyBTb3J0Q29uZGl0aW9ucyk/LnNvcnRlcnM7XG5cdFx0cmV0dXJuIHNvcnRDb25kaXRpb25zXG5cdFx0XHQ/IHNvcnRDb25kaXRpb25zXG5cdFx0XHRcdFx0Lm1hcChmdW5jdGlvbiAoc29ydENvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc29ydENvbmRpdGlvbnNQYXRoID0gdGFibGUuZ2V0UHJvcGVydHlIZWxwZXIoKS5nZXRQcm9wZXJ0eShzb3J0Q29uZGl0aW9uLm5hbWUpPy5wYXRoO1xuXHRcdFx0XHRcdFx0aWYgKHNvcnRDb25kaXRpb25zUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYCR7c29ydENvbmRpdGlvbnNQYXRofSR7c29ydENvbmRpdGlvbi5kZXNjZW5kaW5nID8gXCIgZGVzY1wiIDogXCJcIn1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIixcIilcblx0XHRcdDogXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGNvbnRleHRzIGZyb20gdGhlIHRhYmxlIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBDb250ZXh0cyBvZiB0aGUgcm93cyBzZWxlY3RlZCBieSB0aGUgdXNlclxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKCk6IENvbnRleHRbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQgYXMgYW55KS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG1lc3NhZ2UgdG8gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBUaGUgbWVzc2FnZSBhcHBsaWVzIHRvIHRoZSB3aG9sZSB0YWJsZSBhbmQgbm90IHRvIGFuIGluZGl2aWR1YWwgdGFibGUgcm93LlxuXHQgKlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIFRoZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIE1lc3NhZ2UgdHlwZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5tZXNzYWdlIE1lc3NhZ2UgdGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kZXNjcmlwdGlvbiBNZXNzYWdlIGRlc2NyaXB0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBlcnNpc3RlbnQgVHJ1ZSBpZiB0aGUgbWVzc2FnZSBpcyBwZXJzaXN0ZW50XG5cdCAqIEByZXR1cm5zIFRoZSBJRCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhZGRNZXNzYWdlKHBhcmFtZXRlcnM6IHsgdHlwZT86IE1lc3NhZ2VUeXBlOyBtZXNzYWdlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgcGVyc2lzdGVudD86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbXNnTWFuYWdlciA9IHRoaXMuX2dldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmNvbnRlbnQgYXMgYW55IGFzIFRhYmxlO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHR0YXJnZXQ6IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHR0eXBlOiBwYXJhbWV0ZXJzLnR5cGUsXG5cdFx0XHRtZXNzYWdlOiBwYXJhbWV0ZXJzLm1lc3NhZ2UsXG5cdFx0XHRwcm9jZXNzb3I6IG9UYWJsZS5nZXRNb2RlbCgpLFxuXHRcdFx0ZGVzY3JpcHRpb246IHBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRwZXJzaXN0ZW50OiBwYXJhbWV0ZXJzLnBlcnNpc3RlbnRcblx0XHR9KTtcblxuXHRcdG1zZ01hbmFnZXIuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdHJldHVybiBvTWVzc2FnZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0aGUgdGFibGUgc2hvdWxkIHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGZ1bmN0aW9uLlxuXHQgKiBUaGUgdGFibGUgaW4gdmlldyBzaG91bGQgb25seSByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBpZlxuXHQgKiAgIDEuIFRoZSBQYWdlIGlzIGluIEVkaXQgbW9kZVxuXHQgKiAgIDIuIFRhYmxlIGlzIG5vdCByZWFkIG9ubHlcblx0ICogICAzLiBJdCBoYXMgYW5ub3RhdGlvbiBmb3IgQ29tbW9uLlJlY29tbWVuZGVkVmFsdWVzRnVuY3Rpb25cblx0ICogICA0LiBWaWV3IGlzIG5vdCBMaXN0UmVwb3J0LCBmb3IgT1AvU3ViT1AgYW5kIGZvcndhcmQgdmlld3MgcmVjb21tZW5kYXRpb25zIHNob3VsZCBiZSByZXF1ZXN0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiByZWNvbW1lbmRhdGlvbnMgbmVlZHMgdG8gYmUgcmVxdWVzdGVkXG5cdCAqL1xuXHRjaGVja0lmUmVjb21tZW5kYXRpb25SZWxldmFudChvRXZlbnQ6IFVJNUV2ZW50KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNUYWJsZVJlYWRPbmx5ID0gdGhpcy5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpO1xuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSAodGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHQvLyByZXF1ZXN0IGZvciBhY3Rpb24gb25seSBpZiB3ZSBhcmUgaW4gT1AvU3ViT1AgYW5kIGluIEVkaXQgbW9kZSwgYWxzbyB0YWJsZSBpcyBub3QgcmVhZE9ubHlcblx0XHRpZiAoIWlzVGFibGVSZWFkT25seSAmJiBpc0VkaXRhYmxlICYmIHZpZXdEYXRhLmNvbnZlcnRlclR5cGUgIT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBtZXNzYWdlIGZyb20gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZU1lc3NhZ2UoaWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLl9nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gbXNnTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbWVzc2FnZXMuZmluZCgoZTogYW55KSA9PiBlLmlkID09PSBpZCk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0bXNnTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZXN1bHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyBhIHJlZnJlc2ggb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZWZyZXNoKCk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudC5nZXRSb3dCaW5kaW5nKCkucmVmcmVzaCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGNvdW50IGluIGEgcGVuZGluZyBzdGF0ZS5cblx0ICpcblx0ICovXG5cdHNldFF1aWNrRmlsdGVyQ291bnRzQXNMb2FkaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5jb250ZW50LFxuXHRcdFx0aW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0LFxuXHRcdFx0c2VsZWN0b3IgPSB0YWJsZS5nZXRRdWlja0ZpbHRlcigpIGFzIFNlbGVjdCB8IFNlZ21lbnRlZEJ1dHRvbixcblx0XHRcdHF1aWNrRmlsdGVyQ291bnRzID0ge30gYXMgUmVjb3JkPG51bWJlciwgc3RyaW5nPjtcblxuXHRcdGZvciAoY29uc3QgayBpbiBzZWxlY3Rvci5nZXRJdGVtcygpKSB7XG5cdFx0XHRxdWlja0ZpbHRlckNvdW50c1trXSA9IFwiLi4uXCI7XG5cdFx0fVxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcInF1aWNrRmlsdGVyc1wiLCB7IGNvdW50czogcXVpY2tGaWx0ZXJDb3VudHMgfSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgY291bnQgb2YgdGhlIHNlbGVjdGVkIHF1aWNrRmlsdGVyLlxuXHQgKlxuXHQgKi9cblx0cmVmcmVzaFNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudCgpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCBjb3VudCA9ICh0YWJsZS5nZXRSb3dCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q291bnQoKTtcblx0XHRjb25zdCBzZWxlY3RvciA9IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkgYXMgU2VsZWN0IHwgU2VnbWVudGVkQnV0dG9uIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChzZWxlY3RvciAmJiB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZmlsdGVycz8ucXVpY2tGaWx0ZXJzPy5zaG93Q291bnRzICYmIGNvdW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGl0ZW1JbmRleCA9IHNlbGVjdG9yLmdldEl0ZW1zKCkuZmluZEluZGV4KChzZWxlY3Rvckl0ZW0pID0+IHNlbGVjdG9ySXRlbS5nZXRLZXkoKSA9PT0gc2VsZWN0b3IuZ2V0U2VsZWN0ZWRLZXkoKSk7XG5cdFx0XHRpZiAoaXRlbUluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoYHF1aWNrRmlsdGVycy9jb3VudHMvJHtpdGVtSW5kZXh9YCwgVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChjb3VudCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBjb3VudHMgb2YgdGhlIHVuc2VsZWN0ZWQgcXVpY2tGaWx0ZXJzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSBjb3VudCBhcmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgcmVmcmVzaFVuU2VsZWN0ZWRRdWlja0ZpbHRlckNvdW50cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdG9yID0gdGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSBhcyBTZWxlY3QgfCBTZWdtZW50ZWRCdXR0b24sXG5cdFx0XHRpdGVtcyA9IHNlbGVjdG9yLmdldEl0ZW1zKCksXG5cdFx0XHRpbnRlcm5hbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQsXG5cdFx0XHRjb250cm9sbGVyID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKT8uZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0Y2hhcnQgPSAoY29udHJvbGxlciBhcyBDb250cm9sbGVyICYgeyBnZXRDaGFydENvbnRyb2w/OiBGdW5jdGlvbiB9KS5nZXRDaGFydENvbnRyb2w/LigpLFxuXHRcdFx0Y2hhcnRBUEkgPSBjaGFydCAmJiBjaGFydC5nZXRQYXJlbnQoKSxcblx0XHRcdHNldEl0ZW1Db3VudHMgPSBhc3luYyAoaXRlbTogSXRlbSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtS2V5ID0gaXRlbS5nZXRLZXkoKTtcblx0XHRcdFx0Y29uc3QgaXRlbUZpbHRlcnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJzRnJvbUFubm90YXRpb24odGFibGUsIGl0ZW1LZXkpO1xuXHRcdFx0XHRjb25zdCBjb3VudCA9IGF3YWl0IFRhYmxlVXRpbHMuZ2V0TGlzdEJpbmRpbmdGb3JDb3VudCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKSwge1xuXHRcdFx0XHRcdGJhdGNoR3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxGaWx0ZXJzOiBbLi4uYmFzZVRhYmxlRmlsdGVycywgLi4uaXRlbUZpbHRlcnNdXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBpdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKHNlbGVjdG9ySXRlbSkgPT4gc2VsZWN0b3JJdGVtLmdldEtleSgpID09PSBpdGVtS2V5KTtcblx0XHRcdFx0aWYgKGl0ZW1JbmRleCA+IC0xKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KGBxdWlja0ZpbHRlcnMvY291bnRzLyR7aXRlbUluZGV4fWAsIFRhYmxlVXRpbHMuZ2V0Q291bnRGb3JtYXR0ZWQoY291bnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGNvbnN0IGNoYXJ0RmlsdGVyID0gY2hhcnRBUEkgJiYgY2hhcnRBUEkuaGFzU2VsZWN0aW9ucygpICYmIGNoYXJ0QVBJLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGJhc2VUYWJsZUZpbHRlcnMgPSBUYWJsZVV0aWxzLmdldEhpZGRlbkZpbHRlcnModGFibGUpO1xuXHRcdGlmIChjaGFydEZpbHRlcikge1xuXHRcdFx0YmFzZVRhYmxlRmlsdGVycy5wdXNoKGNoYXJ0RmlsdGVyKTtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZ1Byb21pc2VzID0gaXRlbXNcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZ2V0S2V5KCkgIT09IHNlbGVjdG9yLmdldFNlbGVjdGVkS2V5KCkpXG5cdFx0XHQubWFwKGFzeW5jIChpdGVtKSA9PiBzZXRJdGVtQ291bnRzKGl0ZW0pKTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoYmluZGluZ1Byb21pc2VzKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgYmluZGluZyBwcm9taXNlc1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRNZXNzYWdlTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlbGVjdGlvbkNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdF9nZXRSb3dCaW5kaW5nKCkge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0Z2V0Q291bnRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0TGlzdEJpbmRpbmdGb3JDb3VudChvVGFibGUsIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLCB7XG5cdFx0XHRiYXRjaEdyb3VwSWQ6ICF0aGlzLmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKSA/IG9UYWJsZS5kYXRhKFwiYmF0Y2hHcm91cElkXCIpIDogXCIkYXV0b1wiLFxuXHRcdFx0YWRkaXRpb25hbEZpbHRlcnM6IFRhYmxlVXRpbHMuZ2V0SGlkZGVuRmlsdGVycyhvVGFibGUpXG5cdFx0fSlcblx0XHRcdC50aGVuKChpVmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChpVmFsdWUpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBcIjBcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGNvbnRleHQgY2hhbmdlIG9uIHRoZSB0YWJsZS5cblx0ICogQW4gZXZlbnQgaXMgZmlyZWQgdG8gcHJvcGFnYXRlIHRoZSBPZGF0YUxpc3RCaW5kaW5nIGV2ZW50IGFuZCB0aGUgZW5hYmxlbWVudFxuXHQgKiBvZiB0aGUgY3JlYXRpb24gcm93IGlzIGNhbGN1bGF0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgVUk1IGV2ZW50XG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25Db250ZXh0Q2hhbmdlKHVpNUV2ZW50OiBVSTVFdmVudCkge1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwiY29udGV4dENoYW5nZVwiLCB1aTVFdmVudC5nZXRQYXJhbWV0ZXJzKCkpO1xuXHRcdHRoaXMuc2V0RmFzdENyZWF0aW9uUm93RW5hYmxlbWVudCgpO1xuXHRcdHRoaXMucmVmcmVzaFNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbkZpZWxkTGl2ZUNoYW5nZSBldmVudC5cblx0ICpcblx0ICogQG5hbWUgb25GaWVsZExpdmVDaGFuZ2Vcblx0ICogQHBhcmFtIHVpNUV2ZW50IFRoZSBldmVudCBvYmplY3QgcGFzc2VkIGJ5IHRoZSBvbkZpZWxkTGl2ZUNoYW5nZSBldmVudFxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uRmllbGRMaXZlQ2hhbmdlKHVpNUV2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpZWxkID0gdWk1RXZlbnQuZ2V0U291cmNlKCkgYXMgQ29udHJvbCxcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0LFxuXHRcdFx0YmluZGluZyA9IGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHQvLyBjcmVhdGlvbiBvZiBhIG5ldyBpbmFjdGl2ZSByb3cgaWYgcmVsZXZhbnRcblx0XHRpZiAoYmluZGluZ0NvbnRleHQuaXNJbmFjdGl2ZSgpKSB7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRoaXM/LmNvbnRlbnQgYXMgVGFibGU7XG5cdFx0XHR0aGlzPy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nLCB0YWJsZSwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGNoYW5nZSBvbiBhIHF1aWNrRmlsdGVyXG5cdCAqIFRoZSB0YWJsZSBpcyByZWJvdW5kIGlmIHRoZSBGaWx0ZXJCYXIgaXMgbm90IHN1c3BlbmRlZCBhbmQgdXBkYXRlIHRoZSBBcHBTdGF0ZS5cblx0ICpcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblF1aWNrRmlsdGVyU2VsZWN0aW9uQ2hhbmdlKCkge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5jb250ZW50O1xuXHRcdC8vIFJlYmluZCB0aGUgdGFibGUgdG8gcmVmbGVjdCB0aGUgY2hhbmdlIGluIHF1aWNrIGZpbHRlciBrZXkuXG5cdFx0Ly8gV2UgZG9uJ3QgcmViaW5kIHRoZSB0YWJsZSBpZiB0aGUgZmlsdGVyQmFyIGZvciB0aGUgdGFibGUgaXMgc3VzcGVuZGVkXG5cdFx0Ly8gYXMgcmViaW5kIHdpbGwgYmUgZG9uZSB3aGVuIHRoZSBmaWx0ZXJCYXIgaXMgcmVzdW1lZFxuXHRcdGNvbnN0IGZpbHRlckJhcklEID0gdGFibGUuZ2V0RmlsdGVyKCk7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gKGZpbHRlckJhcklEICYmIENvcmUuYnlJZChmaWx0ZXJCYXJJRCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWZpbHRlckJhcj8uZ2V0U3VzcGVuZFNlbGVjdGlvbj8uKCkpIHtcblx0XHRcdHRhYmxlLnJlYmluZCgpO1xuXHRcdH1cblx0XHQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKT8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyIHwgdW5kZWZpbmVkKT8uZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblRhYmxlUm93UHJlc3Mob0V2ZW50OiBVSTVFdmVudCwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBvQ29udGV4dDogQ29udGV4dCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdC8vIHByZXZlbnQgbmF2aWdhdGlvbiB0byBhbiBlbXB0eSByb3dcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gSW4gdGhlIGNhc2Ugb2YgYW4gYW5hbHl0aWNhbCB0YWJsZSwgaWYgd2UncmUgdHJ5aW5nIHRvIG5hdmlnYXRlIHRvIGEgY29udGV4dCBjb3JyZXNwb25kaW5nIHRvIGEgdmlzdWFsIGdyb3VwIG9yIGdyYW5kIHRvdGFsXG5cdFx0Ly8gLS0+IENhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3MgJiZcblx0XHRcdG9Db250ZXh0ICYmXG5cdFx0XHRvQ29udGV4dC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSAmJlxuXHRcdFx0dHlwZW9mIG9Db250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5pc0V4cGFuZGVkXCIpID09PSBcImJvb2xlYW5cIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG1QYXJhbWV0ZXJzLCB7IHJlYXNvbjogTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcyB9KTtcblx0XHRcdChvQ29udHJvbGxlciBhcyBhbnkpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkludGVybmFsUGF0Y2hDb21wbGV0ZWQoKSB7XG5cdFx0Ly8gQkNQOiAyMzgwMDIzMDkwXG5cdFx0Ly8gV2UgaGFuZGxlIGVuYWJsZW1lbnQgb2YgRGVsZXRlIGZvciB0aGUgdGFibGUgaGVyZS5cblx0XHQvLyBFZGl0Rmxvdy50cyNoYW5kbGVQYXRjaFNlbnQgaXMgaGFuZGxpbmcgdGhlIGFjdGlvbiBlbmFibGVtZW50LlxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSB0aGlzLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoaW50ZXJuYWxNb2RlbENvbnRleHQsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQob0V2ZW50OiBVSTVFdmVudDx7IGVycm9yOiBzdHJpbmcgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBpc1JlY29tbWVuZGF0aW9uUmVsZXZhbnQgPSB0aGlzLmNoZWNrSWZSZWNvbW1lbmRhdGlvblJlbGV2YW50KG9FdmVudCk7XG5cdFx0aWYgKGlzUmVjb21tZW5kYXRpb25SZWxldmFudCkge1xuXHRcdFx0Y29uc3QgY29udGV4dElkZW50aWZpZXIgPSB0aGlzLmdldElkZW50aWZpZXJDb2x1bW4oaXNSZWNvbW1lbmRhdGlvblJlbGV2YW50KSBhcyBzdHJpbmdbXTtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29udGV4dHNBcnJheSA9IChvRXZlbnQuZ2V0U291cmNlKCkgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRjb25zdCBuZXdDb250ZXh0czogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSA9IFtdO1xuXHRcdFx0cmVzcG9uc2VDb250ZXh0c0FycmF5Lm1hcCgoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRuZXdDb250ZXh0cy5wdXNoKHtcblx0XHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmdldENvbnRyb2xsZXIoKS5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhuZXdDb250ZXh0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIikpIHtcblx0XHRcdHRoaXMuZ2V0Q29udHJvbGxlcigpLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwiY29sbGFib3JhdGlvbk1hbmFnZXJcIiwgXCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHNcIilcblx0Y29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzOiBQcm9taXNlPFdyYXBwZWRDYXJkPltdKTogdm9pZCB7XG5cdFx0Y29uc3QgYWN0aW9uVG9vbGJhckl0ZW1zID0gdGhpcy5jb250ZW50LmdldEFjdGlvbnMoKSBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uW107XG5cdFx0aWYgKGhhc0luc2lnaHRBY3Rpb25FbmFibGVkKGFjdGlvblRvb2xiYXJJdGVtcywgdGhpcy5jb250ZW50LmdldEZpbHRlcigpLCBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpKSkge1xuXHRcdFx0Y2FyZHMucHVzaChcblx0XHRcdFx0KGFzeW5jICgpOiBQcm9taXNlPFdyYXBwZWRDYXJkPiA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FyZCA9IGF3YWl0IHRoaXMuZ2V0Q2FyZE1hbmlmZXN0VGFibGUoKTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y2FyZDogY2FyZCxcblx0XHRcdFx0XHRcdHRpdGxlOiAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVHlwZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiLFxuXHRcdFx0XHRcdFx0Y2FsbGJhY2s6IHRoaXMub25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrLmJpbmQodGhpcylcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KSgpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkludGVybmFsRGF0YVJlcXVlc3RlZChvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImRhdGFJbml0aWFsaXplZFwiLCB0cnVlKTtcblx0XHQodGhpcyBhcyBhbnkpLmZpcmVFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCBvRXZlbnQuZ2V0UGFyYW1ldGVycygpKTtcblx0XHRpZiAodGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSAmJiB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZmlsdGVycz8ucXVpY2tGaWx0ZXJzPy5zaG93Q291bnRzKSB7XG5cdFx0XHR0aGlzLnNldFF1aWNrRmlsdGVyQ291bnRzQXNMb2FkaW5nKCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hVblNlbGVjdGVkUXVpY2tGaWx0ZXJDb3VudHMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgUGFzdGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gZXZ0IFRoZSBldmVudFxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyXG5cdCAqXG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0YXN5bmMgb25QYXN0ZShldnQ6IFBhc3RlUHJvdmlkZXIkUGFzdGVFdmVudCwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByYXdQYXN0ZWREYXRhID0gZXZ0LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRzb3VyY2UgPSBldnQuZ2V0U291cmNlKCksXG5cdFx0XHR0YWJsZSA9IChzb3VyY2UuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IHNvdXJjZSA6IChzb3VyY2UgYXMgQ29udHJvbCkuZ2V0UGFyZW50KCkpIGFzIFRhYmxlLFxuXHRcdFx0aW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cblx0XHQvLyBJZiBwYXN0ZSBpcyBkaXNhYmxlIG9yIGlmIHdlJ3JlIG5vdCBpbiBlZGl0IG1vZGUsIHdlIGNhbid0IHBhc3RlIGFueXRoaW5nXG5cdFx0aWYgKCF0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVBhc3RlIHx8ICEodGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgaW4gY2FzZSBvZiBUcmVlVGFibGVcblx0XHRpZiAoaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldENvbnRleHRQYXRoID0gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KFwicGFzdGFibGVDb250ZXh0c1wiKVswXSBhcyBzdHJpbmc7XG5cdFx0XHRjb25zdCBuZXdQYXJlbnRDb250ZXh0ID0gdGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpWzBdIGFzIENvbnRleHQ7XG5cdFx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdGFibGVcblx0XHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0XHQuZ2V0Q3VycmVudENvbnRleHRzKClcblx0XHRcdFx0LmZpbmQoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UGF0aCgpID09PSB0YXJnZXRDb250ZXh0UGF0aCk7XG5cblx0XHRcdGlmICghdGFyZ2V0Q29udGV4dCkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJUaGUgQ3V0IG9wZXJhdGlvbiBpcyB1bnN1Y2Nlc3NmdWwgYmVjYXVzZSB0aGUgcmVsZXZhbnQgY29udGV4dCBpcyBubyBsb25nZXIgYXZhaWxhYmxlXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB0YXJnZXRDb250ZXh0Lm1vdmUoeyBwYXJlbnQ6IG5ld1BhcmVudENvbnRleHQgfSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJUaGUgbW92ZSBjb250ZXh0IGZhaWxzIFwiLCBlIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwicGFzdGFibGVDb250ZXh0c1wiLCBbXSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL1RoaXMgY29kZSBpcyBleGVjdXRlZCBmb3IgdGFibGVzIGV4Y2VwdGVkIFRyZWVUYWJsZVxuXHRcdGlmICh0YWJsZS5nZXRFbmFibGVQYXN0ZSgpID09PSB0cnVlKSB7XG5cdFx0XHRQYXN0ZUhlbHBlci5wYXN0ZURhdGEocmF3UGFzdGVkRGF0YSwgdGFibGUsIGNvbnRyb2xsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdE1lc3NhZ2VCb3guZXJyb3IocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9PUF9DT05UUk9MTEVSX1NBUEZFX1BBU1RFX0RJU0FCTEVEX01FU1NBR0VcIiksIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3V0IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqXG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25DdXQoZXZ0OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlID0gKGV2dC5nZXRTb3VyY2UoKSBhcyBVSTVFbGVtZW50KS5nZXRQYXJlbnQoKSBhcyBUYWJsZTtcblx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGlmICh0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKFwiTXVsdGkgY3V0dGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFwicGFzdGFibGVDb250ZXh0c1wiLFxuXHRcdFx0dGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpLm1hcCgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0KTtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodGFibGUpLmdldFRleHQoXCJNX0NVVF9SRUFEWVwiKSk7XG5cdFx0dGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXRhYmxlQ29udGV4dHNcIiwgW10pO1xuXHR9XG5cblx0Ly8gVGhpcyBldmVudCB3aWxsIGFsbG93IHVzIHRvIGludGVyY2VwdCB0aGUgZXhwb3J0IGJlZm9yZSBpcyB0cmlnZ2VyZWQgdG8gY292ZXIgc3BlY2lmaWMgY2FzZXNcblx0Ly8gdGhhdCBjb3VsZG4ndCBiZSBhZGRyZXNzZWQgb24gdGhlIHByb3BlcnR5SW5mb3MgZm9yIGVhY2ggY29sdW1uLlxuXHQvLyBlLmcuIEZpeGVkIFRhcmdldCBWYWx1ZSBmb3IgdGhlIGRhdGFwb2ludHNcblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uQmVmb3JlRXhwb3J0KGV4cG9ydEV2ZW50OiBUYWJsZSRCZWZvcmVFeHBvcnRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGlzU3BsaXRNb2RlID0gISEoZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwidXNlckV4cG9ydFNldHRpbmdzXCIpIGFzIFVzZXJFeHBvcnRTZXR0aW5ncyk/LnNwbGl0Q2VsbHM7XG5cdFx0Y29uc3QgdGFibGVDb250cm9sbGVyID0gZXhwb3J0RXZlbnQuZ2V0U291cmNlKCkgYXMgUGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRleHBvcnRTZXR0aW5ncyA9IGV4cG9ydEV2ZW50LmdldFBhcmFtZXRlcihcImV4cG9ydFNldHRpbmdzXCIpIGFzIEV4cG9ydFNldHRpbmdzLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblxuXHRcdFRhYmxlQVBJLnVwZGF0ZUV4cG9ydFNldHRpbmdzKGV4cG9ydFNldHRpbmdzLCB0YWJsZURlZmluaXRpb24sIHRhYmxlQ29udHJvbGxlciwgaXNTcGxpdE1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIE1EQyBEYXRhU3RhdGVJbmRpY2F0b3IgcGx1Z2luIHRvIGRpc3BsYXkgbWVzc2FnZVN0cmlwIG9uIGEgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWVzc2FnZVxuXHQgKiBAcGFyYW0gb1RhYmxlXG5cdCAqIEBuYW1lIGRhdGFTdGF0ZUZpbHRlclxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRvIHJlbmRlciB0aGUgbWVzc2FnZVN0cmlwIHZpc2libGVcblx0ICovXG5cdHN0YXRpYyBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIob01lc3NhZ2U6IGFueSwgb1RhYmxlOiBhbnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBzVGFibGVDb250ZXh0QmluZGluZ1BhdGggPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNUYWJsZVJvd0JpbmRpbmcgPSAoc1RhYmxlQ29udGV4dEJpbmRpbmdQYXRoID8gYCR7c1RhYmxlQ29udGV4dEJpbmRpbmdQYXRofS9gIDogXCJcIikgKyBvVGFibGUuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1RhYmxlUm93QmluZGluZyA9PT0gb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaGFuZGxlcyB0aGUgRGF0YVN0YXRlIG9mIHRoZSBEYXRhU3RhdGVJbmRpY2F0b3IgcGx1Z2luIGZyb20gTURDIG9uIGEgdGFibGUuXG5cdCAqIEl0J3MgZmlyZWQgd2hlbiBuZXcgZXJyb3IgbWVzc2FnZXMgYXJlIHNlbnQgZnJvbSB0aGUgYmFja2VuZCB0byB1cGRhdGUgcm93IGhpZ2hsaWdodGluZy5cblx0ICpcblx0ICogQG5hbWUgb25EYXRhU3RhdGVDaGFuZ2Vcblx0ICogQHBhcmFtIGV2dCBFdmVudCBvYmplY3Rcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkRhdGFTdGF0ZUNoYW5nZShldnQ6IERhdGFTdGF0ZUluZGljYXRvciREYXRhU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvciA9IGV2dC5nZXRTb3VyY2UoKSBhcyBEYXRhU3RhdGVJbmRpY2F0b3I7XG5cdFx0Y29uc3QgZmlsdGVyZWRNZXNzYWdlcyA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJmaWx0ZXJlZE1lc3NhZ2VzXCIpIGFzIE1lc3NhZ2VbXTtcblx0XHRpZiAoZmlsdGVyZWRNZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgaGlkZGVuTWFuZGF0b3J5UHJvcGVydGllcyA9IGZpbHRlcmVkTWVzc2FnZXNcblx0XHRcdFx0Lm1hcCgobXNnKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IChtc2cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyB7XG5cdFx0XHRcdFx0XHR0YWJsZUlkPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0ZW1wdHlSb3dNZXNzYWdlPzogYm9vbGVhbjtcblx0XHRcdFx0XHRcdG1pc3NpbmdDb2x1bW4/OiBzdHJpbmc7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZXR1cm4gdGVjaG5pY2FsRGV0YWlscy5lbXB0eVJvd01lc3NhZ2UgPT09IHRydWUgJiYgdGVjaG5pY2FsRGV0YWlscy5taXNzaW5nQ29sdW1uO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmlsdGVyKChoaWRkZW5Qcm9wZXJ0eSkgPT4gISFoaWRkZW5Qcm9wZXJ0eSk7XG5cdFx0XHRpZiAoaGlkZGVuTWFuZGF0b3J5UHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZVN0cmlwRXJyb3IgPSBzYXAudWlcblx0XHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdFx0LmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIilcblx0XHRcdFx0XHQuZ2V0VGV4dChcblx0XHRcdFx0XHRcdGhpZGRlbk1hbmRhdG9yeVByb3BlcnRpZXMubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0XHRcdD8gXCJNX01FU1NBR0VTVFJJUF9FTVBUWVJPV19NQU5EQVRPUllfSElEREVOXCJcblx0XHRcdFx0XHRcdFx0OiBcIk1fTUVTU0FHRVNUUklQX0VNUFRZUk9XX01BTkRBVE9SWV9ISURERU5fUExVUkFMXCIsXG5cdFx0XHRcdFx0XHRbaGlkZGVuTWFuZGF0b3J5UHJvcGVydGllcy5qb2luKFwiLCBcIildXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0ZGF0YVN0YXRlSW5kaWNhdG9yLnNob3dNZXNzYWdlKG1lc3NhZ2VTdHJpcEVycm9yLCBcIkVycm9yXCIpO1xuXHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBkYXRhU3RhdGVJbmRpY2F0b3IuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiZmlsdGVyZWRNZXNzYWdlc1wiLCBmaWx0ZXJlZE1lc3NhZ2VzLCBkYXRhU3RhdGVJbmRpY2F0b3IuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgY29sdW1ucyB0byBiZSBleHBvcnRlZCBvZiBhIHRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIHRhYmxlIGV4cG9ydCBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gdGFibGVDb250cm9sbGVyIFRoZSB0YWJsZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBpc1NwbGl0TW9kZSBEZWZpbmVzIGlmIHRoZSBleHBvcnQgaGFzIGJlZW4gbGF1bmNoZWQgdXNpbmcgc3BsaXQgbW9kZVxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqL1xuXHRzdGF0aWMgdXBkYXRlRXhwb3J0U2V0dGluZ3MoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IEV4cG9ydFNldHRpbmdzLFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdHRhYmxlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0aXNTcGxpdE1vZGU6IGJvb2xlYW5cblx0KTogRXhwb3J0U2V0dGluZ3Mge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0YWJsZURlZmluaXRpb24uY29sdW1ucztcblx0XHR0aGlzLnNldFN0YXRpY1NpemVMaW1pdCh0YWJsZURlZmluaXRpb24sIGV4cG9ydFNldHRpbmdzKTtcblxuXHRcdGlmIChleHBvcnRTZXR0aW5ncy5maWxlVHlwZSA9PT0gXCJQREZcIikge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3Mud29ya2Jvb2suY29sdW1ucyA9IHRoaXMucmVtb3ZlTXVsdGlWYWx1ZUZpZWxkc0Zyb21Db2x1bW5zVG9CZUV4cG9ydGVkKFxuXHRcdFx0XHRleHBvcnRTZXR0aW5ncy53b3JrYm9vay5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IGV4cG9ydENvbHVtbnMgPSBleHBvcnRTZXR0aW5ncy53b3JrYm9vay5jb2x1bW5zO1xuXHRcdGZvciAobGV0IGluZGV4ID0gZXhwb3J0Q29sdW1ucy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG5cdFx0XHRjb25zdCBleHBvcnRDb2x1bW4gPSBleHBvcnRDb2x1bW5zW2luZGV4XTtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpO1xuXHRcdFx0ZXhwb3J0Q29sdW1uLmxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChleHBvcnRDb2x1bW4ubGFiZWwsIHRhYmxlQ29udHJvbGxlcik7XG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW4sIHJlc291cmNlQnVuZGxlKTtcblx0XHRcdGlmIChpc1NwbGl0TW9kZSkge1xuXHRcdFx0XHR0aGlzLmFkZFRhcmdldFZhbHVlQ29sdW1uKGNvbHVtbnMsIGV4cG9ydENvbHVtbiwgZXhwb3J0Q29sdW1ucywgcmVzb3VyY2VCdW5kbGUsIGluZGV4KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGl2YWx1ZSBmaWVsZHMgZnJvbSB0aGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1ucyBUaGUgaW5pdGlhbCBsaXN0IG9mIGNvbHVtbnMgdG8gYmUgZXhwb3J0ZWRcblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHJldHVybnMgVGhlIG5ldyBsaXN0IG9mIGNvbHVtbnMgdG8gYmUgZXhwb3J0aW5nIGV4Y2x1ZGluZyBjb2x1bW5zIHdpdGggbXVsdGl2YWx1ZXNcblx0ICovXG5cdHN0YXRpYyByZW1vdmVNdWx0aVZhbHVlRmllbGRzRnJvbUNvbHVtbnNUb0JlRXhwb3J0ZWQoXG5cdFx0ZXhwb3J0Q29sdW1uczogRXhwb3J0Q29sdW1uW10sXG5cdFx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb25cblx0KTogRXhwb3J0Q29sdW1uW10ge1xuXHRcdC8vXG5cdFx0cmV0dXJuIGV4cG9ydENvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGNvbHVtUHJvcGVydHkgPSAoQ29yZS5ieUlkKGNvbHVtbi5jb2x1bW5JZCBhcyBzdHJpbmcpIGFzIE1EQ0NvbHVtbik/LmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRpZiAoY29sdW1Qcm9wZXJ0eSkge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdCh0YWJsZURlZmluaXRpb24uY29sdW1ucy5maW5kKChjb2x1bW5EZWZpbml0aW9uKSA9PiBjb2x1bW5EZWZpbml0aW9uLm5hbWUgPT09IGNvbHVtUHJvcGVydHkpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbilcblx0XHRcdFx0XHRcdD8uaXNNdWx0aVZhbHVlICE9PSB0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdGF0aWMgc2l6ZSBsaW1pdCBmb3IgdGhlIHRhYmxlIGV4cG9ydC5cblx0ICpcblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSB0YWJsZSBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdHN0YXRpYyBzZXRTdGF0aWNTaXplTGltaXQodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sIGV4cG9ydFNldHRpbmdzOiBFeHBvcnRTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCF0YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzICYmXG5cdFx0XHQodGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIkdyaWRUYWJsZVwiKVxuXHRcdCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5zaXplTGltaXQgPSAxMDAwO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGlmIGEgY29sdW1uIHRoYXQgaXMgdG8gYmUgZXhwb3J0ZWQgYW5kIGNvbnRhaW5zIGEgRGF0YVBvaW50IHdpdGggYSBmaXhlZCB0YXJnZXQgdmFsdWUgbmVlZHMgdG8gYmUgYWRkZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBmcm9tIHRoZSBhbm5vdGF0aW9ucyBjb2x1bW5cblx0ICogQHBhcmFtIGNvbHVtbkV4cG9ydCBUaGUgY29sdW1uIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlZCBjb2x1bW4gaGFzIGRlZmluZWQgYSB0YXJnZXRWYWx1ZSBmb3IgdGhlIGRhdGFQb2ludCwgZmFsc2UgZWxzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c3RhdGljIGNvbHVtbldpdGhUYXJnZXRWYWx1ZVRvQmVBZGRlZChjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sdW1uRXhwb3J0OiBFeHBvcnRDb2x1bW4pOiBib29sZWFuIHtcblx0XHRsZXQgY29sdW1uTmVlZHNUb0JlQWRkZWQgPSBmYWxzZTtcblx0XHRpZiAoY29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlICYmIGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vQWRkIFRhcmdldFZhbHVlIGNvbHVtbiB3aGVuIGV4cG9ydGluZyBvbiBzcGxpdCBtb2RlXG5cdFx0XHQvLyBwYXJ0IG9mIGEgRmllbGRHcm91cCBvciBmcm9tIGEgbGluZUl0ZW0gb3IgZnJvbSBhIGNvbHVtbiBvbiB0aGUgZW50aXR5U2V0XG5cdFx0XHRkZWxldGUgY29sdW1uRXhwb3J0LnRlbXBsYXRlO1xuXHRcdFx0Y29sdW1uTmVlZHNUb0JlQWRkZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gY29sdW1uTmVlZHNUb0JlQWRkZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eSBjb3JyZXNwb25kcyB0byB0aGUgZXhwb3J0Q29sdW1uLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZnJvbSB0aGUgYW5ub3RhdGlvbnMgY29sdW1uXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgV2hldGhlciB0aGUgY29sdW1uIGhhcyB0aGUgZXhwb3J0Q29sdW1uIHByb3BlcnR5XG5cdCAqL1xuXHRzdGF0aWMgaXNQcm9wZXJ0eUZyb21FeHBvcnQoY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGV4cG9ydENvbHVtbjogRXhwb3J0Q29sdW1uKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0Y29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gZXhwb3J0Q29sdW1uLnByb3BlcnR5IHx8XG5cdFx0XHRleHBvcnRDb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoY29sdW1uLnJlbGF0aXZlUGF0aCkgfHxcblx0XHRcdGV4cG9ydENvbHVtbi5wcm9wZXJ0eS5pbmNsdWRlcyhjb2x1bW4ubmFtZSlcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIG9mIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdGlmIChjb2x1bW4ucHJvcGVydHlJbmZvcz8ubGVuZ3RoID09PSAxICYmIGV4cG9ydENvbHVtbi5wcm9wZXJ0eVswXSA9PT0gY29sdW1uLnByb3BlcnR5SW5mb3NbMF0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgdHJhbnNsYXRlZCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgY29sdW1uIHdpdGggYm9vbGVhbiB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbiBUaGUgY29sdW1uIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZSBUaGUgcmVzb3VyY2UgYnVuZGxlXG5cdCAqL1xuXHRzdGF0aWMgdHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0KGV4cG9ydENvbHVtbjogRXhwb3J0Q29sdW1uLCByZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpOiB2b2lkIHtcblx0XHRpZiAoZXhwb3J0Q29sdW1uLnR5cGUgPT09IFwiQm9vbGVhblwiKSB7XG5cdFx0XHRleHBvcnRDb2x1bW4uZmFsc2VWYWx1ZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJub1wiKTtcblx0XHRcdGV4cG9ydENvbHVtbi50cnVlVmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwieWVzXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgdGFyZ2V0IHZhbHVlIGNvbHVtbiB3aGVuIHRoZXJlIGlzIGEgZGF0YXBvaW50IGNvbHVtbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbHVtbnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZSBUaGUgcmVzb3VyY2UgYnVuZGxlXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKi9cblx0c3RhdGljIGFkZFRhcmdldFZhbHVlQ29sdW1uKFxuXHRcdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdFx0ZXhwb3J0Q29sdW1uOiBFeHBvcnRDb2x1bW4sXG5cdFx0ZXhwb3J0Q29sdW1uczogRXhwb3J0Q29sdW1uW10sXG5cdFx0cmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRcdGluZGV4OiBudW1iZXJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFyZ2V0VmFsdWVDb2x1bW4gPSAoY29sdW1ucyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSk/LmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLmlzUHJvcGVydHlGcm9tRXhwb3J0KGNvbHVtbiwgZXhwb3J0Q29sdW1uKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQoY29sdW1uLCBleHBvcnRDb2x1bW4pO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRWYWx1ZUNvbHVtbikge1xuXHRcdFx0Y29uc3QgY29sdW1uVG9CZUFkZGVkID0ge1xuXHRcdFx0XHRsYWJlbDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRhcmdldFZhbHVlXCIpLFxuXHRcdFx0XHRwcm9wZXJ0eTogQXJyYXkuaXNBcnJheShleHBvcnRDb2x1bW4ucHJvcGVydHkpID8gZXhwb3J0Q29sdW1uLnByb3BlcnR5IDogW2V4cG9ydENvbHVtbi5wcm9wZXJ0eV0sXG5cdFx0XHRcdHRlbXBsYXRlOiB0YXJnZXRWYWx1ZUNvbHVtbi5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZVxuXHRcdFx0fTtcblx0XHRcdGV4cG9ydENvbHVtbnMuc3BsaWNlKGluZGV4ICsgMSwgMCwgY29sdW1uVG9CZUFkZGVkKTtcblx0XHR9XG5cdH1cblxuXHRyZXN1bWVCaW5kaW5nKGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZDogYm9vbGVhbikge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIsIGZhbHNlKTtcblx0XHRpZiAoKGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiAhKHRoaXMgYXMgYW55KS5nZXREYXRhSW5pdGlhbGl6ZWQoKSkgfHwgdGhpcy5nZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiKSkge1xuXHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBmYWxzZSk7XG5cdFx0XHQodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKT8ucmViaW5kKCk7XG5cdFx0fVxuXHR9XG5cblx0cmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMob0ZpbHRlckNvbnRyb2w6IENvbnRyb2wpOiBhbnlbXSB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJDb250cm9sLCBvVGFibGUpO1xuXHR9XG5cblx0c3VzcGVuZEJpbmRpbmcoKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIiwgdHJ1ZSk7XG5cdH1cblxuXHRpbnZhbGlkYXRlQ29udGVudCgpIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZGF0YUluaXRpYWxpemVkXCIsIGZhbHNlKTtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlbmFibGVtZW50IG9mIHRoZSBjcmVhdGlvbiByb3cuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzZXRGYXN0Q3JlYXRpb25Sb3dFbmFibGVtZW50KCkge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cblx0XHRpZiAoZmFzdENyZWF0aW9uUm93ICYmICFmYXN0Q3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0YWJsZUJpbmRpbmcuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LFxuXHRcdFx0XHRcdHRhYmxlQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHQodGFibGUuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFVuZGVmaW5lZCBpZiB0aGUgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGFzeW5jIG9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyA9IFRhYmxlSW5zaWdodHNIZWxwZXIuZ2V0SW5zaWdodHNSZWxldmFudENvbHVtbnModGhpcyk7XG5cdFx0XHRjb25zdCBpbnNpZ2h0c1BhcmFtcyA9IGF3YWl0IFRhYmxlSW5zaWdodHNIZWxwZXIuY3JlYXRlVGFibGVDYXJkUGFyYW1zKHRoaXMsIGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKTtcblx0XHRcdGlmIChpbnNpZ2h0c1BhcmFtcykge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlOiBDYXJkTWVzc2FnZSA9IGluc2lnaHRzUGFyYW1zLnBhcmFtZXRlcnMuaXNOYXZpZ2F0aW9uRW5hYmxlZFxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiB0aGlzLmNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UodGhpcy5jb250ZW50KVxuXHRcdFx0XHRcdCAgfTtcblxuXHRcdFx0XHRJbnNpZ2h0c1NlcnZpY2Uuc2hvd0luc2lnaHRzQ2FyZFByZXZpZXcoaW5zaWdodHNQYXJhbXMsIG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UodGhpcy5jb250ZW50KTtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNhcmQgbWFuaWZlc3Qgb3B0aW1pemVkIGZvciB0aGUgdGFibGUgY2FzZS5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiBDYXJkTWFuaWZlc3Rcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Q2FyZE1hbmlmZXN0VGFibGUoKTogUHJvbWlzZTxDYXJkTWFuaWZlc3Q+IHtcblx0XHRjb25zdCBpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyA9IFRhYmxlSW5zaWdodHNIZWxwZXIuZ2V0SW5zaWdodHNSZWxldmFudENvbHVtbnModGhpcyk7XG5cdFx0Y29uc3QgaW5zaWdodHNQYXJhbXMgPSAoYXdhaXQgVGFibGVJbnNpZ2h0c0hlbHBlci5jcmVhdGVUYWJsZUNhcmRQYXJhbXMoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aW5zaWdodHNSZWxldmFudENvbHVtbnNcblx0XHQpKSBhcyBJbnNpZ2h0c1BhcmFtczxUYWJsZUNvbnRlbnQ+O1xuXHRcdHJldHVybiBJbnNpZ2h0c1NlcnZpY2UuZ2V0Q2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBpbnNpZ2h0c1BhcmFtcyBhbmQgY2FsbCB0aGUgQVBJIHRvIHNob3cgaW5zaWdodHMgY2FyZCBwcmV2aWV3IGZvciB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIGNhcmQgVGhlIGNhcmQgbWFuaWZlc3QgdG8gYmUgdXNlZCBmb3IgdGhlIGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIFVuZGVmaW5lZCBpZiBjYXJkIHByZXZpZXcgaXMgcmVuZGVyZWQuXG5cdCAqL1xuXHRhc3luYyBvbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2soY2FyZDogQ2FyZE1hbmlmZXN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChjYXJkKSB7XG5cdFx0XHRcdGF3YWl0IEluc2lnaHRzU2VydmljZS5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldyhjYXJkLCB0aGlzLmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aW9uTWFuYWdlci5nZXRTZXJ2aWNlKCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UodGhpcy5jb250ZW50KTtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlTmF2aWdhdGlvbkVycm9yTWVzc2FnZShzY29wZTogQ29udHJvbCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbChzY29wZSk7XG5cdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fUk9XX0xFVkVMX05BVklHQVRJT05fRElTQUJMRURfTVNHX1JFQVNPTl9FWFRFUk5BTF9OQVZJR0FUSU9OX0NPTkZJR1VSRURcIik7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25NYXNzRWRpdEJ1dHRvblByZXNzZWQob0V2ZW50OiBVSTVFdmVudCwgcGFnZUNvbnRyb2xsZXI6IGFueSkge1xuXHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRpZiAocGFnZUNvbnRyb2xsZXIgJiYgcGFnZUNvbnRyb2xsZXIubWFzc0VkaXQpIHtcblx0XHRcdHBhZ2VDb250cm9sbGVyLm1hc3NFZGl0Lm9wZW5NYXNzRWRpdERpYWxvZyhvVGFibGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIlRoZSBDb250cm9sbGVyIGlzIG5vdCBlbmhhbmNlZCB3aXRoIE1hc3MgRWRpdCBmdW5jdGlvbmFsaXR5XCIpO1xuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblRhYmxlU2VsZWN0aW9uQ2hhbmdlKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHR0aGlzLmZpcmVFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiLCBvRXZlbnQuZ2V0UGFyYW1ldGVycygpKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRhc3luYyBvbkFjdGlvblByZXNzKG9FdmVudDogVUk1RXZlbnQsIHBhZ2VDb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRwYXJhbWV0ZXJzLm1vZGVsID0gKG9FdmVudC5nZXRTb3VyY2UoKSBhcyBDb250cm9sKS5nZXRNb2RlbCgpO1xuXHRcdGxldCBleGVjdXRlQWN0aW9uID0gdHJ1ZTtcblx0XHRpZiAocGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgJiYgcGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBub24gYXBwbGljYWJsZSBjb250ZXh0cywgd2UgbmVlZCB0byBvcGVuIGEgZGlhbG9nIHRvIGFzayB0aGUgdXNlciBpZiBoZSB3YW50cyB0byBjb250aW51ZVxuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMocGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RW50aXR5VHlwZT4odGhpcy5lbnRpdHlUeXBlRnVsbHlRdWFsaWZpZWROYW1lKS50YXJnZXQhO1xuXHRcdFx0Y29uc3QgbXlVbmFwcGxpY2FibGVDb250ZXh0RGlhbG9nID0gbmV3IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nKHtcblx0XHRcdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzOiBwYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0dGl0bGU6IHBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IGdldFJlc291cmNlTW9kZWwodGhpcylcblx0XHRcdH0pO1xuXHRcdFx0cGFyYW1ldGVycy5jb250ZXh0cyA9IHBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzO1xuXHRcdFx0ZXhlY3V0ZUFjdGlvbiA9IGF3YWl0IG15VW5hcHBsaWNhYmxlQ29udGV4dERpYWxvZy5vcGVuKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAoZXhlY3V0ZUFjdGlvbikge1xuXHRcdFx0Ly8gRGlyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgcGFnZUNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGFjdGlvbk5hbWUsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhlIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV4cG9zZSB0aGUgaW50ZXJuYWwgdGFibGUgZGVmaW5pdGlvbiBmb3IgZXh0ZXJuYWwgdXNhZ2UgaW4gZGVsZWdhdGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB0YWJsZURlZmluaXRpb25cblx0ICovXG5cdGdldFRhYmxlRGVmaW5pdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy50YWJsZURlZmluaXRpb247XG5cdH1cblxuXHQvKipcblx0ICogY29ubmVjdCB0aGUgZmlsdGVyIHRvIHRoZSB0YWJsZUFQSSBpZiByZXF1aXJlZFxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVxuXHQgKi9cblxuXHR1cGRhdGVGaWx0ZXJCYXIoKSB7XG5cdFx0Y29uc3QgdGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBmaWx0ZXJCYXJSZWZJZCA9ICh0aGlzIGFzIGFueSkuZ2V0RmlsdGVyQmFyKCk7XG5cdFx0aWYgKHRhYmxlICYmIGZpbHRlckJhclJlZklkICYmIHRhYmxlLmdldEZpbHRlcigpICE9PSBmaWx0ZXJCYXJSZWZJZCkge1xuXHRcdFx0dGhpcy5fc2V0RmlsdGVyQmFyKGZpbHRlckJhclJlZklkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZmlsdGVyIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBmaWx0ZXJCYXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXJSZWZJZCBJZCBvZiB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVxuXHQgKi9cblx0X3NldEZpbHRlckJhcihmaWx0ZXJCYXJSZWZJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblxuXHRcdC8vICdmaWx0ZXJCYXInIHByb3BlcnR5IG9mIG1hY3JvOlRhYmxlKHBhc3NlZCBhcyBjdXN0b21EYXRhKSBtaWdodCBiZVxuXHRcdC8vIDEuIEEgbG9jYWxJZCB3cnQgVmlldyhGUE0gZXhwbG9yZXIgZXhhbXBsZSkuXG5cdFx0Ly8gMi4gQWJzb2x1dGUgSWQodGhpcyB3YXMgbm90IHN1cHBvcnRlZCBpbiBvbGRlciB2ZXJzaW9ucykuXG5cdFx0Ly8gMy4gQSBsb2NhbElkIHdydCBGcmFnbWVudElkKHdoZW4gYW4gWE1MQ29tcG9zaXRlIG9yIEZyYWdtZW50IGlzIGluZGVwZW5kZW50bHkgcHJvY2Vzc2VkKSBpbnN0ZWFkIG9mIFZpZXdJZC5cblx0XHQvLyAgICAnZmlsdGVyQmFyJyB3YXMgc3VwcG9ydGVkIGVhcmxpZXIgYXMgYW4gJ2Fzc29jaWF0aW9uJyB0byB0aGUgJ21kYzpUYWJsZScgY29udHJvbCBpbnNpZGUgJ21hY3JvOlRhYmxlJyBpbiBwcmlvciB2ZXJzaW9ucy5cblx0XHQvLyAgICBJbiBuZXdlciB2ZXJzaW9ucyAnZmlsdGVyQmFyJyBpcyB1c2VkIGxpa2UgYW4gYXNzb2NpYXRpb24gdG8gJ21hY3JvOlRhYmxlQVBJJy5cblx0XHQvLyAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIElkIGlzIHJlbGF0aXZlIHRvICdtYWNybzpUYWJsZUFQSScuXG5cdFx0Ly8gICAgVGhpcyBzY2VuYXJpbyBoYXBwZW5zIGluIGNhc2Ugb2YgRmlsdGVyQmFyIGFuZCBUYWJsZSBpbiBhIGN1c3RvbSBzZWN0aW9ucyBpbiBPUCBvZiBGRVY0LlxuXG5cdFx0Y29uc3QgdGFibGVBUElJZCA9IHRoaXM/LmdldElkKCk7XG5cdFx0Y29uc3QgdGFibGVBUElMb2NhbElkID0gdGhpcy5kYXRhKFwidGFibGVBUElMb2NhbElkXCIpO1xuXHRcdGNvbnN0IHBvdGVudGlhbGZpbHRlckJhcklkID1cblx0XHRcdHRhYmxlQVBJTG9jYWxJZCAmJiBmaWx0ZXJCYXJSZWZJZCAmJiB0YWJsZUFQSUlkICYmIHRhYmxlQVBJSWQucmVwbGFjZShuZXcgUmVnRXhwKHRhYmxlQVBJTG9jYWxJZCArIFwiJFwiKSwgZmlsdGVyQmFyUmVmSWQpOyAvLyAzXG5cblx0XHRjb25zdCBmaWx0ZXJCYXIgPVxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKT8uYnlJZChmaWx0ZXJCYXJSZWZJZCkgfHwgQ29yZS5ieUlkKGZpbHRlckJhclJlZklkKSB8fCBDb3JlLmJ5SWQocG90ZW50aWFsZmlsdGVyQmFySWQpO1xuXG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0aWYgKGZpbHRlckJhci5pc0E8RmlsdGVyQmFyQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdFx0XHR0YWJsZS5zZXRGaWx0ZXIoYCR7ZmlsdGVyQmFyLmdldElkKCl9LWNvbnRlbnRgKTtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyQmFyLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdFx0dGFibGUuc2V0RmlsdGVyKGZpbHRlckJhci5nZXRJZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjaGVja0lmQ29sdW1uRXhpc3RzKGFGaWx0ZXJlZENvbHVtbW5zOiBhbnksIGNvbHVtbk5hbWU6IGFueSkge1xuXHRcdHJldHVybiBhRmlsdGVyZWRDb2x1bW1ucy5zb21lKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KG9Db2x1bW4/LmNvbHVtbk5hbWUgPT09IGNvbHVtbk5hbWUgJiYgb0NvbHVtbj8uc0NvbHVtbk5hbWVWaXNpYmxlKSB8fFxuXHRcdFx0XHQob0NvbHVtbj8uc1RleHRBcnJhbmdlbWVudCAhPT0gdW5kZWZpbmVkICYmIG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgPT09IGNvbHVtbk5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbHVtbk5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBmZXRjaGVkIHRoZSB0ZWNobmljYWwgYW5kIHNlbWFudGljIGtleXMgb2Ygcm9vdCBlbnRpdHkgc2V0cy5cblx0ICogQHJldHVybnMgVGhlIG9iamVjdCBjb250YWluaW5nIHRlY2huaWNhbCBhbmQgc2VtYW50aWMga2V5cyBvZiB0aGUgZW50aXR5LlxuXHQgKi9cblx0Z2V0Um9vdEtleXMoKTogeyB0ZWNobmljYWxLZXlzOiBzdHJpbmdbXTsgc2VtYW50aWNLZXlzOiBzdHJpbmdbXSB9IHtcblx0XHRjb25zdCByb290Q29udGV4dCA9IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuZ2V0Q3VycmVudFJvb3RDb250ZXh0KCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gcm9vdENvbnRleHQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGlmIChtZXRhTW9kZWwpIHtcblx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHJvb3RDb250ZXh0Py5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRcdGNvbnN0IGRhdGFNb2RlbCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobWV0YVBhdGgpKTtcblx0XHRcdGNvbnN0IHJvb3RTZW1hbnRpY0tleXMgPSBkYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRcdFx0bGV0IHNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChyb290U2VtYW50aWNLZXlzKSB7XG5cdFx0XHRcdHNlbWFudGljS2V5cyA9IHJvb3RTZW1hbnRpY0tleXMubWFwKChrZXkpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJvb3RUZWNobmljYWxLZXlzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5cztcblx0XHRcdGxldCB0ZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0aWYgKHJvb3RUZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdHRlY2huaWNhbEtleXMgPSByb290VGVjaG5pY2FsS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5cyxcblx0XHRcdFx0dGVjaG5pY2FsS2V5czogdGVjaG5pY2FsS2V5c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHsgdGVjaG5pY2FsS2V5czogW10sIHNlbWFudGljS2V5czogW10gfTtcblx0fVxuXG5cdGdldElkZW50aWZpZXJDb2x1bW4oaXNSZWNvbW1lbmRhdGlvblJlbGV2YW50PzogYm9vbGVhbik6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVGl0bGU7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNDdXJyZW50RW50aXR5U2V0TmFtZSA9IG9UYWJsZS5kYXRhKFwibWV0YVBhdGhcIik7XG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyRLZXlgKTtcblx0XHRjb25zdCBmaWx0ZXJlZFRlY2huaWNhbEtleXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKGFUZWNobmljYWxLZXlzICYmIGFUZWNobmljYWxLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFUZWNobmljYWxLZXlzLmZvckVhY2goZnVuY3Rpb24gKHRlY2huaWNhbEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmICh0ZWNobmljYWxLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRcdGZpbHRlcmVkVGVjaG5pY2FsS2V5cy5wdXNoKHRlY2huaWNhbEtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLnNlbWFudGljS2V5cztcblxuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1uczogYW55ID0gW107XG5cdFx0Y29uc3QgYUZpbHRlcmVkQ29sdW1tbnM6IGFueSA9IFtdO1xuXHRcdGNvbnN0IGFUYWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGFUYWJsZUNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBvQ29sdW1uPy5nZXREYXRhUHJvcGVydHkoKTtcblx0XHRcdGFWaXNpYmxlQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fSk7XG5cblx0XHRhVmlzaWJsZUNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRjb25zdCBvVGV4dEFycmFuZ2VtZW50ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8kVHlwZS8ke29Db2x1bW59QGApO1xuXHRcdFx0Y29uc3Qgc1RleHRBcnJhbmdlbWVudCA9IG9UZXh0QXJyYW5nZW1lbnQgJiYgb1RleHRBcnJhbmdlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXT8uJFBhdGg7XG5cdFx0XHRjb25zdCBzVGV4dFBsYWNlbWVudCA9XG5cdFx0XHRcdG9UZXh0QXJyYW5nZW1lbnQgJiZcblx0XHRcdFx0b1RleHRBcnJhbmdlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0/LiRFbnVtTWVtYmVyO1xuXHRcdFx0YUZpbHRlcmVkQ29sdW1tbnMucHVzaCh7XG5cdFx0XHRcdGNvbHVtbk5hbWU6IG9Db2x1bW4sXG5cdFx0XHRcdHNUZXh0QXJyYW5nZW1lbnQ6IHNUZXh0QXJyYW5nZW1lbnQsXG5cdFx0XHRcdHNDb2x1bW5OYW1lVmlzaWJsZTogIShzVGV4dFBsYWNlbWVudCA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRsZXQgY29sdW1uOiBhbnk7XG5cdFx0aWYgKGlzUmVjb21tZW5kYXRpb25SZWxldmFudCkge1xuXHRcdFx0Y29uc3Qgcm9vdEtleXMgPSB0aGlzLmdldFJvb3RLZXlzKCk7XG5cdFx0XHRpZiAoc2VtYW50aWNLZXlDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbiA9IHNlbWFudGljS2V5Q29sdW1ucy5maWx0ZXIoKGtleSkgPT4gIXJvb3RLZXlzLnNlbWFudGljS2V5cy5pbmNsdWRlcyhrZXkpKTtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyZWRUZWNobmljYWxLZXlzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbiA9IGZpbHRlcmVkVGVjaG5pY2FsS2V5cy5maWx0ZXIoKGtleSkgPT4gIXJvb3RLZXlzLnRlY2huaWNhbEtleXMuaW5jbHVkZXMoa2V5KSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uO1xuXHRcdH1cblxuXHRcdGlmIChoZWFkZXJJbmZvVGl0bGVQYXRoICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jaGVja0lmQ29sdW1uRXhpc3RzKGFGaWx0ZXJlZENvbHVtbW5zLCBoZWFkZXJJbmZvVGl0bGVQYXRoKSkge1xuXHRcdFx0Y29sdW1uID0gaGVhZGVySW5mb1RpdGxlUGF0aDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5sZW5ndGggPT09IDEgJiZcblx0XHRcdHRoaXMuY2hlY2tJZkNvbHVtbkV4aXN0cyhhRmlsdGVyZWRDb2x1bW1ucywgc2VtYW50aWNLZXlDb2x1bW5zWzBdKVxuXHRcdCkge1xuXHRcdFx0Y29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHRcdH0gZWxzZSBpZiAoZmlsdGVyZWRUZWNobmljYWxLZXlzPy5sZW5ndGggPT09IDEgJiYgdGhpcy5jaGVja0lmQ29sdW1uRXhpc3RzKGFGaWx0ZXJlZENvbHVtbW5zLCBmaWx0ZXJlZFRlY2huaWNhbEtleXNbMF0pKSB7XG5cdFx0XHRjb2x1bW4gPSBmaWx0ZXJlZFRlY2huaWNhbEtleXNbMF07XG5cdFx0fVxuXHRcdHJldHVybiBjb2x1bW47XG5cdH1cblxuXHQvKipcblx0ICogRW1wdHlSb3dzRW5hYmxlZCBzZXR0ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbmFibGVtZW50XG5cdCAqL1xuXHRzZXRFbXB0eVJvd3NFbmFibGVkKGVuYWJsZW1lbnQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZW1wdHlSb3dzRW5hYmxlZFwiLCBlbmFibGVtZW50KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRoaXMuY29udGVudC5kYXRhKCkubmF2aWdhdGlvblBhdGg7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuY29udGVudCk7XG5cdFx0aWYgKGVuYWJsZW1lbnQpIHtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZWdpc3RlclRhcmdldENhbGxiYWNrKG5hdmlnYXRpb25QYXRoLCB0aGlzLnVwZGF0ZUVtcHR5Um93cy5iaW5kKHRoaXMpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0VXBFbXB0eVJvd3ModGhpcy5jb250ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGFzeW5jIGhhbmRsZUNyZWF0ZUFjdGl2YXRlKGFjdGl2YXRlRXZlbnQ6IFVJNUV2ZW50PHsgY29udGV4dDogQ29udGV4dCB9Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFjdGl2YXRlZENvbnRleHQgPSBhY3RpdmF0ZUV2ZW50LmdldFBhcmFtZXRlcihcImNvbnRleHRcIik7XG5cdFx0Ly8gd2Ugc3RhcnQgYnkgYXNraW5nIHRvIHJlY3JlYXRlIGFuIGVtcHR5IHJvdyAoaWYgbGl2ZSBjaGFuZ2UgaGFzIGFscmVhZHkgZG9uZSBpdCB0aGlzIHdvbid0IGhhdmUgYW55IGVmZmVjdClcblx0XHQvLyBidXQgd2UgZG8gbm90IHdhaXRcblx0XHR0aGlzLmNyZWF0ZUVtcHR5Um93cyhhY3RpdmF0ZUV2ZW50LmdldFNvdXJjZSgpIGFzIE9EYXRhTGlzdEJpbmRpbmcsIHRoaXMuY29udGVudCwgdHJ1ZSk7XG5cdFx0aWYgKCF0aGlzLnZhbGlkYXRlRW1wdHlSb3coYWN0aXZhdGVkQ29udGV4dCkpIHtcblx0XHRcdGFjdGl2YXRlRXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgKGFjdGl2YXRlZENvbnRleHQuY3JlYXRlZCgpID8/IFByb21pc2UucmVzb2x2ZSgpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoYEZhaWxlZCB0byBhY3RpdmF0ZSBjb250ZXh0ICR7YWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBhY3RpdmF0ZWRDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpO1xuXHRcdFx0Ly8gU2VuZCBub3RpZmljYXRpb24gdG8gb3RoZXIgdXNlcnMgb25seSBhZnRlciB0aGUgY3JlYXRpb24gaGFzIGJlZW4gZmluYWxpemVkXG5cdFx0XHRBY3Rpdml0eVN5bmMuc2VuZCh2aWV3LCB7IGFjdGlvbjogQWN0aXZpdHkuQ3JlYXRlLCBjb250ZW50IH0pO1xuXHRcdFx0Ly8gU2luY2UgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQgZHVyaW5nIGFjdGl2YXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIGFsbCBjb2xsYWJvcmF0aW9uIGxvY2tzXG5cdFx0XHQvLyB0aGF0IHdlcmUgdXNpbmcgdGhlIHRyYW5zaWVudCBwYXRoXG5cdFx0XHRBY3Rpdml0eVN5bmMudXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCh2aWV3LCB0cmFuc2llbnRQYXRoLCBhY3RpdmF0ZWRDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkZhaWxlZCB0byBhY3RpdmF0ZSBuZXcgcm93IC1cIiwgZXJyb3IgYXMgRXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYW5kIHJlY3JlYXRlIHRoZSBlbXB0eSByb3dzIGluIG9yZGVyIHRvIGdldCBhbnkgdXBkYXRlZCBkZWZhdWx0IHZhbHVlcy5cblx0ICpcblx0ICovXG5cdGFzeW5jIHVwZGF0ZUVtcHR5Um93cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IGJpbmRpbmdIZWFkZXJDb250ZXh0ID0gYmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0aWYgKGJpbmRpbmcgJiYgYmluZGluZy5pc1Jlc29sdmVkKCkgJiYgYmluZGluZy5pc0xlbmd0aEZpbmFsKCkgJiYgYmluZGluZ0hlYWRlckNvbnRleHQpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYmluZGluZ0hlYWRlckNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0dGhpcy5fZGVsZXRlRW1wdHlSb3dzKGJpbmRpbmcsIGNvbnRleHRQYXRoKTtcblx0XHRcdGF3YWl0IHRoaXMuY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcsIHRhYmxlKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0YXN5bmMgc2V0VXBFbXB0eVJvd3ModGFibGU6IFRhYmxlLCBjcmVhdGVCdXR0b25XYXNQcmVzc2VkID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbD8uY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghdWlNb2RlbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodWlNb2RlbC5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlUGVuZGluZ1wiKSkge1xuXHRcdFx0Ly8gVGhlIGVkaXQgbW9kZSBpcyBzdGlsbCBiZWluZyBjb21wdXRlZCwgc28gd2Ugd2FpdCB1bnRpbCB0aGlzIGNvbXB1dGF0aW9uIGlzIGRvbmUgYmVmb3JlIGNoZWNraW5nIGl0cyB2YWx1ZVxuXHRcdFx0Y29uc3Qgd2F0Y2hCaW5kaW5nID0gdWlNb2RlbC5iaW5kUHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIik7XG5cdFx0XHRhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHRcdFx0d2F0Y2hCaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR3YXRjaEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlcik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJpbmRpbmdIZWFkZXJDb250ZXh0ID0gYmluZGluZz8uZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdGlmIChiaW5kaW5nICYmIGJpbmRpbmcuaXNSZXNvbHZlZCgpICYmIGJpbmRpbmcuaXNMZW5ndGhGaW5hbCgpICYmIGJpbmRpbmdIZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGJpbmRpbmdIZWFkZXJDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGlmICghdGhpcy5lbXB0eVJvd3NFbmFibGVkKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nLCBjb250ZXh0UGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2w/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgJiZcblx0XHRcdFx0IXRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKSAmJlxuXHRcdFx0XHQhY3JlYXRlQnV0dG9uV2FzUHJlc3NlZFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluYWN0aXZlQ29udGV4dCA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20gY29udHJvbGxlciBjb2RlIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBpbmFjdGl2ZSBjb250ZXh0cyBhcmUgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGFibGUgY29udGV4dFxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaW5hY3RpdmVDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGluYWN0aXZlIHJvd3MgZnJvbSB0aGUgdGFibGUgbGlzdEJpbmRpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aFxuXHQgKi9cblx0X2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBjb250ZXh0UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkpIHtcblx0XHRcdGlmIChjb250ZXh0LmlzSW5hY3RpdmUoKSAmJiBjb250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKGNvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRjb250ZXh0LmRlbGV0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBpbmFjdGl2ZSBjb250ZXh0cyB3aXRoaW4gdGhlIGxpc3QgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIGJpbmRpbmcgRGF0YSBsaXN0IGJpbmRpbmdcblx0ICogQHJldHVybnMgVGhlIG51bWJlciBvZiBpbmFjdGl2ZSBjb250ZXh0c1xuXHQgKi9cblx0Z2V0SW5hY3RpdmVDb250ZXh0TnVtYmVyKGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbHRlcigoY29udGV4dCkgPT4gY29udGV4dC5pc0luYWN0aXZlKCkpLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBlbXB0eSByb3cuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBlbXB0eSByb3dcblx0ICogQHJldHVybnMgVGhlIHZhbGlkYXRpb24gc3RhdHVzXG5cdCAqL1xuXHR2YWxpZGF0ZUVtcHR5Um93KGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24ucmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyhjb250ZXh0KTtcblx0XHRcdGNvbnN0IG1pc3NpbmdQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0aWVzLmZpbHRlcigocmVxdWlyZWRQcm9wZXJ0eSkgPT4gIWNvbnRleHQuZ2V0T2JqZWN0KHJlcXVpcmVkUHJvcGVydHkpKTtcblx0XHRcdGlmIChtaXNzaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKTtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdFx0XHRsZXQgZGlzcGxheWVkQ29sdW1uOiBNRENDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGZvciAoY29uc3QgbWlzc2luZ1Byb3BlcnR5IG9mIG1pc3NpbmdQcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0bGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXHRcdFx0XHRcdGNvbnN0IG1pc3NpbmdDb2x1bW4gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZChcblx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbikgPT5cblx0XHRcdFx0XHRcdFx0KHRhYmxlQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikucmVsYXRpdmVQYXRoID09PSBtaXNzaW5nUHJvcGVydHkgfHxcblx0XHRcdFx0XHRcdFx0KHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgdGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcy5pbmNsdWRlcyhtaXNzaW5nUHJvcGVydHkpKVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoIW1pc3NpbmdDb2x1bW4pIHtcblx0XHRcdFx0XHRcdGVycm9yTWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfRU1QVFlST1dfTUFOREFUT1JZXCIsIFttaXNzaW5nUHJvcGVydHldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID0gdGhpcy5jb250ZW50LmdldENvbHVtbnMoKS5maW5kKChtZGNDb2x1bW4pID0+IG1kY0NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09PSBtaXNzaW5nQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5ZWRDb2x1bW4gPyBcIk1fVEFCTEVfRU1QVFlST1dfTUFOREFUT1JZXCIgOiBcIk1fVEFCTEVfRU1QVFlST1dfTUFOREFUT1JZX0hJRERFTlwiLFxuXHRcdFx0XHRcdFx0XHRbZGlzcGxheWVkQ29sdW1uPy5nZXRIZWFkZXIoKSB8fCBtaXNzaW5nQ29sdW1uLmxhYmVsXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtZXNzYWdlcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdHByb2Nlc3NvcjogdGhpcy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRcdFx0dGVjaG5pY2FsOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0dGVjaG5pY2FsRGV0YWlsczoge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlSWQ6IHRoaXMuY29udGVudC5nZXRJZCgpLCAvLyBOZWVkIHRvIGRvIGl0IHNpbmNlIGhhbmRsZUNyZWF0ZUFjdGl2YXRlIGNhbiBiZSB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMgKGV4dHJhIHByb3BlcnRpZXMgc2V0IGJ5IHZhbHVlIGhlbHApIGJlZm9yZSBjb250cm9sSWRzIGFyZSBzZXQgb24gdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRlbXB0eVJvd01lc3NhZ2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bWlzc2luZ0NvbHVtbjogZGlzcGxheWVkQ29sdW1uID8gdW5kZWZpbmVkIDogbWlzc2luZ1Byb3BlcnR5IC8vIG5lZWRlZCB0byBjaGFuZ2UgdGhlIG1lc3NhZ2VTdHJpcCBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogYCR7Y29udGV4dD8uZ2V0UGF0aCgpfS8ke21pc3NpbmdQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBlbXB0eSByb3dzLlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5hY3RpdmVDb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBlbXB0eSByb3csIGlmIG5vdCBwcm92aWRlZCB0aGUgbWVzc2FnZXMgb2YgYWxsIGVtcHR5IHJvd3MgYXJlIHJlbW92ZWRcblx0ICovXG5cdHJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKGluYWN0aXZlQ29udGV4dD86IENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHRtZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhcblx0XHRcdChtZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCkgYXMgTWVzc2FnZVtdKS5maWx0ZXIoKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gKG1zZy5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIHsgdGFibGVJZD86IHN0cmluZzsgZW1wdHlSb3dNZXNzYWdlPzogYm9vbGVhbiB9O1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdChpbmFjdGl2ZUNvbnRleHQgPyBtc2cuZ2V0VGFyZ2V0cygpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5zdGFydHNXaXRoKGluYWN0aXZlQ29udGV4dC5nZXRQYXRoKCkpKSA6IHRydWUpICYmXG5cdFx0XHRcdFx0dGVjaG5pY2FsRGV0YWlscy5lbXB0eVJvd01lc3NhZ2UgJiZcblx0XHRcdFx0XHR0ZWNobmljYWxEZXRhaWxzLnRhYmxlSWQgPT09IHRoaXMuY29udGVudC5nZXRJZCgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRpb24gb2YgaW5hY3RpdmUgcm93cyBmb3IgdGhlIHRhYmxlIGluIGNyZWF0aW9uIG1vZGUgXCJJbmxpbmVDcmVhdGlvblJvd3NcIi5cblx0ICpcblx0ICogQHBhcmFtIGJpbmRpbmcgRGF0YSBsaXN0IGJpbmRpbmdcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBlZGl0ZWRcblx0ICogQHBhcmFtIHJlY3JlYXRlT25lUm93IGB0cnVlYCBpZiB0aGUgY2FsbCBpcyB0byByZWNyZWF0ZSBhbiBlbXB0eUxpbmVcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5Um93cyhiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCB0YWJsZTogVGFibGUsIHJlY3JlYXRlT25lUm93ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbmxpbmVDcmVhdGlvblJvd0NvdW50ID0gdGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB8fCAxO1xuXHRcdGlmICh0aGlzLmNyZWF0aW5nRW1wdHlSb3dzIHx8IHRoaXMuZ2V0SW5hY3RpdmVDb250ZXh0TnVtYmVyKGJpbmRpbmcpID4gaW5saW5lQ3JlYXRpb25Sb3dDb3VudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB9LCAoKSA9PiAoe30pKSxcblx0XHRcdGF0RW5kID0gdGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIixcblx0XHRcdGluYWN0aXZlID0gdHJ1ZSxcblx0XHRcdHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSxcblx0XHRcdGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcixcblx0XHRcdGVkaXRGbG93ID0gY29udHJvbGxlci5lZGl0Rmxvdyxcblx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cblx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YUZvckNyZWF0ZSA9IHJlY3JlYXRlT25lUm93ID8gW3t9XSA6IGRhdGE7XG5cdFx0XHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGVkaXRGbG93LmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRiaW5kaW5nLFxuXHRcdFx0XHQvLyBkdXJpbmcgYSBsaXZlIGNoYW5nZSwgb25seSAxIG5ldyBkb2N1bWVudCBpcyBjcmVhdGVkXG5cdFx0XHRcdGRhdGFGb3JDcmVhdGUsXG5cdFx0XHRcdC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cdFx0XHRcdHJlY3JlYXRlT25lUm93ID8gdHJ1ZSA6IGF0RW5kLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5vbkJlZm9yZUNyZWF0ZSxcblx0XHRcdFx0aW5hY3RpdmVcblx0XHRcdCk7XG5cdFx0XHRjb250ZXh0cz8uZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KGJpbmRpbmcuZ2V0UGF0aCgpLCB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKCEoZXJyb3IgYXMgQ29udGV4dEVycm9yVHlwZSkuY2FuY2VsZWQpIHtcblx0XHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGdldERvd25sb2FkVXJsV2l0aEZpbHRlcnMoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBDb3JlLmJ5SWQodGFibGU/LmdldEZpbHRlcigpKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWZpbHRlckJhcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlsdGVyIGJhciBpcyBub3QgYXZhaWxhYmxlXCIpO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdGNvbnN0IGZpbHRlclByb3BTViA9IGF3YWl0IChmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJKS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Ly8gaWdub3JlIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBvcGVyYXRvcnMgd2hpY2ggbmVlZHMgdG8gYmUgYWRkZWQgbGF0ZXIgYXMgZmlsdGVycyB3aXRoIGZscCBzZW1hbnRpYyBkYXRlIHBsYWNlaG9sZGVyc1xuXHRcdGNvbnN0IGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY09wc0ZpbHRlclByb3BlcnRpZXMoZmlsdGVyUHJvcFNWLl9nZXRTZWxlY3RPcHRpb25zKCkpO1xuXHRcdGNvbnN0IGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKFxuXHRcdFx0dGFibGUsXG5cdFx0XHRmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8ubWFwKChmaWx0ZXJJbmZvKSA9PiBmaWx0ZXJJbmZvLmZpbHRlck5hbWUpXG5cdFx0KTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IGZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKTtcblx0XHQvLyBnZXQgdGhlIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBkYXRlIG9wZXJhdG9ycyB3aXRoIGZscCBwbGFjZWhvbGRlciBmb3JtYXQgYW5kIGFwcGVuZCB0byB0aGUgZXhpc2l0aW5nIGZpbHRlcnNcblx0XHRjb25zdCBbZmxwTWFwcGVkUGxhY2Vob2xkZXJzLCBzZW1hbnRpY0RhdGVGaWx0ZXJzXSA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVGaWx0ZXJzV2l0aEZscFBsYWNlaG9sZGVycyhcblx0XHRcdGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyxcblx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0KTtcblxuXHRcdGxldCBhbGxSZWxldmFudEZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0aWYgKGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWxsUmVsZXZhbnRGaWx0ZXJzID0gYWxsUmVsZXZhbnRGaWx0ZXJzLmNvbmNhdChmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcy5maWx0ZXJzKTtcblx0XHR9XG5cdFx0aWYgKHNlbWFudGljRGF0ZUZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWxsUmVsZXZhbnRGaWx0ZXJzLnB1c2goLi4uc2VtYW50aWNEYXRlRmlsdGVycyk7XG5cdFx0fVxuXHRcdGNvbnN0IGFsbEZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IGFsbFJlbGV2YW50RmlsdGVycyxcblx0XHRcdGFuZDogdHJ1ZVxuXHRcdH0pO1xuXG5cdFx0Ly8gY3JlYXRlIGhpZGRlbiBiaW5kaW5nIHdpdGggYWxsIGZpbHRlcnMgZS5nLiBzdGF0aWMgZmlsdGVycyBhbmQgZmlsdGVycyB3aXRoIHNlbWFudGljIG9wZXJhdG9yc1xuXHRcdGNvbnN0IHRlbXBUYWJsZUJpbmRpbmcgPSBtb2RlbC5iaW5kTGlzdChiaW5kaW5nLmdldFBhdGgoKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFsbEZpbHRlcnMpO1xuXHRcdGxldCB1cmwgPSBhd2FpdCB0ZW1wVGFibGVCaW5kaW5nLnJlcXVlc3REb3dubG9hZFVybCgpO1xuXHRcdGZvciAoY29uc3QgW3BsYWNlaG9sZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmxwTWFwcGVkUGxhY2Vob2xkZXJzKSkge1xuXHRcdFx0dXJsID0gdXJsLnJlcGxhY2UocGxhY2Vob2xkZXIsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZHJhZ2dlZCBlbGVtZW50IGVudGVycyBhIHRhYmxlIHJvdy5cblx0ICpcblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25EcmFnRW50ZXJEb2N1bWVudCh1aTVFdmVudDogVUk1RXZlbnQ8eyBiaW5kaW5nQ29udGV4dDogQ29udGV4dDsgZHJhZ1NvdXJjZTogQ29udGV4dCB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYtPiBub3QgeWV0IGF1dGhvcml6ZWQpXG5cdFx0aWYgKHRhcmdldENvbnRleHQgPT09IHRoaXMuY29udGVudC5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvL1NldCB0aGUgZWxlbWVudCBhcyBub24gZHJvcHBhYmxlXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRyYWdDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZDtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gdGFyZ2V0Q29udGV4dC5nZXRQYXJlbnQoKTtcblx0XHRsZXQgZGlzYWJsZWRPblBhcmVudCA9ICFwYXJlbnRDb250ZXh0LFxuXHRcdFx0ZGlzYWJsZWRPbk5vZGUgPSBmYWxzZTtcblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogXCJPbk9yQmV0d2VlblwiIHwgXCJPblwiIHwgXCJCZXR3ZWVuXCIgPSBcIk9uT3JCZXR3ZWVuXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmVBbGxvd2VkSW5mbykge1xuXHRcdFx0XHRjb25zdCBjdXN0b21GdW5jdGlvbiA9IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwoY29udGV4dHM6IENvbnRleHRbXSkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdCh1aTVFdmVudC5nZXRTb3VyY2UoKSBhcyBEcmFnRHJvcEluZm8pLmdldFBhcmVudCgpIGFzIENvbnRyb2xcblx0XHRcdFx0KSBhcyBGdW5jdGlvbjtcblxuXHRcdFx0XHRkaXNhYmxlZE9uTm9kZSA9IGN1c3RvbUZ1bmN0aW9uKGRyYWdDb250ZXh0LCB0YXJnZXRDb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHRcdGRpc2FibGVkT25QYXJlbnQgPSBkaXNhYmxlZE9uUGFyZW50IHx8IGN1c3RvbUZ1bmN0aW9uKGRyYWdDb250ZXh0LCBwYXJlbnRDb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGV4ZWN1dGUgZnVuY3Rpb24gcmVsYXRlZCB0byBpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRkcmFnQ29udGV4dC5pc0FuY2VzdG9yT2YodGFyZ2V0Q29udGV4dCkgfHwgLy8gVGhlIGFuY2VzdG9yIGlzIGRyb3BwZWQgaW50byBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHRhcmdldENvbnRleHQuZ2V0QmluZGluZygpICE9PSBkcmFnQ29udGV4dC5nZXRCaW5kaW5nKCkgfHwgLy8gVGhlIGRyYWcgaXMgZG9uZSBvbiBhIGRpZmZlcmVudCB0YWJsZSAtPiBub3QgYXV0aG9yaXplZFxuXHRcdFx0KGRpc2FibGVkT25QYXJlbnQgJiYgZGlzYWJsZWRPbk5vZGUpIC8vIFwiT25cIiBhbmQgXCJCZXR3ZWVuXCIgYXJlIG5vdCBhdXRob3JpemVkXG5cdFx0KSB7XG5cdFx0XHQvL1NldCB0aGUgZWxlbWVudCBhcyBub24gZHJvcHBhYmxlXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZWRPblBhcmVudCkge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IFwiT25cIjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT25Ob2RlKSB7XG5cdFx0XHRhbGxvd2VkRHJvcFBvc2l0aW9uID0gXCJCZXR3ZWVuXCI7XG5cdFx0fVxuXHRcdCh1aTVFdmVudC5nZXRTb3VyY2UoKSBhcyBEcmFnRHJvcEluZm8pLnNldERyb3BQb3NpdGlvbihhbGxvd2VkRHJvcFBvc2l0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdGFydHMgdGhlIGRyYWcgb2YgdGhlIGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkRyYWdTdGFydERvY3VtZW50KHVpNUV2ZW50OiBVSTVFdmVudDx7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImJpbmRpbmdDb250ZXh0XCIpO1xuXHRcdGNvbnN0IGlzTW92YWJsZUluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlTW92YWJsZTtcblx0XHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24udXBkYXRhYmxlUHJvcGVydHlQYXRoO1xuXHRcdGxldCBjdXN0b21EaXNhYmxlZCA9IGZhbHNlO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoaXNNb3ZhYmxlSW5mbykge1xuXHRcdFx0XHRjdXN0b21EaXNhYmxlZCA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpIGFzIENvbnRyb2xcblx0XHRcdFx0XHRcdCkgYXMgRnVuY3Rpb25cblx0XHRcdFx0XHQpKGNvbnRleHQpID09PSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChfZXJyb3IpIHtcblx0XHRcdGN1c3RvbURpc2FibGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgodXBkYXRhYmxlUHJvcGVydHlQYXRoICYmICFjb250ZXh0LmdldFByb3BlcnR5KHVwZGF0YWJsZVByb3BlcnR5UGF0aCkpIHx8IGN1c3RvbURpc2FibGVkKSB7XG5cdFx0XHQvL1NldCB0aGUgZWxlbWVudCBhcyBub24gZHJhZ2dhYmxlXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEcm9wcyB0aGUgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKiBAcmV0dXJucyBUaGUgUHJvbWlzZVxuXHQgKi9cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGFzeW5jIG9uRHJvcERvY3VtZW50KFxuXHRcdHVpNUV2ZW50OiBVSTVFdmVudDx7XG5cdFx0XHRiaW5kaW5nQ29udGV4dDogQ29udGV4dDtcblx0XHRcdGRyYWdTb3VyY2U6IENvbnRleHQ7XG5cdFx0XHRkcm9wUG9zaXRpb246IHN0cmluZztcblx0XHR9PlxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5jb250ZW50KTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImJpbmRpbmdDb250ZXh0XCIpO1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiT25cIiA/IGJpbmRpbmdDb250ZXh0IDogYmluZGluZ0NvbnRleHQuZ2V0UGFyZW50KCk7XG5cdFx0cmV0dXJuIHVpNUV2ZW50XG5cdFx0XHQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKVxuXHRcdFx0Lm1vdmUoe1xuXHRcdFx0XHRwYXJlbnQ6IHRhcmdldENvbnRleHRcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5jb250ZW50KTtcblx0XHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlQVBJO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWJBLElBZU1BLFFBQVEsV0FEYkMsY0FBYyxDQUFDLDhCQUE4QixFQUFFO0lBQUVDLFdBQVcsRUFBRSxDQUFDLHdCQUF3QjtFQUFFLENBQUMsQ0FBQyxVQXFCMUZDLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkQyxhQUFhLEVBQUUsQ0FB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QUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUEsT0EydERoQjFoQixRQUFRO0FBQUEifQ==
|
|
@@ -1568,7 +1568,7 @@ class TableAPI extends MacroAPI {
|
|
|
1568
1568
|
* This function fetched the technical and semantic keys of root entity sets.
|
|
1569
1569
|
* @returns The object containing technical and semantic keys of the entity.
|
|
1570
1570
|
*/
|
|
1571
|
-
getRootKeys():
|
|
1571
|
+
getRootKeys(): { technicalKeys: string[]; semanticKeys: string[] } {
|
|
1572
1572
|
const rootContext = standardRecommendationHelper.getCurrentRootContext();
|
|
1573
1573
|
const metaModel = rootContext?.getModel()?.getMetaModel();
|
|
1574
1574
|
if (metaModel) {
|
|
@@ -1593,7 +1593,7 @@ class TableAPI extends MacroAPI {
|
|
|
1593
1593
|
technicalKeys: technicalKeys
|
|
1594
1594
|
};
|
|
1595
1595
|
}
|
|
1596
|
-
return {};
|
|
1596
|
+
return { technicalKeys: [], semanticKeys: [] };
|
|
1597
1597
|
}
|
|
1598
1598
|
|
|
1599
1599
|
getIdentifierColumn(isRecommendationRelevant?: boolean): string | string[] {
|
|
@@ -1602,11 +1602,11 @@ class TableAPI extends MacroAPI {
|
|
|
1602
1602
|
const oMetaModel = oTable && oTable.getModel().getMetaModel(),
|
|
1603
1603
|
sCurrentEntitySetName = oTable.data("metaPath");
|
|
1604
1604
|
const aTechnicalKeys = oMetaModel.getObject(`${sCurrentEntitySetName}/$Type/$Key`);
|
|
1605
|
-
const
|
|
1605
|
+
const filteredTechnicalKeys: string[] = [];
|
|
1606
1606
|
if (aTechnicalKeys && aTechnicalKeys.length > 0) {
|
|
1607
1607
|
aTechnicalKeys.forEach(function (technicalKey: string) {
|
|
1608
1608
|
if (technicalKey !== "IsActiveEntity") {
|
|
1609
|
-
|
|
1609
|
+
filteredTechnicalKeys.push(technicalKey);
|
|
1610
1610
|
}
|
|
1611
1611
|
});
|
|
1612
1612
|
}
|
|
@@ -1635,10 +1635,10 @@ class TableAPI extends MacroAPI {
|
|
|
1635
1635
|
let column: any;
|
|
1636
1636
|
if (isRecommendationRelevant) {
|
|
1637
1637
|
const rootKeys = this.getRootKeys();
|
|
1638
|
-
if (semanticKeyColumns
|
|
1638
|
+
if (semanticKeyColumns?.length > 0) {
|
|
1639
1639
|
column = semanticKeyColumns.filter((key) => !rootKeys.semanticKeys.includes(key));
|
|
1640
|
-
} else if (
|
|
1641
|
-
column =
|
|
1640
|
+
} else if (filteredTechnicalKeys?.length > 0) {
|
|
1641
|
+
column = filteredTechnicalKeys.filter((key) => !rootKeys.technicalKeys.includes(key));
|
|
1642
1642
|
}
|
|
1643
1643
|
return column;
|
|
1644
1644
|
}
|
|
@@ -1651,12 +1651,8 @@ class TableAPI extends MacroAPI {
|
|
|
1651
1651
|
this.checkIfColumnExists(aFilteredColummns, semanticKeyColumns[0])
|
|
1652
1652
|
) {
|
|
1653
1653
|
column = semanticKeyColumns[0];
|
|
1654
|
-
} else if (
|
|
1655
|
-
|
|
1656
|
-
aFilteredTechnicalKeys.length === 1 &&
|
|
1657
|
-
this.checkIfColumnExists(aFilteredColummns, aFilteredTechnicalKeys[0])
|
|
1658
|
-
) {
|
|
1659
|
-
column = aFilteredTechnicalKeys[0];
|
|
1654
|
+
} else if (filteredTechnicalKeys?.length === 1 && this.checkIfColumnExists(aFilteredColummns, filteredTechnicalKeys[0])) {
|
|
1655
|
+
column = filteredTechnicalKeys[0];
|
|
1660
1656
|
}
|
|
1661
1657
|
return column;
|
|
1662
1658
|
}
|