@sapui5/sap.fe.core 1.124.3 → 1.124.4
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 +38 -37
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +40 -39
- package/src/sap/fe/core/converters/ManifestWrapper.js +3 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +47 -38
- package/src/sap/fe/core/converters/controls/Common/Table.ts +33 -25
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +33 -37
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +30 -28
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
|
@@ -323,23 +323,20 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
323
323
|
*
|
|
324
324
|
* @param entityType The current entityType
|
|
325
325
|
* @param converterContext The converter context
|
|
326
|
+
* @param annotationPath Annotation path of the selection fields
|
|
326
327
|
* @returns The filter fields defined in the manifest
|
|
327
328
|
*/
|
|
328
329
|
_exports.getFilterBarHideBasicSearch = getFilterBarHideBasicSearch;
|
|
329
|
-
const getManifestFilterFields = function (entityType, converterContext) {
|
|
330
|
-
var
|
|
330
|
+
const getManifestFilterFields = function (entityType, converterContext, annotationPath) {
|
|
331
|
+
var _fbConfig;
|
|
331
332
|
const manifestWrapper = converterContext.getManifestWrapper();
|
|
332
|
-
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
if (!entitySetInMultiView && !checkSameEntitySet(manifestWrapper, converterContext)) {
|
|
338
|
-
//return if entity type does not match entity sets in manifest
|
|
339
|
-
return {};
|
|
333
|
+
const settingsContextPath = manifestWrapper.getContextPath() || (manifestWrapper.getEntitySet() ? `/${manifestWrapper.getEntitySet()}` : undefined);
|
|
334
|
+
const filterConfigurationPath = getFilterConfigurationPath(converterContext, settingsContextPath, annotationPath);
|
|
335
|
+
let fbConfig = {};
|
|
336
|
+
if (settingsContextPath) {
|
|
337
|
+
fbConfig = manifestWrapper.getFilterConfiguration(filterConfigurationPath);
|
|
340
338
|
}
|
|
341
|
-
const
|
|
342
|
-
const definedFilterFields = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.filterFields) || {};
|
|
339
|
+
const definedFilterFields = ((_fbConfig = fbConfig) === null || _fbConfig === void 0 ? void 0 : _fbConfig.filterFields) || {};
|
|
343
340
|
const selectionFields = _getSelectionFieldsByPath(entityType, Object.keys(definedFilterFields).map(key => definedFilterFields[key].property ?? KeyHelper.getPathFromSelectionFieldKey(key)), true, converterContext);
|
|
344
341
|
const filterFields = {};
|
|
345
342
|
for (const sKey in definedFilterFields) {
|
|
@@ -378,23 +375,22 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
378
375
|
};
|
|
379
376
|
|
|
380
377
|
/**
|
|
381
|
-
* Returns
|
|
378
|
+
* Returns configuration path to fetch the custom filter fields from manifest.
|
|
382
379
|
*
|
|
383
|
-
* @param manifestWrapper Manifest wrapper
|
|
384
380
|
* @param converterContext The converter context
|
|
385
|
-
* @
|
|
381
|
+
* @param settingsContextPath Manifest entity set path and context path
|
|
382
|
+
* @param annotationPath The annotation path
|
|
383
|
+
* @returns Path to fetch the custom filters from the manifest
|
|
386
384
|
*/
|
|
387
385
|
_exports.getManifestFilterFields = getManifestFilterFields;
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
var _converterContext$get6;
|
|
395
|
-
sameEntitySet = manifestWrapper.getEntitySet() === ((_converterContext$get6 = converterContext.getEntitySet()) === null || _converterContext$get6 === void 0 ? void 0 : _converterContext$get6.name);
|
|
386
|
+
const getFilterConfigurationPath = function (converterContext, settingsContextPath, annotationPath) {
|
|
387
|
+
let objectPath;
|
|
388
|
+
const filterBarContextPath = converterContext.getContextPath();
|
|
389
|
+
const metaPath = `${filterBarContextPath}/${annotationPath}`;
|
|
390
|
+
if (settingsContextPath && metaPath !== null && metaPath !== void 0 && metaPath.startsWith(settingsContextPath) && annotationPath) {
|
|
391
|
+
objectPath = metaPath.replace(`${settingsContextPath}/`, "");
|
|
396
392
|
}
|
|
397
|
-
return
|
|
393
|
+
return objectPath ? objectPath : undefined;
|
|
398
394
|
};
|
|
399
395
|
const getFilterField = function (propertyPath, converterContext, entityType) {
|
|
400
396
|
return _getFilterField({}, propertyPath, converterContext, entityType);
|
|
@@ -455,8 +451,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
455
451
|
return isEntitySet(entitySet) ? (_entitySet$annotation = entitySet.annotations.Capabilities) === null || _entitySet$annotation === void 0 ? void 0 : _entitySet$annotation.SearchRestrictions : undefined;
|
|
456
452
|
};
|
|
457
453
|
const getNavigationRestrictions = function (converterContext, sNavigationPath) {
|
|
458
|
-
var _converterContext$
|
|
459
|
-
const oNavigationRestrictions = (_converterContext$
|
|
454
|
+
var _converterContext$get5, _converterContext$get6, _converterContext$get7;
|
|
455
|
+
const oNavigationRestrictions = (_converterContext$get5 = converterContext.getEntitySet()) === null || _converterContext$get5 === void 0 ? void 0 : (_converterContext$get6 = _converterContext$get5.annotations) === null || _converterContext$get6 === void 0 ? void 0 : (_converterContext$get7 = _converterContext$get6.Capabilities) === null || _converterContext$get7 === void 0 ? void 0 : _converterContext$get7.NavigationRestrictions;
|
|
460
456
|
const aRestrictedProperties = oNavigationRestrictions && oNavigationRestrictions.RestrictedProperties;
|
|
461
457
|
return aRestrictedProperties && aRestrictedProperties.find(function (oRestrictedProperty) {
|
|
462
458
|
return oRestrictedProperty && oRestrictedProperty.NavigationProperty && oRestrictedProperty.NavigationProperty.value === sNavigationPath;
|
|
@@ -516,7 +512,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
516
512
|
};
|
|
517
513
|
_exports.displayMode = displayMode;
|
|
518
514
|
const fetchPropertyInfo = function (converterContext, oFilterFieldInfo, oTypeConfig) {
|
|
519
|
-
var _converterContext$
|
|
515
|
+
var _converterContext$get8;
|
|
520
516
|
let oPropertyInfo = _fetchBasicPropertyInfo(oFilterFieldInfo);
|
|
521
517
|
const sAnnotationPath = oFilterFieldInfo.annotationPath;
|
|
522
518
|
if (!sAnnotationPath) {
|
|
@@ -524,7 +520,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
524
520
|
}
|
|
525
521
|
const targetPropertyObject = converterContext.getConverterContextFor(sAnnotationPath).getDataModelObjectPath().targetObject;
|
|
526
522
|
const oPropertyAnnotations = targetPropertyObject === null || targetPropertyObject === void 0 ? void 0 : targetPropertyObject.annotations;
|
|
527
|
-
const oCollectionAnnotations = converterContext === null || converterContext === void 0 ? void 0 : (_converterContext$
|
|
523
|
+
const oCollectionAnnotations = converterContext === null || converterContext === void 0 ? void 0 : (_converterContext$get8 = converterContext.getDataModelObjectPath().targetObject) === null || _converterContext$get8 === void 0 ? void 0 : _converterContext$get8.annotations;
|
|
528
524
|
const oFormatOptions = oTypeConfig.formatOptions;
|
|
529
525
|
const oConstraints = oTypeConfig.constraints;
|
|
530
526
|
oPropertyInfo = Object.assign(oPropertyInfo, {
|
|
@@ -617,7 +613,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
617
613
|
return navProperties;
|
|
618
614
|
};
|
|
619
615
|
const getAnnotatedSelectionFieldData = function (converterContext) {
|
|
620
|
-
var _converterContext$
|
|
616
|
+
var _converterContext$get9, _entityType$annotatio3, _entityType$annotatio4;
|
|
621
617
|
let lrTables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
622
618
|
let annotationPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|
623
619
|
let includeHidden = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
@@ -626,11 +622,11 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
626
622
|
const excludedFilterProperties = getExcludedFilterProperties(lrTables, converterContext);
|
|
627
623
|
const entityType = converterContext.getEntityType();
|
|
628
624
|
//Filters which has to be added which is part of SV/Default annotations but not present in the SelectionFields
|
|
629
|
-
const annotatedSelectionFields = annotationPath && ((_converterContext$
|
|
625
|
+
const annotatedSelectionFields = annotationPath && ((_converterContext$get9 = converterContext.getEntityTypeAnnotation(annotationPath)) === null || _converterContext$get9 === void 0 ? void 0 : _converterContext$get9.annotation) || ((_entityType$annotatio3 = entityType.annotations) === null || _entityType$annotatio3 === void 0 ? void 0 : (_entityType$annotatio4 = _entityType$annotatio3.UI) === null || _entityType$annotatio4 === void 0 ? void 0 : _entityType$annotatio4.SelectionFields) || [];
|
|
630
626
|
let navProperties = [];
|
|
631
627
|
if (lrTables.length === 0 && !!lineItemTerm) {
|
|
632
|
-
var _converterContext$
|
|
633
|
-
(_converterContext$
|
|
628
|
+
var _converterContext$get10;
|
|
629
|
+
(_converterContext$get10 = converterContext.getEntityTypeAnnotation(lineItemTerm).annotation) === null || _converterContext$get10 === void 0 ? void 0 : _converterContext$get10.forEach(dataField => {
|
|
634
630
|
navProperties = getNavigationPropertiesRecursively(navProperties, dataField, converterContext);
|
|
635
631
|
});
|
|
636
632
|
}
|
|
@@ -777,8 +773,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
777
773
|
return aFetchedProperties;
|
|
778
774
|
};
|
|
779
775
|
_exports.processSelectionFields = processSelectionFields;
|
|
780
|
-
const insertCustomManifestElements = function (filterFields, entityType, converterContext) {
|
|
781
|
-
const manifestFilterFields = getManifestFilterFields(entityType, converterContext);
|
|
776
|
+
const insertCustomManifestElements = function (filterFields, entityType, converterContext, annotationPath) {
|
|
777
|
+
const manifestFilterFields = getManifestFilterFields(entityType, converterContext, annotationPath);
|
|
782
778
|
_getMissingLabelForManifestFilterFields(filterFields, manifestFilterFields);
|
|
783
779
|
return insertCustomElements(filterFields, manifestFilterFields, {
|
|
784
780
|
availability: OverrideType.overwrite,
|
|
@@ -833,7 +829,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
833
829
|
let propertyInfoFields = oAnnotatedSelectionFieldData.propertyInfoFields;
|
|
834
830
|
const entityType = oAnnotatedSelectionFieldData.entityType;
|
|
835
831
|
propertyInfoFields = parameterFields.concat(propertyInfoFields);
|
|
836
|
-
propertyInfoFields = insertCustomManifestElements(propertyInfoFields, entityType, converterContext);
|
|
832
|
+
propertyInfoFields = insertCustomManifestElements(propertyInfoFields, entityType, converterContext, annotationPath);
|
|
837
833
|
const aFetchedProperties = processSelectionFields(propertyInfoFields, converterContext, oAnnotatedSelectionFieldData.defaultFilterFields);
|
|
838
834
|
sortPropertyInfosByGroupLabel(aFetchedProperties);
|
|
839
835
|
let sFetchProperties = JSON.stringify(aFetchedProperties);
|
|
@@ -895,7 +891,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
895
891
|
});
|
|
896
892
|
}
|
|
897
893
|
}
|
|
898
|
-
const selectionFields = insertCustomManifestElements(allFilters, entityType, converterContext);
|
|
894
|
+
const selectionFields = insertCustomManifestElements(allFilters, entityType, converterContext, annotationPath);
|
|
899
895
|
|
|
900
896
|
// Add caseSensitive property to all selection fields.
|
|
901
897
|
const isCaseSensitive = isFilteringCaseSensitive(converterContext);
|
|
@@ -932,4 +928,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
932
928
|
_exports.getExpandFilterFields = getExpandFilterFields;
|
|
933
929
|
return _exports;
|
|
934
930
|
}, false);
|
|
935
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjb250ZXh0UGF0aCIsImxlbmd0aCIsImV2ZXJ5IiwidmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImFubm90YXRpb24iLCJjb2xsZWN0aW9uIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsInNlbGVjdGlvblZhcmlhbnRQYXRocyIsIlNldCIsIm1hbmlmZXN0RmlsdGVyRmllbGRzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckZpZWxkcyIsInNlbGVjdGlvbkZpZWxkUGF0aHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwibWFwIiwic2VsZWN0aW9uRmllbGQiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJ0ZW1wbGF0ZSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJtYW5pZmVzdFdyYXBwZXIiLCJlbnRpdHlTZXRJbk11bHRpVmlldyIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwiY2hlY2tTYW1lRW50aXR5U2V0IiwiZmJDb25maWciLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleSIsInNLZXkiLCJTbG90IiwiRGVmYXVsdCIsInZpc3VhbEZpbHRlciIsImdldFZpc3VhbEZpbHRlcnMiLCJpc0N1c3RvbUZpbHRlciIsInNsb3ROYW1lIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJyZXF1aXJlZCIsInNhbWVFbnRpdHlTZXQiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm9Qcm9wZXJ0eSIsImdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyIsImRhdGFUeXBlIiwibWF4Q29uZGl0aW9ucyIsImdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyIsImhpZGRlbkZpbHRlciIsImdldFNlYXJjaFJlc3RyaWN0aW9ucyIsImlzRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiU2VhcmNoUmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsInNOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIl9mZXRjaEJhc2ljUHJvcGVydHlJbmZvIiwib0ZpbHRlckZpZWxkSW5mbyIsImRpc3BsYXkiLCJjYXNlU2Vuc2l0aXZlIiwibWVudSIsIl9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhhc093blByb3BlcnR5IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsInNvcnQiLCJhIiwiYiIsImluZGV4T2YiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIm9Qcm9wZXJ0eUluZm8iLCJzQW5ub3RhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0eU9iamVjdCIsIm9Gb3JtYXRPcHRpb25zIiwiZm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsImNvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiZW50cnkiLCJpbmNsdWRlcyIsImFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wZXJ0aWVzIiwidGFyZ2V0UHJvcGVydHkiLCIkdGFyZ2V0IiwiYWRkaXRpb25hbFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSIsIlRhcmdldCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsInN0YXJ0c1dpdGgiLCJmaWx0ZXJQcm9wZXJ0eVBhdGgiLCJkZWZhdWx0RmlsdGVyRmllbGRzIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsInJlcGxhY2UiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib1JldCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0VudGl0eVNldFBhdGgiLCJhUGF0aFBhcnRzIiwic3BsaWNlIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsInNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIiwicHJvcGVydHlJbmZvcyIsImFHcm91cExhYmVsSXNTZXQiLCJiR3JvdXBMYWJlbElzU2V0IiwibG9jYWxlQ29tcGFyZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwicGFyc2UiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJwcmV2aW91c1ZhbHVlIiwiZmlsdGVyRmFjZXQiLCJJRCIsImFsbEZpbHRlcnMiLCJzQ29udGV4dFBhdGgiLCJhZ2dyZWdhdGVzIiwiYWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0ZUtleSIsInJlbGF0aXZlUGF0aCIsImlzQ2FzZVNlbnNpdGl2ZSIsImdldEV4cGFuZEZpbHRlckZpZWxkcyIsImZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJ2YWx1ZUxpc3QiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJGZXRjaFZhbHVlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUsXG5cdEZpbHRlckV4cHJlc3Npb25UeXBlLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVMaXN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5VHlwZUFubm90YXRpb25zLCBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbmZpZywgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzQ29tcGxleFR5cGUsIGlzRW50aXR5U2V0LCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc05hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzLCBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5ncyxcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdGRhdGFUeXBlPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PE1hbmlmZXN0RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiBmaWVsZEdyb3VwLkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eSBzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgTGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC5cbiAqXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0cGFydCArPSBcIipcIjtcblx0XHR9XG5cdFx0a2V5ID0ga2V5ID8gYCR7a2V5fS8ke3BhcnR9YCA6IHBhcnQ7XG5cdH1cblx0cmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgKGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSksXG5cdFx0XHRmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHRhcmdldEVudGl0eVR5cGUubmFtZVxuXHRcdFx0fTtcblx0XHRnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZCk7XG5cdFx0cmV0dXJuIGZpbHRlckZpZWxkO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLiBPbmx5IHJlbGV2YW50IGZvciBDcmVhdGlvbkRhdGVUaW1lXG4gKiBhbmQgTGFzdENoYW5nZURhdGVUaW1lLCBhcyB0aGV5IGFyZSBkaXNwbGF5aW5nIHRoZSB0aW1lZnJhbWUgcmVsYXRlZCBwcm9wZXJ0aWVzIGFzIGEgU2VtYW50aWNEYXRlUmFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbHRlckZpZWxkXG4gKi9cbmNvbnN0IGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpDcmVhdGlvbkRhdGVUaW1lXCIgfHxcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6Okxhc3RDaGFuZ2VEYXRlVGltZVwiXG5cdCkge1xuXHRcdGNvbnN0IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgPSBbXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UT01PUlJPVyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFdFRUssXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRNT05USCxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFFVQVJURVIsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRZRUFSXG5cdFx0XTtcblx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdG9wZXJhdG9yQ29uZmlndXJhdGlvbjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aDogXCJrZXlcIixcblx0XHRcdFx0XHRlcXVhbHM6IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuam9pbihcIixcIiksXG5cdFx0XHRcdFx0ZXhjbHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW5oYW5jZWRQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoIWluY2x1ZGVIaWRkZW4gJiZcblx0XHRcdFx0XHRlbmhhbmNlZFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdmlnYXRpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV4VHlwZShwcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKSxcblx0XHRcdFx0XHRbcHJvcGVydHldLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIiA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Ly8gb3IgYWxsIHRhYmxlcyBhcmUgVHJlZVRhYmxlIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiAodGFibGUuZW5hYmxlQW5hbHl0aWNzIHx8IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIXRhYmxlLmVuYWJsZUJhc2ljU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Ly9DaGVjayBpZiBtdWx0aWVudGl0eSBzZXRzIGluIG1hbmlmZXN0IGhhdmUgdGhlIHNhbWUgZW50aXR5IHR5cGVcblx0Y29uc3QgZW50aXR5U2V0SW5NdWx0aVZpZXcgPSBtYW5pZmVzdFdyYXBwZXJcblx0XHQuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKVxuXHRcdD8ucGF0aHMuZmluZCgocGF0aCkgPT4gKHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5lbnRpdHlTZXQgPT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpO1xuXG5cdGlmICghZW50aXR5U2V0SW5NdWx0aVZpZXcgJiYgIWNoZWNrU2FtZUVudGl0eVNldChtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0Ly9yZXR1cm4gaWYgZW50aXR5IHR5cGUgZG9lcyBub3QgbWF0Y2ggZW50aXR5IHNldHMgaW4gbWFuaWZlc3Rcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gZGVmaW5lZEZpbHRlckZpZWxkc1trZXldLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChmaWx0ZXJGaWVsZC50ZW1wbGF0ZSB8fCBmaWx0ZXJGaWVsZC50eXBlID09PSBmaWx0ZXJGaWVsZFR5cGUuU2xvdCkge1xuXHRcdFx0aWYgKGZpbHRlckZpZWxkLnNldHRpbmdzKSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzLmlzQ3VzdG9tRmlsdGVyID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGlzQ3VzdG9tRmlsdGVyOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogZmlsdGVyRmllbGQucHJvcGVydHlcblx0XHRcdFx0PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KVxuXHRcdFx0XHQ6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoZmlsdGVyRmllbGQubGFiZWwpLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXR5IHNldCBpcyB0aGUgc2FtZSBmb3IgYm90aCB0aGUgbWFuaWZlc3QgYW5kIGNvbnZlcnRlciBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgd3JhcHBlclxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBtYW5pZmVzdCBmaWx0ZXJzIGhhdmUgdGhlIHNhbWUgZW50aXR5IHNldCBhcyB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqL1xuY29uc3QgY2hlY2tTYW1lRW50aXR5U2V0ID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNhbWVFbnRpdHlTZXQ7XG5cdGlmICghKCFtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSB8fCBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKT8ubGVuZ3RoID09PSAwKSkge1xuXHRcdHNhbWVFbnRpdHlTZXQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHR9IGVsc2UgaWYgKCEoIW1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSB8fCBtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCk/Lmxlbmd0aCA9PT0gMCkpIHtcblx0XHRzYW1lRW50aXR5U2V0ID0gbWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpID09PSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHR9XG5cdHJldHVybiBzYW1lRW50aXR5U2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+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/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMsIHtcblx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0bGFiZWw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dHlwZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzbG90TmFtZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHsgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdOyBzUHJvcGVydHlJbmZvOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHM7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmVudGl0eVR5cGU7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wZXJ0eUluZm9GaWVsZHMpO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMocHJvcGVydHlJbmZvRmllbGRzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4gYWdncmVnYXRlc1thZ2dyZWdhdGVLZXldLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRhbGxGaWx0ZXJzID0gYWxsRmlsdGVycy5maWx0ZXIoKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0XHRcdHJldHVybiAhYWdncmVnYXRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhmaWx0ZXJGaWVsZC5rZXkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNGS0EsZUFBZTtFQUFBLFdBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFmQSxlQUFlO0VBQUEsR0FBZkEsZUFBZSxLQUFmQSxlQUFlO0VBS3BCLE1BQU1DLFVBQVUsR0FBRyxZ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
|
|
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+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNGS0EsZUFBZTtFQUFBLFdBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFmQSxlQUFlO0VBQUEsR0FBZkEsZUFBZSxLQUFmQSxlQUFlO0VBS3BCLE1BQU1DLFVBQVUsR0FBRyxZQUFZO0VBQy9CLE1BQU1DLGVBQWUsR0FBRyxnQ0FBZ0M7RUFJeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MseUJBQXlCLENBQUNDLFVBQXNCLEVBQStCO0lBQ3ZGLE1BQU1DLGNBQTJDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RERCxVQUFVLENBQUNFLElBQUksQ0FBQ0MsT0FBTyxDQUFFQyxTQUFpQyxJQUFLO01BQzlELElBQUlBLFNBQVMsQ0FBQ0MsS0FBSyxLQUFLLHNDQUFzQyxFQUFFO1FBQUE7UUFDL0RKLGNBQWMsQ0FBQ0csU0FBUyxDQUFDRSxLQUFLLENBQUNDLElBQUksQ0FBQyxHQUFHO1VBQ3RDQyxLQUFLLEVBQUVSLFVBQVUsQ0FBQ1Msa0JBQWtCO1VBQ3BDQyxVQUFVLEVBQUUsc0JBQUFWLFVBQVUsQ0FBQ1csS0FBSyxzREFBaEIsa0JBQWtCQyxRQUFRLEVBQUUsK0JBQUlaLFVBQVUsQ0FBQ2EsV0FBVyxvRkFBdEIsc0JBQXdCQyxNQUFNLHFGQUE5Qix1QkFBZ0NILEtBQUssMkRBQXJDLHVCQUF1Q0MsUUFBUSxFQUFFLEtBQUlaLFVBQVUsQ0FBQ2U7UUFDN0csQ0FBQztNQUNGO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YsT0FBT2QsY0FBYztFQUN0Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNlLHNDQUFzQyxDQUFDQyxnQkFBc0MsRUFBRUMsV0FBK0IsRUFBVztJQUNqSSxJQUFJQSxXQUFXLElBQUlELGdCQUFnQixDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQy9DLE9BQU9GLGdCQUFnQixDQUFDRyxLQUFLLENBQUVDLGFBQWEsSUFBSztRQUNoRCxPQUFPQSxhQUFhLENBQUNDLGVBQWUsSUFBSUosV0FBVyxLQUFLRyxhQUFhLENBQUNFLFVBQVUsQ0FBQ0MsVUFBVTtNQUM1RixDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU8sS0FBSztFQUNiOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsMkJBQTJCLENBQ25DQyxxQkFBMkMsRUFDM0NDLGdCQUF5RCxFQUMzQztJQUFBO0lBQ2QsTUFBTUMscUJBQXFCLEdBQUcsSUFBSUMsR0FBRyxFQUFVO0lBQy9DLE1BQU1DLG9CQUFvQixHQUFHSCxnQkFBZ0IsQ0FBQ0ksa0JBQWtCLEVBQUUsQ0FBQ0Msc0JBQXNCLEVBQUUsQ0FBQ0MsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUM5RyxNQUFNQyxtQkFBbUIsR0FBRyxJQUFJTCxHQUFHLENBQVM7SUFDM0M7SUFDQSxHQUFHLENBQUMsMEJBQUFGLGdCQUFnQixDQUFDUSxzQkFBc0IsRUFBRSxDQUFDQyxnQkFBZ0Isb0ZBQTFELHNCQUE0RHZCLFdBQVcscUZBQXZFLHVCQUF5RXdCLEVBQUUsMkRBQTNFLHVCQUE2RUMsZUFBZSxLQUFJLEVBQUUsRUFBRUMsR0FBRyxDQUN6R0MsY0FBYyxJQUFLQSxjQUFjLENBQUNDLEtBQUssQ0FDeEM7SUFDRDtJQUNBLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDYixvQkFBb0IsQ0FBQyxDQUFDYyxNQUFNLENBQUVDLEdBQUcsSUFBSyxDQUFDLENBQUNmLG9CQUFvQixDQUFDZSxHQUFHLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQzFGLENBQUM7SUFFRixPQUFPLElBQUlqQixHQUFHLENBQ2JILHFCQUFxQixDQUNuQmEsR0FBRyxDQUFFbEIsYUFBYSxJQUFLO01BQUE7TUFDdkIsTUFBTTBCLFlBQVksR0FBRzFCLGFBQWEsQ0FBQzJCLE9BQU8sQ0FBQ0MsT0FBTztNQUNsRCxJQUFJLENBQUNGLFlBQVksRUFBRTtRQUNsQixPQUFPLEVBQUU7TUFDVjtNQUNBLE9BQU8sQ0FBQyxJQUFJLDBCQUFBQSxZQUFZLENBQUNHLGFBQWEsMERBQTFCLHNCQUE0QkMsS0FBSyxLQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksMEJBQUFKLFlBQVksQ0FBQ0ssWUFBWSwwREFBekIsc0JBQTJCRCxLQUFLLEtBQUksRUFBRSxDQUFDLENBQUMsQ0FBQ1osR0FBRyxDQUFFaEMsSUFBSSxJQUFLO1FBQ2hILE1BQU04QyxjQUFjLEdBQUc5QyxJQUFJLENBQUM4QyxjQUFjO1FBQzFDLElBQUksQ0FBQ3pCLHFCQUFxQixDQUFDMEIsR0FBRyxDQUFDRCxjQUFjLENBQUMsRUFBRTtVQUMvQ3pCLHFCQUFxQixDQUFDMkIsR0FBRyxDQUFDRixjQUFjLENBQUM7VUFDekMsTUFBTUcsc0JBQXNCLEdBQUdDLGdDQUFnQyxDQUFDSixjQUFjLEVBQUUxQixnQkFBZ0IsQ0FBQztVQUNqRyxJQUFJNkIsc0JBQXNCLEVBQUU7WUFDM0JBLHNCQUFzQixDQUFDRSxhQUFhLEdBQUdGLHNCQUFzQixDQUFDRSxhQUFhLENBQUNkLE1BQU0sQ0FDaEZlLFlBQVksSUFBSyxDQUFDekIsbUJBQW1CLENBQUNvQixHQUFHLENBQUNLLFlBQVksQ0FBQyxDQUN4RDtZQUNELE9BQU9ILHNCQUFzQixDQUFDRSxhQUFhO1VBQzVDO1FBQ0Q7UUFDQSxPQUFPLEVBQUU7TUFDVixDQUFDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FDREUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNUO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLGlCQUFpQixHQUFHLFVBQVVDLFVBQXNCLEVBQUVDLFlBQW9CLEVBQVU7SUFDekYsTUFBTUMsS0FBSyxHQUFHRCxZQUFZLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDckMsSUFBSUMsV0FBVztJQUNmLElBQUlyQixHQUFHLEdBQUcsRUFBRTtJQUNaLE9BQU9tQixLQUFLLENBQUM3QyxNQUFNLEVBQUU7TUFDcEIsSUFBSWdELElBQUksR0FBR0gsS0FBSyxDQUFDSSxLQUFLLEVBQVk7TUFDbENGLFdBQVcsR0FBR0EsV0FBVyxHQUFJLEdBQUVBLFdBQVksSUFBR0MsSUFBSyxFQUFDLEdBQUdBLElBQUk7TUFDM0QsTUFBTUUsUUFBdUMsR0FBR1AsVUFBVSxDQUFDUSxXQUFXLENBQUNKLFdBQVcsQ0FBQztNQUNuRixJQUFJSyw0QkFBNEIsQ0FBQ0YsUUFBUSxDQUFDLEVBQUU7UUFDM0NGLElBQUksSUFBSSxHQUFHO01BQ1o7TUFDQXRCLEdBQUcsR0FBR0EsR0FBRyxHQUFJLEdBQUVBLEdBQUksSUFBR3NCLElBQUssRUFBQyxHQUFHQSxJQUFJO0lBQ3BDO0lBQ0EsT0FBT3RCLEdBQUc7RUFDWCxDQUFDO0VBRUQsTUFBTTJCLDJCQUEyQixHQUFHLFVBQ25DVixVQUFzQixFQUN0Qk8sUUFBa0IsRUFDbEJJLGdCQUF3QixFQUN4QkMsYUFBc0IsRUFDdEIvQyxnQkFBeUQsRUFDL0I7SUFBQTtJQUMxQjtJQUNBLElBQUkwQyxRQUFRLElBQUlBLFFBQVEsQ0FBQ00sVUFBVSxLQUFLQyxTQUFTLEtBQUtGLGFBQWEsSUFBSSwwQkFBQUwsUUFBUSxDQUFDeEQsV0FBVyxvRkFBcEIsc0JBQXNCd0IsRUFBRSxxRkFBeEIsdUJBQTBCd0MsTUFBTSwyREFBaEMsdUJBQWtDQyxPQUFPLEVBQUUsTUFBSyxJQUFJLENBQUMsRUFBRTtNQUFBO01BQzdILE1BQU0xQyxnQkFBZ0IsR0FBR1QsZ0JBQWdCLENBQUNvRCx1QkFBdUIsQ0FBQ1YsUUFBUSxDQUFDO1FBQzFFVyxXQUF3QixHQUFHO1VBQzFCbkMsR0FBRyxFQUFFb0MsU0FBUyxDQUFDQyw0QkFBNEIsQ0FBQ1QsZ0JBQWdCLENBQUM7VUFDN0RwQixjQUFjLEVBQUUxQixnQkFBZ0IsQ0FBQ3dELHlCQUF5QixDQUFDVixnQkFBZ0IsQ0FBQztVQUM1RVcsYUFBYSxFQUFFdkIsaUJBQWlCLENBQUNDLFVBQVUsRUFBRVcsZ0JBQWdCLENBQUM7VUFDOURZLFlBQVksRUFBRSwyQkFBQWhCLFFBQVEsQ0FBQ3hELFdBQVcscUZBQXBCLHVCQUFzQndCLEVBQUUscUZBQXhCLHVCQUEwQmlELFlBQVksMkRBQXRDLHVCQUF3Q1IsT0FBTyxFQUFFLE1BQUssSUFBSSxHQUFHLFFBQVEsR0FBRyxZQUFZO1VBQ2xHUyxLQUFLLEVBQUUsMkJBQUFsQixRQUFRLENBQUN4RCxXQUFXLENBQUNDLE1BQU0scUZBQTNCLHVCQUE2QkgsS0FBSywyREFBbEMsdUJBQW9DQyxRQUFRLEVBQUUsS0FBSXlELFFBQVEsQ0FBQ21CLElBQUk7VUFDdEVoRixLQUFLLEVBQUU0QixnQkFBZ0IsQ0FBQ29ELElBQUk7VUFDNUI5RSxVQUFVLEVBQUUsQ0FBQTBCLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGdEQUFoQkEsZ0JBQWdCLENBQUV2QixXQUFXLG9GQUE3QixzQkFBK0JDLE1BQU0scUZBQXJDLHVCQUF1Q0gsS0FBSywyREFBNUMsdUJBQThDQyxRQUFRLEVBQUUsS0FBSXdCLGdCQUFnQixDQUFDb0Q7UUFDMUYsQ0FBQztNQUNGQyxnQ0FBZ0MsQ0FBQ1QsV0FBVyxDQUFDO01BQzdDLE9BQU9BLFdBQVc7SUFDbkI7SUFDQSxPQUFPSixTQUFTO0VBQ2pCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTWEsZ0NBQWdDLEdBQUcsVUFBVVQsV0FBd0IsRUFBUTtJQUNsRixJQUNDQSxXQUFXLENBQUNuQyxHQUFHLEtBQUssMkNBQTJDLElBQy9EbUMsV0FBVyxDQUFDbkMsR0FBRyxLQUFLLDZDQUE2QyxFQUNoRTtNQUNELE1BQU02Qyw0QkFBNEIsR0FBRyxDQUNwQ0MsNEJBQTRCLENBQUNDLEVBQUUsRUFDL0JELDRCQUE0QixDQUFDRSxRQUFRLEVBQ3JDRiw0QkFBNEIsQ0FBQ0csUUFBUSxFQUNyQ0gsNEJBQTRCLENBQUNJLFNBQVMsRUFDdENKLDRCQUE0QixDQUFDSyxXQUFXLEVBQ3hDTCw0QkFBNEIsQ0FBQ00sUUFBUSxDQUNyQztNQUNEakIsV0FBVyxDQUFDa0IsUUFBUSxHQUFHO1FBQ3RCQyxxQkFBcUIsRUFBRSxDQUN0QjtVQUNDNUYsSUFBSSxFQUFFLEtBQUs7VUFDWDZGLE1BQU0sRUFBRVYsNEJBQTRCLENBQUNXLElBQUksQ0FBQyxHQUFHLENBQUM7VUFDOUNDLE9BQU8sRUFBRTtRQUNWLENBQUM7TUFFSCxDQUFDO0lBQ0Y7RUFDRCxDQUFDO0VBRUQsTUFBTUMsbUJBQW1CLEdBQUcsVUFDM0J6QyxVQUFzQixFQUN0QjBDLGNBQXNCLEVBQ3RCQyxVQUF1QyxFQUN2Qy9CLGFBQXNCLEVBQ3RCL0MsZ0JBQXlELEVBQzNCO0lBQzlCLE1BQU0rRSxpQkFBOEMsR0FBRyxDQUFDLENBQUM7SUFDekQsSUFBSUQsVUFBVSxFQUFFO01BQ2ZBLFVBQVUsQ0FBQ3RHLE9BQU8sQ0FBRWtFLFFBQWtCLElBQUs7UUFDMUMsTUFBTU4sWUFBb0IsR0FBR00sUUFBUSxDQUFDbUIsSUFBSTtRQUMxQyxNQUFNbUIsUUFBZ0IsR0FBRyxDQUFDSCxjQUFjLEdBQUksR0FBRUEsY0FBZSxHQUFFLEdBQUcsRUFBRSxJQUFJekMsWUFBWTtRQUNwRixNQUFNdkIsY0FBYyxHQUFHZ0MsMkJBQTJCLENBQUNWLFVBQVUsRUFBRU8sUUFBUSxFQUFFc0MsUUFBUSxFQUFFakMsYUFBYSxFQUFFL0MsZ0JBQWdCLENBQUM7UUFDbkgsSUFBSWEsY0FBYyxFQUFFO1VBQ25Ca0UsaUJBQWlCLENBQUNDLFFBQVEsQ0FBQyxHQUFHbkUsY0FBYztRQUM3QztNQUNELENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBT2tFLGlCQUFpQjtFQUN6QixDQUFDO0VBRUQsTUFBTUUseUJBQXlCLEdBQUcsVUFDakM5QyxVQUFzQixFQUN0QitDLGFBQXdDLEVBQ3hDbkMsYUFBc0IsRUFDdEIvQyxnQkFBeUQsRUFDM0I7SUFDOUIsSUFBSW1GLGVBQTRDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELElBQUlELGFBQWEsRUFBRTtNQUNsQkEsYUFBYSxDQUFDMUcsT0FBTyxDQUFFNEQsWUFBb0IsSUFBSztRQUMvQyxJQUFJZ0Qsb0JBQWlELEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU1DLFlBQVksR0FBR0Msb0JBQW9CLENBQ3hDdEYsZ0JBQWdCLENBQUNRLHNCQUFzQixFQUFFLEVBQ3pDNEIsWUFBWSxDQUNaO1FBQ0QsTUFBTU0sUUFBUSxHQUFHMkMsWUFBWSxDQUFDRSxZQUFZO1FBQzFDLElBQ0M3QyxRQUFRLEtBQUtPLFNBQVMsSUFDckIsQ0FBQ0YsYUFBYSxJQUNkc0MsWUFBWSxDQUFDRyxvQkFBb0IsQ0FBQ0MsSUFBSSxDQUNwQ0Msa0JBQWtCO1VBQUE7VUFBQSxPQUFLLDBCQUFBQSxrQkFBa0IsQ0FBQ3hHLFdBQVcsb0ZBQTlCLHNCQUFnQ3dCLEVBQUUscUZBQWxDLHVCQUFvQ3dDLE1BQU0sMkRBQTFDLHVCQUE0Q0MsT0FBTyxFQUFFLE1BQUssSUFBSTtRQUFBLEVBQ3JGLEVBQ0Y7VUFDRDtRQUNEO1FBQ0EsSUFBSXdDLG9CQUFvQixDQUFDakQsUUFBUSxDQUFDLEVBQUU7VUFDbkM7VUFDQTBDLG9CQUFvQixHQUFHUixtQkFBbUIsQ0FDekN6QyxVQUFVLEVBQ1ZDLFlBQVksRUFDWk0sUUFBUSxDQUFDTSxVQUFVLENBQUM0QyxnQkFBZ0IsRUFDcEM3QyxhQUFhLEVBQ2IvQyxnQkFBZ0IsQ0FDaEI7UUFDRixDQUFDLE1BQU0sSUFBSTZGLGFBQWEsQ0FBQ25ELFFBQVEsQ0FBQ00sVUFBVSxDQUFDLEVBQUU7VUFDOUM7VUFDQW9DLG9CQUFvQixHQUFHUixtQkFBbUIsQ0FDekN6QyxVQUFVLEVBQ1ZDLFlBQVksRUFDWk0sUUFBUSxDQUFDTSxVQUFVLENBQUM4QixVQUFVLEVBQzlCL0IsYUFBYSxFQUNiL0MsZ0JBQWdCLENBQ2hCO1FBQ0YsQ0FBQyxNQUFNO1VBQ05vRixvQkFBb0IsR0FBR1IsbUJBQW1CLENBQ3pDekMsVUFBVSxFQUNWMkQsdUJBQXVCLENBQUNULFlBQVksRUFBRSxJQUFJLENBQUMsRUFDM0MsQ0FBQzNDLFFBQVEsQ0FBQyxFQUNWSyxhQUFhLEVBQ2IvQyxnQkFBZ0IsQ0FDaEI7UUFDRjtRQUVBbUYsZUFBZSxHQUFHO1VBQ2pCLEdBQUdBLGVBQWU7VUFDbEIsR0FBR0M7UUFDSixDQUFDO01BQ0YsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPRCxlQUFlO0VBQ3ZCLENBQUM7RUFFRCxNQUFNWSxlQUFlLEdBQUcsVUFDdkJ6RixZQUF5QyxFQUN6QzhCLFlBQW9CLEVBQ3BCcEMsZ0JBQXlELEVBQ3pEbUMsVUFBc0IsRUFDSTtJQUMxQixJQUFJa0IsV0FBb0MsR0FBRy9DLFlBQVksQ0FBQzhCLFlBQVksQ0FBQztJQUNyRSxJQUFJaUIsV0FBVyxFQUFFO01BQ2hCLE9BQU8vQyxZQUFZLENBQUM4QixZQUFZLENBQUM7SUFDbEMsQ0FBQyxNQUFNO01BQ05pQixXQUFXLEdBQUdSLDJCQUEyQixDQUFDVixVQUFVLEVBQUVBLFVBQVUsQ0FBQ1EsV0FBVyxDQUFDUCxZQUFZLENBQUMsRUFBRUEsWUFBWSxFQUFFLElBQUksRUFBRXBDLGdCQUFnQixDQUFDO0lBQ2xJO0lBQ0EsSUFBSSxDQUFDcUQsV0FBVyxFQUFFO01BQUE7TUFDakIsMEJBQUFyRCxnQkFBZ0IsQ0FBQ2dHLGNBQWMsRUFBRSwyREFBakMsdUJBQW1DQyxRQUFRLENBQUNDLGFBQWEsQ0FBQ0MsVUFBVSxFQUFFQyxhQUFhLENBQUNDLElBQUksRUFBRUMsU0FBUyxDQUFDQyxzQkFBc0IsQ0FBQztJQUM1SDtJQUNBO0lBQ0EsSUFBSWxELFdBQVcsRUFBRTtNQUFBO01BQ2hCQSxXQUFXLENBQUNLLFlBQVksR0FBR0wsV0FBVyxDQUFDSyxZQUFZLEtBQUssUUFBUSxHQUFHLFFBQVEsR0FBRyxTQUFTO01BQ3ZGTCxXQUFXLENBQUNtRCxXQUFXLEdBQUcsQ0FBQywyQkFBQ3JFLFVBQVUsQ0FBQ2pELFdBQVcsNEVBQXRCLHNCQUF3QkMsTUFBTSxtREFBOUIsdUJBQWdDc0gsYUFBYTtJQUMxRTtJQUNBLE9BQU9wRCxXQUFXO0VBQ25CLENBQUM7RUFFRCxNQUFNcUQsdUJBQXVCLEdBQUcsVUFDL0JDLGNBQWtDLEVBQ2xDeEUsVUFBc0IsRUFDdEJuQyxnQkFBeUQsRUFDekQ0Ryx3QkFBcUMsRUFDckNDLHdCQUF3QyxFQUN4QjtJQUNoQixNQUFNMUIsZUFBOEIsR0FBRyxFQUFFO0lBQ3pDLE1BQU0yQixpQkFBMEMsR0FBRyxDQUFDLENBQUM7SUFDckQsTUFBTWhDLFVBQVUsR0FBRzNDLFVBQVUsQ0FBQ3lELGdCQUFnQjtJQUM5QztJQUNBaUIsd0JBQXdCLGFBQXhCQSx3QkFBd0IsdUJBQXhCQSx3QkFBd0IsQ0FBRXJJLE9BQU8sQ0FBRXVJLGNBQWMsSUFBSztNQUNyREQsaUJBQWlCLENBQUNDLGNBQWMsQ0FBQ2pHLEtBQUssQ0FBQyxHQUFHLElBQUk7SUFDL0MsQ0FBQyxDQUFDO0lBQ0YsSUFBSTZGLGNBQWMsSUFBSUEsY0FBYyxDQUFDbkgsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUNoRG1ILGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFbkksT0FBTyxDQUFFd0ksWUFBOEIsSUFBSztRQUMzRCxNQUFNaEYsWUFBWSxHQUFHZ0YsWUFBWSxDQUFDQyxZQUFZO1FBQzlDLE1BQU1DLGFBQWEsR0FBR2xGLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFbEIsS0FBSztRQUN6QyxNQUFNcUcsc0JBQStDLEdBQUcsQ0FBQyxDQUFDO1FBQzFETix3QkFBd0IsYUFBeEJBLHdCQUF3Qix1QkFBeEJBLHdCQUF3QixDQUFFckksT0FBTyxDQUFFdUksY0FBYyxJQUFLO1VBQ3JESSxzQkFBc0IsQ0FBQ0osY0FBYyxDQUFDakcsS0FBSyxDQUFDLEdBQUcsSUFBSTtRQUNwRCxDQUFDLENBQUM7UUFDRixJQUFJb0csYUFBYSxJQUFJLENBQUNOLHdCQUF3QixDQUFDakYsR0FBRyxDQUFDdUYsYUFBYSxDQUFDLEVBQUU7VUFDbEUsSUFBSSxFQUFFQSxhQUFhLElBQUlDLHNCQUFzQixDQUFDLEVBQUU7WUFDL0MsTUFBTUMsV0FBb0MsR0FBR0MsY0FBYyxDQUFDSCxhQUFhLEVBQUVsSCxnQkFBZ0IsRUFBRW1DLFVBQVUsQ0FBQztZQUN4RyxJQUFJaUYsV0FBVyxFQUFFO2NBQ2hCakMsZUFBZSxDQUFDbUMsSUFBSSxDQUFDRixXQUFXLENBQUM7WUFDbEM7VUFDRDtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUl0QyxVQUFVLEVBQUU7TUFDdEJBLFVBQVUsQ0FBQ3RHLE9BQU8sQ0FBRWtFLFFBQWtCLElBQUs7UUFBQTtRQUMxQyxNQUFNNkUsa0JBQWtCLDZCQUFHN0UsUUFBUSxDQUFDeEQsV0FBVyxzRkFBcEIsdUJBQXNCQyxNQUFNLDREQUE1Qix3QkFBOEJxSSxrQkFBa0I7UUFDM0UsTUFBTXBGLFlBQVksR0FBR00sUUFBUSxDQUFDbUIsSUFBSTtRQUNsQyxJQUFJLEVBQUV6QixZQUFZLElBQUl3RSx3QkFBd0IsQ0FBQyxFQUFFO1VBQ2hELElBQUlXLGtCQUFrQixJQUFJLEVBQUVuRixZQUFZLElBQUkwRSxpQkFBaUIsQ0FBQyxFQUFFO1lBQy9ELE1BQU1NLFdBQW9DLEdBQUdDLGNBQWMsQ0FBQ2pGLFlBQVksRUFBRXBDLGdCQUFnQixFQUFFbUMsVUFBVSxDQUFDO1lBQ3ZHLElBQUlpRixXQUFXLEVBQUU7Y0FDaEJqQyxlQUFlLENBQUNtQyxJQUFJLENBQUNGLFdBQVcsQ0FBQztZQUNsQztVQUNEO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9qQyxlQUFlO0VBQ3ZCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3NDLG1CQUFtQixDQUFDekgsZ0JBQXlELEVBQWlCO0lBQUE7SUFDdEcsTUFBTTBILG1CQUFtQixHQUFHMUgsZ0JBQWdCLENBQUNRLHNCQUFzQixFQUFFO0lBQ3JFLE1BQU1tSCxtQkFBbUIsR0FBR0QsbUJBQW1CLENBQUNFLGlCQUFpQixDQUFDekYsVUFBVTtJQUM1RSxNQUFNMEYsZUFBZSxHQUFHLENBQUMsMkJBQUNGLG1CQUFtQixDQUFDekksV0FBVyw0RUFBL0Isc0JBQWlDQyxNQUFNLG1EQUF2Qyx1QkFBeUNzSCxhQUFhLEtBQUksQ0FBQ2lCLG1CQUFtQixDQUFDSSxlQUFlO0lBQ3hILE1BQU1DLHlCQUF5QixHQUM5QkYsZUFBZSxJQUFJN0gsZ0JBQWdCLENBQUNnSSxzQkFBc0IsQ0FBYSxJQUFHTixtQkFBbUIsQ0FBQ0UsaUJBQWlCLENBQUMvRCxJQUFLLEVBQUMsQ0FBQztJQUV4SCxPQUNDa0UseUJBQXlCLEdBQ3RCSixtQkFBbUIsQ0FBQy9CLGdCQUFnQixDQUFDaEYsR0FBRyxDQUFDLFVBQVU4QixRQUFRLEVBQUU7TUFDN0QsT0FBT3FELGVBQWUsQ0FDckIsQ0FBQyxDQUFDLEVBQ0ZyRCxRQUFRLENBQUNtQixJQUFJLEVBQ2JrRSx5QkFBeUIsRUFDekJKLG1CQUFtQixDQUNuQjtJQUNELENBQUMsQ0FBQyxHQUNGLEVBQUU7RUFFUDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTU0sMkJBQTJCLEdBQUcsVUFDMUMzSSxnQkFBc0MsRUFDdEM0SSxNQUE0QixFQUM1QmxJLGdCQUF5RCxFQUMvQztJQUNWO0lBQ0EsTUFBTW1JLGdCQUFnQixHQUFHRCxNQUFNLENBQUMxSSxNQUFNLEtBQUssQ0FBQyxJQUFJMEksTUFBTSxDQUFDekksS0FBSyxDQUFFMkksS0FBSyxJQUFLLENBQUNBLEtBQUssQ0FBQ0MsY0FBYyxDQUFDQyxZQUFZLENBQUM7O0lBRTNHO0lBQ0E7SUFDQSxNQUFNQyxnQkFBZ0IsR0FDckJqSixnQkFBZ0IsQ0FBQ0UsTUFBTSxLQUFLLENBQUMsSUFDN0JGLGdCQUFnQixDQUFDRyxLQUFLLENBQUUrSSxLQUFLLElBQUssQ0FBQ0EsS0FBSyxDQUFDN0ksZUFBZSxJQUFJNkksS0FBSyxDQUFDbkgsT0FBTyxDQUFDb0gsSUFBSSxLQUFLLFdBQVcsS0FBSyxDQUFDRCxLQUFLLENBQUNFLGlCQUFpQixDQUFDO0lBRTdILE1BQU1uSixXQUFXLEdBQUdTLGdCQUFnQixDQUFDMkksY0FBYyxFQUFFO0lBQ3JELElBQUlwSixXQUFXLElBQUk0SSxnQkFBZ0IsSUFBSUksZ0JBQWdCLEVBQUU7TUFDeEQsT0FBTyxJQUFJO0lBQ1osQ0FBQyxNQUFNO01BQ04sT0FBTyxLQUFLO0lBQ2I7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQTtFQVFPLE1BQU1LLHVCQUF1QixHQUFHLFVBQ3RDekcsVUFBc0IsRUFDdEJuQyxnQkFBeUQsRUFDekQwQixjQUF1QixFQUNvQjtJQUFBO0lBQzNDLE1BQU1tSCxlQUFlLEdBQUc3SSxnQkFBZ0IsQ0FBQ0ksa0JBQWtCLEVBQUU7SUFFN0QsTUFBTTBJLG1CQUFtQixHQUFHRCxlQUFlLENBQUNGLGNBQWMsRUFBRSxLQUFLRSxlQUFlLENBQUNFLFlBQVksRUFBRSxHQUFJLElBQUdGLGVBQWUsQ0FBQ0UsWUFBWSxFQUFHLEVBQUMsR0FBRzlGLFNBQVMsQ0FBQztJQUNuSixNQUFNK0YsdUJBQXVCLEdBQUdDLDBCQUEwQixDQUFDakosZ0JBQWdCLEVBQUU4SSxtQkFBbUIsRUFBRXBILGNBQWMsQ0FBQztJQUNqSCxJQUFJd0gsUUFBcUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsSUFBSUosbUJBQW1CLEVBQUU7TUFDeEJJLFFBQVEsR0FBR0wsZUFBZSxDQUFDeEksc0JBQXNCLENBQUMySSx1QkFBdUIsQ0FBQztJQUMzRTtJQUNBLE1BQU1HLG1CQUFxRSxHQUFHLGNBQUFELFFBQVEsOENBQVIsVUFBVTVJLFlBQVksS0FBSSxDQUFDLENBQUM7SUFDMUcsTUFBTTZFLGVBQTRDLEdBQUdGLHlCQUF5QixDQUM3RTlDLFVBQVUsRUFDVnBCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbUksbUJBQW1CLENBQUMsQ0FBQ3ZJLEdBQUcsQ0FBRU0sR0FBRyxJQUFLaUksbUJBQW1CLENBQUNqSSxHQUFHLENBQUMsQ0FBQ3dCLFFBQVEsSUFBSVksU0FBUyxDQUFDOEYsNEJBQTRCLENBQUNsSSxHQUFHLENBQUMsQ0FBQyxFQUMvSCxJQUFJLEVBQ0psQixnQkFBZ0IsQ0FDaEI7SUFDRCxNQUFNTSxZQUFzRCxHQUFHLENBQUMsQ0FBQztJQUVqRSxLQUFLLE1BQU0rSSxJQUFJLElBQUlGLG1CQUFtQixFQUFFO01BQ3ZDLE1BQU05RixXQUFXLEdBQUc4RixtQkFBbUIsQ0FBQ0UsSUFBSSxDQUFDO01BQzdDLE1BQU1ySCxZQUFZLEdBQUdxQixXQUFXLENBQUNYLFFBQVEsSUFBSVksU0FBUyxDQUFDOEYsNEJBQTRCLENBQUNDLElBQUksQ0FBQztNQUN6RixNQUFNeEksY0FBYyxHQUFHc0UsZUFBZSxDQUFDbkQsWUFBWSxDQUFDO01BQ3BELE1BQU15RyxJQUFJLEdBQUdwRixXQUFXLENBQUNvRixJQUFJLEtBQUssTUFBTSxHQUFHeEssZUFBZSxDQUFDcUwsSUFBSSxHQUFHckwsZUFBZSxDQUFDc0wsT0FBTztNQUN6RixNQUFNQyxZQUFZLEdBQ2pCbkcsV0FBVyxJQUFJQSxXQUFXLGFBQVhBLFdBQVcsZUFBWEEsV0FBVyxDQUFFbUcsWUFBWSxHQUNyQ0MsZ0JBQWdCLENBQUN0SCxVQUFVLEVBQUVuQyxnQkFBZ0IsRUFBRXFKLElBQUksRUFBRUYsbUJBQW1CLENBQUMsR0FDekVsRyxTQUFTO01BQ2IsSUFBSUksV0FBVyxDQUFDbEMsUUFBUSxJQUFJa0MsV0FBVyxDQUFDb0YsSUFBSSxLQUFLeEssZUFBZSxDQUFDcUwsSUFBSSxFQUFFO1FBQ3RFLElBQUlqRyxXQUFXLENBQUNrQixRQUFRLEVBQUU7VUFDekJsQixXQUFXLENBQUNrQixRQUFRLENBQUNtRixjQUFjLEdBQUcsSUFBSTtRQUMzQyxDQUFDLE1BQU07VUFDTnJHLFdBQVcsQ0FBQ2tCLFFBQVEsR0FBRztZQUN0Qm1GLGNBQWMsRUFBRTtVQUNqQixDQUFDO1FBQ0Y7TUFDRDtNQUNBcEosWUFBWSxDQUFDK0ksSUFBSSxDQUFDLEdBQUc7UUFDcEJuSSxHQUFHLEVBQUVtSSxJQUFJO1FBQ1RaLElBQUksRUFBRUEsSUFBSTtRQUNWa0IsUUFBUSxFQUFFLENBQUF0RyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXNHLFFBQVEsS0FBSU4sSUFBSTtRQUN2QzNILGNBQWMsRUFBRWIsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVhLGNBQWM7UUFDOUMrQixhQUFhLEVBQUVKLFdBQVcsQ0FBQ1gsUUFBUSxHQUNoQ1ksU0FBUyxDQUFDOEYsNEJBQTRCLENBQUNDLElBQUksQ0FBQyxHQUM1QyxDQUFBeEksY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUU0QyxhQUFhLEtBQUl6QixZQUFZO1FBQ2hEYixRQUFRLEVBQUVrQyxXQUFXLENBQUNsQyxRQUFRO1FBQzlCeUMsS0FBSyxFQUFFNUQsZ0JBQWdCLENBQUM0SixzQkFBc0IsQ0FBQ3ZHLFdBQVcsQ0FBQ08sS0FBSyxDQUFDO1FBQ2pFaUcsUUFBUSxFQUFFeEcsV0FBVyxDQUFDd0csUUFBUSxJQUFJO1VBQUVDLFNBQVMsRUFBRUMsU0FBUyxDQUFDQztRQUFNLENBQUM7UUFDaEV0RyxZQUFZLEVBQUVMLFdBQVcsQ0FBQ0ssWUFBWSxJQUFJLFNBQVM7UUFDbkRhLFFBQVEsRUFBRWxCLFdBQVcsQ0FBQ2tCLFFBQVE7UUFDOUJpRixZQUFZLEVBQUVBLFlBQVk7UUFDMUJTLFFBQVEsRUFBRTVHLFdBQVcsQ0FBQzRHO01BQ3ZCLENBQUM7SUFDRjtJQUNBLE9BQU8zSixZQUFZO0VBQ3BCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBO0VBUUEsTUFBTTJJLDBCQUEwQixHQUFHLFVBQ2xDakosZ0JBQXlELEVBQ3pEOEksbUJBQTRCLEVBQzVCcEgsY0FBdUIsRUFDRjtJQUNyQixJQUFJd0ksVUFBVTtJQUNkLE1BQU1DLG9CQUFvQixHQUFHbkssZ0JBQWdCLENBQUMySSxjQUFjLEVBQUU7SUFDOUQsTUFBTXlCLFFBQVEsR0FBSSxHQUFFRCxvQkFBcUIsSUFBR3pJLGNBQWUsRUFBQztJQUM1RCxJQUFJb0gsbUJBQW1CLElBQUlzQixRQUFRLGFBQVJBLFFBQVEsZUFBUkEsUUFBUSxDQUFFQyxVQUFVLENBQUN2QixtQkFBbUIsQ0FBQyxJQUFJcEgsY0FBYyxFQUFFO01BQ3ZGd0ksVUFBVSxHQUFHRSxRQUFRLENBQUNFLE9BQU8sQ0FBRSxHQUFFeEIsbUJBQW9CLEdBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0Q7SUFDQSxPQUFPb0IsVUFBVSxHQUFHQSxVQUFVLEdBQUdqSCxTQUFTO0VBQzNDLENBQUM7RUFFTSxNQUFNb0UsY0FBYyxHQUFHLFVBQzdCakYsWUFBb0IsRUFDcEJwQyxnQkFBeUQsRUFDekRtQyxVQUFzQixFQUNJO0lBQzFCLE9BQU80RCxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUzRCxZQUFZLEVBQUVwQyxnQkFBZ0IsRUFBRW1DLFVBQVUsQ0FBQztFQUN2RSxDQUFDO0VBQUM7RUFFSyxNQUFNb0kscUJBQXFCLEdBQUcsVUFDcENDLDZCQUFpRSxFQUNqRUMsWUFBOEQsRUFDbkQ7SUFDWCxJQUFJQyxNQUFnQixHQUFHLEVBQUU7SUFDekIsSUFBSUYsNkJBQTZCLElBQUlBLDZCQUE2QixDQUFDQyxZQUFZLENBQUMsRUFBRTtNQUNqRkMsTUFBTSxHQUFHRiw2QkFBNkIsQ0FBQ0MsWUFBWSxDQUFDLENBQUM3SixHQUFHLENBQUMsVUFBVStKLFNBQVMsRUFBRTtRQUM3RSxPQUFPQSxTQUFTLENBQUM3SixLQUFLO01BQ3ZCLENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBTzRKLE1BQU07RUFDZCxDQUFDO0VBQUM7RUFDSyxNQUFNRSwwQkFBMEIsR0FBRyxVQUN6Q0osNkJBQWlFLEVBQ3hCO0lBQ3pDLE1BQU1LLG1CQUEyRCxHQUFHLENBQUMsQ0FBQztJQUN0RSxJQUFJTCw2QkFBNkIsSUFBSUEsNkJBQTZCLENBQUNNLDRCQUE0QixFQUFFO01BQ2hHTiw2QkFBNkIsQ0FBQ00sNEJBQTRCLENBQUN0TSxPQUFPLENBQUMsVUFBVW1NLFNBQTBDLEVBQUU7UUFBQTtRQUN4SDtRQUNBLElBQUksdUJBQUFBLFNBQVMsQ0FBQ0ksUUFBUSxnREFBbEIsb0JBQW9CakssS0FBSyxJQUFJNkosU0FBUyxDQUFDSyxrQkFBa0IsRUFBRTtVQUFBO1VBQzlELElBQUlILG1CQUFtQix5QkFBQ0YsU0FBUyxDQUFDSSxRQUFRLHlEQUFsQixxQkFBb0JqSyxLQUFLLENBQUMsRUFBRTtZQUFBO1lBQ25EK0osbUJBQW1CLHlCQUFDRixTQUFTLENBQUNJLFFBQVEseURBQWxCLHFCQUFvQmpLLEtBQUssQ0FBQyxDQUFDd0csSUFBSSxDQUFDcUQsU0FBUyxDQUFDSyxrQkFBa0IsQ0FBQy9MLFFBQVEsRUFBRSxDQUFDO1VBQzdGLENBQUMsTUFBTTtZQUFBO1lBQ040TCxtQkFBbUIseUJBQUNGLFNBQVMsQ0FBQ0ksUUFBUSx5REFBbEIscUJBQW9CakssS0FBSyxDQUFDLEdBQUcsQ0FBQzZKLFNBQVMsQ0FBQ0ssa0JBQWtCLENBQUMvTCxRQUFRLEVBQUUsQ0FBQztVQUMzRjtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPNEwsbUJBQW1CO0VBQzNCLENBQUM7RUFBQztFQUVGLE1BQU1JLDJCQUEyQixHQUFHLFlBQTBCO0lBQzdELE9BQU87TUFDTnBILElBQUksRUFBRSxTQUFTO01BQ2ZqRixJQUFJLEVBQUUsU0FBUztNQUNmc00sUUFBUSxFQUFFL00sZUFBZTtNQUN6QmdOLGFBQWEsRUFBRTtJQUNoQixDQUFDO0VBQ0YsQ0FBQztFQUVELE1BQU1DLDhCQUE4QixHQUFHLFlBQTBCO0lBQ2hFLE9BQU87TUFDTnZILElBQUksRUFBRSxZQUFZO01BQ2xCakYsSUFBSSxFQUFFLFlBQVk7TUFDbEJHLFVBQVUsRUFBRSxFQUFFO01BQ2RGLEtBQUssRUFBRSxFQUFFO01BQ1RxTSxRQUFRLEVBQUUvTSxlQUFlO01BQ3pCa04sWUFBWSxFQUFFO0lBQ2YsQ0FBQztFQUNGLENBQUM7RUFFRCxNQUFNQyxxQkFBcUIsR0FBRyxVQUFVdEwsZ0JBQXlELEVBQWtDO0lBQUE7SUFDbEksTUFBTXVMLFNBQVMsR0FBR3ZMLGdCQUFnQixDQUFDK0ksWUFBWSxFQUFFO0lBQ2pELE9BQU95QyxXQUFXLENBQUNELFNBQVMsQ0FBQyw0QkFBR0EsU0FBUyxDQUFDck0sV0FBVyxDQUFDdU0sWUFBWSwwREFBbEMsc0JBQW9DQyxrQkFBa0IsR0FBR3pJLFNBQVM7RUFDbkcsQ0FBQztFQUVNLE1BQU0wSSx5QkFBeUIsR0FBRyxVQUN4QzNMLGdCQUF5RCxFQUN6RDRMLGVBQXVCLEVBQ3FCO0lBQUE7SUFDNUMsTUFBTUMsdUJBQXVCLDZCQUFHN0wsZ0JBQWdCLENBQUMrSSxZQUFZLEVBQUUscUZBQS9CLHVCQUFpQzdKLFdBQVcscUZBQTVDLHVCQUE4Q3VNLFlBQVksMkRBQTFELHVCQUE0REssc0JBQXNCO0lBQ2xILE1BQU1DLHFCQUFxQixHQUFHRix1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUNHLG9CQUFvQjtJQUNyRyxPQUNDRCxxQkFBcUIsSUFDckJBLHFCQUFxQixDQUFDdEcsSUFBSSxDQUFDLFVBQVV3RyxtQkFBbUIsRUFBRTtNQUN6RCxPQUNDQSxtQkFBbUIsSUFDbkJBLG1CQUFtQixDQUFDQyxrQkFBa0IsSUFDdENELG1CQUFtQixDQUFDQyxrQkFBa0IsQ0FBQ3BMLEtBQUssS0FBSzhLLGVBQWU7SUFFbEUsQ0FBQyxDQUFDO0VBRUosQ0FBQztFQUFDO0VBZ0NGLE1BQU1PLHVCQUF1QixHQUFHLFVBQVVDLGdCQUE2QixFQUFnQjtJQUFBO0lBQ3RGLE9BQU87TUFDTmxMLEdBQUcsRUFBRWtMLGdCQUFnQixDQUFDbEwsR0FBRztNQUN6QlEsY0FBYyxFQUFFMEssZ0JBQWdCLENBQUMxSyxjQUFjO01BQy9DK0IsYUFBYSxFQUFFMkksZ0JBQWdCLENBQUMzSSxhQUFhO01BQzdDSSxJQUFJLEVBQUV1SSxnQkFBZ0IsQ0FBQzNJLGFBQWE7TUFDcENHLEtBQUssRUFBRXdJLGdCQUFnQixDQUFDeEksS0FBSztNQUM3QnlILFlBQVksRUFBRWUsZ0JBQWdCLENBQUMxSSxZQUFZLEtBQUssUUFBUTtNQUN4RDJJLE9BQU8sRUFBRSxPQUFPO01BQ2hCN0YsV0FBVyxFQUFFNEYsZ0JBQWdCLENBQUM1RixXQUFXO01BQ3pDOEYsYUFBYSxFQUFFRixnQkFBZ0IsQ0FBQ0UsYUFBYTtNQUM3QzVJLFlBQVksRUFBRTBJLGdCQUFnQixDQUFDMUksWUFBWTtNQUMzQ21HLFFBQVEsRUFBRXVDLGdCQUFnQixDQUFDdkMsUUFBUTtNQUNuQ3BCLElBQUksRUFBRTJELGdCQUFnQixDQUFDM0QsSUFBSTtNQUMzQnRILFFBQVEsRUFBRWlMLGdCQUFnQixDQUFDakwsUUFBUTtNQUNuQ29MLElBQUksRUFBRUgsZ0JBQWdCLENBQUNHLElBQUk7TUFDM0J0QyxRQUFRLEVBQUVtQyxnQkFBZ0IsQ0FBQ25DLFFBQVE7TUFDbkNQLGNBQWMsMkJBQUUwQyxnQkFBZ0IsQ0FBQzdILFFBQVEsMERBQXpCLHNCQUEyQm1GO0lBQzVDLENBQUM7RUFDRixDQUFDO0VBRUQsTUFBTThDLHVDQUF1QyxHQUFHLFVBQy9DbE0sWUFBbUMsRUFDbkNILG9CQUE4RCxFQUN2RDtJQUNQRyxZQUFZLENBQUM5QixPQUFPLENBQUU2RSxXQUFXLElBQUs7TUFDckMsSUFBSWxELG9CQUFvQixDQUFDc00sY0FBYyxDQUFDcEosV0FBVyxDQUFDbkMsR0FBRyxDQUFDLElBQUksQ0FBQ2Ysb0JBQW9CLENBQUNrRCxXQUFXLENBQUNuQyxHQUFHLENBQUMsQ0FBQzBDLEtBQUssRUFBRTtRQUN6R3pELG9CQUFvQixDQUFDa0QsV0FBVyxDQUFDbkMsR0FBRyxDQUFDLENBQUMwQyxLQUFLLEdBQUdQLFdBQVcsQ0FBQ08sS0FBSztNQUNoRTtJQUNELENBQUMsQ0FBQztFQUNILENBQUM7RUFFTSxNQUFNOEksNEJBQTRCLEdBQUcsVUFBVUMsWUFBc0IsRUFBVTtJQUNyRixNQUFNQywyQkFBMkIsR0FBRyxDQUNuQyxhQUFhLEVBQ2IsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLDhCQUE4QixDQUM5QjtJQUVERCxZQUFZLENBQUNFLElBQUksQ0FBQyxVQUFVQyxDQUFTLEVBQUVDLENBQVMsRUFBRTtNQUNqRCxPQUFPSCwyQkFBMkIsQ0FBQ0ksT0FBTyxDQUFDRixDQUFDLENBQUMsR0FBR0YsMkJBQTJCLENBQUNJLE9BQU8sQ0FBQ0QsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQztJQUVGLE9BQU9KLFlBQVksQ0FBQyxDQUFDLENBQUM7RUFDdkIsQ0FBQztFQUFDO0VBRUssTUFBTU0sV0FBVyxHQUFHLFVBQzFCQyxvQkFBcUQsRUFDckRDLHNCQUF5RCxFQUNoRDtJQUFBO0lBQ1QsTUFBTUMsZUFBZSxHQUFHRixvQkFBb0IsYUFBcEJBLG9CQUFvQixnREFBcEJBLG9CQUFvQixDQUFFL04sTUFBTSwwREFBNUIsc0JBQThCa08sSUFBSTtNQUN6REMseUJBQXlCLEdBQ3hCRixlQUFlLEtBQ2JGLG9CQUFvQixLQUFJQSxvQkFBb0IsYUFBcEJBLG9CQUFvQixpREFBcEJBLG9CQUFvQixDQUFFL04sTUFBTSxxRkFBNUIsdUJBQThCa08sSUFBSSxxRkFBbEMsdUJBQW9Dbk8sV0FBVyxxRkFBL0MsdUJBQWlEd0IsRUFBRSwyREFBbkQsdUJBQXFENk0sZUFBZSxLQUM1Rkosc0JBQXNCLEtBQUlBLHNCQUFzQixhQUF0QkEsc0JBQXNCLGdEQUF0QkEsc0JBQXNCLENBQUV6TSxFQUFFLDBEQUExQixzQkFBNEI2TSxlQUFlLENBQUMsQ0FBQztJQUUzRSxJQUFJRCx5QkFBeUIsRUFBRTtNQUM5QixJQUFJQSx5QkFBeUIsQ0FBQ25LLE9BQU8sRUFBRSxLQUFLLGlDQUFpQyxFQUFFO1FBQzlFLE9BQU8sYUFBYTtNQUNyQixDQUFDLE1BQU0sSUFBSW1LLHlCQUF5QixDQUFDbkssT0FBTyxFQUFFLEtBQUssaUNBQWlDLEVBQUU7UUFDckYsT0FBTyxrQkFBa0I7TUFDMUI7TUFDQSxPQUFPLGtCQUFrQixDQUFDLENBQUM7SUFDNUI7O0lBQ0EsT0FBT2lLLGVBQWUsR0FBRyxrQkFBa0IsR0FBRyxPQUFPO0VBQ3RELENBQUM7RUFBQztFQUVLLE1BQU1JLGlCQUFpQixHQUFHLFVBQ2hDeE4sZ0JBQXlELEVBQ3pEb00sZ0JBQTZCLEVBQzdCcUIsV0FBd0MsRUFDekI7SUFBQTtJQUNmLElBQUlDLGFBQWEsR0FBR3ZCLHVCQUF1QixDQUFDQyxnQkFBZ0IsQ0FBQztJQUM3RCxNQUFNdUIsZUFBZSxHQUFHdkIsZ0JBQWdCLENBQUMxSyxjQUFjO0lBRXZELElBQUksQ0FBQ2lNLGVBQWUsRUFBRTtNQUNyQixPQUFPRCxhQUFhO0lBQ3JCO0lBQ0EsTUFBTUUsb0JBQW9CLEdBQUc1TixnQkFBZ0IsQ0FBQ2dJLHNCQUFzQixDQUFXMkYsZUFBZSxDQUFDLENBQUNuTixzQkFBc0IsRUFBRSxDQUFDK0UsWUFBWTtJQUVySSxNQUFNMkgsb0JBQW9CLEdBQUdVLG9CQUFvQixhQUFwQkEsb0JBQW9CLHVCQUFwQkEsb0JBQW9CLENBQUUxTyxXQUFXO0lBQzlELE1BQU1pTyxzQkFBc0IsR0FBR25OLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGlEQUFoQkEsZ0JBQWdCLENBQUVRLHNCQUFzQixFQUFFLENBQUMrRSxZQUFZLDJEQUF2RCx1QkFBeURyRyxXQUFXO0lBRW5HLE1BQU0yTyxjQUFjLEdBQUdKLFdBQVcsQ0FBQ0ssYUFBYTtJQUNoRCxNQUFNQyxZQUFZLEdBQUdOLFdBQVcsQ0FBQ08sV0FBVztJQUM1Q04sYUFBYSxHQUFHM00sTUFBTSxDQUFDa04sTUFBTSxDQUFDUCxhQUFhLEVBQUU7TUFDNUNJLGFBQWEsRUFBRUQsY0FBYztNQUM3QkcsV0FBVyxFQUFFRCxZQUFZO01BQ3pCMUIsT0FBTyxFQUFFWSxXQUFXLENBQUNDLG9CQUFvQixFQUFFQyxzQkFBc0I7SUFDbEUsQ0FBQyxDQUFDO0lBQ0YsT0FBT08sYUFBYTtFQUNyQixDQUFDO0VBQUM7RUFFSyxNQUFNUSxZQUFZLEdBQUcsVUFBVXZELFNBQXVCLEVBQVc7SUFDdkUsSUFBSXdELGFBQWEsR0FBRyxJQUFJO0lBQ3hCO0lBQ0EsUUFBUXhELFNBQVMsQ0FBQ3lELGdCQUFnQjtNQUNqQyxLQUFLLGtCQUFrQjtNQUN2QixLQUFLLGFBQWE7TUFDbEIsS0FBSyxhQUFhO1FBQ2pCRCxhQUFhLEdBQUcsS0FBSztRQUNyQjtNQUNEO1FBQ0M7SUFBTTtJQUVSLElBQUl4RCxTQUFTLENBQUNsQyxJQUFJLElBQUlrQyxTQUFTLENBQUNsQyxJQUFJLENBQUN1RSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQzVEbUIsYUFBYSxHQUFHLEtBQUs7SUFDdEI7SUFDQSxPQUFPQSxhQUFhO0VBQ3JCLENBQUM7RUFBQztFQUVGLE1BQU1FLCtCQUErQixHQUFHLFVBQ3ZDQyxLQUE2QixFQUN5RDtJQUN0RixPQUNDLENBQUNBLEtBQUssQ0FBQzVQLEtBQUssMkNBQWdDLElBQzNDNFAsS0FBSyxDQUFDNVAsS0FBSyxrREFBdUMsSUFDbEQ0UCxLQUFLLENBQUM1UCxLQUFLLDZEQUFrRCxLQUM5RDRQLEtBQUssQ0FBQzNQLEtBQUssQ0FBQ0MsSUFBSSxDQUFDMlAsUUFBUSxDQUFDLEdBQUcsQ0FBQztFQUVoQyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsVUFDcEMvUCxTQUFpQyxFQUNqQ3VCLGdCQUF5RCxFQUN6RHlPLGFBQXVCLEVBQ2hCO0lBQUE7SUFDUCxNQUFNQyxjQUFjLGFBQUlqUSxTQUFTLENBQWVFLEtBQUssMkNBQTlCLE9BQWdDZ1EsT0FBTztJQUM5RCxJQUFJRCxjQUFjLEVBQUU7TUFDbkIsTUFBTUUsc0JBQXNCLEdBQzNCQyw2QkFBNkIsQ0FBQ0gsY0FBYyxDQUFDLElBQzdDSSxpQ0FBaUMsQ0FBQ0osY0FBYyxDQUFDLElBQ2pESyw2QkFBNkIsQ0FBQ0wsY0FBYyxDQUFDLElBQzdDTSxpQ0FBaUMsQ0FBQ04sY0FBYyxDQUFDO01BQ2xELE1BQU1oSixrQkFBa0IsR0FBR2tKLHNCQUFzQixHQUM5Q3RKLG9CQUFvQixDQUFDdEYsZ0JBQWdCLENBQUNRLHNCQUFzQixFQUFFLEVBQUVvTyxzQkFBc0IsQ0FBQyxDQUFDcEosb0JBQW9CLEdBQzVHdkMsU0FBUztNQUNaLElBQUl5QyxrQkFBa0IsYUFBbEJBLGtCQUFrQixlQUFsQkEsa0JBQWtCLENBQUVsRyxNQUFNLEVBQUU7UUFDL0IsTUFBTXlQLHNCQUFzQixHQUFHdkosa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM3QixJQUFJO1FBQ3pELElBQUksQ0FBQzRLLGFBQWEsQ0FBQ0YsUUFBUSxDQUFDVSxzQkFBc0IsQ0FBQyxFQUFFO1VBQ3BEUixhQUFhLENBQUNuSCxJQUFJLENBQUMySCxzQkFBc0IsQ0FBQztRQUMzQztNQUNEO0lBQ0Q7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyxrQ0FBa0MsR0FBRyxVQUMxQ1QsYUFBdUIsRUFDdkJoUSxTQUFpQyxFQUNqQ3VCLGdCQUF5RCxFQUM5QztJQUFBO0lBQ1gsUUFBUXZCLFNBQVMsQ0FBQ0MsS0FBSztNQUN0QjtRQUNDLElBQUksc0JBQUFELFNBQVMsQ0FBQzBRLE1BQU0sK0VBQWhCLGtCQUFrQlIsT0FBTywwREFBekIsc0JBQTJCalEsS0FBSyxpREFBcUMsRUFBRTtVQUFBO1VBQzFFLDBCQUFBRCxTQUFTLENBQUMwUSxNQUFNLENBQUNSLE9BQU8sQ0FBQ3BRLElBQUksMkRBQTdCLHVCQUErQkMsT0FBTyxDQUFFNFEsY0FBc0MsSUFBSztZQUNsRkYsa0NBQWtDLENBQUNULGFBQWEsRUFBRVcsY0FBYyxFQUFFcFAsZ0JBQWdCLENBQUM7VUFDcEYsQ0FBQyxDQUFDO1FBQ0g7UUFDQTtNQUNEO01BQ0E7TUFDQTtRQUNDLElBQUlxTywrQkFBK0IsQ0FBQzVQLFNBQVMsQ0FBQyxFQUFFO1VBQy9DLE1BQU13USxzQkFBc0IsR0FBR0ksZ0JBQWdCLENBQzlDL0osb0JBQW9CLENBQUN0RixnQkFBZ0IsQ0FBQ1Esc0JBQXNCLEVBQUUsRUFBRS9CLFNBQVMsQ0FBQ0UsS0FBSyxDQUFDQyxJQUFJLENBQUMsRUFDckYsSUFBSSxDQUNKLENBQUM4RixJQUFJLENBQUMsR0FBRyxDQUFDO1VBQ1gsSUFBSSxDQUFDK0osYUFBYSxDQUFDRixRQUFRLENBQUNVLHNCQUFzQixDQUFDLEVBQUU7WUFDcERSLGFBQWEsQ0FBQ25ILElBQUksQ0FBQzJILHNCQUFzQixDQUFDO1VBQzNDO1FBQ0Q7UUFDQTtRQUNBVCw0QkFBNEIsQ0FBQy9QLFNBQVMsRUFBRXVCLGdCQUFnQixFQUFFeU8sYUFBYSxDQUFDO1FBQ3hFO01BQ0Q7UUFDQztRQUNBO0lBQU07SUFFUixPQUFPQSxhQUFhO0VBQ3JCLENBQUM7RUFFRCxNQUFNYSw4QkFBOEIsR0FBRyxVQUN0Q3RQLGdCQUF5RCxFQVl4RDtJQUFBO0lBQUEsSUFYRHVQLFFBQThCLHVFQUFHLEVBQUU7SUFBQSxJQUNuQzdOLGNBQWMsdUVBQUcsRUFBRTtJQUFBLElBQ25CcUIsYUFBYSx1RUFBRyxLQUFLO0lBQUEsSUFDckJ5TSxZQUFxQjtJQVNyQjtJQUNBLE1BQU01SSx3QkFBd0IsR0FBRzlHLDJCQUEyQixDQUFDeVAsUUFBUSxFQUFFdlAsZ0JBQWdCLENBQUM7SUFDeEYsTUFBTW1DLFVBQVUsR0FBR25DLGdCQUFnQixDQUFDeVAsYUFBYSxFQUFFO0lBQ25EO0lBQ0EsTUFBTTVJLHdCQUF3QixHQUFLbkYsY0FBYywrQkFBSTFCLGdCQUFnQixDQUFDMFAsdUJBQXVCLENBQUNoTyxjQUFjLENBQUMsMkRBQXhELHVCQUEwRDlCLFVBQVUsZ0NBQ3hIdUMsVUFBVSxDQUFDakQsV0FBVyxxRkFBdEIsdUJBQXdCd0IsRUFBRSwyREFBMUIsdUJBQTRCQyxlQUFlLEtBQzNDLEVBQXFCO0lBRXRCLElBQUk4TixhQUF1QixHQUFHLEVBQUU7SUFDaEMsSUFBSWMsUUFBUSxDQUFDL1AsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUNnUSxZQUFZLEVBQUU7TUFBQTtNQUM1QywyQkFBQ3hQLGdCQUFnQixDQUFDMFAsdUJBQXVCLENBQUNGLFlBQVksQ0FBQyxDQUFDNVAsVUFBVSw0REFBbEUsd0JBQWlGcEIsT0FBTyxDQUFFQyxTQUFpQyxJQUFLO1FBQy9IZ1EsYUFBYSxHQUFHUyxrQ0FBa0MsQ0FBQ1QsYUFBYSxFQUFFaFEsU0FBUyxFQUFFdUIsZ0JBQWdCLENBQUM7TUFDL0YsQ0FBQyxDQUFDO0lBQ0g7SUFFQSxJQUFJMlAsV0FBVyxDQUFDQyxXQUFXLENBQUM1UCxnQkFBZ0IsQ0FBQytJLFlBQVksRUFBRSxDQUFDLEVBQUU7TUFDN0QwRixhQUFhLENBQUNuSCxJQUFJLENBQ2pCLDBDQUEwQyxFQUMxQyx1Q0FBdUMsRUFDdkMsNENBQTRDLEVBQzVDLDJDQUEyQyxDQUMzQztJQUNGOztJQUVBO0lBQ0EsTUFBTWhILFlBQXlDLEdBQUc7TUFDakQ7TUFDQSxHQUFHc0UsbUJBQW1CLENBQUN6QyxVQUFVLEVBQUUsRUFBRSxFQUFFQSxVQUFVLENBQUN5RCxnQkFBZ0IsRUFBRTdDLGFBQWEsRUFBRS9DLGdCQUFnQixDQUFDO01BQ3BHO01BQ0EsR0FBR2lGLHlCQUF5QixDQUFDOUMsVUFBVSxFQUFFc00sYUFBYSxFQUFFLEtBQUssRUFBRXpPLGdCQUFnQixDQUFDO01BQ2hGO01BQ0EsR0FBR2lGLHlCQUF5QixDQUMzQjlDLFVBQVUsRUFDVm5DLGdCQUFnQixDQUFDSSxrQkFBa0IsRUFBRSxDQUFDQyxzQkFBc0IsRUFBRSxDQUFDbUYsb0JBQW9CLEVBQ25GekMsYUFBYSxFQUNiL0MsZ0JBQWdCO0lBRWxCLENBQUM7SUFDRCxJQUFJMkcsY0FBa0MsR0FBRyxFQUFFO0lBQzNDLE1BQU1rSixnQkFBZ0IsR0FBR0MsbUJBQW1CLENBQUMzTixVQUFVLEVBQUVuQyxnQkFBZ0IsQ0FBQztJQUMxRSxJQUFJNlAsZ0JBQWdCLEVBQUU7TUFDckJsSixjQUFjLEdBQUdrSixnQkFBZ0IsQ0FBQ0UsYUFBYTtJQUNoRDtJQUVBLE1BQU1DLGtCQUFpQyxHQUN0QyxDQUFBbkosd0JBQXdCLGFBQXhCQSx3QkFBd0IsdUJBQXhCQSx3QkFBd0IsQ0FBRW9KLE1BQU0sQ0FBQyxDQUFDOUssZUFBOEIsRUFBRXRFLGNBQWMsS0FBSztNQUNwRixNQUFNdUIsWUFBWSxHQUFHdkIsY0FBYyxDQUFDQyxLQUFLO01BQ3pDLElBQUksQ0FBQzhGLHdCQUF3QixDQUFDakYsR0FBRyxDQUFDUyxZQUFZLENBQUMsRUFBRTtRQUNoRCxJQUFJeUMsY0FBc0I7UUFDMUIsSUFBSW5ELGNBQWMsQ0FBQzJJLFVBQVUsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFO1VBQzdFeEYsY0FBYyxHQUFHLEVBQUU7UUFDcEIsQ0FBQyxNQUFNO1VBQ05BLGNBQWMsR0FBR25ELGNBQWMsQ0FBQ1ksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGO1FBRUEsTUFBTTROLGtCQUFrQixHQUFHckwsY0FBYyxHQUFHQSxjQUFjLEdBQUcsR0FBRyxHQUFHekMsWUFBWSxHQUFHQSxZQUFZO1FBQzlGLE1BQU1pQixXQUFvQyxHQUFHMEMsZUFBZSxDQUMzRHpGLFlBQVksRUFDWjRQLGtCQUFrQixFQUNsQmxRLGdCQUFnQixFQUNoQm1DLFVBQVUsQ0FDVjtRQUNELElBQUlrQixXQUFXLEVBQUU7VUFDaEJBLFdBQVcsQ0FBQ3hFLEtBQUssR0FBRyxFQUFFO1VBQ3RCd0UsV0FBVyxDQUFDdEUsVUFBVSxHQUFHLEVBQUU7VUFDM0JvRyxlQUFlLENBQUNtQyxJQUFJLENBQUNqRSxXQUFXLENBQUM7UUFDbEM7TUFDRDtNQUNBLE9BQU84QixlQUFlO0lBQ3ZCLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSSxFQUFFO0lBRWIsTUFBTWdMLG1CQUFtQixHQUFHekosdUJBQXVCLENBQ2xEQyxjQUFjLEVBQ2R4RSxVQUFVLEVBQ1ZuQyxnQkFBZ0IsRUFDaEI0Ryx3QkFBd0IsRUFDeEJDLHdCQUF3QixDQUN4QjtJQUVELE9BQU87TUFDTkQsd0JBQXdCLEVBQUVBLHdCQUF3QjtNQUNsRHpFLFVBQVUsRUFBRUEsVUFBVTtNQUN0QjBFLHdCQUF3QixFQUFFQSx3QkFBd0I7TUFDbER2RyxZQUFZLEVBQUVBLFlBQVk7TUFDMUIwUCxrQkFBa0IsRUFBRUEsa0JBQWtCO01BQ3RDRyxtQkFBbUIsRUFBRUE7SUFDdEIsQ0FBQztFQUNGLENBQUM7RUFFTSxNQUFNQyxlQUFlLEdBQUcsVUFBVTFOLFFBQW1CLEVBQXNCO0lBQ2pGLE1BQU0rSyxXQUFXLEdBQUc0QyxhQUFhLENBQUMzTixRQUFRLEVBQUVBLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFK0YsSUFBSSxDQUFDO0lBQzNELElBQUksQ0FBQS9GLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFK0YsSUFBSSxNQUFLdkssVUFBVSxLQUFLdVAsV0FBVyxDQUFDTyxXQUFXLENBQUNzQyxRQUFRLEtBQUtyTixTQUFTLElBQUl3SyxXQUFXLENBQUNPLFdBQVcsQ0FBQ3NDLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRTtNQUNuSTdDLFdBQVcsQ0FBQ0ssYUFBYSxDQUFDeUMscUJBQXFCLEdBQUcsS0FBSztJQUN4RDtJQUNBLE9BQU85QyxXQUFXO0VBQ25CLENBQUM7RUFBQztFQUVLLE1BQU0rQyw0QkFBNEIsR0FBRyxVQUMzQ0MsaUJBQThCLEVBQzlCelEsZ0JBQXlELEVBQ3pEMFEsY0FBeUIsRUFDekJDLFdBQXdELEVBQ3pDO0lBQ2YsSUFBSWpELGFBQWEsR0FBR0YsaUJBQWlCLENBQUN4TixnQkFBZ0IsRUFBRXlRLGlCQUFpQixFQUFFRSxXQUFXLENBQUNGLGlCQUFpQixDQUFDdlAsR0FBRyxDQUFDLENBQUM7TUFDN0dnRyxhQUFhLEdBQUcsRUFBRTtJQUNuQixJQUFJdUosaUJBQWlCLENBQUNoTixhQUFhLEVBQUU7TUFDcEN5RCxhQUFhLEdBQUd1SixpQkFBaUIsQ0FBQ2hOLGFBQWEsQ0FBQzZHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3RFO0lBQ0EsSUFBSW9ELGFBQWEsRUFBRTtNQUNsQkEsYUFBYSxHQUFHM00sTUFBTSxDQUFDa04sTUFBTSxDQUFDUCxhQUFhLEVBQUU7UUFDNUN2QyxhQUFhLEVBQUUsQ0FBQ3VDLGFBQWEsQ0FBQ2xILFdBQVcsSUFBSTBILFlBQVksQ0FBQ1IsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNqRnpELFFBQVEsRUFBRXdHLGlCQUFpQixDQUFDeEcsUUFBUSxLQUFLeUQsYUFBYSxDQUFDbEgsV0FBVyxJQUFJa0ssY0FBYyxDQUFDbkMsUUFBUSxDQUFDckgsYUFBYSxDQUFDLENBQUM7UUFDN0dvRixhQUFhLEVBQUVzRSx3QkFBd0IsQ0FBQzVRLGdCQUFnQixDQUFDO1FBQ3pEa0wsUUFBUSxFQUFFeUYsV0FBVyxDQUFDRixpQkFBaUIsQ0FBQ3ZQLEdBQUcsQ0FBQyxDQUFDdUg7TUFDOUMsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPaUYsYUFBYTtFQUNyQixDQUFDO0VBQUM7RUFFSyxNQUFNbUQsc0JBQXNCLEdBQUcsVUFDckNiLGtCQUFpQyxFQUNqQ2hRLGdCQUF5RCxFQUN6RDhRLDBCQUEwQyxFQUN6QjtJQUFBO0lBQ2pCO0lBQ0EsTUFBTUgsV0FBd0QsR0FBRyxDQUFDLENBQUM7SUFFbkUsSUFBSUcsMEJBQTBCLEVBQUU7TUFDL0JkLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ2UsTUFBTSxDQUFDRCwwQkFBMEIsQ0FBQztJQUMzRTtJQUNBO0lBQ0FkLGtCQUFrQixDQUFDeFIsT0FBTyxDQUFDLFVBQVV3UyxjQUFjLEVBQUU7TUFDcEQsSUFBSUEsY0FBYyxDQUFDdFAsY0FBYyxFQUFFO1FBQ2xDLE1BQU11UCx1QkFBdUIsR0FBR2pSLGdCQUFnQixDQUFDZ0ksc0JBQXNCLENBQVdnSixjQUFjLENBQUN0UCxjQUFjLENBQUM7UUFDaEgsTUFBTXdQLG9CQUFvQixHQUFHRCx1QkFBdUIsQ0FBQ3pRLHNCQUFzQixFQUFFLENBQUMrRSxZQUFZO1FBQzFGLE1BQU1rSSxXQUFXLEdBQUcyQyxlQUFlLENBQUNjLG9CQUFvQixDQUFDO1FBQ3pEUCxXQUFXLENBQUNLLGNBQWMsQ0FBQzlQLEdBQUcsQ0FBQyxHQUFHdU0sV0FBVztNQUM5QyxDQUFDLE1BQU07UUFDTmtELFdBQVcsQ0FBQ0ssY0FBYyxDQUFDOVAsR0FBRyxDQUFDLEdBQUc7VUFBRXVILElBQUksRUFBRXRLO1FBQWdCLENBQUM7TUFDNUQ7SUFDRCxDQUFDLENBQUM7O0lBRUY7SUFDQSxNQUFNb04sU0FBUyxHQUFHdkwsZ0JBQWdCLENBQUMrSSxZQUFZLEVBQUU7SUFDakQsTUFBTW9JLG1CQUFtQixHQUFHM0YsV0FBVyxDQUFDRCxTQUFTLENBQUMsNkJBQUdBLFNBQVMsQ0FBQ3JNLFdBQVcsQ0FBQ3VNLFlBQVksMkRBQWxDLHVCQUFvQzJGLGtCQUFrQixHQUFHbk8sU0FBUztJQUN2SCxNQUFNb08sSUFJTCxHQUFHLENBQUMsQ0FBQztJQUNOQSxJQUFJLENBQUNDLGtCQUFrQixHQUFHL0cscUJBQXFCLENBQUM0RyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7SUFDaEdFLElBQUksQ0FBQ0UsdUJBQXVCLEdBQUdoSCxxQkFBcUIsQ0FBQzRHLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLElBQUksRUFBRTtJQUMxR0UsSUFBSSxDQUFDRyx3QkFBd0IsR0FBRzVHLDBCQUEwQixDQUFDdUcsbUJBQW1CLENBQUM7SUFFL0UsTUFBTU0sY0FBYyxHQUFHelIsZ0JBQWdCLENBQUMySSxjQUFjLEVBQUU7SUFDeEQsTUFBTStJLFVBQVUsR0FBR0QsY0FBYyxDQUFDblAsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUM1QyxJQUFJb1AsVUFBVSxDQUFDbFMsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUMxQixNQUFNb00sZUFBZSxHQUFHOEYsVUFBVSxDQUFDQSxVQUFVLENBQUNsUyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3pEa1MsVUFBVSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3hCLE1BQU05Rix1QkFBdUIsR0FBR0YseUJBQXlCLENBQUMzTCxnQkFBZ0IsRUFBRTRMLGVBQWUsQ0FBQztNQUM1RixNQUFNZ0csNkJBQTZCLEdBQUcvRix1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUN1RixrQkFBa0I7TUFDM0dDLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUdELElBQUksQ0FBQ0Msa0JBQWtCLENBQUNQLE1BQU0sQ0FDdkR4RyxxQkFBcUIsQ0FBQ3FILDZCQUE2QixFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUNoRjtNQUNEUCxJQUFJLENBQUNFLHVCQUF1QixHQUFHRixJQUFJLENBQUNFLHVCQUF1QixDQUFDUixNQUFNLENBQ2pFeEcscUJBQXFCLENBQUNxSCw2QkFBNkIsRUFBRSx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FDckY7TUFDRFAsSUFBSSxDQUFDRyx3QkFBd0IsR0FBRztRQUMvQixJQUFJNUcsMEJBQTBCLENBQUNnSCw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLEdBQUdQLElBQUksQ0FBQ0c7TUFDVCxDQUFDO0lBQ0Y7SUFDQSxNQUFNZCxjQUFjLEdBQUdXLElBQUksQ0FBQ0Msa0JBQWtCO0lBQzlDLE1BQU1PLG1CQUFtQixHQUFHUixJQUFJLENBQUNFLHVCQUF1QjtJQUN4RCxNQUFNTyxrQkFBa0MsR0FBRyxFQUFFOztJQUU3QztJQUNBOUIsa0JBQWtCLENBQUN4UixPQUFPLENBQUMsVUFBVWlTLGlCQUFpQixFQUFFO01BQ3ZELE1BQU12SixhQUFhLEdBQUd1SixpQkFBaUIsQ0FBQ2hOLGFBQWEsQ0FBQzZHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO01BQzFFLElBQUksQ0FBQ3VILG1CQUFtQixDQUFDdEQsUUFBUSxDQUFDckgsYUFBYSxDQUFDLEVBQUU7UUFDakQsTUFBTXdHLGFBQWEsR0FBRzhDLDRCQUE0QixDQUFDQyxpQkFBaUIsRUFBRXpRLGdCQUFnQixFQUFFMFEsY0FBYyxFQUFFQyxXQUFXLENBQUM7UUFDcEhtQixrQkFBa0IsQ0FBQ3hLLElBQUksQ0FBQ29HLGFBQWEsQ0FBQztNQUN2QztJQUNELENBQUMsQ0FBQzs7SUFFRjtJQUNBLE1BQU1oRyxtQkFBbUIsR0FBRzFILGdCQUFnQixDQUFDUSxzQkFBc0IsRUFBRTtJQUNyRSxJQUFJbVAsV0FBVyxDQUFDb0MsMEJBQTBCLENBQUNySyxtQkFBbUIsQ0FBQyxFQUFFO01BQ2hFb0ssa0JBQWtCLENBQUN4SyxJQUFJLENBQUM4RCw4QkFBOEIsRUFBRSxDQUFDO0lBQzFEO0lBQ0E7SUFDQSxNQUFNNEcsa0JBQWtCLEdBQUcxRyxxQkFBcUIsQ0FBQ3RMLGdCQUFnQixDQUFDO0lBQ2xFLE1BQU1pUyxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNHLFVBQVUsQ0FBQztJQUNyRixJQUFJVixjQUFjLElBQUlRLGVBQWUsS0FBSyxJQUFJLEVBQUU7TUFDL0MsSUFBSSxDQUFDRCxrQkFBa0IsSUFBSUEsa0JBQWtCLGFBQWxCQSxrQkFBa0IsZUFBbEJBLGtCQUFrQixDQUFFRyxVQUFVLEVBQUU7UUFDMURMLGtCQUFrQixDQUFDeEssSUFBSSxDQUFDMkQsMkJBQTJCLEVBQUUsQ0FBQztNQUN2RDtJQUNEO0lBRUEsT0FBTzZHLGtCQUFrQjtFQUMxQixDQUFDO0VBQUM7RUFFSyxNQUFNTSw0QkFBNEIsR0FBRyxVQUMzQzlSLFlBQW1DLEVBQ25DNkIsVUFBc0IsRUFDdEJuQyxnQkFBeUQsRUFDekQwQixjQUFzQixFQUNFO0lBQ3hCLE1BQU12QixvQkFBb0IsR0FBR3lJLHVCQUF1QixDQUFDekcsVUFBVSxFQUFFbkMsZ0JBQWdCLEVBQUUwQixjQUFjLENBQUM7SUFDbEc4Syx1Q0FBdUMsQ0FBQ2xNLFlBQVksRUFBRUgsb0JBQW9CLENBQUM7SUFDM0UsT0FBT2tTLG9CQUFvQixDQUFDL1IsWUFBWSxFQUFFSCxvQkFBb0IsRUFBRTtNQUMvRHVELFlBQVksRUFBRTRPLFlBQVksQ0FBQ0MsU0FBUztNQUNwQzNPLEtBQUssRUFBRTBPLFlBQVksQ0FBQ0MsU0FBUztNQUM3QjlKLElBQUksRUFBRTZKLFlBQVksQ0FBQ0MsU0FBUztNQUM1QjFJLFFBQVEsRUFBRXlJLFlBQVksQ0FBQ0MsU0FBUztNQUNoQzVJLFFBQVEsRUFBRTJJLFlBQVksQ0FBQ0MsU0FBUztNQUNoQ3BSLFFBQVEsRUFBRW1SLFlBQVksQ0FBQ0MsU0FBUztNQUNoQ2hPLFFBQVEsRUFBRStOLFlBQVksQ0FBQ0MsU0FBUztNQUNoQy9JLFlBQVksRUFBRThJLFlBQVksQ0FBQ0MsU0FBUztNQUNwQ3RJLFFBQVEsRUFBRXFJLFlBQVksQ0FBQ0M7SUFDeEIsQ0FBQyxDQUFDO0VBQ0gsQ0FBQztFQUFDO0VBRUssTUFBTUMsNkJBQTZCLEdBQUlDLGFBQTZCLElBQVc7SUFDckZBLGFBQWEsQ0FBQzVGLElBQUksQ0FBQyxVQUFVQyxDQUFjLEVBQUVDLENBQWMsRUFBRTtNQUM1RCxNQUFNMkYsZ0JBQWdCLEdBQUc1RixDQUFDLENBQUMvTixVQUFVLEtBQUtrRSxTQUFTLElBQUk2SixDQUFDLENBQUMvTixVQUFVLEtBQUssSUFBSTtNQUM1RSxNQUFNNFQsZ0JBQWdCLEdBQUc1RixDQUFDLENBQUNoTyxVQUFVLEtBQUtrRSxTQUFTLElBQUk4SixDQUFDLENBQUNoTyxVQUFVLEtBQUssSUFBSTtNQUM1RSxJQUFJLENBQUMyVCxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsRUFBRTtRQUMzQyxPQUFPLENBQUM7TUFDVDtNQUNBLElBQUlELGdCQUFnQixJQUFJLENBQUNDLGdCQUFnQixFQUFFO1FBQzFDLE9BQU8sQ0FBQyxDQUFDO01BQ1Y7TUFDQSxJQUFJLENBQUNELGdCQUFnQixJQUFJQyxnQkFBZ0IsRUFBRTtRQUMxQyxPQUFPLENBQUM7TUFDVDtNQUNBLE9BQU83RixDQUFDLENBQUMvTixVQUFVLENBQUU2VCxhQUFhLENBQUM3RixDQUFDLENBQUNoTyxVQUFVLENBQUU7SUFDbEQsQ0FBQyxDQUFDO0VBQ0gsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBVkE7RUFXTyxNQUFNOFQsa0JBQWtCLEdBQUcsVUFDakM3UyxnQkFBeUQsRUFLRztJQUFBO0lBQUEsSUFKNUR1UCxRQUE4Qix1RUFBRyxFQUFFO0lBQUEsSUFDbkM3TixjQUFjLHVFQUFHLEVBQUU7SUFBQSxJQUNuQnFCLGFBQXVCO0lBQUEsSUFDdkJ5TSxZQUFxQjtJQUVyQixNQUFNc0QsNEJBQTRCLEdBQUd4RCw4QkFBOEIsQ0FDbEV0UCxnQkFBZ0IsRUFDaEJ1UCxRQUFRLEVBQ1I3TixjQUFjLEVBQ2RxQixhQUFhLEVBQ2J5TSxZQUFZLENBQ1o7SUFDRCxNQUFNdUQsZUFBZSxHQUFHdEwsbUJBQW1CLENBQUN6SCxnQkFBZ0IsQ0FBQztJQUM3RCxJQUFJZ1Esa0JBQWlDLEdBQUc4Qyw0QkFBNEIsQ0FBQzlDLGtCQUFrQjtJQUN2RixNQUFNN04sVUFBVSxHQUFHMlEsNEJBQTRCLENBQUMzUSxVQUFVO0lBRTFENk4sa0JBQWtCLEdBQUcrQyxlQUFlLENBQUNoQyxNQUFNLENBQUNmLGtCQUFrQixDQUFDO0lBRS9EQSxrQkFBa0IsR0FBR29DLDRCQUE0QixDQUFDcEMsa0JBQWtCLEVBQUU3TixVQUFVLEVBQUVuQyxnQkFBZ0IsRUFBRTBCLGNBQWMsQ0FBQztJQUVuSCxNQUFNb1Esa0JBQWtCLEdBQUdqQixzQkFBc0IsQ0FDaERiLGtCQUFrQixFQUNsQmhRLGdCQUFnQixFQUNoQjhTLDRCQUE0QixDQUFDM0MsbUJBQW1CLENBQ2hEO0lBQ0RxQyw2QkFBNkIsQ0FBQ1Ysa0JBQWtCLENBQUM7SUFFakQsSUFBSWtCLGdCQUFnQixHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ3BCLGtCQUFrQixDQUFDO0lBQ3pEa0IsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDMUksT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7SUFDekQwSSxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUMxSSxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUN6RCxNQUFNNkksYUFBYSxHQUFHSCxnQkFBZ0I7SUFDdEM7O0lBRUE7SUFDQSxJQUFJSSxtQkFBa0MsR0FBR0gsSUFBSSxDQUFDSSxLQUFLLENBQUNKLElBQUksQ0FBQ0MsU0FBUyxDQUFDSiw0QkFBNEIsQ0FBQzlDLGtCQUFrQixDQUFDLENBQUM7SUFDcEhvRCxtQkFBbUIsR0FBR0wsZUFBZSxDQUFDaEMsTUFBTSxDQUFDcUMsbUJBQW1CLENBQUM7SUFDakU7SUFDQSxNQUFNeE0sd0JBQXdCLEdBQUdrTSw0QkFBNEIsQ0FBQ2xNLHdCQUF3QjtJQUN0RixNQUFNME0sWUFBWSxHQUFHblIsVUFBVSxhQUFWQSxVQUFVLGlEQUFWQSxVQUFVLENBQUVqRCxXQUFXLHFGQUF2Qix1QkFBeUJ3QixFQUFFLDJEQUEzQix1QkFBNkI2UyxZQUFZO0lBQzlELElBQUlqVixjQUEyQyxHQUFHLENBQUMsQ0FBQztJQUVwRCxNQUFNa1YsWUFBWSxHQUFHeFQsZ0JBQWdCLENBQUN5VCxvQkFBb0IsQ0FBQyxJQUFJLDBDQUErQztJQUU5RyxJQUFJSCxZQUFZLEtBQUtyUSxTQUFTLElBQUlxUSxZQUFZLENBQUM5VCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzFELEtBQUssTUFBTWtVLENBQUMsSUFBSUYsWUFBWSxFQUFFO1FBQzdCbFYsY0FBYyxHQUFHO1VBQ2hCLEdBQUdBLGNBQWM7VUFDakIsR0FBR0YseUJBQXlCLENBQUNvVixZQUFZLENBQUNFLENBQUMsQ0FBQztRQUM3QyxDQUFDO01BQ0Y7SUFDRCxDQUFDLE1BQU07TUFDTnBWLGNBQWMsR0FBR2dWLFlBQVksQ0FBQ3JELE1BQU0sQ0FBQyxDQUFDMEQsYUFBMEMsRUFBRUMsV0FBZ0MsS0FBSztRQUN0SCxLQUFLLElBQUlGLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsSUFBSUUsV0FBVyxhQUFYQSxXQUFXLDhDQUFYQSxXQUFXLENBQUV6RSxNQUFNLGlGQUFuQixvQkFBcUJSLE9BQU8sb0ZBQTdCLHNCQUE4Q3BRLElBQUksMkRBQWxELHVCQUFvRGlCLE1BQU0sR0FBRWtVLENBQUMsRUFBRSxFQUFFO1VBQUE7VUFDcEZDLGFBQWEsQ0FBR0MsV0FBVyxhQUFYQSxXQUFXLCtDQUFYQSxXQUFXLENBQUV6RSxNQUFNLGtGQUFuQixxQkFBcUJSLE9BQU8sb0ZBQTdCLHNCQUE4Q3BRLElBQUksQ0FBQ21WLENBQUMsQ0FBQyxxRkFBdEQsdUJBQTJFL1UsS0FBSywyREFBaEYsdUJBQWtGQyxJQUFJLENBQUMsR0FBRztZQUN2R0MsS0FBSyxFQUFFK1UsV0FBVyxhQUFYQSxXQUFXLDBDQUFYQSxXQUFXLENBQUVDLEVBQUUsb0RBQWYsZ0JBQWlCNVUsUUFBUSxFQUFFO1lBQ2xDRixVQUFVLEVBQUU2VSxXQUFXLGFBQVhBLFdBQVcsNkNBQVhBLFdBQVcsQ0FBRTVVLEtBQUssdURBQWxCLG1CQUFvQkMsUUFBUTtVQUN6QyxDQUFDO1FBQ0Y7UUFDQSxPQUFPMFUsYUFBYTtNQUNyQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUDs7SUFFQTtJQUNBLE1BQU1yVCxZQUF5QyxHQUFHd1MsNEJBQTRCLENBQUN4UyxZQUFZOztJQUUzRjtJQUNBLElBQUl3VCxVQUFVLEdBQUdWOztJQUVoQjtJQUFBLENBQ0NyQyxNQUFNLENBQ05oUSxNQUFNLENBQUNDLElBQUksQ0FBQ1YsWUFBWSxDQUFDLENBQ3ZCVyxNQUFNLENBQUVtQixZQUFZLElBQUssQ0FBQ3dFLHdCQUF3QixDQUFDakYsR0FBRyxDQUFDUyxZQUFZLENBQUMsQ0FBQyxDQUNyRXhCLEdBQUcsQ0FBRXdCLFlBQVksSUFBSztNQUN0QixPQUFPckIsTUFBTSxDQUFDa04sTUFBTSxDQUFDM04sWUFBWSxDQUFDOEIsWUFBWSxDQUFDLEVBQUU5RCxjQUFjLENBQUM4RCxZQUFZLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUMsQ0FDSDtJQUNGLE1BQU0yUixZQUFZLEdBQUcvVCxnQkFBZ0IsQ0FBQzJJLGNBQWMsRUFBRTs7SUFFdEQ7SUFDQSxJQUFJdEosc0NBQXNDLENBQUNrUSxRQUFRLEVBQUV3RSxZQUFZLENBQUMsRUFBRTtNQUNuRTtNQUNBO01BQ0E7TUFDQSxNQUFNQyxVQUFVLEdBQUd6RSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN5RSxVQUFVO01BQ3pDLElBQUlBLFVBQVUsRUFBRTtRQUNmLE1BQU1DLHNCQUFnQyxHQUFHbFQsTUFBTSxDQUFDQyxJQUFJLENBQUNnVCxVQUFVLENBQUMsQ0FBQ3BULEdBQUcsQ0FBRXNULFlBQVksSUFBS0YsVUFBVSxDQUFDRSxZQUFZLENBQUMsQ0FBQ0MsWUFBWSxDQUFDO1FBQzdITCxVQUFVLEdBQUdBLFVBQVUsQ0FBQzdTLE1BQU0sQ0FBRW9DLFdBQVcsSUFBSztVQUMvQyxPQUFPLENBQUM0USxzQkFBc0IsQ0FBQzFGLFFBQVEsQ0FBQ2xMLFdBQVcsQ0FBQ25DLEdBQUcsQ0FBQztRQUN6RCxDQUFDLENBQUM7TUFDSDtJQUNEO0lBRUEsTUFBTWlFLGVBQWUsR0FBR2lOLDRCQUE0QixDQUFDMEIsVUFBVSxFQUFFM1IsVUFBVSxFQUFFbkMsZ0JBQWdCLEVBQUUwQixjQUFjLENBQUM7O0lBRTlHO0lBQ0EsTUFBTTBTLGVBQWUsR0FBR3hELHdCQUF3QixDQUFDNVEsZ0JBQWdCLENBQUM7SUFDbEVtRixlQUFlLENBQUMzRyxPQUFPLENBQUU2RSxXQUFXLElBQUs7TUFDeENBLFdBQVcsQ0FBQ2lKLGFBQWEsR0FBRzhILGVBQWU7SUFDNUMsQ0FBQyxDQUFDO0lBRUYsT0FBTztNQUFFalAsZUFBZTtNQUFFZ087SUFBYyxDQUFDO0VBQzFDLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVZBO0VBV08sTUFBTWtCLHFCQUFxQixHQUFHLFVBQ3BDclUsZ0JBQXlELEVBQ3pEc1UsNEJBQTRELEVBQzVEQyxTQUFtQyxFQUN6QjtJQUNWLE1BQU1DLGtCQUFrQixHQUFHaksscUJBQXFCLENBQUMrSiw0QkFBNEIsRUFBRSxvQkFBb0IsQ0FBQztJQUNwRyxNQUFNdEMsa0JBQWtCLEdBQUcxRyxxQkFBcUIsQ0FBQ3RMLGdCQUFnQixDQUFDO0lBQ2xFLE1BQU1pUyxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNHLFVBQVUsQ0FBQztJQUNyRixJQUFJcUMsa0JBQWtCLENBQUNoVixNQUFNLEdBQUcsQ0FBQyxJQUFJeVMsZUFBZSxJQUFJLENBQUFzQyxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRUUsV0FBVyxNQUFLLENBQUMsRUFBRTtNQUNyRixPQUFPLElBQUk7SUFDWjtJQUNBLE9BQU8sS0FBSztFQUNiLENBQUM7RUFBQztFQUFBO0FBQUEifQ==
|