@kepler.gl/reducers 3.3.0-alpha.17 → 3.3.0-alpha.19
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/dist/cjs/column-edit-updaters.spec.js +116 -3
- package/dist/cjs/combined-updaters.js +28 -9
- package/dist/cjs/dataset-ops-updaters.spec.js +832 -2
- package/dist/cjs/ui-state-updaters.js +44 -9
- package/dist/cjs/vis-state-merger.js +24 -4
- package/dist/cjs/vis-state-updaters.js +444 -263
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +14 -4
- package/dist/composers.d.ts +13 -2
- package/dist/esm/column-edit-updaters.spec.js +114 -3
- package/dist/esm/combined-updaters.js +29 -10
- package/dist/esm/dataset-ops-updaters.spec.js +830 -1
- package/dist/esm/ui-state-updaters.js +44 -9
- package/dist/esm/vis-state-merger.js +26 -6
- package/dist/esm/vis-state-updaters.js +445 -265
- package/dist/esm/vis-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +1 -1
- package/dist/vis-state-updaters.d.ts +8 -9
- package/dist/vis-state.d.ts +8 -0
- package/package.json +16 -16
- package/dist/column-edit-updaters.spec.d.ts +0 -1
- package/dist/dataset-ops-updaters.spec.d.ts +0 -1
- package/dist/vis-state-merger-text-label.spec.d.ts +0 -1
|
@@ -823,9 +823,12 @@ function mergeAnnotations(state, annotations) {
|
|
|
823
823
|
var validAnnotations = annotations.filter(function (a) {
|
|
824
824
|
return a && a.id && !existingIds.has(a.id) && (0, _constants.isAnnotationKind)(a.kind) && Array.isArray(a.anchorPoint) && (a.anchorPoint.length === 2 || a.anchorPoint.length === 3) && a.anchorPoint.every(function (value) {
|
|
825
825
|
return Number.isFinite(value);
|
|
826
|
-
})
|
|
826
|
+
}) && (a.kind !== _constants.AnnotationKind.RULER || Array.isArray(a.endPoint) && (a.endPoint.length === 2 || a.endPoint.length === 3) && a.endPoint.every(function (value) {
|
|
827
|
+
return Number.isFinite(value);
|
|
828
|
+
}));
|
|
827
829
|
}).map(function (a) {
|
|
828
|
-
|
|
830
|
+
var _a$showCustomText, _a$showDistance;
|
|
831
|
+
return _objectSpread(_objectSpread({
|
|
829
832
|
isVisible: true,
|
|
830
833
|
autoSize: true,
|
|
831
834
|
autoSizeY: true,
|
|
@@ -834,7 +837,10 @@ function mergeAnnotations(state, annotations) {
|
|
|
834
837
|
lineWidth: _constants.INITIAL_ANNOTATION_LINE_WIDTH,
|
|
835
838
|
textWidth: 0,
|
|
836
839
|
textHeight: 0
|
|
837
|
-
}, a)
|
|
840
|
+
}, a), a.kind === _constants.AnnotationKind.RULER ? {
|
|
841
|
+
showCustomText: (_a$showCustomText = a.showCustomText) !== null && _a$showCustomText !== void 0 ? _a$showCustomText : true,
|
|
842
|
+
showDistance: (_a$showDistance = a.showDistance) !== null && _a$showDistance !== void 0 ? _a$showDistance : true
|
|
843
|
+
} : {});
|
|
838
844
|
});
|
|
839
845
|
if (!validAnnotations.length) {
|
|
840
846
|
return state;
|
|
@@ -1346,6 +1352,20 @@ function getValueWithHighestOccurrence(arr) {
|
|
|
1346
1352
|
})[0];
|
|
1347
1353
|
}
|
|
1348
1354
|
var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
|
|
1355
|
+
prop: 'cameraTour',
|
|
1356
|
+
merge: function merge(state, tour) {
|
|
1357
|
+
return state.cameraTour ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
1358
|
+
cameraTour: (0, _utils.normalizeCameraTour)(tour)
|
|
1359
|
+
});
|
|
1360
|
+
}
|
|
1361
|
+
}, {
|
|
1362
|
+
prop: 'cameraBookmarks',
|
|
1363
|
+
merge: function merge(state, bookmarks) {
|
|
1364
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
1365
|
+
cameraBookmarks: (0, _utils.normalizeCameraBookmarks)([].concat((0, _toConsumableArray2["default"])(state.cameraBookmarks || []), (0, _toConsumableArray2["default"])((0, _utils.normalizeCameraBookmarks)(bookmarks))))
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
}, {
|
|
1349
1369
|
merge: mergeLayers,
|
|
1350
1370
|
prop: 'layers',
|
|
1351
1371
|
toMergeProp: 'layerToBeMerged',
|
|
@@ -1399,4 +1419,4 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
|
|
|
1399
1419
|
prop: 'editor',
|
|
1400
1420
|
combineConfigs: combineEditorConfigs
|
|
1401
1421
|
}];
|
|
1402
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2xheWVycyIsIl9lZmZlY3RzIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInNhdmVkTGF5ZXJDb25maWciLCJwYXJzZWRMYXllckNvbmZpZyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YSIsInZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFsbG93RW1wdHlDb2x1bW4iLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplRmlsdGVyIiwibmV3RmlsdGVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRmIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZUVmZmVjdCIsIm5ld0VmZmVjdCIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbjIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsIl9pbnNlcnRMYXllckF0UmlnaHRPciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsIm1lcmdlZFN0YXRlIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJzYXZlZE9yZGVyIiwibWVyZ2VMYXllck9yZGVyIiwiY3VycmVudExheWVycyIsImxheWVyc1RvSW5zZXJ0IiwiY3VycmVudE9yZGVyIiwiY3VycmVudExheWVyUXVldWUiLCJlbnRyeSIsImZpbmRCeUlkIiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiaXNQbGFpbk9iamVjdCIsImV4aXN0aW5nRmxhdElkcyIsIlNldCIsIm5ld0luc2VydGVkSWRzIiwiaGFzIiwicmVzdWx0IiwiZmxhdFF1ZXVlIiwiZmxhdElkeCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJzYXZlZExheWVyT3JkZXIiLCJ2YWxpZExheWVySWRzIiwiZmlsdGVyTGF5ZXJPcmRlciIsIm9yZGVyIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImdyb3VwIiwiZmlsdGVyZWRHcm91cE9yZGVyIiwicmVzdG9yZWRMYXllck9yZGVyIiwibGF5ZXJJZHNJblJlc3RvcmVkIiwiY29sbGVjdElkcyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJhZGQiLCJtaXNzaW5nTGF5ZXJzIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsImxlZ2VuZCIsIndpdGhMZWdlbmQiLCJmaW5kIiwiYyIsInpvb21PcGFjaXR5Iiwid2l0aFpvb21PcGFjaXR5IiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwiaGFzVGltZXpvbmUiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiX3JlZjMiLCJfYWdncmVnYXRlIiwic2l6ZSIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwibWF4aW11bSIsIl90b0JlQ29tYmluZWRQcm9wcyRmaSIsImxpbWl0U2VhcmNoIiwiaGlkZUludmlzaWJsZUxheWVycyIsImNvbnRyb2xsZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwiX3JlZjYiLCJfcmVmNyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsIm1lcmdlQ2hhcnRzIiwiY2hhcnRzIiwiaW5jb21pbmdJZHMiLCJjaGFydCIsImV4aXN0aW5nSWRzIiwibmV4dENoYXJ0cyIsIm5vcm1hbGl6ZWQiLCJwaW5uZWQiLCJkaXNwbGF5IiwiaXNDb25maWdBY3RpdmUiLCJpc0pzb25FZGl0b3JBY3RpdmUiLCJjaGFydHNUb0JlTWVyZ2VkIiwicmVwbGFjZUNoYXJ0RGF0YXNldElkcyIsInNhdmVkQ2hhcnRzIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJ2YWxpZEFubm90YXRpb25zIiwiaXNBbm5vdGF0aW9uS2luZCIsImtpbmQiLCJhbmNob3JQb2ludCIsImV2ZXJ5IiwiaXNGaW5pdGUiLCJpc1Zpc2libGUiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImxhYmVsIiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwiY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MiLCJfYWdncmVnYXRlMiIsIl9hZ2dyZWdhdGUzIiwibWluaW11bSIsInNwZWVkIiwidGltZUZvcm1hdCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY4IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsImxheWVyVGV4dExhYmVscyIsInNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJjb3VudExhYmVsTGF5ZXIiLCJsYXllclR5cGUiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsInRleHRMYWJlbCIsIlBPSU5UX0NPVU5UX0ZJRUxEX05BTUUiLCJjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJfdGV4dExhYmVsJGtleSIsImZhbGxiYWNrVGV4dExhYmVsRm9yTG9hZGVkTGF5ZXIiLCJuZXdMYXllclRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZjIiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmOSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiaGlnaGxpZ2h0Q29sb3IiLCJzYXZlZFZpc0NvbmZpZyIsIm1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnIiwidmlzQ29uZmlnIiwiY29waWVkVmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJ2YWxpZGF0ZVZpc0NvbmZpZyIsIm1lcmdlRWRpdG9yIiwic2F2ZWRFZGl0b3IiLCJfc2F2ZWRFZGl0b3IkdmlzaWJsZSIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsImNvbWJpbmVFZGl0b3JDb25maWdzIiwibmV4dENvbmZpZyIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJfc3RhdGUkcHJlc2VydmVEYXRhc2UiLCJhcnIiLCJfcmVmMTEiLCJ0YWxseXMiLCJNYXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJzZXQiLCJnZXQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImV4cG9ydHMiLCJtZXJnZSIsInByb3AiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLFxuICBMYXllcixcbiAgY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQsXG4gIG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnLFxuICBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXAsXG4gIENoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Y29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnN9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3Qgc2F2ZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKTtcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBzYXZlZExheWVyQ29uZmlnXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlLCBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHNhdmVkTGF5ZXJDb25maWd9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZSxcbiAgICB7a2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiB0cnVlfVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgbGV0IG1lcmdlZFN0YXRlOiBTID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG5cbiAgLy8gQXBwbHkgcGVuZGluZyBsYXllck9yZGVyIHdpdGggZ3JvdXBzIGlmIGxheWVycyBhcmUgbm93IGF2YWlsYWJsZVxuICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQgJiYgbWVyZ2VkU3RhdGUubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzYXZlZE9yZGVyID0gbWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQ7XG4gICAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyT3JkZXIobWVyZ2VkU3RhdGUsIHNhdmVkT3JkZXIpO1xuICAgIC8vIEtlZXAgc2F2ZWRMYXllck9yZGVyIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGRlZmVycmVkIGxheWVyc1xuICAgIGlmIChtZXJnZWRTdGF0ZS5sYXllclRvQmVNZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSB7Li4ubWVyZ2VkU3RhdGUsIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZE9yZGVyfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKVxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIGNvbnN0IG5ld0ZsYXRMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICAvLyBJZiBubyBncm91cHMgZXhpc3QgaW4gY3VycmVudCBvcmRlciwganVzdCB1c2UgdGhlIG5ldyBmbGF0IG9yZGVyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IGN1cnJlbnRPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3TGF5ZXJPcmRlcjogbmV3RmxhdExheWVyT3JkZXIsXG4gICAgICBuZXdMYXllcnNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVidWlsZCBsYXllck9yZGVyIHByZXNlcnZpbmcgZ3JvdXBzIGluIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9ucy5cbiAgLy8gUmVwbGFjZSBlYWNoIHN0cmluZyBlbnRyeSB3aXRoIGl0cyB1cGRhdGVkIHBvc2l0aW9uIGZyb20gbmV3RmxhdExheWVyT3JkZXIsXG4gIC8vIGFuZCBrZWVwIGdyb3VwcyBhcy1pcy5cbiAgY29uc3QgZXhpc3RpbmdGbGF0SWRzID0gbmV3IFNldChcbiAgICBjdXJyZW50T3JkZXIuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIGFzIHN0cmluZ1tdXG4gICk7XG4gIGNvbnN0IG5ld0luc2VydGVkSWRzID0gbmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+ICFleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSk7XG5cbiAgLy8gUmVidWlsZDogd2FsayB0aHJvdWdoIGN1cnJlbnRPcmRlciwgcmVwbGFjZSBzdHJpbmcgZW50cmllcyB3aXRoIHRoZWlyXG4gIC8vIG5ldyBwb3NpdGlvbiBlcXVpdmFsZW50cyBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLCB0aGVuIGFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzXG4gIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICBjb25zdCBmbGF0UXVldWUgPSBbLi4ubmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+IGV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKV07XG4gIGxldCBmbGF0SWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1cnJlbnRPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmVzdWx0LnB1c2goZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSByZW9yZGVyZWQgZmxhdCBsaXN0XG4gICAgICBpZiAoZmxhdElkeCA8IGZsYXRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmxhdFF1ZXVlW2ZsYXRJZHhdKTtcbiAgICAgICAgZmxhdElkeCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzIGF0IHRoZSBmcm9udCAodGhleSBhcmUgbmV3KVxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXI6IFsuLi5uZXdJbnNlcnRlZElkcywgLi4ucmVzdWx0XSxcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzYXZlZCBsYXllck9yZGVyIHdpdGggY3VycmVudCBzdGF0ZSB0byByZXN0b3JlIGxheWVyIGdyb3Vwcy5cbiAqIENhbGxlZCBhZnRlciBsYXllcnMgaGF2ZSBiZWVuIG1lcmdlZC4gSWYgdGhlIHNhdmVkIGNvbmZpZyBjb250YWlucyBhIGxheWVyT3JkZXJcbiAqIHdpdGggZ3JvdXBzLCB0aGlzIHJlcGxhY2VzIHRoZSBmbGF0IGxheWVyT3JkZXIgd2l0aCB0aGUgc2F2ZWQgaGllcmFyY2hpY2FsIG9uZSxcbiAqIGZpbHRlcmluZyBvdXQgYW55IGxheWVyIElEcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllck9yZGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzYXZlZExheWVyT3JkZXI/OiBhbnlbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIXNhdmVkTGF5ZXJPcmRlciB8fCAhQXJyYXkuaXNBcnJheShzYXZlZExheWVyT3JkZXIpIHx8IHNhdmVkTGF5ZXJPcmRlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgc2F2ZWQgbGF5ZXJPcmRlciBjb250YWlucyBhbnkgZ3JvdXBzXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHNhdmVkTGF5ZXJPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICAvLyBObyBncm91cHMgLSB0aGUgbGF5ZXIgbWVyZ2VyIGFscmVhZHkgaGFuZGxlZCBvcmRlcmluZyB2aWEgcHJlc2VydmVMYXllck9yZGVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgbGF5ZXJzIGhhdmVuJ3QgYmVlbiBtZXJnZWQgeWV0LCBzdG9yZSBmb3IgbGF0ZXJcbiAgaWYgKHN0YXRlLmxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRMYXllck9yZGVyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgc2V0IG9mIHZhbGlkIGxheWVyIElEcyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgdmFsaWRMYXllcklkcyA9IG5ldyBTZXQoc3RhdGUubGF5ZXJzLm1hcChsID0+IGwuaWQpKTtcblxuICAvLyBSZWN1cnNpdmVseSBmaWx0ZXIgdGhlIHNhdmVkIGxheWVyT3JkZXIgdG8gb25seSBpbmNsdWRlIHZhbGlkIGxheWVyc1xuICBmdW5jdGlvbiBmaWx0ZXJMYXllck9yZGVyKG9yZGVyOiBhbnlbXSk6IExheWVyT3JkZXIge1xuICAgIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyKTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZ3JvdXAgZXZlbiBpZiBlbXB0eSAodXNlciBtYXkgd2FudCB0aGUgZW1wdHkgZ3JvdXApXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBmaWx0ZXJlZEdyb3VwT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiYgdmFsaWRMYXllcklkcy5oYXMoZW50cnkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkTGF5ZXJPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoc2F2ZWRMYXllck9yZGVyKTtcblxuICAvLyBGaW5kIGFueSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBhcmVuJ3QgaW4gdGhlIHJlc3RvcmVkIG9yZGVyXG4gIC8vIChjb3VsZCBoYXBwZW4gaWYgbGF5ZXJzIHdlcmUgYWRkZWQgYmV0d2VlbiBzYXZlIGFuZCBsb2FkKVxuICBjb25zdCBsYXllcklkc0luUmVzdG9yZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gY29sbGVjdElkcyhvcmRlcjogYW55W10pIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29sbGVjdElkcygoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYXllcklkc0luUmVzdG9yZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29sbGVjdElkcyhyZXN0b3JlZExheWVyT3JkZXIpO1xuXG4gIC8vIEFkZCBhbnkgbWlzc2luZyBsYXllcnMgYXQgdGhlIHRvcFxuICBjb25zdCBtaXNzaW5nTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFsYXllcklkc0luUmVzdG9yZWQuaGFzKGwuaWQpKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IFsuLi5taXNzaW5nTGF5ZXJzLCAuLi5yZXN0b3JlZExheWVyT3JkZXJdLFxuICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8XG4gICAgICAgIGtleSA9PT0gJ2JydXNoJyB8fFxuICAgICAgICBrZXkgPT09ICdnZW9jb2RlcicgfHxcbiAgICAgICAga2V5ID09PSAnbGVnZW5kJyB8fFxuICAgICAgICBrZXkgPT09ICd6b29tT3BhY2l0eSdcbiAgICAgICAgICA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBzYXZlZFRvb2x0aXBDb25maWcgPSBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ107XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgc2F2ZWRUb29sdGlwQ29uZmlnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihzYXZlZFRvb2x0aXBDb25maWcudGltZXpvbmUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7dGltZXpvbmU6IHNhdmVkVG9vbHRpcENvbmZpZy50aW1lem9uZX1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGBsZWdlbmRgIGlzIG9wdGlvbmFsIG9uIG9sZGVyIHNhdmVkIG1hcHM7IHNlZWQgaXQgc28gYSBsYXRlciBjb25maWcgaXMgbm90IGRyb3BwZWQuXG4gIGlmICghY29tYmluZWQubGVnZW5kKSB7XG4gICAgY29uc3Qgd2l0aExlZ2VuZCA9IGNvbmZpZ3MuZmluZChjID0+IGMubGVnZW5kKTtcbiAgICBpZiAod2l0aExlZ2VuZD8ubGVnZW5kKSB7XG4gICAgICBjb21iaW5lZC5sZWdlbmQgPSB3aXRoTGVnZW5kLmxlZ2VuZDtcbiAgICB9XG4gIH1cbiAgLy8gU2FtZSBmb3IgZmFkZS1vbi16b29tOiBhbiBvbGRlciBjb25maWcgaW4gZnJvbnQgbXVzdCBub3QgZHJvcCBjb250cm9sbGVycyBmcm9tIGEgbGF0ZXIgb25lLlxuICBpZiAoIWNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgY29uc3Qgd2l0aFpvb21PcGFjaXR5ID0gY29uZmlncy5maW5kKGMgPT4gYy56b29tT3BhY2l0eSk7XG4gICAgaWYgKHdpdGhab29tT3BhY2l0eT8uem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5ID0gd2l0aFpvb21PcGFjaXR5Lnpvb21PcGFjaXR5O1xuICAgIH1cbiAgfVxuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFzVGltZXpvbmUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8udGltZXpvbmUgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFzVGltZXpvbmUpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS50aW1lem9uZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHA/LnRpbWV6b25lKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gdG9CZUNvbWJpbmVkUHJvcHMuZmluZChwID0+IHA/LmNvbG9yKT8uY29sb3I7XG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS5jb2xvciA9IGNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdsZWdlbmQnKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmhpZGVJbnZpc2libGVMYXllcnMgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uaGlkZUludmlzaWJsZUxheWVycyk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3pvb21PcGFjaXR5JyAmJiBjb21iaW5lZC56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkuY29udHJvbGxlcnMgPSBjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVycyh0b0JlQ29tYmluZWRQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogUGFuZWxzIGFyZSBtYXRjaGVkIGJ5IGluZGV4OiBpbmRleCBpIG9mIGBzcGxpdE1hcHNgLCBgc3RhdGUuc3BsaXRNYXBzYCBhbmRcbiAqIGBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkYCBpcyB0aGUgc2FtZSBtYXAgcGFuZWwuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzLlxuICogICAgICBQYW5lbHMgYXJlIGNyZWF0ZWQgb25jZSBvbmUgb2YgdGhlbSBjYW4gYmUgbWVyZ2VkOiBpdCBoYXMgbm8gbGF5ZXJzLCBvciBvbmUgb2YgaXRzIGxheWVycyBleGlzdHNcbiAqIDMuIGxheWVycyB0aGF0IGRvbid0IGV4aXN0IHlldFxuICogICAgOiBzYXZlIHRvIHNwbGl0TWFwc1RvQmVNZXJnZWQsIGluIHRoZSBwYW5lbCBhdCB0aGUgc2FtZSBpbmRleFxuICogQSBsYXllciBsaXN0ZWQgaW4gc3BsaXRNYXBzIG9ubHkgc2hvd3MgaW4gdGhlIHBhbmVscyB0aGF0IGxpc3QgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbGF5ZXJFeGlzdHMgPSAoaWQ6IHN0cmluZykgPT4gc3RhdGUubGF5ZXJzLnNvbWUobCA9PiBsLmlkID09PSBpZCk7XG4gIGNvbnN0IGNyZWF0ZVBhbmVscyA9XG4gICAgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDAgfHxcbiAgICBzcGxpdE1hcHMuc29tZShzbSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhzbS5sYXllcnMpO1xuICAgICAgcmV0dXJuICFpZHMubGVuZ3RoIHx8IGlkcy5zb21lKGxheWVyRXhpc3RzKTtcbiAgICB9KTtcbiAgY29uc3QgY3VycmVudExheWVycyA9IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIXNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKSlcbiAgKTtcblxuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQ6IHR5cGVvZiBzcGxpdE1hcHMgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGNyZWF0ZVBhbmVscykge1xuICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXQsIGtlZXAgaWRcbiAgICAgIGNvbnN0IHBhbmVsID0gbWVyZ2VkW2ldIHx8IHsuLi5zbSwgbGF5ZXJzOiBjdXJyZW50TGF5ZXJzfTtcbiAgICAgIG1lcmdlZFtpXSA9IHtcbiAgICAgICAgLi4ucGFuZWwsXG4gICAgICAgIGxheWVyczogey4uLnBhbmVsLmxheWVycywgLi4uT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiBsYXllckV4aXN0cyhpZCkpKX1cbiAgICAgIH07XG4gICAgfVxuICAgIHVubWVyZ2VkW2ldID0gey4uLnNtLCBsYXllcnM6IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gIWxheWVyRXhpc3RzKGlkKSkpfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiB1bm1lcmdlZC5zb21lKHNtID0+IE9iamVjdC5rZXlzKHNtLmxheWVycykubGVuZ3RoKVxuICAgICAgPyBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCB1bm1lcmdlZClcbiAgICAgIDogc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGNoYXJ0cyB3aXRoIHNhdmVkIGNvbmZpZy4gQ2hhcnRzIHdob3NlIGRhdGFzZXQgaXMgbm90IGxvYWRlZCB5ZXQgYXJlXG4gKiBwYXJrZWQgb24gYGNoYXJ0c1RvQmVNZXJnZWRgIChzYW1lIGFzIGZpbHRlcnMpIHNvIGRhdGFzZXQgcmVwbGFjZSBjYW4gcmVtYXBcbiAqIGBkYXRhSWRgIGFuZCByZXN0b3JlIHRoZW0gYWZ0ZXIgdGhlIG5ldyB0YWJsZSBsYW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hhcnRzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBjaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNoYXJ0cykgfHwgIWNoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaW5jb21pbmdJZHMgPSBuZXcgU2V0KFxuICAgIGNoYXJ0cy5tYXAoY2hhcnQgPT4gY2hhcnQ/LmlkKS5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpKVxuICApO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IG5leHRDaGFydHM6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNoYXJ0cy5mb3JFYWNoKGNoYXJ0ID0+IHtcbiAgICBpZiAoIWNoYXJ0IHx8ICFjaGFydC5pZCB8fCBleGlzdGluZ0lkcy5oYXMoY2hhcnQuaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IENoYXJ0Q29uZmlnID0gZnJvbUNvbmZpZ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgICAgLy8gT2xkZXIgY29uZmlncyBvbWl0IGBwaW5uZWRgOyBrZWVwIGNoYXJ0cyB2aXNpYmxlIGxpa2UgdGhlIGxlZ2VuZC5cbiAgICAgICAgICBwaW5uZWQ6IGNoYXJ0LnBpbm5lZCAhPT0gZmFsc2UsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzSnNvbkVkaXRvckFjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogY2hhcnQ7XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5kYXRhSWQgJiZcbiAgICAgICghc3RhdGUuZGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSlcbiAgICApIHtcbiAgICAgIGZhaWxlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ0lkcy5hZGQobm9ybWFsaXplZC5pZCk7XG4gICAgbmV4dENoYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9KTtcbiAgaWYgKCFuZXh0Q2hhcnRzLmxlbmd0aCAmJiAhZmFpbGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogbmV4dENoYXJ0cy5sZW5ndGggPyBbLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSksIC4uLm5leHRDaGFydHNdIDogc3RhdGUuY2hhcnRzLFxuICAgIGNoYXJ0c1RvQmVNZXJnZWQ6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHNUb0JlTWVyZ2VkIHx8IFtdKS5maWx0ZXIoY2hhcnQgPT4gIWluY29taW5nSWRzLmhhcyhjaGFydC5pZCkpLFxuICAgICAgLi4uZmFpbGVkXG4gICAgXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0RGF0YXNldElkcyhcbiAgc2F2ZWRDaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBDaGFydENvbmZpZ1tdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYXZlZENoYXJ0cykgfHwgIXNhdmVkQ2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlcGxhY2VkID0gc2F2ZWRDaGFydHNcbiAgICAuZmlsdGVyKGNoYXJ0ID0+IGNoYXJ0Py5kYXRhSWQgPT09IGRhdGFJZClcbiAgICAubWFwKGNoYXJ0ID0+ICh7Li4uY2hhcnQsIGRhdGFJZDogZGF0YUlkVG9Vc2V9KSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsLFxuICAgIC8vIGFuZCB0aGUgbW9zdCBjb21tb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lIGFtb25nIHRoZSBjb25maWdzIHRoYXQgc2V0IG9uZVxuICAgIHRpbWVGb3JtYXQ6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lRm9ybWF0KSksXG4gICAgdGltZXpvbmU6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lem9uZSkpXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgbGF5ZXJUZXh0TGFiZWxzOiBhbnlbXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFuOyBsYXllclR5cGU/OiBzdHJpbmcgfCBudWxsfSA9IHt9XG4pOiBhbnlbXSB7XG4gIGNvbnN0IGxheWVyVGV4dExhYmVsID0gbGF5ZXJUZXh0TGFiZWxzWzBdO1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcbiAgY29uc3QgY291bnRMYWJlbExheWVyID0gQm9vbGVhbihcbiAgICBvcHRpb25zLmxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMob3B0aW9ucy5sYXllclR5cGUpXG4gICk7XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBsZXQgZmllbGQgPSBudWxsO1xuICAgIGlmICh0ZXh0TGFiZWwuZmllbGQpIHtcbiAgICAgIC8vIENsdXN0ZXIsIGhleGJpbiwgYW5kIGdyaWQgcGVyc2lzdCBhIHN5bnRoZXRpYyBwb2ludC1jb3VudCBmaWVsZCB0aGF0XG4gICAgICAvLyBpcyBub3Qgb25lIG9mIHRoZSBkYXRhc2V0IGNvbHVtbnMuXG4gICAgICBmaWVsZCA9XG4gICAgICAgIGNvdW50TGFiZWxMYXllciAmJiB0ZXh0TGFiZWwuZmllbGQubmFtZSA9PT0gUE9JTlRfQ09VTlRfRklFTERfTkFNRVxuICAgICAgICAgID8gY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQoKVxuICAgICAgICAgIDogZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC8vIEtlZXAgZXhwbGljaXQgZmFsc2UgLyAwLiBgfHxgIHdvdWxkIHJlcGxhY2UgYSBzYXZlZCBjb2xsaXNpb25FbmFibGVkXG4gICAgICAgIC8vIG9mIGZhbHNlIHdpdGggdGhlIGFnZ3JlZ2F0aW9uIGRlZmF1bHQgb2YgdHJ1ZS5cbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gPz8gbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcHMgc2F2ZWQgYmVmb3JlIGNvdW50IGxhYmVscyBvbWl0IGB0ZXh0TGFiZWxgLiBUaG9zZSBjbHVzdGVyLCBoZXhiaW4sIGFuZFxuICogZ3JpZCBsYXllcnMgc3RheSB1bmxhYmVsZWQuIE5ldyBsYXllcnMgc3RpbGwgZ2V0IHRoZSBwb2ludC1jb3VudCBkZWZhdWx0XG4gKiBmcm9tIGBnZXREZWZhdWx0TGF5ZXJDb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihcbiAgbGF5ZXJUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBuZXdMYXllclRleHRMYWJlbDogYW55W11cbik6IGFueVtdIHtcbiAgaWYgKGxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobGF5ZXJUeXBlKSkge1xuICAgIHJldHVybiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dO1xuICB9XG4gIHJldHVybiBuZXdMYXllclRleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBTYXZlZCB2aXN1YWwgY2hhbm5lbCBmaWVsZC9zY2FsZSBtYXkgbGl2ZSBpbiBhbnkgb2Y6XG4gKiAtIGBjb25maWdba2V5XWAgYWZ0ZXIgc2NoZW1hIHBhcnNlIChWaXN1YWxDaGFubmVsU2NoZW1hVjEgZm9sZHMgY2hhbm5lbHMgaW50byBjb25maWcpXG4gKiAtIGB2aXN1YWxDaGFubmVsc1trZXldYCBhcyBhIHNpYmxpbmcgb2YgYGNvbmZpZ2AgKHVucGFyc2VkIGFkZERhdGFUb01hcCBwYXlsb2FkKVxuICogLSBgY29uZmlnLnZpc3VhbENoYW5uZWxzW2tleV1gIChjb21tb24gbWlzdGFrZSBvZiBuZXN0aW5nIHZpc3VhbENoYW5uZWxzIGluc2lkZSBjb25maWcpXG4gKlxuICogV2l0aG91dCB0aGlzIGxvb2t1cCwgcHJvZ3JhbW1hdGljIEdlb0pTT04gc3Ryb2tlQ29sb3JGaWVsZCBuZXZlciBiaW5kcyBhbmRcbiAqIHN0cm9rZUNvbG9yRG9tYWluIHN0YXlzIGF0IHRoZSBkZWZhdWx0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyOiBQYXJzZWRMYXllciwga2V5OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjb25maWcgPSBzYXZlZExheWVyLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29uZmlnW2tleV07XG4gIH1cbiAgY29uc3QgY2hhbm5lbHMgPVxuICAgIChzYXZlZExheWVyIGFzIHt2aXN1YWxDaGFubmVscz86IFJlY29yZDxzdHJpbmcsIGFueT59KS52aXN1YWxDaGFubmVscyB8fFxuICAgIChjb25maWcgJiYgY29uZmlnLnZpc3VhbENoYW5uZWxzKTtcbiAgaWYgKGNoYW5uZWxzICYmIHR5cGVvZiBjaGFubmVscyA9PT0gJ29iamVjdCcgJiYgY2hhbm5lbHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNoYW5uZWxzW2tleV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBjb25zdCBzYXZlZEZpZWxkID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgZmllbGQpO1xuICAgIGNvbnN0IHNhdmVkU2NhbGUgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBzY2FsZSk7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkRmllbGQ/Lm5hbWUpIHtcbiAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBzYXZlZEZpZWxkLm5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgLi4uKHNhdmVkU2NhbGUgPyB7W3NjYWxlXTogc2F2ZWRTY2FsZX0gOiB7fSlcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICB9XG5cbiAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkRmllbGQ/Lm5hbWU7XG4gICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbiAgLy8gU2F2ZWQgbWFwcyB0aGF0IG9taXQgdGV4dExhYmVsIHByZWRhdGUgY291bnQgbGFiZWxzIGFuZCBzdGF5IHVubGFiZWxlZC5cbiAgLy8gQSBuZXcgbGF5ZXIgY29uZmlnIG9taXRzIGl0IHRvbywgYW5kIHNob3VsZCBrZWVwIHRoZSBsYXllciBkZWZhdWx0LlxuICBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHNhdmVkTGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCxcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChmaWVsZHMsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgbGF5ZXJUeXBlOiBzYXZlZExheWVyLnR5cGVcbiAgICAgICAgfSlcbiAgICAgIDogb3B0aW9ucy5rZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWxcbiAgICAgID8gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihzYXZlZExheWVyLnR5cGUsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwpXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBzYXZlZFZpc0NvbmZpZyA9XG4gICAgc2F2ZWRMYXllci50eXBlID09PSAnM0QnXG4gICAgICA/IG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnKHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZylcbiAgICAgIDogc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnO1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZFZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQ2hhcnRzLFxuICAgIHByb3A6ICdjaGFydHMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnY2hhcnRzVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VDaGFydERhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVdBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQVNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQXFCQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFFQSxJ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
|
|
1422
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2xheWVycyIsIl9lZmZlY3RzIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInNhdmVkTGF5ZXJDb25maWciLCJwYXJzZWRMYXllckNvbmZpZyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YSIsInZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFsbG93RW1wdHlDb2x1bW4iLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplRmlsdGVyIiwibmV3RmlsdGVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRmIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZUVmZmVjdCIsIm5ld0VmZmVjdCIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbjIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsIl9pbnNlcnRMYXllckF0UmlnaHRPciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsIm1lcmdlZFN0YXRlIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJzYXZlZE9yZGVyIiwibWVyZ2VMYXllck9yZGVyIiwiY3VycmVudExheWVycyIsImxheWVyc1RvSW5zZXJ0IiwiY3VycmVudE9yZGVyIiwiY3VycmVudExheWVyUXVldWUiLCJlbnRyeSIsImZpbmRCeUlkIiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiaXNQbGFpbk9iamVjdCIsImV4aXN0aW5nRmxhdElkcyIsIlNldCIsIm5ld0luc2VydGVkSWRzIiwiaGFzIiwicmVzdWx0IiwiZmxhdFF1ZXVlIiwiZmxhdElkeCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJzYXZlZExheWVyT3JkZXIiLCJ2YWxpZExheWVySWRzIiwiZmlsdGVyTGF5ZXJPcmRlciIsIm9yZGVyIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImdyb3VwIiwiZmlsdGVyZWRHcm91cE9yZGVyIiwicmVzdG9yZWRMYXllck9yZGVyIiwibGF5ZXJJZHNJblJlc3RvcmVkIiwiY29sbGVjdElkcyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJhZGQiLCJtaXNzaW5nTGF5ZXJzIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsImxlZ2VuZCIsIndpdGhMZWdlbmQiLCJmaW5kIiwiYyIsInpvb21PcGFjaXR5Iiwid2l0aFpvb21PcGFjaXR5IiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwiaGFzVGltZXpvbmUiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiX3JlZjMiLCJfYWdncmVnYXRlIiwic2l6ZSIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwibWF4aW11bSIsIl90b0JlQ29tYmluZWRQcm9wcyRmaSIsImxpbWl0U2VhcmNoIiwiaGlkZUludmlzaWJsZUxheWVycyIsImNvbnRyb2xsZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwiX3JlZjYiLCJfcmVmNyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsIm1lcmdlQ2hhcnRzIiwiY2hhcnRzIiwiaW5jb21pbmdJZHMiLCJjaGFydCIsImV4aXN0aW5nSWRzIiwibmV4dENoYXJ0cyIsIm5vcm1hbGl6ZWQiLCJwaW5uZWQiLCJkaXNwbGF5IiwiaXNDb25maWdBY3RpdmUiLCJpc0pzb25FZGl0b3JBY3RpdmUiLCJjaGFydHNUb0JlTWVyZ2VkIiwicmVwbGFjZUNoYXJ0RGF0YXNldElkcyIsInNhdmVkQ2hhcnRzIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJ2YWxpZEFubm90YXRpb25zIiwiaXNBbm5vdGF0aW9uS2luZCIsImtpbmQiLCJhbmNob3JQb2ludCIsImV2ZXJ5IiwiaXNGaW5pdGUiLCJBbm5vdGF0aW9uS2luZCIsIlJVTEVSIiwiZW5kUG9pbnQiLCJfYSRzaG93Q3VzdG9tVGV4dCIsIl9hJHNob3dEaXN0YW5jZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsImxpbmVXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInNob3dDdXN0b21UZXh0Iiwic2hvd0Rpc3RhbmNlIiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInRpbWVGb3JtYXQiLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDUiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmOCIsImFsbENvbEZvdW5kIiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiX2NvbHVtbnMkayIsImNvbHVtbiIsInZhbGlkYXRvciIsInZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwiLCJsYXllclRleHRMYWJlbHMiLCJzYXZlZFRleHRMYWJlbCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwiY291bnRMYWJlbExheWVyIiwibGF5ZXJUeXBlIiwiQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMiLCJ0ZXh0TGFiZWwiLCJQT0lOVF9DT1VOVF9GSUVMRF9OQU1FIiwiY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwiX3RleHRMYWJlbCRrZXkiLCJmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyIiwibmV3TGF5ZXJUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZSIsInNhdmVkTGF5ZXIiLCJjaGFubmVscyIsIl90eXBlb2YyIiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwidmFsdWVzIiwiX3JlZjkiLCJzY2FsZSIsInNhdmVkRmllbGQiLCJzYXZlZFNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiZ3JvdXBDb2x1bW5zIiwiY29sdW1uR3JvdXBzIiwiZmxhdE1hcCIsInJlcXVpcmVkS2V5cyIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbCIsIl9vcHRpb25hbCIsInJlcXVpcmVkQ29sIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImhpZGRlbiIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImhpZ2hsaWdodENvbG9yIiwic2F2ZWRWaXNDb25maWciLCJtaWdyYXRlTGVnYWN5U2NlbmVncmFwaFZpc0NvbmZpZyIsInZpc0NvbmZpZyIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJjb21iaW5lRWRpdG9yQ29uZmlncyIsIm5leHRDb25maWciLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiYXJyIiwiX3JlZjExIiwidGFsbHlzIiwiTWFwIiwibm90TnVsbG9yVW5kZWZpbmVkIiwic2V0IiwiZ2V0IiwiVklTX1NUQVRFX01FUkdFUlMiLCJleHBvcnRzIiwicHJvcCIsIm1lcmdlIiwidG91ciIsImNhbWVyYVRvdXIiLCJub3JtYWxpemVDYW1lcmFUb3VyIiwiYm9va21hcmtzIiwiY2FtZXJhQm9va21hcmtzIiwibm9ybWFsaXplQ2FtZXJhQm9va21hcmtzIiwidG9NZXJnZVByb3AiLCJwcmVzZXJ2ZU9yZGVyIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJzYXZlVW5tZXJnZWQiLCJjb21iaW5lQ29uZmlncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZmxhdHRlbkRlZXAnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtcbiAgYXJyYXlJbnNlcnQsXG4gIG5vcm1hbGl6ZUNhbWVyYUJvb2ttYXJrcyxcbiAgbm9ybWFsaXplQ2FtZXJhVG91cixcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLFxuICBMYXllcixcbiAgY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQsXG4gIG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnLFxuICBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIEFubm90YXRpb25LaW5kLFxuICBpc0Fubm90YXRpb25LaW5kLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEhcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIFZpc1N0YXRlLCBWaXNTdGF0ZU1lcmdlcnMsIEtlcGxlckdMU2NoZW1hQ2xhc3N9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIFBhcnNlZExheWVyLFxuICBQYXJzZWRWaXNTdGF0ZSxcbiAgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgVG9vbHRpcEluZm8sXG4gIFNhdmVkRWRpdG9yLFxuICBQYXJzZWRDb25maWcsXG4gIEZpbHRlcixcbiAgRWZmZWN0IGFzIEVmZmVjdFR5cGUsXG4gIFBhcnNlZEVmZmVjdCxcbiAgTGF5ZXJDb2x1bW5zLFxuICBMYXllckNvbHVtbixcbiAgUGFyc2VkRmlsdGVyLFxuICBOZXN0ZWRQYXJ0aWFsLFxuICBTYXZlZEFuaW1hdGlvbkNvbmZpZyxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckdyb3VwLFxuICBDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGUsIERhdGFzZXRzLCBhc3NpZ25HcHVDaGFubmVscywgcmVzZXRGaWx0ZXJHcHVNb2RlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2NvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzfSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIGxldCBwbG90VHlwZTtcbiAgICAgIC8vIFRPRE86IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCB0byBzYXZlIHBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkXG4gICAgICBpZiAoZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZD8uW2RhdGFJZF0pIHtcbiAgICAgICAgLy8gcmVwbGFjZSBjb2xvckJ5RGF0YUlkIGluIGZpbHRlci5wbG90VHlwZVxuICAgICAgICBjb25zdCB7W2RhdGFJZF06IGNvbG9yLCAuLi5yZXN0fSA9IGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQgfHwge307XG4gICAgICAgIHBsb3RUeXBlID0ge1xuICAgICAgICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICBjb2xvcnNCeURhdGFJZDoge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIFtkYXRhSWRUb1VzZV06IGNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWQsXG4gICAgICAgIC4uLihwbG90VHlwZSA/IHtwbG90VHlwZX0gOiB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHNhdmVkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZyk7XG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gc2F2ZWRMYXllckNvbmZpZ1xuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIGxheWVyQ29uZmlnKVxuICAgIDogbGF5ZXJDb25maWc7XG5cbiAgaWYgKCFwYXJzZWRMYXllckNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgW3BhcnNlZExheWVyQ29uZmlnXSxcbiAgICB7YWxsb3dFbXB0eUNvbHVtbjogdHJ1ZSwga2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiBzYXZlZExheWVyQ29uZmlnfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZmlsdGVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZpbHRlcihcbiAgbmV3RmlsdGVyOiBGaWx0ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoe2ZpbHRlcnM6IFtuZXdGaWx0ZXJdfSwgc2NoZW1hKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZmlsdGVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2UsXG4gICAge2tlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbDogdHJ1ZX1cbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIGxldCBtZXJnZWRTdGF0ZTogUyA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xuXG4gIC8vIEFwcGx5IHBlbmRpbmcgbGF5ZXJPcmRlciB3aXRoIGdyb3VwcyBpZiBsYXllcnMgYXJlIG5vdyBhdmFpbGFibGVcbiAgaWYgKG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkICYmIG1lcmdlZFN0YXRlLmxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2F2ZWRPcmRlciA9IG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkO1xuICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllck9yZGVyKG1lcmdlZFN0YXRlLCBzYXZlZE9yZGVyKTtcbiAgICAvLyBLZWVwIHNhdmVkTGF5ZXJPcmRlciBhdmFpbGFibGUgZm9yIGZ1dHVyZSBkZWZlcnJlZCBsYXllcnNcbiAgICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJUb0JlTWVyZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gey4uLm1lcmdlZFN0YXRlLCBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRPcmRlcn07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cblxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICBjb25zdCBuZXdGbGF0TGF5ZXJPcmRlciA9IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKG5ld0xheWVyT3JkZXJRdWV1ZSk7XG5cbiAgLy8gSWYgbm8gZ3JvdXBzIGV4aXN0IGluIGN1cnJlbnQgb3JkZXIsIGp1c3QgdXNlIHRoZSBuZXcgZmxhdCBvcmRlclxuICBjb25zdCBoYXNHcm91cHMgPSBjdXJyZW50T3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0xheWVyT3JkZXI6IG5ld0ZsYXRMYXllck9yZGVyLFxuICAgICAgbmV3TGF5ZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJlYnVpbGQgbGF5ZXJPcmRlciBwcmVzZXJ2aW5nIGdyb3VwcyBpbiB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMuXG4gIC8vIFJlcGxhY2UgZWFjaCBzdHJpbmcgZW50cnkgd2l0aCBpdHMgdXBkYXRlZCBwb3NpdGlvbiBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLFxuICAvLyBhbmQga2VlcCBncm91cHMgYXMtaXMuXG4gIGNvbnN0IGV4aXN0aW5nRmxhdElkcyA9IG5ldyBTZXQoXG4gICAgY3VycmVudE9yZGVyLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSBhcyBzdHJpbmdbXVxuICApO1xuICBjb25zdCBuZXdJbnNlcnRlZElkcyA9IG5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiAhZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpO1xuXG4gIC8vIFJlYnVpbGQ6IHdhbGsgdGhyb3VnaCBjdXJyZW50T3JkZXIsIHJlcGxhY2Ugc3RyaW5nIGVudHJpZXMgd2l0aCB0aGVpclxuICAvLyBuZXcgcG9zaXRpb24gZXF1aXZhbGVudHMgZnJvbSBuZXdGbGF0TGF5ZXJPcmRlciwgdGhlbiBhcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVyc1xuICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgY29uc3QgZmxhdFF1ZXVlID0gWy4uLm5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiBleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSldO1xuICBsZXQgZmxhdElkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50T3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCBjb3JyZXNwb25kaW5nIGVudHJ5IGZyb20gcmVvcmRlcmVkIGZsYXQgbGlzdFxuICAgICAgaWYgKGZsYXRJZHggPCBmbGF0UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGZsYXRRdWV1ZVtmbGF0SWR4XSk7XG4gICAgICAgIGZsYXRJZHgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVycyBhdCB0aGUgZnJvbnQgKHRoZXkgYXJlIG5ldylcbiAgcmV0dXJuIHtcbiAgICBuZXdMYXllck9yZGVyOiBbLi4ubmV3SW5zZXJ0ZWRJZHMsIC4uLnJlc3VsdF0sXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugc2F2ZWQgbGF5ZXJPcmRlciB3aXRoIGN1cnJlbnQgc3RhdGUgdG8gcmVzdG9yZSBsYXllciBncm91cHMuXG4gKiBDYWxsZWQgYWZ0ZXIgbGF5ZXJzIGhhdmUgYmVlbiBtZXJnZWQuIElmIHRoZSBzYXZlZCBjb25maWcgY29udGFpbnMgYSBsYXllck9yZGVyXG4gKiB3aXRoIGdyb3VwcywgdGhpcyByZXBsYWNlcyB0aGUgZmxhdCBsYXllck9yZGVyIHdpdGggdGhlIHNhdmVkIGhpZXJhcmNoaWNhbCBvbmUsXG4gKiBmaWx0ZXJpbmcgb3V0IGFueSBsYXllciBJRHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJPcmRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc2F2ZWRMYXllck9yZGVyPzogYW55W10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFzYXZlZExheWVyT3JkZXIgfHwgIUFycmF5LmlzQXJyYXkoc2F2ZWRMYXllck9yZGVyKSB8fCBzYXZlZExheWVyT3JkZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNhdmVkIGxheWVyT3JkZXIgY29udGFpbnMgYW55IGdyb3Vwc1xuICBjb25zdCBoYXNHcm91cHMgPSBzYXZlZExheWVyT3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgLy8gTm8gZ3JvdXBzIC0gdGhlIGxheWVyIG1lcmdlciBhbHJlYWR5IGhhbmRsZWQgb3JkZXJpbmcgdmlhIHByZXNlcnZlTGF5ZXJPcmRlclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIGxheWVycyBoYXZlbid0IGJlZW4gbWVyZ2VkIHlldCwgc3RvcmUgZm9yIGxhdGVyXG4gIGlmIChzdGF0ZS5sYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkTGF5ZXJPcmRlclxuICAgIH07XG4gIH1cblxuICAvLyBCdWlsZCBhIHNldCBvZiB2YWxpZCBsYXllciBJRHMgZnJvbSBjdXJyZW50IHN0YXRlXG4gIGNvbnN0IHZhbGlkTGF5ZXJJZHMgPSBuZXcgU2V0KHN0YXRlLmxheWVycy5tYXAobCA9PiBsLmlkKSk7XG5cbiAgLy8gUmVjdXJzaXZlbHkgZmlsdGVyIHRoZSBzYXZlZCBsYXllck9yZGVyIHRvIG9ubHkgaW5jbHVkZSB2YWxpZCBsYXllcnNcbiAgZnVuY3Rpb24gZmlsdGVyTGF5ZXJPcmRlcihvcmRlcjogYW55W10pOiBMYXllck9yZGVyIHtcbiAgICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlcik7XG4gICAgICAgIC8vIEtlZXAgdGhlIGdyb3VwIGV2ZW4gaWYgZW1wdHkgKHVzZXIgbWF5IHdhbnQgdGhlIGVtcHR5IGdyb3VwKVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogZmlsdGVyZWRHcm91cE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIHZhbGlkTGF5ZXJJZHMuaGFzKGVudHJ5KSkge1xuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN0b3JlZExheWVyT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKHNhdmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gRmluZCBhbnkgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgYXJlbid0IGluIHRoZSByZXN0b3JlZCBvcmRlclxuICAvLyAoY291bGQgaGFwcGVuIGlmIGxheWVycyB3ZXJlIGFkZGVkIGJldHdlZW4gc2F2ZSBhbmQgbG9hZClcbiAgY29uc3QgbGF5ZXJJZHNJblJlc3RvcmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNvbGxlY3RJZHMob3JkZXI6IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbGxlY3RJZHMoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbGF5ZXJJZHNJblJlc3RvcmVkLmFkZChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbGxlY3RJZHMocmVzdG9yZWRMYXllck9yZGVyKTtcblxuICAvLyBBZGQgYW55IG1pc3NpbmcgbGF5ZXJzIGF0IHRoZSB0b3BcbiAgY29uc3QgbWlzc2luZ0xheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhbGF5ZXJJZHNJblJlc3RvcmVkLmhhcyhsLmlkKSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBbLi4ubWlzc2luZ0xheWVycywgLi4ucmVzdG9yZWRMYXllck9yZGVyXSxcbiAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWRcbik6IFMge1xuICBjb25zdCBtZXJnZWQ6IE5lc3RlZFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgKE9iamVjdC5rZXlzKGludGVyYWN0aW9uVG9CZU1lcmdlZCkgYXMgQXJyYXk8a2V5b2YgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPVxuICAgICAgICBrZXkgPT09ICd0b29sdGlwJyB8fFxuICAgICAgICBrZXkgPT09ICdicnVzaCcgfHxcbiAgICAgICAga2V5ID09PSAnZ2VvY29kZXInIHx8XG4gICAgICAgIGtleSA9PT0gJ2xlZ2VuZCcgfHxcbiAgICAgICAga2V5ID09PSAnem9vbU9wYWNpdHknXG4gICAgICAgICAgPyBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ1xuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qgc2F2ZWRUb29sdGlwQ29uZmlnID0gY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddO1xuICAgICAgICBjb25zdCB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfSA9IG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHNhdmVkVG9vbHRpcENvbmZpZ1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIG1lcmdlIG5ldyBkYXRhc2V0IHRvb2x0aXBzIHdpdGggb3JpZ2luYWwgZGF0YXNldCB0b29sdGlwc1xuICAgICAgICBjb25maWdUb01lcmdlID0ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgICAgLi4uKGN1cnJlbnRDb25maWcgYXMgVG9vbHRpcEluZm9bJ2NvbmZpZyddKS5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICAuLi5tZXJnZWRUb29sdGlwXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi4oc2F2ZWRUb29sdGlwQ29uZmlnLnRpbWV6b25lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge3RpbWV6b25lOiBzYXZlZFRvb2x0aXBDb25maWcudGltZXpvbmV9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1bm1lcmdlZFRvb2x0aXApLmxlbmd0aCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICB1bm1lcmdlZC50b29sdGlwID0ge2ZpZWxkc1RvU2hvdzogdW5tZXJnZWRUb29sdGlwLCBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZXJnZWRba2V5XSA9IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSxcbiAgICAgICAgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKSxcbiAgICAgICAgLi4uKGN1cnJlbnRDb25maWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlnOiBwaWNrKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdUb01lcmdlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgLi4ubWVyZ2VkXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbihzdGF0ZSwgdW5tZXJnZWQpXG4gIH07XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1tdKTogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyB7XG4gIGNvbnN0IGNvbWJpbmVkID0gey4uLmNvbmZpZ3NbMF19O1xuICAvLyBgbGVnZW5kYCBpcyBvcHRpb25hbCBvbiBvbGRlciBzYXZlZCBtYXBzOyBzZWVkIGl0IHNvIGEgbGF0ZXIgY29uZmlnIGlzIG5vdCBkcm9wcGVkLlxuICBpZiAoIWNvbWJpbmVkLmxlZ2VuZCkge1xuICAgIGNvbnN0IHdpdGhMZWdlbmQgPSBjb25maWdzLmZpbmQoYyA9PiBjLmxlZ2VuZCk7XG4gICAgaWYgKHdpdGhMZWdlbmQ/LmxlZ2VuZCkge1xuICAgICAgY29tYmluZWQubGVnZW5kID0gd2l0aExlZ2VuZC5sZWdlbmQ7XG4gICAgfVxuICB9XG4gIC8vIFNhbWUgZm9yIGZhZGUtb24tem9vbTogYW4gb2xkZXIgY29uZmlnIGluIGZyb250IG11c3Qgbm90IGRyb3AgY29udHJvbGxlcnMgZnJvbSBhIGxhdGVyIG9uZS5cbiAgaWYgKCFjb21iaW5lZC56b29tT3BhY2l0eSkge1xuICAgIGNvbnN0IHdpdGhab29tT3BhY2l0eSA9IGNvbmZpZ3MuZmluZChjID0+IGMuem9vbU9wYWNpdHkpO1xuICAgIGlmICh3aXRoWm9vbU9wYWNpdHk/Lnpvb21PcGFjaXR5KSB7XG4gICAgICBjb21iaW5lZC56b29tT3BhY2l0eSA9IHdpdGhab29tT3BhY2l0eS56b29tT3BhY2l0eTtcbiAgICB9XG4gIH1cbiAgLy8gaGFuZGxlIGVhY2ggcHJvcGVydHkga2V5IG9mIGFuIGBJbnRlcmFjdGlvbkNvbmZpZ2AsIGUuZy4gdG9vbHRpcCwgZ2VvY29kZXIsIGJydXNoLCBjb29yZGluYXRlXG4gIC8vIGJ5IGNvbWJpbmluZyB2YWx1ZXMgZm9yIGVhY2ggYW1vbmcgYWxsIHBhc3NlZCBpbiBjb25maWdzXG5cbiAgZm9yIChjb25zdCBrZXkgaW4gY29tYmluZWQpIHtcbiAgICBjb25zdCB0b0JlQ29tYmluZWRQcm9wcyA9IGNvbmZpZ3MubWFwKGMgPT4gY1trZXldKTtcblxuICAgIC8vIGFsbCBvZiB0aGVzZSBoYXZlIGFuIGVuYWJsZWQgYm9vbGVhblxuICAgIGNvbWJpbmVkW2tleV0gPSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBlbmFibGVkIHZhbHVlcyB0cnVlP1xuICAgICAgZW5hYmxlZDogdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmVuYWJsZWQpXG4gICAgfTtcblxuICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgY29tcGFyZU1vZGUgdmFsdWVzIHRydWU/XG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVNb2RlID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmNvbXBhcmVNb2RlKTtcblxuICAgICAgLy8gcmV0dXJuIHRoZSBjb21wYXJlIHR5cGUgbW9kZSwgaXQgd2lsbCBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmVcbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZVR5cGUgPSBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShcbiAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcC5jb21wYXJlVHlwZSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhc1RpbWV6b25lID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LnRpbWV6b25lICE9PSB1bmRlZmluZWQpO1xuICAgICAgaWYgKGhhc1RpbWV6b25lKSB7XG4gICAgICAgIGNvbWJpbmVkW2tleV0udGltZXpvbmUgPSBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShcbiAgICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwPy50aW1lem9uZSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29tYmluZSBmaWVsZHNUb1Nob3cgYW1vbmcgYWxsIGRhdGFzZXQgaWRzXG4gICAgICBjb21iaW5lZFtrZXldLmZpZWxkc1RvU2hvdyA9IHRvQmVDb21iaW5lZFByb3BzXG4gICAgICAgIC5tYXAocCA9PiBwLmZpZWxkc1RvU2hvdylcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBuZXh0RmllbGRzVG9TaG93KSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXh0RGF0YUlkS2V5IGluIG5leHRGaWVsZHNUb1Nob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb29sdGlwRmllbGRzID0gbmV4dEZpZWxkc1RvU2hvd1tuZXh0RGF0YUlkS2V5XTtcbiAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhc2V0IGlkIGlzIG5vdCBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyB0aGVuIGFkZCBpdCB3aXRoIGl0cyB0b29sdGlwIGZpZWxkc1xuICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0gPSBuZXh0VG9vbHRpcEZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgZGF0YXNldCBpZCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHNvIG9ubHkgYWRkIHRoZSBuZXh0IHRvb2x0aXAgZmllbGRzIGZvciB0aGlzIGRhdGFzZXQncyBhcnJheSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBwcmVzZW50LFxuICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgdG9vbHRpcEZpZWxkLm5hbWUgcHJvcGVydHkgZm9yIHVuaXF1ZW5lc3NcbiAgICAgICAgICAgICAgbmV4dFRvb2x0aXBGaWVsZHMuZm9yRWFjaChuZXh0VEYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldLmZpbmQoKHtuYW1lfSkgPT4gbmV4dFRGLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0ucHVzaChuZXh0VEYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYnJ1c2gnKSB7XG4gICAgICAvLyBrZWVwIHRoZSBiaWdnZXN0IGJydXNoIHNpemVcbiAgICAgIGNvbWJpbmVkW2tleV0uc2l6ZSA9XG4gICAgICAgIGFnZ3JlZ2F0ZSh0b0JlQ29tYmluZWRQcm9wcywgQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bSwgcCA9PiBwLnNpemUpID8/IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2dlb2NvZGVyJykge1xuICAgICAgY29tYmluZWRba2V5XS5saW1pdFNlYXJjaCA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5saW1pdFNlYXJjaCk7XG4gICAgICBjb25zdCBjb2xvciA9IHRvQmVDb21iaW5lZFByb3BzLmZpbmQocCA9PiBwPy5jb2xvcik/LmNvbG9yO1xuICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIGNvbWJpbmVkW2tleV0uY29sb3IgPSBjb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnbGVnZW5kJykge1xuICAgICAgY29tYmluZWRba2V5XS5oaWRlSW52aXNpYmxlTGF5ZXJzID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmhpZGVJbnZpc2libGVMYXllcnMpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd6b29tT3BhY2l0eScgJiYgY29tYmluZWQuem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5LmNvbnRyb2xsZXJzID0gY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnModG9CZUNvbWJpbmVkUHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZDtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIFBhbmVscyBhcmUgbWF0Y2hlZCBieSBpbmRleDogaW5kZXggaSBvZiBgc3BsaXRNYXBzYCwgYHN0YXRlLnNwbGl0TWFwc2AgYW5kXG4gKiBgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZGAgaXMgdGhlIHNhbWUgbWFwIHBhbmVsLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwcy5cbiAqICAgICAgUGFuZWxzIGFyZSBjcmVhdGVkIG9uY2Ugb25lIG9mIHRoZW0gY2FuIGJlIG1lcmdlZDogaXQgaGFzIG5vIGxheWVycywgb3Igb25lIG9mIGl0cyBsYXllcnMgZXhpc3RzXG4gKiAzLiBsYXllcnMgdGhhdCBkb24ndCBleGlzdCB5ZXRcbiAqICAgIDogc2F2ZSB0byBzcGxpdE1hcHNUb0JlTWVyZ2VkLCBpbiB0aGUgcGFuZWwgYXQgdGhlIHNhbWUgaW5kZXhcbiAqIEEgbGF5ZXIgbGlzdGVkIGluIHNwbGl0TWFwcyBvbmx5IHNob3dzIGluIHRoZSBwYW5lbHMgdGhhdCBsaXN0IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXVxuKTogUyB7XG4gIGNvbnN0IGxheWVyRXhpc3RzID0gKGlkOiBzdHJpbmcpID0+IHN0YXRlLmxheWVycy5zb21lKGwgPT4gbC5pZCA9PT0gaWQpO1xuICBjb25zdCBjcmVhdGVQYW5lbHMgPVxuICAgIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAwIHx8XG4gICAgc3BsaXRNYXBzLnNvbWUoc20gPT4ge1xuICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMoc20ubGF5ZXJzKTtcbiAgICAgIHJldHVybiAhaWRzLmxlbmd0aCB8fCBpZHMuc29tZShsYXllckV4aXN0cyk7XG4gICAgfSk7XG4gIGNvbnN0IGN1cnJlbnRMYXllcnMgPSBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAoXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFzcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycykpXG4gICk7XG5cbiAgY29uc3QgbWVyZ2VkID0gWy4uLnN0YXRlLnNwbGl0TWFwc107XG4gIGNvbnN0IHVubWVyZ2VkOiB0eXBlb2Ygc3BsaXRNYXBzID0gW107XG4gIHNwbGl0TWFwcy5mb3JFYWNoKChzbSwgaSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpO1xuICAgIGlmIChjcmVhdGVQYW5lbHMpIHtcbiAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0LCBrZWVwIGlkXG4gICAgICBjb25zdCBwYW5lbCA9IG1lcmdlZFtpXSB8fCB7Li4uc20sIGxheWVyczogY3VycmVudExheWVyc307XG4gICAgICBtZXJnZWRbaV0gPSB7XG4gICAgICAgIC4uLnBhbmVsLFxuICAgICAgICBsYXllcnM6IHsuLi5wYW5lbC5sYXllcnMsIC4uLk9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gbGF5ZXJFeGlzdHMoaWQpKSl9XG4gICAgICB9O1xuICAgIH1cbiAgICB1bm1lcmdlZFtpXSA9IHsuLi5zbSwgbGF5ZXJzOiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+ICFsYXllckV4aXN0cyhpZCkpKX07XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBtZXJnZWQsXG4gICAgc3BsaXRNYXBzVG9CZU1lcmdlZDogdW5tZXJnZWQuc29tZShzbSA9PiBPYmplY3Qua2V5cyhzbS5sYXllcnMpLmxlbmd0aClcbiAgICAgID8gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgdW5tZXJnZWQpXG4gICAgICA6IHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBjaGFydHMgd2l0aCBzYXZlZCBjb25maWcuIENoYXJ0cyB3aG9zZSBkYXRhc2V0IGlzIG5vdCBsb2FkZWQgeWV0IGFyZVxuICogcGFya2VkIG9uIGBjaGFydHNUb0JlTWVyZ2VkYCAoc2FtZSBhcyBmaWx0ZXJzKSBzbyBkYXRhc2V0IHJlcGxhY2UgY2FuIHJlbWFwXG4gKiBgZGF0YUlkYCBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIHRoZSBuZXcgdGFibGUgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoYXJ0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgY2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghQXJyYXkuaXNBcnJheShjaGFydHMpIHx8ICFjaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGluY29taW5nSWRzID0gbmV3IFNldChcbiAgICBjaGFydHMubWFwKGNoYXJ0ID0+IGNoYXJ0Py5pZCkuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSlcbiAgKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KChzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBuZXh0Q2hhcnRzOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNvbnN0IGZhaWxlZDogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjaGFydHMuZm9yRWFjaChjaGFydCA9PiB7XG4gICAgaWYgKCFjaGFydCB8fCAhY2hhcnQuaWQgfHwgZXhpc3RpbmdJZHMuaGFzKGNoYXJ0LmlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkOiBDaGFydENvbmZpZyA9IGZyb21Db25maWdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICAgIC8vIE9sZGVyIGNvbmZpZ3Mgb21pdCBgcGlubmVkYDsga2VlcCBjaGFydHMgdmlzaWJsZSBsaWtlIHRoZSBsZWdlbmQuXG4gICAgICAgICAgcGlubmVkOiBjaGFydC5waW5uZWQgIT09IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICBpc0pzb25FZGl0b3JBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IGNoYXJ0O1xuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuZGF0YUlkICYmXG4gICAgICAoIXN0YXRlLmRhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tub3JtYWxpemVkLmRhdGFJZF0pXG4gICAgKSB7XG4gICAgICBmYWlsZWQucHVzaChub3JtYWxpemVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdJZHMuYWRkKG5vcm1hbGl6ZWQuaWQpO1xuICAgIG5leHRDaGFydHMucHVzaChub3JtYWxpemVkKTtcbiAgfSk7XG4gIGlmICghbmV4dENoYXJ0cy5sZW5ndGggJiYgIWZhaWxlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IG5leHRDaGFydHMubGVuZ3RoID8gWy4uLihzdGF0ZS5jaGFydHMgfHwgW10pLCAuLi5uZXh0Q2hhcnRzXSA6IHN0YXRlLmNoYXJ0cyxcbiAgICBjaGFydHNUb0JlTWVyZ2VkOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzVG9CZU1lcmdlZCB8fCBbXSkuZmlsdGVyKGNoYXJ0ID0+ICFpbmNvbWluZ0lkcy5oYXMoY2hhcnQuaWQpKSxcbiAgICAgIC4uLmZhaWxlZFxuICAgIF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDaGFydERhdGFzZXRJZHMoXG4gIHNhdmVkQ2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogQ2hhcnRDb25maWdbXSB8IG51bGwge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc2F2ZWRDaGFydHMpIHx8ICFzYXZlZENoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXBsYWNlZCA9IHNhdmVkQ2hhcnRzXG4gICAgLmZpbHRlcihjaGFydCA9PiBjaGFydD8uZGF0YUlkID09PSBkYXRhSWQpXG4gICAgLm1hcChjaGFydCA9PiAoey4uLmNoYXJ0LCBkYXRhSWQ6IGRhdGFJZFRvVXNlfSkpO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZWZmZWN0czogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZWZmZWN0cyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbXG4gICAgLi4uc3RhdGUuZWZmZWN0cyxcbiAgICAuLi4oZWZmZWN0cyB8fCBbXSlcbiAgICAgIC5tYXAoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Db25maWdcbiAgICAgICAgICA/IGNyZWF0ZUVmZmVjdChcbiAgICAgICAgICAgICAgZGVlcG1lcmdlLmFsbChbXG4gICAgICAgICAgICAgICAgZWZmZWN0LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFsbCBwYW5lbHMgd2hlbiBsb2FkaW5nIGVmZmVjdHNcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3QgJiYgZWZmZWN0LmlzVmFsaWRUb1NhdmUoKSk7XG4gICAgICB9KVxuICBdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXI6IG5ld0VmZmVjdHMubWFwKGVmZmVjdCA9PiBlZmZlY3QuaWQpXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYW5ub3RhdGlvbnM6IGFueVtdKTogUyB7XG4gIGlmICghYW5ub3RhdGlvbnMgfHwgIWFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoc3RhdGUuYW5ub3RhdGlvbnMubWFwKGEgPT4gYS5pZCkpO1xuICBjb25zdCB2YWxpZEFubm90YXRpb25zID0gYW5ub3RhdGlvbnNcbiAgICAuZmlsdGVyKFxuICAgICAgYSA9PlxuICAgICAgICBhICYmXG4gICAgICAgIGEuaWQgJiZcbiAgICAgICAgIWV4aXN0aW5nSWRzLmhhcyhhLmlkKSAmJlxuICAgICAgICBpc0Fubm90YXRpb25LaW5kKGEua2luZCkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShhLmFuY2hvclBvaW50KSAmJlxuICAgICAgICAoYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDIgfHwgYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDMpICYmXG4gICAgICAgIGEuYW5jaG9yUG9pbnQuZXZlcnkodmFsdWUgPT4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgJiZcbiAgICAgICAgKGEua2luZCAhPT0gQW5ub3RhdGlvbktpbmQuUlVMRVIgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShhLmVuZFBvaW50KSAmJlxuICAgICAgICAgICAgKGEuZW5kUG9pbnQubGVuZ3RoID09PSAyIHx8IGEuZW5kUG9pbnQubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICAgICAgYS5lbmRQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSkpXG4gICAgKVxuICAgIC5tYXAoYSA9PiAoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgYXV0b1NpemU6IHRydWUsXG4gICAgICBhdXRvU2l6ZVk6IHRydWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBsaW5lQ29sb3I6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgICAgbGluZVdpZHRoOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgIHRleHRIZWlnaHQ6IDAsXG4gICAgICAuLi5hLFxuICAgICAgLi4uKGEua2luZCA9PT0gQW5ub3RhdGlvbktpbmQuUlVMRVJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzaG93Q3VzdG9tVGV4dDogYS5zaG93Q3VzdG9tVGV4dCA/PyB0cnVlLFxuICAgICAgICAgICAgc2hvd0Rpc3RhbmNlOiBhLnNob3dEaXN0YW5jZSA/PyB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsLFxuICAgIC8vIGFuZCB0aGUgbW9zdCBjb21tb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lIGFtb25nIHRoZSBjb25maWdzIHRoYXQgc2V0IG9uZVxuICAgIHRpbWVGb3JtYXQ6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lRm9ybWF0KSksXG4gICAgdGltZXpvbmU6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lem9uZSkpXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgbGF5ZXJUZXh0TGFiZWxzOiBhbnlbXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFuOyBsYXllclR5cGU/OiBzdHJpbmcgfCBudWxsfSA9IHt9XG4pOiBhbnlbXSB7XG4gIGNvbnN0IGxheWVyVGV4dExhYmVsID0gbGF5ZXJUZXh0TGFiZWxzWzBdO1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcbiAgY29uc3QgY291bnRMYWJlbExheWVyID0gQm9vbGVhbihcbiAgICBvcHRpb25zLmxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMob3B0aW9ucy5sYXllclR5cGUpXG4gICk7XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBsZXQgZmllbGQgPSBudWxsO1xuICAgIGlmICh0ZXh0TGFiZWwuZmllbGQpIHtcbiAgICAgIC8vIENsdXN0ZXIsIGhleGJpbiwgYW5kIGdyaWQgcGVyc2lzdCBhIHN5bnRoZXRpYyBwb2ludC1jb3VudCBmaWVsZCB0aGF0XG4gICAgICAvLyBpcyBub3Qgb25lIG9mIHRoZSBkYXRhc2V0IGNvbHVtbnMuXG4gICAgICBmaWVsZCA9XG4gICAgICAgIGNvdW50TGFiZWxMYXllciAmJiB0ZXh0TGFiZWwuZmllbGQubmFtZSA9PT0gUE9JTlRfQ09VTlRfRklFTERfTkFNRVxuICAgICAgICAgID8gY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQoKVxuICAgICAgICAgIDogZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC8vIEtlZXAgZXhwbGljaXQgZmFsc2UgLyAwLiBgfHxgIHdvdWxkIHJlcGxhY2UgYSBzYXZlZCBjb2xsaXNpb25FbmFibGVkXG4gICAgICAgIC8vIG9mIGZhbHNlIHdpdGggdGhlIGFnZ3JlZ2F0aW9uIGRlZmF1bHQgb2YgdHJ1ZS5cbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gPz8gbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcHMgc2F2ZWQgYmVmb3JlIGNvdW50IGxhYmVscyBvbWl0IGB0ZXh0TGFiZWxgLiBUaG9zZSBjbHVzdGVyLCBoZXhiaW4sIGFuZFxuICogZ3JpZCBsYXllcnMgc3RheSB1bmxhYmVsZWQuIE5ldyBsYXllcnMgc3RpbGwgZ2V0IHRoZSBwb2ludC1jb3VudCBkZWZhdWx0XG4gKiBmcm9tIGBnZXREZWZhdWx0TGF5ZXJDb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihcbiAgbGF5ZXJUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBuZXdMYXllclRleHRMYWJlbDogYW55W11cbik6IGFueVtdIHtcbiAgaWYgKGxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobGF5ZXJUeXBlKSkge1xuICAgIHJldHVybiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dO1xuICB9XG4gIHJldHVybiBuZXdMYXllclRleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBTYXZlZCB2aXN1YWwgY2hhbm5lbCBmaWVsZC9zY2FsZSBtYXkgbGl2ZSBpbiBhbnkgb2Y6XG4gKiAtIGBjb25maWdba2V5XWAgYWZ0ZXIgc2NoZW1hIHBhcnNlIChWaXN1YWxDaGFubmVsU2NoZW1hVjEgZm9sZHMgY2hhbm5lbHMgaW50byBjb25maWcpXG4gKiAtIGB2aXN1YWxDaGFubmVsc1trZXldYCBhcyBhIHNpYmxpbmcgb2YgYGNvbmZpZ2AgKHVucGFyc2VkIGFkZERhdGFUb01hcCBwYXlsb2FkKVxuICogLSBgY29uZmlnLnZpc3VhbENoYW5uZWxzW2tleV1gIChjb21tb24gbWlzdGFrZSBvZiBuZXN0aW5nIHZpc3VhbENoYW5uZWxzIGluc2lkZSBjb25maWcpXG4gKlxuICogV2l0aG91dCB0aGlzIGxvb2t1cCwgcHJvZ3JhbW1hdGljIEdlb0pTT04gc3Ryb2tlQ29sb3JGaWVsZCBuZXZlciBiaW5kcyBhbmRcbiAqIHN0cm9rZUNvbG9yRG9tYWluIHN0YXlzIGF0IHRoZSBkZWZhdWx0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyOiBQYXJzZWRMYXllciwga2V5OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjb25maWcgPSBzYXZlZExheWVyLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29uZmlnW2tleV07XG4gIH1cbiAgY29uc3QgY2hhbm5lbHMgPVxuICAgIChzYXZlZExheWVyIGFzIHt2aXN1YWxDaGFubmVscz86IFJlY29yZDxzdHJpbmcsIGFueT59KS52aXN1YWxDaGFubmVscyB8fFxuICAgIChjb25maWcgJiYgY29uZmlnLnZpc3VhbENoYW5uZWxzKTtcbiAgaWYgKGNoYW5uZWxzICYmIHR5cGVvZiBjaGFubmVscyA9PT0gJ29iamVjdCcgJiYgY2hhbm5lbHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNoYW5uZWxzW2tleV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBjb25zdCBzYXZlZEZpZWxkID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgZmllbGQpO1xuICAgIGNvbnN0IHNhdmVkU2NhbGUgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBzY2FsZSk7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkRmllbGQ/Lm5hbWUpIHtcbiAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBzYXZlZEZpZWxkLm5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgLi4uKHNhdmVkU2NhbGUgPyB7W3NjYWxlXTogc2F2ZWRTY2FsZX0gOiB7fSlcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICB9XG5cbiAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkRmllbGQ/Lm5hbWU7XG4gICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbiAgLy8gU2F2ZWQgbWFwcyB0aGF0IG9taXQgdGV4dExhYmVsIHByZWRhdGUgY291bnQgbGFiZWxzIGFuZCBzdGF5IHVubGFiZWxlZC5cbiAgLy8gQSBuZXcgbGF5ZXIgY29uZmlnIG9taXRzIGl0IHRvbywgYW5kIHNob3VsZCBrZWVwIHRoZSBsYXllciBkZWZhdWx0LlxuICBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHNhdmVkTGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCxcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChmaWVsZHMsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgbGF5ZXJUeXBlOiBzYXZlZExheWVyLnR5cGVcbiAgICAgICAgfSlcbiAgICAgIDogb3B0aW9ucy5rZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWxcbiAgICAgID8gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihzYXZlZExheWVyLnR5cGUsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwpXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBzYXZlZFZpc0NvbmZpZyA9XG4gICAgc2F2ZWRMYXllci50eXBlID09PSAnM0QnXG4gICAgICA/IG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnKHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZylcbiAgICAgIDogc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnO1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZFZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBwcm9wOiAnY2FtZXJhVG91cicsXG4gICAgbWVyZ2U6IChzdGF0ZSwgdG91cikgPT5cbiAgICAgIHN0YXRlLmNhbWVyYVRvdXIgPyBzdGF0ZSA6IHsuLi5zdGF0ZSwgY2FtZXJhVG91cjogbm9ybWFsaXplQ2FtZXJhVG91cih0b3VyKX1cbiAgfSxcbiAge1xuICAgIHByb3A6ICdjYW1lcmFCb29rbWFya3MnLFxuICAgIG1lcmdlOiAoc3RhdGUsIGJvb2ttYXJrcykgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgY2FtZXJhQm9va21hcmtzOiBub3JtYWxpemVDYW1lcmFCb29rbWFya3MoW1xuICAgICAgICAuLi4oc3RhdGUuY2FtZXJhQm9va21hcmtzIHx8IFtdKSxcbiAgICAgICAgLi4ubm9ybWFsaXplQ2FtZXJhQm9va21hcmtzKGJvb2ttYXJrcylcbiAgICAgIF0pXG4gICAgfSlcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVyT3JkZXIsXG4gICAgcHJvcDogJ2xheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VDaGFydHMsXG4gICAgcHJvcDogJ2NoYXJ0cycsXG4gICAgdG9NZXJnZVByb3A6ICdjaGFydHNUb0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUNoYXJ0RGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgcHJvcDogJ2Fubm90YXRpb25zJyxcbiAgICB0b01lcmdlUHJvcDogJ2Fubm90YXRpb25zVG9CZU1lcmdlZCdcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FB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
|