@sapui5/sap.fe.core 1.124.4 → 1.124.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +13 -4
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +15 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +23 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +19 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +5 -4
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -5
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +7 -7
- package/src/sap/fe/core/helpers/DeleteHelper.ts +6 -2
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +18 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +1 -0
|
@@ -333,9 +333,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
333
333
|
const settingsContextPath = manifestWrapper.getContextPath() || (manifestWrapper.getEntitySet() ? `/${manifestWrapper.getEntitySet()}` : undefined);
|
|
334
334
|
const filterConfigurationPath = getFilterConfigurationPath(converterContext, settingsContextPath, annotationPath);
|
|
335
335
|
let fbConfig = {};
|
|
336
|
-
|
|
337
|
-
fbConfig = manifestWrapper.getFilterConfiguration(filterConfigurationPath);
|
|
338
|
-
}
|
|
336
|
+
fbConfig = manifestWrapper.getFilterConfiguration(filterConfigurationPath);
|
|
339
337
|
const definedFilterFields = ((_fbConfig = fbConfig) === null || _fbConfig === void 0 ? void 0 : _fbConfig.filterFields) || {};
|
|
340
338
|
const selectionFields = _getSelectionFieldsByPath(entityType, Object.keys(definedFilterFields).map(key => definedFilterFields[key].property ?? KeyHelper.getPathFromSelectionFieldKey(key)), true, converterContext);
|
|
341
339
|
const filterFields = {};
|
|
@@ -389,6 +387,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
389
387
|
const metaPath = `${filterBarContextPath}/${annotationPath}`;
|
|
390
388
|
if (settingsContextPath && metaPath !== null && metaPath !== void 0 && metaPath.startsWith(settingsContextPath) && annotationPath) {
|
|
391
389
|
objectPath = metaPath.replace(`${settingsContextPath}/`, "");
|
|
390
|
+
} else {
|
|
391
|
+
objectPath = annotationPath;
|
|
392
392
|
}
|
|
393
393
|
return objectPath ? objectPath : undefined;
|
|
394
394
|
};
|
|
@@ -458,6 +458,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
458
458
|
return oRestrictedProperty && oRestrictedProperty.NavigationProperty && oRestrictedProperty.NavigationProperty.value === sNavigationPath;
|
|
459
459
|
});
|
|
460
460
|
};
|
|
461
|
+
// The propertyInfo used internally within FE
|
|
461
462
|
_exports.getNavigationRestrictions = getNavigationRestrictions;
|
|
462
463
|
const _fetchBasicPropertyInfo = function (oFilterFieldInfo) {
|
|
463
464
|
var _oFilterFieldInfo$set;
|
|
@@ -928,4 +929,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
928
929
|
_exports.getExpandFilterFields = getExpandFilterFields;
|
|
929
930
|
return _exports;
|
|
930
931
|
}, false);
|
|
931
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjb250ZXh0UGF0aCIsImxlbmd0aCIsImV2ZXJ5IiwidmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImFubm90YXRpb24iLCJjb2xsZWN0aW9uIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsInNlbGVjdGlvblZhcmlhbnRQYXRocyIsIlNldCIsIm1hbmlmZXN0RmlsdGVyRmllbGRzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckZpZWxkcyIsInNlbGVjdGlvbkZpZWxkUGF0aHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwibWFwIiwic2VsZWN0aW9uRmllbGQiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJ0ZW1wbGF0ZSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJtYW5pZmVzdFdyYXBwZXIiLCJzZXR0aW5nc0NvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwiZmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCIsImZiQ29uZmlnIiwiZGVmaW5lZEZpbHRlckZpZWxkcyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwiU2xvdCIsIkRlZmF1bHQiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiaXNDdXN0b21GaWx0ZXIiLCJzbG90TmFtZSIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicmVxdWlyZWQiLCJvYmplY3RQYXRoIiwiZmlsdGVyQmFyQ29udGV4dFBhdGgiLCJtZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8iLCJkYXRhVHlwZSIsIm1heENvbmRpdGlvbnMiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJzb3J0IiwiYSIsImIiLCJpbmRleE9mIiwiZGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJUZXh0Iiwib1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsImZldGNoUHJvcGVydHlJbmZvIiwib1R5cGVDb25maWciLCJvUHJvcGVydHlJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGFyZ2V0UHJvcGVydHlPYmplY3QiLCJvRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFJvb3QiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdE9wdGlvbnMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJyZWR1Y2UiLCJmaWx0ZXJQcm9wZXJ0eVBhdGgiLCJkZWZhdWx0RmlsdGVyRmllbGRzIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJwcm9wZXJ0eUluZm9zIiwiYUdyb3VwTGFiZWxJc1NldCIsImJHcm91cExhYmVsSXNTZXQiLCJsb2NhbGVDb21wYXJlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwib0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsInBhcmFtZXRlckZpZWxkcyIsInNGZXRjaFByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwic1Byb3BlcnR5SW5mbyIsInByb3BTZWxlY3Rpb25GaWVsZHMiLCJwYXJzZSIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsImFGaWVsZEdyb3VwcyIsImdldEFubm90YXRpb25zQnlUZXJtIiwiaSIsInByZXZpb3VzVmFsdWUiLCJmaWx0ZXJGYWNldCIsIklEIiwiYWxsRmlsdGVycyIsInNDb250ZXh0UGF0aCIsImFnZ3JlZ2F0ZXMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlS2V5IiwicmVsYXRpdmVQYXRoIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSxcblx0RmlsdGVyRXhwcmVzc2lvblR5cGUsXG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdFNlYXJjaFJlc3RyaWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsIFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLCBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlTZXQsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlclNldHRpbmdzLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5cbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGtleT86IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdEZpbHRlckZpZWxkID0gRmlsdGVyRmllbGQgJiB7XG5cdHNsb3ROYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5lbnVtIGZpbHRlckZpZWxkVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGZpZWxkR3JvdXAuTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBhbGwgdGhlIHRhYmxlcyBmb3IgYSBkZWRpY2F0ZWQgZW50aXR5IHNldCBhcmUgY29uZmlndXJlZCBhcyBhbmFseXRpY2FsIHRhYmxlcy5cbiAqXG4gKiBAcGFyYW0gbGlzdFJlcG9ydFRhYmxlcyBMaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb250ZXh0UGF0aFxuICogQHJldHVybnMgSXMgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBoaWRkZW4gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsKGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLCBjb250ZXh0UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzICYmIGNvbnRleHRQYXRoID09PSB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbjtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMgdXNlZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkLlxuICpcbiAqIEBwYXJhbSBsclRhYmxlVmlzdWFsaXphdGlvbnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhjbHVkZWQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2V0PHN0cmluZz4ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5maWx0ZXJGaWVsZHMgPz8ge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgYW5ub3RhdGlvblxuXHRcdC4uLihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyA/PyBbXSkubWFwKFxuXHRcdFx0KHNlbGVjdGlvbkZpZWxkKSA9PiBzZWxlY3Rpb25GaWVsZC52YWx1ZVxuXHRcdCksXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgbm90IHdpdGggY3VzdG9tIHRlbXBsYXRlXG5cdFx0Li4uT2JqZWN0LmtleXMobWFuaWZlc3RGaWx0ZXJGaWVsZHMpLmZpbHRlcigoa2V5KSA9PiAhIW1hbmlmZXN0RmlsdGVyRmllbGRzW2tleV0udGVtcGxhdGUpXG5cdF0pO1xuXG5cdHJldHVybiBuZXcgU2V0KFxuXHRcdGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdFx0Lm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdFx0aWYgKCF0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFsuLi4odGFibGVGaWx0ZXJzLmhpZGRlbkZpbHRlcnM/LnBhdGhzID8/IFtdKSwgLi4uKHRhYmxlRmlsdGVycy5xdWlja0ZpbHRlcnM/LnBhdGhzID8/IFtdKV0ubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBwYXRoLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGlmICghc2VsZWN0aW9uVmFyaWFudFBhdGhzLmhhcyhhbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5hZGQoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcyA9IHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KHByb3BlcnR5TmFtZSkgPT4gIXNlbGVjdGlvbkZpZWxkUGF0aHMuaGFzKHByb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmxhdCgyKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLiBJdCBsb29rcyBhcyBmb2xsb3dzOlxuICogPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsdGVyRmllbGRcbiAqL1xuY29uc3QgZ2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdGlmIChcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6OkNyZWF0aW9uRGF0ZVRpbWVcIiB8fFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6TGFzdENoYW5nZURhdGVUaW1lXCJcblx0KSB7XG5cdFx0Y29uc3Qgc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyA9IFtcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE8sXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPTU9SUk9XLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUV0VFSyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVE1PTlRILFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUUVVBUlRFUixcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFlFQVJcblx0XHRdO1xuXHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0b3BlcmF0b3JDb25maWd1cmF0aW9uOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoOiBcImtleVwiLFxuXHRcdFx0XHRcdGVxdWFsczogc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5qb2luKFwiLFwiKSxcblx0XHRcdFx0XHRleGNsdWRlOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRjb25zdCBmdWxsUGF0aDogc3RyaW5nID0gKG5hdmlnYXRpb25QYXRoID8gYCR7bmF2aWdhdGlvblBhdGh9L2AgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBlbmhhbmNlZFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCghaW5jbHVkZUhpZGRlbiAmJlxuXHRcdFx0XHRcdGVuaGFuY2VkUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdFx0KG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gbmF2aWdhdGlvblByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWVcblx0XHRcdFx0XHQpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChpc05hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChpc0NvbXBsZXhUeXBlKHByb3BlcnR5LnRhcmdldFR5cGUpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBDb21wbGV4VHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLnByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChlbmhhbmNlZFBhdGgsIHRydWUpLFxuXHRcdFx0XHRcdFtwcm9wZXJ0eV0sXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdGlvbkZpZWxkcyA9IHtcblx0XHRcdFx0Li4uc2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0XHQuLi5sb2NhbFNlbGVjdGlvbkZpZWxkc1xuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgX2dldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGRlbGV0ZSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCksIHByb3BlcnR5UGF0aCwgdHJ1ZSwgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblx0aWYgKCFmaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKT8uYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NSVNTSU5HX1NFTEVDVElPTkZJRUxEKTtcblx0fVxuXHQvLyBkZWZpbmVkIFNlbGVjdGlvbkZpZWxkcyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHRcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID0gZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiO1xuXHRcdGZpbHRlckZpZWxkLmlzUGFyYW1ldGVyID0gISFlbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPixcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXVxuKTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IFtdO1xuXHRjb25zdCBVSVNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eU5hbWU/LnZhbHVlO1xuXHRcdFx0Y29uc3QgY3VycmVudFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoc1Byb3BlcnR5UGF0aCAmJiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGN1cnJlbnRTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAmJiAhKHByb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG4vKipcbiAqIEdldCBhbGwgcGFyYW1ldGVyIGZpbHRlciBmaWVsZHMgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIEZpbHRlckZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIEFubm90YXRpb24gcGF0aCBvZiB0aGUgc2VsZWN0aW9uIGZpZWxkc1xuICogQHJldHVybnMgVGhlIGZpbHRlciBmaWVsZHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblxuXHRjb25zdCBzZXR0aW5nc0NvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgfHwgKG1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA/IGAvJHttYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCl9YCA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgoY29udmVydGVyQ29udGV4dCwgc2V0dGluZ3NDb250ZXh0UGF0aCwgYW5ub3RhdGlvblBhdGgpO1xuXHRsZXQgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHt9XG5cdGlmIChzZXR0aW5nc0NvbnRleHRQYXRoKSB7XG5cdFx0ZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCk7XG5cdH1cblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBzZXR0aW5nc0NvbnRleHRQYXRoIE1hbmlmZXN0IGVudGl0eSBzZXQgcGF0aCBhbmQgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggVGhlIGFubm90YXRpb24gcGF0aFxuICogQHJldHVybnMgUGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlcnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGggPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2V0dGluZ3NDb250ZXh0UGF0aD86IHN0cmluZyxcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvYmplY3RQYXRoO1xuXHRjb25zdCBmaWx0ZXJCYXJDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbWV0YVBhdGggPSBgJHtmaWx0ZXJCYXJDb250ZXh0UGF0aH0vJHthbm5vdGF0aW9uUGF0aH1gO1xuXHRpZiAoc2V0dGluZ3NDb250ZXh0UGF0aCAmJiBtZXRhUGF0aD8uc3RhcnRzV2l0aChzZXR0aW5nc0NvbnRleHRQYXRoKSAmJiBhbm5vdGF0aW9uUGF0aCkge1xuXHRcdG9iamVjdFBhdGggPSBtZXRhUGF0aC5yZXBsYWNlKGAke3NldHRpbmdzQ29udGV4dFBhdGh9L2AsIFwiXCIpO1xuXHR9XG5cdHJldHVybiBvYmplY3RQYXRoID8gb2JqZWN0UGF0aCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zVHlwZSB8IHVuZGVmaW5lZCxcblx0c1Jlc3RyaWN0aW9uOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pOiBzdHJpbmdbXSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufTtcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+IHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyRXhwcmVzc2lvblR5cGVbXT4gPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSkge1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWUgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucykge1xuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG59O1xuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM6IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRvVHlwZUNvbmZpZzogUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHlJbmZvKTogYm9vbGVhbiB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aC5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5IGZyb20gYSBkYXRhIGZpZWxkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ7XG5cdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gYWRkaXRpb25hbFByb3BlcnR5UGF0aFxuXHRcdFx0PyBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHk/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVswXS5uYW1lO1xuXHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB1c2VkIG5hdmlnYXRpb24gcHJvcGVydGllcyBmb3IgYXZhaWxhYmxlIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIikpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiICsgcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzLFxuXHRcdFx0XHRcdGZpbHRlclByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0XHR9LCBbXSkgfHwgW107XG5cblx0Y29uc3QgZGVmYXVsdEZpbHRlckZpZWxkcyA9IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzKFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzLFxuXHRcdGZpbHRlckZpZWxkczogZmlsdGVyRmllbGRzLFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkczogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IGRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk/OiBQcm9wZXJ0eSk6IFByb3BlcnR5VHlwZUNvbmZpZyB7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgcHJvcGVydHk/LnR5cGUpO1xuXHRpZiAocHJvcGVydHk/LnR5cGUgPT09IHNFZG1TdHJpbmcgJiYgKG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB1bmRlZmluZWQgfHwgb1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0b1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gb1R5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGQ6IEZpbHRlckZpZWxkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFSZXF1aXJlZFByb3BzOiB1bmtub3duW10sXG5cdGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IGZldGNoUHJvcGVydHlJbmZvKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5SW5mb0ZpZWxkLCBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogIW9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgJiYgaXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eUluZm8pID8gLTEgOiAxLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+O1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucyk7XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucykgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9bKypdL2csIFwiXCIpO1xuXHRcdGlmICghYU5vbkZpbHRlcmFibGVQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmdcbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXHRfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzLCB7XG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGxhYmVsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHR5cGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2xvdE5hbWU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dGVtcGxhdGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2V0dGluZ3M6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzdWFsRmlsdGVyOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHJlcXVpcmVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsID0gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogdm9pZCA9PiB7XG5cdHByb3BlcnR5SW5mb3Muc29ydChmdW5jdGlvbiAoYTogRmlsdGVyR3JvdXAsIGI6IEZpbHRlckdyb3VwKSB7XG5cdFx0Y29uc3QgYUdyb3VwTGFiZWxJc1NldCA9IGEuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGEuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRjb25zdCBiR3JvdXBMYWJlbElzU2V0ID0gYi5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYi5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGlmICghYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHRcdGlmIChhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmICghYUdyb3VwTGFiZWxJc1NldCAmJiBiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIGEuZ3JvdXBMYWJlbCEubG9jYWxlQ29tcGFyZShiLmdyb3VwTGFiZWwhKTtcblx0fSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGZpbHRlciBiYXJcbiAqIFRoaXMgY29uZmlndXJhdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGFubm90YXRpb24gYW5kIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsclRhYmxlc1xuICogQHBhcmFtIGFubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gW2luY2x1ZGVIaWRkZW5dXG4gKiBAcGFyYW0gW2xpbmVJdGVtVGVybV1cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTsgc1Byb3BlcnR5SW5mbzogc3RyaW5nIH0ge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApIGFzIEZpZWxkR3JvdXBbXTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRwcmV2aW91c1ZhbHVlWygoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YVtpXSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0bGV0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHQvL2lmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgdGFibGVzIFwiYWdncmVnYXRhYmxlXCIgcHJvcGVydGllcyBtdXN0IGJlIGV4Y2x1ZGVkXG5cdGlmIChjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsclRhYmxlcywgc0NvbnRleHRQYXRoKSkge1xuXHRcdC8vIEN1cnJlbnRseSBhbGwgYWdyZWdhdGVzIGFyZSByb290IGVudGl0eSBwcm9wZXJ0aWVzIChubyBwcm9wZXJ0aWVzIGNvbWluZyBmcm9tIG5hdmlnYXRpb24pIGFuZCBhbGxcblx0XHQvLyB0YWJsZXMgd2l0aCBzYW1lIGVudGl0eVNldCBnZXRzIHNhbWUgYWdncmVhZ3RlIGNvbmZpZ3VyYXRpb24gdGhhdCdzIHdoeSB3ZSBjYW4gdXNlIGZpcnN0IHRhYmxlIGludG9cblx0XHQvLyBMUiB0byBnZXQgYWdncmVnYXRlcyAod2l0aG91dCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMgc2luY2Ugd2UgZXhwZWN0IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZW0pLlxuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXMgPSBsclRhYmxlc1swXS5hZ2dyZWdhdGVzO1xuXHRcdGlmIChhZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZXMpLm1hcCgoYWdncmVnYXRlS2V5KSA9PiBhZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGFsbEZpbHRlcnMgPSBhbGxGaWx0ZXJzLmZpbHRlcigoZmlsdGVyRmllbGQpID0+IHtcblx0XHRcdFx0cmV0dXJuICFhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpbHRlckZpZWxkLmtleSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNGS0EsZUFBZTtFQUFBLFdB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
|
|
932
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjb250ZXh0UGF0aCIsImxlbmd0aCIsImV2ZXJ5IiwidmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImFubm90YXRpb24iLCJjb2xsZWN0aW9uIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsInNlbGVjdGlvblZhcmlhbnRQYXRocyIsIlNldCIsIm1hbmlmZXN0RmlsdGVyRmllbGRzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckZpZWxkcyIsInNlbGVjdGlvbkZpZWxkUGF0aHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwibWFwIiwic2VsZWN0aW9uRmllbGQiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJ0ZW1wbGF0ZSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJtYW5pZmVzdFdyYXBwZXIiLCJzZXR0aW5nc0NvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwiZmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCIsImZiQ29uZmlnIiwiZGVmaW5lZEZpbHRlckZpZWxkcyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwiU2xvdCIsIkRlZmF1bHQiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiaXNDdXN0b21GaWx0ZXIiLCJzbG90TmFtZSIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicmVxdWlyZWQiLCJvYmplY3RQYXRoIiwiZmlsdGVyQmFyQ29udGV4dFBhdGgiLCJtZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8iLCJkYXRhVHlwZSIsIm1heENvbmRpdGlvbnMiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJzb3J0IiwiYSIsImIiLCJpbmRleE9mIiwiZGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJUZXh0Iiwib1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsImZldGNoUHJvcGVydHlJbmZvIiwib1R5cGVDb25maWciLCJvUHJvcGVydHlJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGFyZ2V0UHJvcGVydHlPYmplY3QiLCJvRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFJvb3QiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdE9wdGlvbnMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJyZWR1Y2UiLCJmaWx0ZXJQcm9wZXJ0eVBhdGgiLCJkZWZhdWx0RmlsdGVyRmllbGRzIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJwcm9wZXJ0eUluZm9zIiwiYUdyb3VwTGFiZWxJc1NldCIsImJHcm91cExhYmVsSXNTZXQiLCJsb2NhbGVDb21wYXJlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwib0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsInBhcmFtZXRlckZpZWxkcyIsInNGZXRjaFByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwic1Byb3BlcnR5SW5mbyIsInByb3BTZWxlY3Rpb25GaWVsZHMiLCJwYXJzZSIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsImFGaWVsZEdyb3VwcyIsImdldEFubm90YXRpb25zQnlUZXJtIiwiaSIsInByZXZpb3VzVmFsdWUiLCJmaWx0ZXJGYWNldCIsIklEIiwiYWxsRmlsdGVycyIsInNDb250ZXh0UGF0aCIsImFnZ3JlZ2F0ZXMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlS2V5IiwicmVsYXRpdmVQYXRoIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSxcblx0RmlsdGVyRXhwcmVzc2lvblR5cGUsXG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdFNlYXJjaFJlc3RyaWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsIFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLCBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlTZXQsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlclNldHRpbmdzLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5cbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGtleT86IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdEZpbHRlckZpZWxkID0gRmlsdGVyRmllbGQgJiB7XG5cdHNsb3ROYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5lbnVtIGZpbHRlckZpZWxkVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGZpZWxkR3JvdXAuTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBhbGwgdGhlIHRhYmxlcyBmb3IgYSBkZWRpY2F0ZWQgZW50aXR5IHNldCBhcmUgY29uZmlndXJlZCBhcyBhbmFseXRpY2FsIHRhYmxlcy5cbiAqXG4gKiBAcGFyYW0gbGlzdFJlcG9ydFRhYmxlcyBMaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb250ZXh0UGF0aFxuICogQHJldHVybnMgSXMgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBoaWRkZW4gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsKGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLCBjb250ZXh0UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzICYmIGNvbnRleHRQYXRoID09PSB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbjtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMgdXNlZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkLlxuICpcbiAqIEBwYXJhbSBsclRhYmxlVmlzdWFsaXphdGlvbnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhjbHVkZWQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2V0PHN0cmluZz4ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5maWx0ZXJGaWVsZHMgPz8ge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgYW5ub3RhdGlvblxuXHRcdC4uLihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyA/PyBbXSkubWFwKFxuXHRcdFx0KHNlbGVjdGlvbkZpZWxkKSA9PiBzZWxlY3Rpb25GaWVsZC52YWx1ZVxuXHRcdCksXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgbm90IHdpdGggY3VzdG9tIHRlbXBsYXRlXG5cdFx0Li4uT2JqZWN0LmtleXMobWFuaWZlc3RGaWx0ZXJGaWVsZHMpLmZpbHRlcigoa2V5KSA9PiAhIW1hbmlmZXN0RmlsdGVyRmllbGRzW2tleV0udGVtcGxhdGUpXG5cdF0pO1xuXG5cdHJldHVybiBuZXcgU2V0KFxuXHRcdGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdFx0Lm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdFx0aWYgKCF0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFsuLi4odGFibGVGaWx0ZXJzLmhpZGRlbkZpbHRlcnM/LnBhdGhzID8/IFtdKSwgLi4uKHRhYmxlRmlsdGVycy5xdWlja0ZpbHRlcnM/LnBhdGhzID8/IFtdKV0ubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBwYXRoLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGlmICghc2VsZWN0aW9uVmFyaWFudFBhdGhzLmhhcyhhbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5hZGQoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcyA9IHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KHByb3BlcnR5TmFtZSkgPT4gIXNlbGVjdGlvbkZpZWxkUGF0aHMuaGFzKHByb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmxhdCgyKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLiBJdCBsb29rcyBhcyBmb2xsb3dzOlxuICogPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsdGVyRmllbGRcbiAqL1xuY29uc3QgZ2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdGlmIChcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6OkNyZWF0aW9uRGF0ZVRpbWVcIiB8fFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6TGFzdENoYW5nZURhdGVUaW1lXCJcblx0KSB7XG5cdFx0Y29uc3Qgc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyA9IFtcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE8sXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPTU9SUk9XLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUV0VFSyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVE1PTlRILFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUUVVBUlRFUixcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFlFQVJcblx0XHRdO1xuXHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0b3BlcmF0b3JDb25maWd1cmF0aW9uOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoOiBcImtleVwiLFxuXHRcdFx0XHRcdGVxdWFsczogc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5qb2luKFwiLFwiKSxcblx0XHRcdFx0XHRleGNsdWRlOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRjb25zdCBmdWxsUGF0aDogc3RyaW5nID0gKG5hdmlnYXRpb25QYXRoID8gYCR7bmF2aWdhdGlvblBhdGh9L2AgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBlbmhhbmNlZFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCghaW5jbHVkZUhpZGRlbiAmJlxuXHRcdFx0XHRcdGVuaGFuY2VkUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdFx0KG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gbmF2aWdhdGlvblByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWVcblx0XHRcdFx0XHQpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChpc05hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChpc0NvbXBsZXhUeXBlKHByb3BlcnR5LnRhcmdldFR5cGUpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBDb21wbGV4VHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLnByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChlbmhhbmNlZFBhdGgsIHRydWUpLFxuXHRcdFx0XHRcdFtwcm9wZXJ0eV0sXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdGlvbkZpZWxkcyA9IHtcblx0XHRcdFx0Li4uc2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0XHQuLi5sb2NhbFNlbGVjdGlvbkZpZWxkc1xuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgX2dldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGRlbGV0ZSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCksIHByb3BlcnR5UGF0aCwgdHJ1ZSwgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblx0aWYgKCFmaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKT8uYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NSVNTSU5HX1NFTEVDVElPTkZJRUxEKTtcblx0fVxuXHQvLyBkZWZpbmVkIFNlbGVjdGlvbkZpZWxkcyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHRcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID0gZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiO1xuXHRcdGZpbHRlckZpZWxkLmlzUGFyYW1ldGVyID0gISFlbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPixcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXVxuKTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IFtdO1xuXHRjb25zdCBVSVNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eU5hbWU/LnZhbHVlO1xuXHRcdFx0Y29uc3QgY3VycmVudFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoc1Byb3BlcnR5UGF0aCAmJiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGN1cnJlbnRTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAmJiAhKHByb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG4vKipcbiAqIEdldCBhbGwgcGFyYW1ldGVyIGZpbHRlciBmaWVsZHMgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIEZpbHRlckZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIEFubm90YXRpb24gcGF0aCBvZiB0aGUgc2VsZWN0aW9uIGZpZWxkc1xuICogQHJldHVybnMgVGhlIGZpbHRlciBmaWVsZHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblxuXHRjb25zdCBzZXR0aW5nc0NvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgfHwgKG1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA/IGAvJHttYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCl9YCA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgoY29udmVydGVyQ29udGV4dCwgc2V0dGluZ3NDb250ZXh0UGF0aCwgYW5ub3RhdGlvblBhdGgpO1xuXHRsZXQgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHt9O1xuXHRmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKTtcblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBzZXR0aW5nc0NvbnRleHRQYXRoIE1hbmlmZXN0IGVudGl0eSBzZXQgcGF0aCBhbmQgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggVGhlIGFubm90YXRpb24gcGF0aFxuICogQHJldHVybnMgUGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlcnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGggPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2V0dGluZ3NDb250ZXh0UGF0aD86IHN0cmluZyxcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvYmplY3RQYXRoO1xuXHRjb25zdCBmaWx0ZXJCYXJDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbWV0YVBhdGggPSBgJHtmaWx0ZXJCYXJDb250ZXh0UGF0aH0vJHthbm5vdGF0aW9uUGF0aH1gO1xuXHRpZiAoc2V0dGluZ3NDb250ZXh0UGF0aCAmJiBtZXRhUGF0aD8uc3RhcnRzV2l0aChzZXR0aW5nc0NvbnRleHRQYXRoKSAmJiBhbm5vdGF0aW9uUGF0aCkge1xuXHRcdG9iamVjdFBhdGggPSBtZXRhUGF0aC5yZXBsYWNlKGAke3NldHRpbmdzQ29udGV4dFBhdGh9L2AsIFwiXCIpO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFBhdGggPSBhbm5vdGF0aW9uUGF0aDtcblx0fVxuXHRyZXR1cm4gb2JqZWN0UGF0aCA/IG9iamVjdFBhdGggOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQsXG5cdHNSZXN0cmljdGlvbjogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJFeHByZXNzaW9uVHlwZVtdPiB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+ID0ge307XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUpIHtcblx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWVdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWVdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMudG9TdHJpbmcoKV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTZWFyY2hSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRyZXR1cm4gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSA/IGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlNlYXJjaFJlc3RyaWN0aW9ucyA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNOYXZpZ2F0aW9uUGF0aDogc3RyaW5nXG4pOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcbi8vIFRoZSBwcm9wZXJ0eUluZm8gdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBGRVxuZXhwb3J0IHR5cGUgUHJvcGVydHlJbmZvID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0eXBlPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRmaWx0ZXJFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRpc0N1c3RvbUZpbHRlcj86IGJvb2xlYW47XG5cdGNvbnN0cmFpbnRzPzogb2JqZWN0O1xuXHRmb3JtYXRPcHRpb25zPzogb2JqZWN0O1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xufTtcblxuLy8gVGhlIHByb3BlcnR5SW5mbyB3ZSBzaGFyZSB3aXRoIE1EQ1xuZXhwb3J0IHR5cGUgUHJvcGVydHlJbmZvRXh0ZXJuYWwgPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRkYXRhVHlwZTogc3RyaW5nO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzogb2JqZWN0O1xuXHRmb3JtYXRPcHRpb25zPzogb2JqZWN0O1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0dG9vbHRpcD86IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xufTtcbmNvbnN0IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRrZXk6IG9GaWx0ZXJGaWVsZEluZm8ua2V5LFxuXHRcdGFubm90YXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdGNvbmRpdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRuYW1lOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudSxcblx0XHRyZXF1aXJlZDogb0ZpbHRlckZpZWxkSW5mby5yZXF1aXJlZCxcblx0XHRpc0N1c3RvbUZpbHRlcjogb0ZpbHRlckZpZWxkSW5mby5zZXR0aW5ncz8uaXNDdXN0b21GaWx0ZXJcblx0fTtcbn07XG5cbmNvbnN0IF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdG1hbmlmZXN0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+XG4pOiB2b2lkIHtcblx0ZmlsdGVyRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0aWYgKG1hbmlmZXN0RmlsdGVyRmllbGRzLmhhc093blByb3BlcnR5KGZpbHRlckZpZWxkLmtleSkgJiYgIW1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwpIHtcblx0XHRcdG1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwgPSBmaWx0ZXJGaWVsZC5sYWJlbDtcblx0XHR9XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoYUV4cHJlc3Npb25zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IFtcblx0XHRcIlNpbmdsZVZhbHVlXCIsXG5cdFx0XCJNdWx0aVZhbHVlXCIsXG5cdFx0XCJTaW5nbGVSYW5nZVwiLFxuXHRcdFwiTXVsdGlSYW5nZVwiLFxuXHRcdFwiU2VhcmNoRXhwcmVzc2lvblwiLFxuXHRcdFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXG5cdF07XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGguaW5jbHVkZXMoXCIvXCIpXG5cdCk7XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeSBmcm9tIGEgZGF0YSBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKlxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nW10ge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpIHtcblx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0Z2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseShuYXZQcm9wZXJ0aWVzLCBpbm5lckRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0aWYgKF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgZGF0YUZpZWxkLlZhbHVlLnBhdGgpLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KS5qb2luKFwiL1wiKTtcblx0XHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdFx0bmF2UHJvcGVydGllcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGRpdGlvbmFsIHByb3BlcnR5IGZyb20gdGV4dCBhcnJhbmdlbWVudC91bml0cy9jdXJyZW5jaWVzL3RpbWV6b25lLi4uXG5cdFx0XHRhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCwgbmF2UHJvcGVydGllcyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gT3RoZXIgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBuYXZQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4gPSBmYWxzZSxcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7XG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz47XG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW107XG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+O1xuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW107XG5cdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IEZpbHRlckZpZWxkW107XG59IHtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHMgZGVmaW5lZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIGFuZCBkaWZmZXJlbnQgdmlld3MgKG11bHRpIHRhYmxlIG1vZGUpXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyA9IGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhsclRhYmxlcywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Ly9GaWx0ZXJzIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB3aGljaCBpcyBwYXJ0IG9mIFNWL0RlZmF1bHQgYW5ub3RhdGlvbnMgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBTZWxlY3Rpb25GaWVsZHNcblx0Y29uc3QgYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzID0gKChhbm5vdGF0aW9uUGF0aCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFubm90YXRpb25QYXRoKT8uYW5ub3RhdGlvbikgfHxcblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzIHx8XG5cdFx0W10pIGFzIFByb3BlcnR5UGF0aFtdO1xuXG5cdGxldCBuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAobHJUYWJsZXMubGVuZ3RoID09PSAwICYmICEhbGluZUl0ZW1UZXJtKSB7XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obGluZUl0ZW1UZXJtKS5hbm5vdGF0aW9uIGFzIExpbmVJdGVtKT8uZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRuYXZQcm9wZXJ0aWVzID0gZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseShuYXZQcm9wZXJ0aWVzLCBkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0bmF2UHJvcGVydGllcy5wdXNoKFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0ZWRCeVVzZXJcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyXCJcblx0XHQpO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi4gbm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoZW50aXR5VHlwZSwgbmF2UHJvcGVydGllcywgZmFsc2UsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLmFkZGl0aW9uYWwgbWFuaWZlc3QgZGVmaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHQpXG5cdH07XG5cdGxldCBhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID1cblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRpZiAoIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGguc3BsaXQoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKVswXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZpbHRlclByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHByb3BlcnR5UGF0aCA6IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkcyxcblx0XHRcdFx0XHRmaWx0ZXJQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cExhYmVsID0gXCJcIjtcblx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0fSwgW10pIHx8IFtdO1xuXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkc1xuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGaWVsZHM6IGZpbHRlckZpZWxkcyxcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHM6IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRkZWZhdWx0RmlsdGVyRmllbGRzOiBkZWZhdWx0RmlsdGVyRmllbGRzXG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hUeXBlQ29uZmlnID0gZnVuY3Rpb24gKHByb3BlcnR5PzogUHJvcGVydHkpOiBQcm9wZXJ0eVR5cGVDb25maWcge1xuXHRjb25zdCBvVHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIHByb3BlcnR5Py50eXBlKTtcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIChvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkIHx8IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB0cnVlKSkge1xuXHRcdG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG9UeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhUmVxdWlyZWRQcm9wczogdW5rbm93bltdLFxuXHRhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XSksXG5cdFx0c1Byb3BlcnR5UGF0aCA9IFwiXCI7XG5cdGlmIChwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoKSB7XG5cdFx0c1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvXFwrfFxcKi9nLCBcIlwiKTtcblx0fVxuXHRpZiAob1Byb3BlcnR5SW5mbykge1xuXHRcdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRcdG1heENvbmRpdGlvbnM6ICFvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyICYmIGlzTXVsdGlWYWx1ZShvUHJvcGVydHlJbmZvKSA/IC0xIDogMSxcblx0XHRcdHJlcXVpcmVkOiBwcm9wZXJ0eUluZm9GaWVsZC5yZXF1aXJlZCA/PyAob1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciB8fCBhUmVxdWlyZWRQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSksXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRkYXRhVHlwZTogYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogRmlsdGVyRmllbGRbXVxuKTogUHJvcGVydHlJbmZvW10ge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvUmV0OiB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJFeHByZXNzaW9uVHlwZVtdPjtcblx0fSA9IHt9O1xuXHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMpO1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW11cblx0XHQpO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7XG5cdFx0XHQuLi4oZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMpIHx8IHt9KSxcblx0XHRcdC4uLm9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXG5cdFx0fTtcblx0fVxuXHRjb25zdCBhUmVxdWlyZWRQcm9wcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvWysqXS9nLCBcIlwiKTtcblx0XHRpZiAoIWFOb25GaWx0ZXJhYmxlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nXG4pOiBNYW5pZmVzdEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblx0X2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcywge1xuXHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRsYWJlbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0eXBlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNsb3ROYW1lOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHRlbXBsYXRlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc3VhbEZpbHRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRyZXF1aXJlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCA9IChwcm9wZXJ0eUluZm9zOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQgPT4ge1xuXHRwcm9wZXJ0eUluZm9zLnNvcnQoZnVuY3Rpb24gKGE6IEZpbHRlckdyb3VwLCBiOiBGaWx0ZXJHcm91cCkge1xuXHRcdGNvbnN0IGFHcm91cExhYmVsSXNTZXQgPSBhLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBhLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0Y29uc3QgYkdyb3VwTGFiZWxJc1NldCA9IGIuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGIuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAoYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwhLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsISk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHBhcmFtIFtsaW5lSXRlbVRlcm1dXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKTogeyBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107IHNQcm9wZXJ0eUluZm86IHN0cmluZyB9IHtcblx0Y29uc3Qgb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGxyVGFibGVzLFxuXHRcdGFubm90YXRpb25QYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0bGluZUl0ZW1UZXJtXG5cdCk7XG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcztcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4gYWdncmVnYXRlc1thZ2dyZWdhdGVLZXldLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRhbGxGaWx0ZXJzID0gYWxsRmlsdGVycy5maWx0ZXIoKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0XHRcdHJldHVybiAhYWdncmVnYXRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhmaWx0ZXJGaWVsZC5rZXkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gVGhlIEZpbHRlclJlc3RyaWN0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZm9yIGV4cGFuZEZpbHRlckZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kRmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCxcblx0dmFsdWVMaXN0OiBNZXRhTW9kZWxUeXBlPFZhbHVlTGlzdD5cbik6IGJvb2xlYW4ge1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGggPiAwIHx8IGhpZGVCYXNpY1NlYXJjaCB8fCB2YWx1ZUxpc3Q/LkZldGNoVmFsdWVzID09PSAyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFzRktBLGVBQWU7RUFBQSxXQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtFQUFBLEdBQWZBLGVBQWUsS0FBZkEsZUFBZTtFQUtwQixNQUFNQyxVQUFVLEdBQUcsWUFBWTtFQUMvQixNQUFNQyxlQUFlLEdBQUcsZ0NBQWdDO0VBSXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLHlCQUF5QixDQUFDQyxVQUFzQixFQUErQjtJQUN2RixNQUFNQyxjQUEyQyxHQUFHLENBQUMsQ0FBQztJQUN0REQsVUFBVSxDQUFDRSxJQUFJLENBQUNDLE9BQU8sQ0FBRUMsU0FBaUMsSUFBSztNQUM5RCxJQUFJQSxTQUFTLENBQUNDLEtBQUssS0FBSyxzQ0FBc0MsRUFBRTtRQUFBO1FBQy9ESixjQUFjLENBQUNHLFNBQVMsQ0FBQ0UsS0FBSyxDQUFDQyxJQUFJLENBQUMsR0FBRztVQUN0Q0MsS0FBSyxFQUFFUixVQUFVLENBQUNTLGtCQUFrQjtVQUNwQ0MsVUFBVSxFQUFFLHNCQUFBVixVQUFVLENBQUNXLEtBQUss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
|