kepler.gl 3.2.2 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/duckdb/src/components/index.d.ts +8 -1
- package/dist/src/duckdb/src/index.d.ts +3 -5
- package/dist/src/duckdb/src/table/index.d.ts +1 -0
- package/dist/src/processors/src/file-handler.d.ts +2 -7
- package/dist/src/utils/src/arrow-data-container.d.ts +38 -1
- package/dist/src/utils/src/data-container-interface.d.ts +3 -2
- package/dist/src/utils/src/index.d.ts +1 -1
- package/package.json +2 -2
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/package.json +7 -7
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/package.json +16 -16
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/d0/bd16d41c708342b14f4c0aaa31136faccd8d411ae1d3962252433ac31d00ac57f49ecd4f6b4d682ccdab28858444adefb98aa54c83743d739b90698c03cf +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/da/54/b803dd69cea23939320d2d3aa0502638ac264cea8968854e5ccc4a71ddfbb0d6ce41a875ec1be176eb7d99815b3d6464bf60d0274b1175d7fcb131846d7d +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/10/75/d229810e58d38a1b61f7938bf1587615fbe97f4afa69493e595badd1f471 +2 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/9c/6d/1f90c56b793c944c2a9a393e837a46aef02e3b867e2bf28fcb0929c4ac5e +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/dist/utils/utils.js +5 -4
- package/src/deckgl-arrow-layers/dist/utils/validate.js +3 -2
- package/src/deckgl-arrow-layers/package.json +3 -2
- package/src/deckgl-arrow-layers/src/utils/utils.ts +4 -3
- package/src/deckgl-arrow-layers/src/utils/validate.ts +2 -1
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/components/index.d.ts +8 -1
- package/src/duckdb/dist/components/index.js +54 -11
- package/src/duckdb/dist/index.d.ts +3 -5
- package/src/duckdb/dist/index.js +28 -40
- package/src/duckdb/dist/table/duckdb-table.js +3 -3
- package/src/duckdb/dist/table/index.d.ts +1 -0
- package/src/duckdb/dist/table/index.js +17 -0
- package/src/duckdb/package.json +25 -7
- package/src/duckdb/src/components/index.tsx +9 -1
- package/src/duckdb/src/index.ts +3 -9
- package/src/duckdb/src/table/duckdb-table.ts +11 -6
- package/src/duckdb/src/table/index.ts +5 -0
- package/src/effects/package.json +5 -5
- package/src/layers/dist/base-layer.js +2 -6
- package/src/layers/dist/icon-layer/icon-layer.d.ts +1 -0
- package/src/layers/dist/icon-layer/icon-layer.js +18 -3
- package/src/layers/dist/layer-text-label.js +3 -3
- package/src/layers/package.json +9 -9
- package/src/layers/src/base-layer.ts +3 -2
- package/src/layers/src/icon-layer/icon-layer.ts +13 -0
- package/src/layers/src/layer-text-label.ts +3 -3
- package/src/localization/package.json +1 -1
- package/src/processors/dist/file-handler.d.ts +2 -7
- package/src/processors/dist/file-handler.js +8 -16
- package/src/processors/package.json +7 -7
- package/src/processors/src/file-handler.ts +3 -10
- package/src/reducers/package.json +16 -16
- package/src/schemas/package.json +7 -7
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/92/9b4a08e852e2f12e4702d7c41fe5299bcd72ee10d25072f6aa4bb473d4dbe8d2ea1992b32bf82ea9ad73efdacf9f4e228a18523c93042cc58d07a56115bf +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fd/ef/551b4725615a0e609688e4b55cf4f617fab2a80dcb5e9efb288d77e62f25cd67f3525e372e109c35ef3b3508da4eb974cdf1a784ee3ff610942b93415cc7 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/58/24/f9a517552c80acd6fe8c93f7ed4a3e8b24272284e6f2257ad18e152a8dbf +2 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/aa/b2/36c45c478923af2d1fd8b06c81f5aa622e67be3239349c2219ac4652d959 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/kepler-table.js +3 -3
- package/src/table/package.json +5 -5
- package/src/table/src/kepler-table.ts +1 -1
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/utils/dist/arrow-data-container.d.ts +38 -1
- package/src/utils/dist/arrow-data-container.js +78 -11
- package/src/utils/dist/data-container-interface.d.ts +3 -2
- package/src/utils/dist/data-container-interface.js +1 -1
- package/src/utils/dist/data-utils.js +3 -6
- package/src/utils/dist/index.d.ts +1 -1
- package/src/utils/dist/index.js +29 -1
- package/src/utils/package.json +4 -4
- package/src/utils/src/arrow-data-container.ts +101 -13
- package/src/utils/src/data-container-interface.ts +3 -2
- package/src/utils/src/data-utils.ts +2 -2
- package/src/utils/src/index.ts +5 -1
- package/umd/keplergl.min.js +1370 -1370
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
4
3
|
var _regeneratorRuntime2 = require("@babel/runtime/regenerator");
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -20,7 +19,6 @@ var _extensions = require("@deck.gl/extensions");
|
|
|
20
19
|
var _layers = require("@deck.gl/layers");
|
|
21
20
|
var _window = require("global/window");
|
|
22
21
|
var _keymirror = _interopRequireDefault(require("keymirror"));
|
|
23
|
-
var arrow = _interopRequireWildcard(require("apache-arrow"));
|
|
24
22
|
var _defaultLayerIcon = _interopRequireDefault(require("./default-layer-icon"));
|
|
25
23
|
var _layerUpdate = require("./layer-update");
|
|
26
24
|
var _layerUtils = require("./layer-utils");
|
|
@@ -30,8 +28,6 @@ var _commonUtils = require("@kepler.gl/common-utils");
|
|
|
30
28
|
var _memoize = _interopRequireDefault(require("lodash/memoize"));
|
|
31
29
|
var _getApplicationConfig; // SPDX-License-Identifier: MIT
|
|
32
30
|
// Copyright contributors to the kepler.gl project
|
|
33
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
34
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
35
31
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
36
32
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
37
33
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
@@ -1361,7 +1357,7 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1361
1357
|
var data = renderOpts.data,
|
|
1362
1358
|
mapState = renderOpts.mapState;
|
|
1363
1359
|
var textLabel = this.config.textLabel;
|
|
1364
|
-
var TextLayerClass = data.data
|
|
1360
|
+
var TextLayerClass = (0, _utils.isArrowTable)(data.data) ? _deckglArrowLayers.GeoArrowTextLayer : _layers.TextLayer;
|
|
1365
1361
|
return data.textLabels.reduce(function (accu, d, i) {
|
|
1366
1362
|
if (d.getText) {
|
|
1367
1363
|
var _textLabel$i$field, _textLabel$i$field2;
|
|
@@ -1537,4 +1533,4 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1537
1533
|
}]);
|
|
1538
1534
|
}();
|
|
1539
1535
|
var _default = exports["default"] = Layer;
|
|
1540
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZGVja2dsQXJyb3dMYXllcnMiLCJfZXh0ZW5zaW9ucyIsIl9sYXllcnMiLCJfd2luZG93IiwiX2tleW1pcnJvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZmF1bHRMYXllckljb24iLCJfbGF5ZXJVcGRhdGUiLCJfbGF5ZXJVdGlscyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfbWVtb2l6ZSIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfbWFya2VkIiwiX3JlZ2VuZXJhdG9yUnVudGltZTIiLCJtYXJrIiwiZ2VuZXJhdGVDb2xvciIsIkxBWUVSX0lEX0xFTkdUSCIsImV4cG9ydHMiLCJNQVhfU0FNUExFX1NJWkUiLCJkZWZhdWx0RG9tYWluIiwiZGF0YUZpbHRlckV4dGVuc2lvbiIsIkRhdGFGaWx0ZXJFeHRlbnNpb24iLCJmaWx0ZXJTaXplIiwiTUFYX0dQVV9GSUxURVJTIiwiY291bnRJdGVtcyIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwidXNlT25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiZGVmYXVsdERhdGFBY2Nlc3NvciIsImRjIiwiZCIsImlkZW50aXR5IiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJPVkVSTEFZX1RZUEVfQ09OU1QiLCJrZXltaXJyb3IiLCJkZWNrZ2wiLCJtYXBib3hnbCIsImxheWVyQ29sb3JzIiwidmFsdWVzIiwiRGF0YVZpekNvbG9ycyIsIm1hcCIsImhleFRvUmdiIiwiaW5kZXgiLCJfcmVnZW5lcmF0b3IiLCJ3cmFwIiwiZ2VuZXJhdGVDb2xvciQiLCJfY29udGV4dCIsInByZXYiLCJzdG9wIiwiY29sb3JNYWtlciIsIkxheWVyIiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsIm1ldGEiLCJ2aXNDb25maWdTZXR0aW5ncyIsImNvbmZpZyIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsIl9zdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImtleSIsImNvbHVtbnMiLCJnZXRMYXllckNvbHVtbnMiLCJpc1ZhbGlkIiwiZXJyb3JNZXNzYWdlIiwiZmlsdGVyZWRJdGVtQ291bnQiLCJfY3JlYXRlQ2xhc3MyIiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJyZWR1Y2UiLCJhY2MiLCJvYmoiLCJyZXF1aXJlZENvbHVtbnMiLCJjb25jYXQiLCJvcHRpb25hbENvbHVtbnMiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJhbHRpdHVkZSIsImFsdCIsImxhdDAiLCJsbmcwIiwiYWx0MCIsImxhdDEiLCJsbmcxIiwiYWx0MSIsIl9wcm9wcyRpc1Zpc2libGUiLCJfcHJvcHMkaXNDb25maWdBY3RpdmUiLCJfcHJvcHMkaGlkZGVuIiwiZGF0YUlkIiwibGFiZWwiLCJERUZBVUxUX0xBWUVSX0xBQkVMIiwiaXNWaXNpYmxlIiwiaXNDb25maWdBY3RpdmUiLCJoaWdobGlnaHRDb2xvciIsIkRFRkFVTFRfSElHSExJR0hUX0NPTE9SIiwiaGlkZGVuIiwiY29sb3JGaWVsZCIsImNvbG9yRG9tYWluIiwiY29sb3JTY2FsZSIsIlNDQUxFX1RZUEVTIiwicXVhbnRpbGUiLCJzaXplRG9tYWluIiwic2l6ZVNjYWxlIiwibGluZWFyIiwic2l6ZUZpZWxkIiwidmlzQ29uZmlnIiwidGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjb2xvclJhbmdlIiwiYW5pbWF0aW9uIiwiZW5hYmxlZCIsImdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbiIsImNoYW5uZWwiLCJ2aXN1YWxDaGFubmVscyIsIm1lYXN1cmUiLCJ1bmRlZmluZWQiLCJyYW5nZVNldHRpbmdzIiwiZmllbGRTZXR0aW5ncyIsImRpc3BsYXlOYW1lIiwiZGVmYXVsdE1lYXN1cmUiLCJhc3NpZ25Db2x1bW4iLCJfdGhpcyRjb25maWckY29sdW1ucyIsInVwZGF0ZSIsImZpZWxkSWR4IiwiYXNzaWduQ29sdW1uUGFpcnMiLCJmaWVsZFBhaXJzIiwiX3RoaXMkY29sdW1uUGFpcnMiLCJfdGhpcyRjb2x1bW5QYWlyczIiLCJjb2x1bW5QYWlycyIsIl9yZWYiLCJ1cGRhdGVkQ29sdW1uIiwicGFydG5lcktleXMiLCJ0b0FycmF5IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfdGhpcyRjb2x1bW5QYWlyczMiLCJfdGhpcyRjb2x1bW5QYWlyczQiLCJwYXJ0bmVyS2V5IiwiX3RoaXMkY29sdW1uUGFpcnM1IiwiZXJyIiwiZ2V0Wm9vbUZhY3RvciIsIl9yZWYyIiwiem9vbSIsIl9yZWYyJHpvb21PZmZzZXQiLCJ6b29tT2Zmc2V0IiwiTWF0aCIsInBvdyIsIm1heCIsImdldEVsZXZhdGlvblpvb21GYWN0b3IiLCJfcmVmMyIsIl9yZWYzJHpvb21PZmZzZXQiLCJfdGhpcyRjb25maWckdmlzQ29uZmkiLCJmaXhlZEhlaWdodCIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsIm9sZExheWVyRGF0YSIsImFuaW1hdGlvbkNvbmZpZyIsInJlbmRlckxheWVyIiwiZ2V0SG92ZXJEYXRhIiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsImZpZWxkcyIsImhvdmVySW5mbyIsInJvdyIsImdldEZpbHRlcmVkSXRlbUNvdW50IiwiZmlyc3RMYXllciIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJjb25maWdUb0NvcHkiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsIl90aGlzIiwic2hhbGxvd0NvcHkiLCJ2Iiwibm90VG9Db3B5IiwiZ3JvdXAiLCJjdXJyZW50Q29uZmlnIiwiY29waWVkIiwiY29weUxheWVyQ29uZmlnIiwiX3NhdGlzZmllZENvbHVtbk1vZGUiLCJkYXRhc2V0Iiwic2F0aXNmaWVkQ29sdW1uTW9kZSIsImdldFNhdGlzZmllZENvbHVtbk1vZGUiLCJvcHRpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImFsdFByb3BzIiwiZGVmYXVsdENvbHVtbkNvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX3RoaXMyIiwiX3JlZjQiLCJfcmVmNCRzaGFsbG93Q29weSIsIl9yZWY0JG5vdFRvQ29weSIsImlzUGxhaW5PYmplY3QiLCJpbmNsdWRlcyIsIm5vdE51bGxvclVuZGVmaW5lZCIsInJlZ2lzdGVyVmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdzIiwiX3RoaXMzIiwiaXRlbSIsImNvbmZpZ0l0ZW0iLCJMQVlFUl9WSVNfQ09ORklHUyIsIl90eXBlb2YyIiwiZXZlcnkiLCJwIiwicHJvdG90eXBlIiwicHJvcHNDb2x1bW5zIiwiY29sdW1uVmFsaWRhdG9ycyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYXllckNvbHVtbnMiLCJhY2N1IiwiX3Byb3BzQ29sdW1ucyRrZXkkdmFsIiwiX3Byb3BzQ29sdW1ucyRrZXkiLCJfcHJvcHNDb2x1bW5zJGtleSRmaWUiLCJfcHJvcHNDb2x1bW5zJGtleTIiLCJfcHJvcHNDb2x1bW5zJGtleSR2YWwyIiwiX3Byb3BzQ29sdW1ucyRrZXkzIiwiX3Byb3BzQ29sdW1ucyRrZXkkZmllMiIsIl9wcm9wc0NvbHVtbnMka2V5NCIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwiX3Byb3BzQ29sdW1ucyRrZXkkdmFsMyIsIl9wcm9wc0NvbHVtbnMka2V5NSIsIl9wcm9wc0NvbHVtbnMka2V5JGZpZTMiLCJfcHJvcHNDb2x1bW5zJGtleTYiLCJuZXdDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInByb3AiLCJfdGhpcyRjb25maWciLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsIl9yZWY1IiwiX3JlZjYiLCJfc2xpY2VkVG9BcnJheTIiLCJpc0NvbG9yUmFuZ2UiLCJjb2xvcnMiLCJ1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlIiwidXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJfbmV3Q29uZmlnJGNvbG9yUmFuZ2UiLCJfbmV3Q29uZmlnJGNvbG9yUmFuZ2UyIiwiY29sb3JSYW5nZUNvbmZpZyIsImN1c3RvbSIsImN1c3RvbUJyZWFrcyIsImN1c3RvbVBhbGV0dGUiLCJfdGhpcyRjb25maWcyIiwiY29sb3JNYXAiLCJjaGFubmVsS2V5IiwiZmluZCIsIkNvbnNvbGUiLCJ3YXJuIiwiaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAiLCJpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSIsIl9uZXdDb25maWckY3VzdG9tUGFsZSIsIl90aGlzJGNvbmZpZzMiLCJpc0N1c3RvbSIsImNhdGVnb3J5IiwiY3VzdG9tU3RlcHNDaGFuZ2VkIiwic2hvd0Ryb3Bkb3duIiwic3RlcHMiLCJyZXZlcnNlZCIsIkJvb2xlYW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwiX3RoaXMkY29uZmlnNCIsImlzQ3VzdG9tQ29sb3JSZXZlcnNlZCIsInVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUkiLCJ1cGRhdGVDb2xvclJhbmdlQnlNYXRjaGluZ1BhbGV0dGUiLCJoYXNDb2x1bW5WYWx1ZSIsImNvbHVtbiIsImhhc1JlcXVpcmVkQ29sdW1uIiwiaGFzQWxsQ29sdW1ucyIsIl90aGlzNCIsIl90aGlzJGNvbmZpZzUiLCJfY3VycmVudENvbHVtbk1vZGVzJHIiLCJjdXJyZW50Q29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiY29sS2V5IiwiaGFzTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiZGF0YSIsIm51bVJvd3MiLCJpc1ZhbGlkVG9TYXZlIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImdldENhdGVnb3JpY2FsQ29sb3JTY2FsZSIsImhhc0NvbG9yTWFwIiwiX2NvbG9yUmFuZ2UkY29sb3JNYXAiLCJjTWFwIiwiTWFwIiwiX3JlZjciLCJfcmVmOCIsImsiLCJzY2FsZVR5cGUiLCJvcmRpbmFsIiwiZ2V0U2NhbGVGdW5jdGlvbiIsInVua25vd24iLCJVTktOT1dOX0NPTE9SX0tFWSIsImdldFZpc0NoYW5uZWxTY2FsZSIsImFjY2Vzc1ZTRmllbGRWYWx1ZSIsIl9maWVsZCIsIl9pbmRleEtleSIsImdldEF0dHJpYnV0ZUFjY2Vzc29ycyIsIl9yZWY5IiwiX3RoaXM1IiwiX3JlZjkkZGF0YUFjY2Vzc29yIiwiZGF0YUFjY2Vzc29yIiwiaW5kZXhLZXkiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJfdGhpczUkdmlzdWFsQ2hhbm5lbHMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJzaG91bGRHZXRTY2FsZSIsImlzRml4ZWQiLCJzY2FsZUZ1bmN0aW9uIiwiZ2V0RmllbGRWYWx1ZSIsImJ5Wm9vbSIsIm1lbW9pemUiLCJ6Iiwic2NhbGVGdW5jIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsImlzRG9tYWluUXVhbnRpbGUiLCJ6U3RlcHMiLCJnZXRTY2FsZSIsImdldFNjYWxlQnlab29tIiwic2NhbGVEb21haW4iLCJnZXREb21haW5TdGVwc2J5Wm9vbSIsInF1YW50aWxlcyIsInRocmVzaG9sZHMiLCJnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlcyIsImlzRG9tYWluU3RvcHMiLCJzdG9wcyIsIlNDQUxFX0ZVTkMiLCJnZXRQb2ludHNCb3VuZHMiLCJnZXRQb3NpdGlvbiIsInNhbXBsZURhdGEiLCJnZXRTYW1wbGVDb250YWluZXJEYXRhIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJnZXRMYXRMbmdCb3VuZHMiLCJsbmdCb3VuZHMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsImRpZmZVcGRhdGVUcmlnZ2VycyIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRWYWx1ZSIsImF0dHJpYnV0ZVZhbHVlIiwidXBkYXRlTWV0YSIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsIl9yZWYxMCIsImZpbHRlcmVkSW5kZXgiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwidXBkYXRlRGF0YSIsImxheWVyRGF0YXNldCIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJ1cGRhdGVMYXllck1ldGEiLCJjYWxjdWxhdGVEYXRhQXR0cmlidXRlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJuZXdGaWx0ZXIiLCJfdGhpczYiLCJ0YWJsZSIsImdldERhdGFzZXQiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsIl90aGlzNyIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJoYXNIb3ZlcmVkT2JqZWN0Iiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwiX29iamVjdEluZm8kbGF5ZXIiLCJwaWNrZWQiLCJsYXllciIsImdldFJhZGl1c1NjYWxlQnlab29tIiwibWFwU3RhdGUiLCJmaXhlZFJhZGl1cyIsInJhZGl1c0NoYW5uZWwiLCJ2YyIsInJhZGl1cyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIl90aGlzOCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImJydXNoaW5nVGFyZ2V0IiwiYnJ1c2giLCJhdXRvSGlnaGxpZ2h0IiwiYnJ1c2hpbmdSYWRpdXMiLCJicnVzaGluZ0VuYWJsZWQiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJfcmVmMTIiLCJpZHgiLCJncHVGaWx0ZXIiLCJsYXllckNhbGxiYWNrcyIsInZpc2libGUiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJMTkdMQVQiLCJwaWNrYWJsZSIsIndyYXBMb25naXR1ZGUiLCJwYXJhbWV0ZXJzIiwiZGVwdGhUZXN0IiwiZHJhZ1JvdGF0ZSIsImVuYWJsZTNkIiwib3BhY2l0eSIsImV4dGVuc2lvbnMiLCJmaWx0ZXJSYW5nZSIsIm9uRmlsdGVyZWRJdGVtc0NoYW5nZSIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJyZW5kZXJUZXh0TGFiZWxMYXllciIsIl9yZWYxMyIsInJlbmRlck9wdHMiLCJfdGhpczkiLCJnZXRGaWx0ZXJlZCIsImdldFBpeGVsT2Zmc2V0IiwiYmFja2dyb3VuZFByb3BzIiwic2hhcmVkUHJvcHMiLCJUZXh0TGF5ZXJDbGFzcyIsIlRhYmxlIiwiR2VvQXJyb3dUZXh0TGF5ZXIiLCJUZXh0TGF5ZXIiLCJ0ZXh0TGFiZWxzIiwiZ2V0VGV4dCIsIl90ZXh0TGFiZWwkaSRmaWVsZCIsIl90ZXh0TGFiZWwkaSRmaWVsZDIiLCJiYWNrZ3JvdW5kIiwiY2hhcmFjdGVyU2V0IiwiZ2V0U2l6ZSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJnZXRUZXh0QW5jaG9yIiwiYW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJhbGlnbm1lbnQiLCJnZXRDb2xvciIsIm91dGxpbmVXaWR0aCIsIlRFWFRfT1VUTElORV9NVUxUSVBMSUVSIiwib3V0bGluZUNvbG9yIiwiZ2V0QmFja2dyb3VuZENvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiZm9udFNldHRpbmdzIiwic2RmIiwiZ2V0RmlsdGVyVmFsdWUiLCJnZXRSYWRpdXMiLCJfc3ViTGF5ZXJQcm9wcyIsImN1bGwiLCJrZXBsZXJUYWJsZSIsIl9kYXRhQ29udGFpbmVyIiwiX2RhdGFzZXQiLCJnZXRMZWdlbmRWaXN1YWxDaGFubmVscyIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZEZpZWxkcyIsImdldEFsbFBvc3NpYmxlQ29sdW1uUGFpcnMiLCJhbGxLZXlzIiwicG9pbnRlcnMiLCJjb3VudFBlcktleSIsInBhaXJzIiwiaW5jcmVtZW50UG9pbnRlcnMiLCJuZXdQYWlyIiwiY3V1ciIsInB0cyIsImNvdW50cyIsImMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtHZW9BcnJvd1RleHRMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtYXJyb3ctbGF5ZXJzJztcbmltcG9ydCB7RGF0YUZpbHRlckV4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5pbXBvcnQge1RleHRMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBrZXltaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcbmltcG9ydCB7Z2V0U2F0aXNmaWVkQ29sdW1uTW9kZSwgRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWV9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBDSEFOTkVMX1NDQUxFUyxcbiAgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTLFxuICBERUZBVUxUX0NPTE9SX1VJLFxuICBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgREVGQVVMVF9MQVlFUl9MQUJFTCxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBEYXRhVml6Q29sb3JzLFxuICBGSUVMRF9PUFRTLFxuICBMQVlFUl9WSVNfQ09ORklHUyxcbiAgTUFYX0dQVV9GSUxURVJTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUixcbiAgU0NBTEVfRlVOQyxcbiAgU0NBTEVfVFlQRVMsXG4gIFRFWFRfT1VUTElORV9NVUxUSVBMSUVSLFxuICBVTktOT1dOX0NPTE9SX0tFWVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBEb21haW5RdWFudGlsZXMsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICBnZXRMYXRMbmdCb3VuZHMsXG4gIGdldFNhbXBsZUNvbnRhaW5lckRhdGEsXG4gIGhhc0NvbG9yTWFwLFxuICBoZXhUb1JnYixcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNEb21haW5TdG9wcyxcbiAgdXBkYXRlQ29sb3JSYW5nZUJ5TWF0Y2hpbmdQYWxldHRlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0RhdGFzZXRzLCBHcHVGaWx0ZXIsIEtlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZWRCaW4sXG4gIENvbG9yUmFuZ2UsXG4gIENvbG9yVUksXG4gIEZpZWxkLFxuICBGaWx0ZXIsXG4gIEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGUsXG4gIExheWVyVmlzQ29uZmlnU2V0dGluZ3MsXG4gIE1hcFN0YXRlLFxuICBBbmltYXRpb25Db25maWcsXG4gIEtlcGxlckxheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIENvbHVtblBhaXJzLFxuICBDb2x1bW5MYWJlbHMsXG4gIFN1cHBvcnRlZENvbHVtbk1vZGUsXG4gIEZpZWxkUGFpcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgUkdCQ29sb3IsXG4gIFZhbHVlT2YsXG4gIFZpc3VhbENoYW5uZWwsXG4gIFZpc3VhbENoYW5uZWxzLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBWaXN1YWxDaGFubmVsRmllbGQsXG4gIFZpc3VhbENoYW5uZWxTY2FsZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldFNjYWxlRnVuY3Rpb24sXG4gIGluaXRpYWxpemVMYXllckNvbG9yTWFwLFxuICBnZXRDYXRlZ29yaWNhbENvbG9yU2NhbGUsXG4gIHVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUlcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQge1xuICBpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSxcbiAgaXNEb21haW5RdWFudGlsZSxcbiAgZ2V0RG9tYWluU3RlcHNieVpvb20sXG4gIGdldFRocmVzaG9sZHNGcm9tUXVhbnRpbGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEFnZ3JlZ2F0ZWRCaW4sXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbCxcbiAgVmlzdWFsQ2hhbm5lbHMsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIFZpc3VhbENoYW5uZWxGaWVsZCxcbiAgVmlzdWFsQ2hhbm5lbFNjYWxlXG59O1xuXG5leHBvcnQgdHlwZSBMYXllckJhc2VDb25maWdQYXJ0aWFsID0ge2RhdGFJZDogTGF5ZXJCYXNlQ29uZmlnWydkYXRhSWQnXX0gJiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz47XG5cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JDb25maWcgPSB7XG4gIGNvbG9yRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgY29sb3JEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIGNvbG9yU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllclNpemVDb25maWcgPSB7XG4gIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgc2l6ZURvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgc2l6ZVNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG4gIHNpemVGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xufTtcbmV4cG9ydCB0eXBlIExheWVySGVpZ2h0Q29uZmlnID0ge1xuICBoZWlnaHRGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuICBoZWlnaHREb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIGhlaWdodFNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG59O1xuZXhwb3J0IHR5cGUgTGF5ZXJTdHJva2VDb2xvckNvbmZpZyA9IHtcbiAgc3Ryb2tlQ29sb3JGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuICBzdHJva2VDb2xvckRvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgc3Ryb2tlQ29sb3JTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xufTtcbmV4cG9ydCB0eXBlIExheWVyQ292ZXJhZ2VDb25maWcgPSB7XG4gIGNvdmVyYWdlRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgY292ZXJhZ2VEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIGNvdmVyYWdlU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllclJhZGl1c0NvbmZpZyA9IHtcbiAgcmFkaXVzRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgcmFkaXVzRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICByYWRpdXNTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xufTtcbmV4cG9ydCB0eXBlIExheWVyV2VpZ2h0Q29uZmlnID0ge1xuICB3ZWlnaHRGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xufTtcblxuZXhwb3J0IHR5cGUgVmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBtZWFzdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIENvbHVtblZhbGlkYXRvciA9IChjb2x1bW46IExheWVyQ29sdW1uLCBjb2x1bW5zOiBMYXllckNvbHVtbnMsIGFsbEZpZWxkczogRmllbGRbXSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IHR5cGUgVXBkYXRlVHJpZ2dlcnMgPSB7XG4gIFtrZXk6IHN0cmluZ106IFVwZGF0ZVRyaWdnZXI7XG59O1xuZXhwb3J0IHR5cGUgVXBkYXRlVHJpZ2dlciA9IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcbmV4cG9ydCB0eXBlIExheWVyQm91bmRzID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbi8qKlxuICogQXBwcm94LiBudW1iZXIgb2YgcG9pbnRzIHRvIHNhbXBsZSBpbiBhIGxhcmdlIGRhdGEgc2V0XG4gKi9cbmV4cG9ydCBjb25zdCBMQVlFUl9JRF9MRU5HVEggPSA2O1xuXG5jb25zdCBNQVhfU0FNUExFX1NJWkUgPSA1MDAwO1xuY29uc3QgZGVmYXVsdERvbWFpbjogW251bWJlciwgbnVtYmVyXSA9IFswLCAxXTtcbmNvbnN0IGRhdGFGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRGF0YUZpbHRlckV4dGVuc2lvbih7XG4gIGZpbHRlclNpemU6IE1BWF9HUFVfRklMVEVSUyxcbiAgLy8gYGNvdW50SXRlbXNgIG9wdGlvbi4gSXQgZW5hYmxlcyB0aGUgR1BVIHRvIHJlcG9ydCB0aGUgbnVtYmVyIG9mIG9iamVjdHMgdGhhdCBwYXNzIHRoZSBmaWx0ZXIgY3JpdGVyaWEgdmlhIHRoZSBgb25GaWx0ZXJlZEl0ZW1zQ2hhbmdlYCBjYWxsYmFjay5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBub3QgdHlwZWRcbiAgY291bnRJdGVtczogZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VPbkZpbHRlcmVkSXRlbXNDaGFuZ2UgPz8gZmFsc2Vcbn0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5jb25zdCBkZWZhdWx0RGF0YUFjY2Vzc29yID0gZGMgPT4gZCA9PiBkO1xuY29uc3QgaWRlbnRpdHkgPSBkID0+IGQ7XG4vLyBDYW4ndCB1c2UgZmllZFZhbHVlQWNjZXNvciBiZWNhdXNlIG5lZWQgdGhlIHJhdyBkYXRhIHRvIHJlbmRlciB0b29sdGlwXG4vLyBTSEFOOiBSZXZpc2l0IGhlcmVcbmV4cG9ydCBjb25zdCBkZWZhdWx0R2V0RmllbGRWYWx1ZSA9IChmaWVsZCwgZCkgPT4gZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfVFlQRV9DT05TVCA9IGtleW1pcnJvcih7XG4gIGRlY2tnbDogbnVsbCxcbiAgbWFwYm94Z2w6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvcnMgPSBPYmplY3QudmFsdWVzKERhdGFWaXpDb2xvcnMpLm1hcChoZXhUb1JnYik7XG5mdW5jdGlvbiogZ2VuZXJhdGVDb2xvcigpOiBHZW5lcmF0b3I8UkdCQ29sb3I+IHtcbiAgbGV0IGluZGV4ID0gMDtcbiAgd2hpbGUgKGluZGV4IDwgbGF5ZXJDb2xvcnMubGVuZ3RoICsgMSkge1xuICAgIGlmIChpbmRleCA9PT0gbGF5ZXJDb2xvcnMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuICAgIHlpZWxkIGxheWVyQ29sb3JzW2luZGV4KytdO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIExheWVySW5mb01vZGFsID0ge1xuICBpZDogc3RyaW5nO1xuICB0ZW1wbGF0ZTogUmVhY3QuRkM8dm9pZD47XG4gIG1vZGFsUHJvcHM6IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbG9yTWFrZXIgPSBnZW5lcmF0ZUNvbG9yKCk7XG5cbmV4cG9ydCB0eXBlIEJhc2VMYXllckNvbnN0cnVjdG9yUHJvcHMgPSB7XG4gIGlkPzogc3RyaW5nO1xufSAmIExheWVyQmFzZUNvbmZpZ1BhcnRpYWw7XG5cbmNsYXNzIExheWVyIGltcGxlbWVudHMgS2VwbGVyTGF5ZXIge1xuICBpZDogc3RyaW5nO1xuICBtZXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB2aXNDb25maWdTZXR0aW5nczoge1xuICAgIFtrZXk6IHN0cmluZ106IFZhbHVlT2Y8TGF5ZXJWaXNDb25maWdTZXR0aW5ncz47XG4gIH07XG4gIGNvbmZpZzogTGF5ZXJCYXNlQ29uZmlnICYgUGFydGlhbDxMYXllckNvbG9yQ29uZmlnICYgTGF5ZXJTaXplQ29uZmlnPjtcbiAgLy8gVE9ETzogZGVmaW5lIF9vbGREYXRhVXBkYXRlVHJpZ2dlcnNcbiAgX29sZERhdGFVcGRhdGVUcmlnZ2VyczogYW55O1xuXG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgZmlsdGVyZWRJdGVtQ291bnQ6IHtcbiAgICBbZGVja0xheWVySWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQmFzZUxheWVyQ29uc3RydWN0b3JQcm9wcykge1xuICAgIHRoaXMuaWQgPSBwcm9wcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuICAgIC8vIG1ldGFcbiAgICB0aGlzLm1ldGEgPSB7fTtcblxuICAgIC8vIHZpc0NvbmZpZ1NldHRpbmdzXG4gICAgdGhpcy52aXNDb25maWdTZXR0aW5ncyA9IHt9O1xuXG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyk7XG5cbiAgICAvLyBzZXQgY29sdW1uTW9kZSBmcm9tIHN1cHBvcnRlZCBjb2x1bW5zXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlKSB7XG4gICAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICAgIGlmIChzdXBwb3J0ZWRDb2x1bW5Nb2Rlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgPSBzdXBwb3J0ZWRDb2x1bW5Nb2Rlc1swXT8ua2V5O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB0aGVuIHNldCBjb2x1bW4sIGNvbHVtbk1vZGUgc2hvdWxkIGFscmVhZHkgYmVlbiBzZXRcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zID0gdGhpcy5nZXRMYXllckNvbHVtbnMocHJvcHMuY29sdW1ucyk7XG5cbiAgICAvLyBmYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbGF5ZXIgY2F1c2VkIGFuIGVycm9yLCBhbmQgd2FzIGRpc2FibGVkXG4gICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgLy8gaXRlbSBjb3VudFxuICAgIHRoaXMuZmlsdGVyZWRJdGVtQ291bnQgPSB7fTtcbiAgfVxuXG4gIGdldCBsYXllckljb24oKTogUmVhY3QuRWxlbWVudFR5cGUge1xuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IG92ZXJsYXlUeXBlKCk6IGtleW9mIHR5cGVvZiBPVkVSTEFZX1RZUEVfQ09OU1Qge1xuICAgIHJldHVybiBPVkVSTEFZX1RZUEVfQ09OU1QuZGVja2dsO1xuICB9XG5cbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHtzdXBwb3J0ZWRDb2x1bW5Nb2Rlc30gPSB0aGlzO1xuICAgIGlmIChzdXBwb3J0ZWRDb2x1bW5Nb2Rlcykge1xuICAgICAgcmV0dXJuIHN1cHBvcnRlZENvbHVtbk1vZGVzLnJlZHVjZTxzdHJpbmdbXT4oXG4gICAgICAgIChhY2MsIG9iaikgPT4gKG9iai5yZXF1aXJlZENvbHVtbnMgPyBhY2MuY29uY2F0KG9iai5yZXF1aXJlZENvbHVtbnMpIDogYWNjKSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHtzdXBwb3J0ZWRDb2x1bW5Nb2Rlc30gPSB0aGlzO1xuICAgIGlmIChzdXBwb3J0ZWRDb2x1bW5Nb2Rlcykge1xuICAgICAgcmV0dXJuIHN1cHBvcnRlZENvbHVtbk1vZGVzLnJlZHVjZTxzdHJpbmdbXT4oXG4gICAgICAgIChhY2MsIG9iaikgPT4gKG9iai5vcHRpb25hbENvbHVtbnMgPyBhY2MuY29uY2F0KG9iai5vcHRpb25hbENvbHVtbnMpIDogYWNjKSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMoKSB7XG4gICAgcmV0dXJuIFsnbGFiZWwnLCAnb3BhY2l0eScsICd0aGlja25lc3MnLCAnaXNWaXNpYmxlJywgJ2hpZGRlbiddO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCk6IFZpc3VhbENoYW5uZWxzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2NvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgbnVsbFZhbHVlOiBOT19WQUxVRV9DT0xPUixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBwcm9wZXJ0eTogJ3NpemUnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldCBjb2x1bW5WYWxpZGF0b3JzKCk6IHtba2V5OiBzdHJpbmddOiBDb2x1bW5WYWxpZGF0b3J9IHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgLypcbiAgICogQ29sdW1uIHBhaXJzIG1hcHMgbGF5ZXIgY29sdW1uIHRvIGEgc3BlY2lmaWMgZmllbGQgcGFpcnMsXG4gICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBudWxsXG4gICAqL1xuICBnZXQgY29sdW1uUGFpcnMoKTogQ29sdW1uUGFpcnMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2x1bW4gbGFiZWxzIGlmIGl0cyBkaWZmZXJlbnQgdGhhbiBjb2x1bW4ga2V5XG4gICAqL1xuICBnZXQgY29sdW1uTGFiZWxzKCk6IENvbHVtbkxhYmVscyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBwb2ludCBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBwb2ludCBiYXNlZCBsYXllcnM6IHBvaW50LCBpY29uIGV0Yy5cbiAgICovXG4gIGdldCBkZWZhdWx0UG9pbnRDb2x1bW5QYWlycygpOiBDb2x1bW5QYWlycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDoge3BhaXI6IFsnbG5nJywgJ2FsdGl0dWRlJ10sIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogWydsYXQnLCAnYWx0aXR1ZGUnXSwgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBhbHRpdHVkZToge3BhaXI6IFsnbG5nJywgJ2xhdCddLCBmaWVsZFBhaXJLZXk6ICdhbHRpdHVkZSd9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgbGluayBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBsaW5rIGJhc2VkIGxheWVyczogYXJjLCBsaW5lIGV0Y1xuICAgKi9cbiAgZ2V0IGRlZmF1bHRMaW5rQ29sdW1uUGFpcnMoKTogQ29sdW1uUGFpcnMge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQ6IHtwYWlyOiBbJ2xuZycsICdhbHQnXSwgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmc6IHtwYWlyOiBbJ2xhdCcsICdhbHQnXSwgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBhbHQ6IHtwYWlyOiBbJ2xuZycsICdsYXQnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfSxcblxuICAgICAgbGF0MDoge3BhaXI6ICdsbmcwJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcwOiB7cGFpcjogJ2xhdDAnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfSxcbiAgICAgIGFsdDA6IHtwYWlyOiBbJ2xuZzAnLCAnbGF0MCddLCBmaWVsZFBhaXJLZXk6ICdhbHRpdHVkZSd9LFxuXG4gICAgICBsYXQxOiB7cGFpcjogJ2xuZzEnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzE6IHtwYWlyOiAnbGF0MScsIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0MToge3BhaXI6IFsnbG5nMScsICdsYXQxJ10sIGZpZWxkUGFpcktleTogJ2FsdGl0dWRlJ31cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIFJlYWN0IGNvbXBvbmVudCBmb3IgdG8gcmVuZGVyIGxheWVyIGluc3RydWN0aW9ucyBpbiBhIG1vZGFsXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gYW4gb2JqZWN0XG4gICAqIEBleGFtcGxlXG4gICAqICByZXR1cm4ge1xuICAgKiAgICBpZDogJ2ljb25JbmZvJyxcbiAgICogICAgdGVtcGxhdGU6IEljb25JbmZvTW9kYWwsXG4gICAqICAgIG1vZGFsUHJvcHM6IHtcbiAgICogICAgICB0aXRsZTogJ0hvdyB0byBkcmF3IGljb25zJ1xuICAgKiAgIH07XG4gICAqIH1cbiAgICovXG4gIGdldCBsYXllckluZm9Nb2RhbCgpOiBMYXllckluZm9Nb2RhbCB8IFJlY29yZDxzdHJpbmcsIExheWVySW5mb01vZGFsPiB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hpY2ggY29sdW1uIG1vZGVzIHRoaXMgbGF5ZXIgc3VwcG9ydHNcbiAgICovXG4gIGdldCBzdXBwb3J0ZWRDb2x1bW5Nb2RlcygpOiBTdXBwb3J0ZWRDb2x1bW5Nb2RlW10gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBzdXBwb3J0ZWREYXRhc2V0VHlwZXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIEdpdmVuIGEgZGF0YXNldCwgYXV0b21hdGljYWxseSBmaW5kIHByb3BzIHRvIGNyZWF0ZSBsYXllciBiYXNlZCBvbiBpdFxuICAgKiBhbmQgcmV0dXJuIHRoZSBwcm9wcyBhbmQgcHJldmlvdXMgZm91bmQgbGF5ZXJzLlxuICAgKiBCeSBkZWZhdWx0LCBubyBsYXllcnMgd2lsbCBiZSBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyhcbiAgICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgICBmb3VuZExheWVycz86IGFueVtdXG4gICk6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlIHtcbiAgICByZXR1cm4ge3Byb3BzOiBbXSwgZm91bmRMYXllcnN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYXJyYXkgb2YgcHJlc2V0IHJlcXVpcmVkIGNvbHVtbiBuYW1lc1xuICAgKiBmb3VuZCBmaWVsZCB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIHRvIHNldCBhcyBsYXllciBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWVsZHNcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gYWxsRmllbGRzXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXSB8IG51bGx9IGFsbCBwb3NzaWJsZSByZXF1aXJlZCBsYXllciBjb2x1bW4gcGFpcnNcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdENvbHVtbkZpZWxkKGRlZmF1bHRGaWVsZHMsIGFsbEZpZWxkcykge1xuICAgIC8vIGZpbmQgYWxsIG1hdGNoZWQgZmllbGRzIGZvciBlYWNoIHJlcXVpcmVkIGNvbFxuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZHMpLnJlZHVjZSgocHJldiwga2V5KSA9PiB7XG4gICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IGFsbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgIGYgPT4gZi5uYW1lID09PSBkZWZhdWx0RmllbGRzW2tleV0gfHwgZGVmYXVsdEZpZWxkc1trZXldLmluY2x1ZGVzKGYubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIHByZXZba2V5XSA9IHJlcXVpcmVkRmllbGRzLmxlbmd0aFxuICAgICAgICA/IHJlcXVpcmVkRmllbGRzLm1hcChmID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogZi5uYW1lLFxuICAgICAgICAgICAgZmllbGRJZHg6IGYuZmllbGRJZHhcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKHJlcXVpcmVkQ29sdW1ucykuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgIC8vIGlmIGFueSBmaWVsZCBtaXNzaW5nLCByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUG9zc2libGVDb2x1bW5QYWlycyhyZXF1aXJlZENvbHVtbnMpO1xuICB9XG5cbiAgc3RhdGljIGdldEFsbFBvc3NpYmxlQ29sdW1uUGFpcnMocmVxdWlyZWRDb2x1bW5zKSB7XG4gICAgLy8gZm9yIG11bHRpcGxlIG1hdGNoZWQgZmllbGQgZm9yIG9uZSByZXF1aXJlZCBjb2x1bW4sIHJldHVybiBtdWx0aXBsZVxuICAgIC8vIGNvbWJpbmF0aW9ucywgZS4gZy4gaWYgY29sdW1uIGEgaGFzIDIgbWF0Y2hlZCwgY29sdW1uIGIgaGFzIDMgbWF0Y2hlZFxuICAgIC8vIDYgcG9zc2libGUgY29sdW1uIHBhaXJzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICBjb25zdCBhbGxLZXlzID0gT2JqZWN0LmtleXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgICBjb25zdCBwb2ludGVycyA9IGFsbEtleXMubWFwKChrLCBpKSA9PiAoaSA9PT0gYWxsS2V5cy5sZW5ndGggLSAxID8gLTEgOiAwKSk7XG4gICAgY29uc3QgY291bnRQZXJLZXkgPSBhbGxLZXlzLm1hcChrID0+IHJlcXVpcmVkQ29sdW1uc1trXS5sZW5ndGgpO1xuICAgIC8vIFRPRE86IEJldHRlciB0eXBpbmdzXG4gICAgY29uc3QgcGFpcnM6IGFueVtdID0gW107XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB3aGlsZSAoaW5jcmVtZW50UG9pbnRlcnMocG9pbnRlcnMsIGNvdW50UGVyS2V5LCBwb2ludGVycy5sZW5ndGggLSAxKSkge1xuICAgICAgY29uc3QgbmV3UGFpciA9IHBvaW50ZXJzLnJlZHVjZSgocHJldiwgY3V1ciwgaSkgPT4ge1xuICAgICAgICBwcmV2W2FsbEtleXNbaV1dID0gcmVxdWlyZWRDb2x1bW5zW2FsbEtleXNbaV1dW2N1dXJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcGFpcnMucHVzaChuZXdQYWlyKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IGluY3JlbWVudCBwb2ludGVyc1xuICAgIGZ1bmN0aW9uIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHB0c1swXSA9PT0gY291bnRzWzBdIC0gMSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGluY3JlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdHNbaW5kZXhdICsgMSA8IGNvdW50c1tpbmRleF0pIHtcbiAgICAgICAgcHRzW2luZGV4XSA9IHB0c1tpbmRleF0gKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHRzW2luZGV4XSA9IDA7XG4gICAgICByZXR1cm4gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgc3RhdGljIGhleFRvUmdiKGMpIHtcbiAgICByZXR1cm4gaGV4VG9SZ2IoYyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcoXG4gICAgcHJvcHM6IExheWVyQmFzZUNvbmZpZ1BhcnRpYWxcbiAgKTogTGF5ZXJCYXNlQ29uZmlnICYgUGFydGlhbDxMYXllckNvbG9yQ29uZmlnICYgTGF5ZXJTaXplQ29uZmlnPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFJZDogcHJvcHMuZGF0YUlkLFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsIHx8IERFRkFVTFRfTEFZRVJfTEFCRUwsXG4gICAgICBjb2xvcjogcHJvcHMuY29sb3IgfHwgY29sb3JNYWtlci5uZXh0KCkudmFsdWUsXG4gICAgICAvLyBzZXQgY29sdW1ucyBsYXRlclxuICAgICAgY29sdW1uczoge30sXG4gICAgICBpc1Zpc2libGU6IHByb3BzLmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHByb3BzLmlzQ29uZmlnQWN0aXZlID8/IGZhbHNlLFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHByb3BzLmhpZ2hsaWdodENvbG9yIHx8IERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICAgICAgaGlkZGVuOiBwcm9wcy5oaWRkZW4gPz8gZmFsc2UsXG5cbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgaW50byBzZXBhcmF0ZSB2aXN1YWwgQ2hhbm5lbCBjb25maWdcbiAgICAgIC8vIGNvbG9yIGJ5IGZpZWxkLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBjb2xvckZpZWxkOiBudWxsLFxuICAgICAgY29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIGNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aWxlLFxuXG4gICAgICAvLyBjb2xvciBieSBzaXplLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBzaXplRG9tYWluOiBbMCwgMV0sXG4gICAgICBzaXplU2NhbGU6IFNDQUxFX1RZUEVTLmxpbmVhcixcbiAgICAgIHNpemVGaWVsZDogbnVsbCxcblxuICAgICAgdmlzQ29uZmlnOiB7fSxcblxuICAgICAgdGV4dExhYmVsOiBbREVGQVVMVF9URVhUX0xBQkVMXSxcblxuICAgICAgY29sb3JVSToge1xuICAgICAgICBjb2xvcjogREVGQVVMVF9DT0xPUl9VSSxcbiAgICAgICAgY29sb3JSYW5nZTogREVGQVVMVF9DT0xPUl9VSVxuICAgICAgfSxcbiAgICAgIGFuaW1hdGlvbjoge2VuYWJsZWQ6IGZhbHNlfSxcbiAgICAgIC4uLihwcm9wcy5jb2x1bW5Nb2RlID8ge2NvbHVtbk1vZGU6IHByb3BzLmNvbHVtbk1vZGV9IDoge30pXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIGEgdmlzdWFsQ2hhbm5lbCBjb25maWdcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uKGtleTogc3RyaW5nKTogVmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgY29uc3QgY2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNba2V5XTtcbiAgICBpZiAoIWNoYW5uZWwpIHJldHVybiB7bGFiZWw6ICcnLCBtZWFzdXJlOiB1bmRlZmluZWR9O1xuICAgIGNvbnN0IHJhbmdlU2V0dGluZ3MgPSB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2NoYW5uZWwucmFuZ2VdO1xuICAgIGNvbnN0IGZpZWxkU2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1tjaGFubmVsLmZpZWxkXTtcbiAgICBjb25zdCBsYWJlbCA9IHJhbmdlU2V0dGluZ3M/LmxhYmVsO1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogdHlwZW9mIGxhYmVsID09PSAnZnVuY3Rpb24nID8gbGFiZWwodGhpcy5jb25maWcpIDogbGFiZWwgfHwgJycsXG4gICAgICBtZWFzdXJlOiBmaWVsZFNldHRpbmdzXG4gICAgICAgID8gZmllbGRTZXR0aW5ncy5kaXNwbGF5TmFtZSB8fCBmaWVsZFNldHRpbmdzLm5hbWVcbiAgICAgICAgOiBjaGFubmVsLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5OiBzdHJpbmcsIGZpZWxkOiB7bmFtZTogc3RyaW5nOyBmaWVsZElkeDogbnVtYmVyfSk6IExheWVyQ29sdW1ucyB7XG4gICAgLy8gZmllbGQgdmFsdWUgY291bGQgYmUgbnVsbCBmb3Igb3B0aW9uYWwgY29sdW1uc1xuICAgIGNvbnN0IHVwZGF0ZSA9IGZpZWxkXG4gICAgICA/IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogZmllbGQuZmllbGRJZHhcbiAgICAgICAgfVxuICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiB7XG4gICAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnM/LltrZXldLFxuICAgICAgICAuLi51cGRhdGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHBhaXIgdG8gY29sdW1uIGNvbmZpZywgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtblBhaXJzKGtleTogc3RyaW5nLCBmaWVsZFBhaXJzOiBGaWVsZFBhaXIpOiBMYXllckNvbHVtbnMge1xuICAgIGlmICghdGhpcy5jb2x1bW5QYWlycyB8fCAhdGhpcy5jb2x1bW5QYWlycz8uW2tleV0pIHtcbiAgICAgIC8vIHNob3VsZCBub3QgZW5kIGluIHRoaXMgc3RhdGVcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zO1xuICAgIH1cbiAgICAvLyBrZXkgPSAnbGF0J1xuICAgIGNvbnN0IHtwYWlyLCBmaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW2tleV0gfHwge307XG5cbiAgICBpZiAodHlwZW9mIGZpZWxkUGFpcktleSA9PT0gJ3N0cmluZycgJiYgIWZpZWxkUGFpcnNbZmllbGRQYWlyS2V5XSkge1xuICAgICAgLy8gZG8gbm90IGFsbG93IGBrZXk6IHVuZGVmaW5lZGAgdG8gY3JlZXAgaW50byB0aGUgYHVwZGF0ZWRDb2x1bW5gIG9iamVjdFxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnM7XG4gICAgfVxuXG4gICAgLy8gcGFpciA9IFsnbG5nJywgJ2FsdF0gfCAnbG5nJ1xuICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW4gPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaWVsZFBhaXJLZXkgY2FuIGJlIHN0cmluZ1tdIGhlcmU/XG4gICAgICBba2V5XTogZmllbGRQYWlyc1tmaWVsZFBhaXJLZXldXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnRuZXJLZXlzID0gdG9BcnJheShwYWlyKTtcbiAgICBmb3IgKGNvbnN0IHBhcnRuZXJLZXkgb2YgcGFydG5lcktleXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1uc1twYXJ0bmVyS2V5XSAmJlxuICAgICAgICB0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV0gJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBmaWVsZFBhaXJzW3RoaXMuY29sdW1uUGFpcnM/LltwYXJ0bmVyS2V5XS5maWVsZFBhaXJLZXldXG4gICAgICApIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB1cGRhdGVkQ29sdW1uW3BhcnRuZXJLZXldID0gZmllbGRQYWlyc1t0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV0uZmllbGRQYWlyS2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZENvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXI9fSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9OiB7em9vbTogbnVtYmVyOyB6b29tT2Zmc2V0PzogbnVtYmVyfSk6IG51bWJlciB7XG4gICAgLy8gZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciBpcyB1c2VkIHRvIHN1cHBvcnQgZXhpc3RpbmcgbWFwc1xuICAgIGNvbnN0IHtmaXhlZEhlaWdodCwgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcn0gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG4gICAgcmV0dXJuIGZpeGVkSGVpZ2h0IHx8IGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IgPT09IGZhbHNlXG4gICAgICA/IDFcbiAgICAgIDogTWF0aC5wb3coMiwgTWF0aC5tYXgoOCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0czogRGF0YXNldHMsIG9sZExheWVyRGF0YT86IHVua25vd24sIGFuaW1hdGlvbkNvbmZpZz86IEFuaW1hdGlvbkNvbmZpZykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcmVuZGVyTGF5ZXIoLi4uYXJnczogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBnZXRIb3ZlckRhdGEoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZmllbGRzPzogRmllbGRbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgYW5pbWF0aW9uQ29uZmlnPzogQW5pbWF0aW9uQ29uZmlnLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBob3ZlckluZm8/OiB7aW5kZXg6IG51bWJlcn1cbiAgKTogYW55IHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBlbnRyeSBvZiBsYXllckRhdGEgc2hvdWxkIGhhdmUgYW4gaW5kZXggb2YgYSByb3cgaW4gdGhlIG9yaWdpbmFsIGRhdGEgY29udGFpbmVyLlxuICAgIC8vIEVhY2ggbGF5ZXIgY2FuIGltcGxlbWVudCBpdHMgb3duIGdldEhvdmVyRGF0YSBtZXRob2RcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LmluZGV4KTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkSXRlbUNvdW50KCk6IG51bWJlciB8IG51bGwge1xuICAgIC8vIHVzZSBmaXJzdCBsYXllclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbHRlcmVkSXRlbUNvdW50KS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpcnN0TGF5ZXIgPSBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcmVkSXRlbUNvdW50KVswXTtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbUNvdW50W2ZpcnN0TGF5ZXJdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqIEBwYXJhbSBkYXRhc2V0cyAtIGN1cnJlbnQgZGF0YXNldHMuXG4gICAqIEBwYXJhbSBkZWZhdWx0TGF5ZXJQcm9wcyAtIGRlZmF1bHQgbGF5ZXIgY3JlYXRpb24gY29uZmlndXJhdGlvbnMgZm9yIGN1cnJlbnQgbGF5ZXIgYW5kIGRhdGFzZXRzLlxuICAgKi9cbiAgYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICBjb25maWdUb0NvcHk6IExheWVyQmFzZUNvbmZpZyAmIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz4sXG4gICAgdmlzQ29uZmlnU2V0dGluZ3M6IHtba2V5OiBzdHJpbmddOiBWYWx1ZU9mPExheWVyVmlzQ29uZmlnU2V0dGluZ3M+fSxcbiAgICBkYXRhc2V0cz86IERhdGFzZXRzLFxuICAgIGRlZmF1bHRMYXllclByb3BzPzogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgfCBudWxsXG4gICkge1xuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgdmlzdWFsQ2hhbm5lbCBmaWVsZFxuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgY29sb3IgcmFuZ2UsIHJldmVyc2VkOiBpcyBub3QgYSBrZXkgYnkgZGVmYXVsdFxuICAgIGNvbnN0IHNoYWxsb3dDb3B5ID0gWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXS5jb25jYXQoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZmllbGQpXG4gICAgKTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciBkb21haW4gYW5kIGFuaW1hdGlvblxuICAgIGNvbnN0IG5vdFRvQ29weSA9IFsnYW5pbWF0aW9uJ10uY29uY2F0KE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5kb21haW4pKTtcbiAgICAvLyBpZiByYW5nZSBpcyBmb3IgdGhlIHNhbWUgcHJvcGVydHkgZ3JvdXAgY29weSBpdCwgb3RoZXJ3aXNlLCBub3QgdG8gY29weVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnVG9Db3B5LnZpc0NvbmZpZ1t2LnJhbmdlXSAmJlxuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdICYmXG4gICAgICAgIHZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwICE9PSB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwXG4gICAgICApIHtcbiAgICAgICAgbm90VG9Db3B5LnB1c2godi5yYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgdmlzdWFsQ2hhbm5lbCByYW5nZVxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjb3BpZWQgPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtcbiAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgbm90VG9Db3B5XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgY29sdW1Ob2RlIGJhc2VkIG9uIG5ldyBjb2x1bW5zXG4gICAgaWYgKHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgJiYgdGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2Rlcykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzPy5bdGhpcy5jb25maWcuZGF0YUlkXTtcbiAgICAgIC8vIHRyeSB0byBmaW5kIGEgbW9kZSB3aXRoIGFsbCByZXF1aWVkIGNvbHVtbnMgZnJvbSB0aGUgc291cmNlIGNvbmZpZ1xuICAgICAgbGV0IHNhdGlzZmllZENvbHVtbk1vZGUgPSBnZXRTYXRpc2ZpZWRDb2x1bW5Nb2RlKFxuICAgICAgICB0aGlzLnN1cHBvcnRlZENvbHVtbk1vZGVzLFxuICAgICAgICBjb3BpZWQuY29sdW1ucyxcbiAgICAgICAgZGF0YXNldD8uZmllbGRzXG4gICAgICApO1xuXG4gICAgICAvLyBpZiBubyBzdWl0YWJsZSBjb2x1bW4gbW9kZSBmb3VuZCBvciBubyBzdWNoIGNvbHVtTW9kZSBleGlzdHMgZm9yIHRoZSBsYXllclxuICAgICAgLy8gdGhlbiB0cnkgdXNlIG9uZSBvZiB0aGUgYXV0b21hdGljYWxseSBkZXRlY3RlZCBsYXllciBjb25maWdzXG4gICAgICBpZiAoIXNhdGlzZmllZENvbHVtbk1vZGUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgICAgICAuLi4oZGVmYXVsdExheWVyUHJvcHM/LnByb3BzIHx8IFtdKSxcbiAgICAgICAgICAuLi4oZGVmYXVsdExheWVyUHJvcHM/LmFsdFByb3BzIHx8IFtdKVxuICAgICAgICBdO1xuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBVc2UgdGhlIGZpcnN0IG9mIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAgY29uc3QgZGVmYXVsdENvbHVtbkNvbmZpZyA9IG9wdGlvbnNbMF0uY29sdW1ucztcblxuICAgICAgICAgIHNhdGlzZmllZENvbHVtbk1vZGUgPSBnZXRTYXRpc2ZpZWRDb2x1bW5Nb2RlKFxuICAgICAgICAgICAgdGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyxcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5Db25maWcsXG4gICAgICAgICAgICBkYXRhc2V0Py5maWVsZHNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHNhdGlzZmllZENvbHVtbk1vZGUpIHtcbiAgICAgICAgICAgIGNvcGllZC5jb2x1bW5zID0ge1xuICAgICAgICAgICAgICAuLi5jb3BpZWQuY29sdW1ucyxcbiAgICAgICAgICAgICAgLi4uZGVmYXVsdENvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29waWVkLmNvbHVtbk1vZGUgPSBzYXRpc2ZpZWRDb2x1bW5Nb2RlPy5rZXkgfHwgY29waWVkLmNvbHVtbk1vZGU7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyhjb3BpZWQpO1xuICAgIC8vIHZhbGlkYXRlIHZpc3VhbENoYW5uZWwgZmllbGQgdHlwZSBhbmQgc2NhbGUgdHlwZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBSZWN1cnNpdmVseSBjb3B5IGNvbmZpZyBvdmVyIHRvIGFuIGVtcHR5IGxheWVyXG4gICAqIHdoZW4gcmVjZWl2ZWQgc2F2ZWQgY29uZmlnLCBvciBjb3B5IGNvbmZpZyBvdmVyIGZyb20gYSBkaWZmZXJlbnQgbGF5ZXIgdHlwZVxuICAgKiBtYWtlIHN1cmUgdG8gb25seSBjb3B5IG92ZXIgdmFsdWUgdG8gZXhpc3Rpbmcga2V5c1xuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbmZpZyAtIGV4aXN0aW5nIGNvbmZpZyB0byBiZSBvdmVycmlkZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnVG9Db3B5IC0gbmV3IENvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2hhbGxvd0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIHRvIG5vdCB0byBiZSBkZWVwIGNvcGllZFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBub3RUb0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIG5vdCB0byBjb3B5XG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gY29waWVkIGNvbmZpZ1xuICAgKi9cbiAgY29weUxheWVyQ29uZmlnKFxuICAgIGN1cnJlbnRDb25maWcsXG4gICAgY29uZmlnVG9Db3B5LFxuICAgIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX06IHtzaGFsbG93Q29weT86IHN0cmluZ1tdOyBub3RUb0NvcHk/OiBzdHJpbmdbXX0gPSB7fVxuICApIHtcbiAgICBjb25zdCBjb3BpZWQ6IHtjb2x1bW5Nb2RlPzogc3RyaW5nOyBjb2x1bW5zPzogTGF5ZXJDb2x1bW5zfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlnczoge1xuICAgIFtrZXk6IHN0cmluZ106IGtleW9mIExheWVyVmlzQ29uZmlnU2V0dGluZ3MgfCBWYWx1ZU9mPExheWVyVmlzQ29uZmlnU2V0dGluZ3M+O1xuICB9KSB7XG4gICAgT2JqZWN0LmtleXMobGF5ZXJWaXNDb25maWdzKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgY29uZmlnSXRlbSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnSXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbY29uZmlnSXRlbV0pIHtcbiAgICAgICAgLy8gaWYgYXNzaWduZWQgb25lIG9mIGRlZmF1bHQgTEFZRVJfQ09ORklHU1xuICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tjb25maWdJdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tjb25maWdJdGVtXTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBjb25maWdJdGVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBbJ3R5cGUnLCAnZGVmYXVsdFZhbHVlJ10uZXZlcnkocCA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnSXRlbSwgcCkpXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgcHJvdmlkZWQgY3VzdG9taXplZCB2aXNDb25maWcsIGFuZCBoYXMgdHlwZSAmJiBkZWZhdWx0VmFsdWVcbiAgICAgICAgLy8gVE9ETzogZnVydGhlciBjaGVjayBpZiBjdXN0b21pemVkIHZpc0NvbmZpZyBpcyB2YWxpZFxuICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbaXRlbV0gPSBjb25maWdJdGVtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IGNvbmZpZ0l0ZW07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMocHJvcHNDb2x1bW5zID0ge30pIHtcbiAgICBjb25zdCBjb2x1bW5WYWxpZGF0b3JzID0gdGhpcy5jb2x1bW5WYWxpZGF0b3JzIHx8IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZExheWVyQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogY29sdW1uVmFsaWRhdG9yc1trZXldXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHZhbHVlOiBwcm9wc0NvbHVtbnNba2V5XT8udmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICAgICAgZmllbGRJZHg6IHByb3BzQ29sdW1uc1trZXldPy5maWVsZElkeCA/PyAtMSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yOiBjb2x1bW5WYWxpZGF0b3JzW2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt2YWx1ZTogcHJvcHNDb2x1bW5zW2tleV0/LnZhbHVlID8/IG51bGwsIGZpZWxkSWR4OiBwcm9wc0NvbHVtbnNba2V5XT8uZmllbGRJZHggPz8gLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgdmFsdWU6IHByb3BzQ29sdW1uc1trZXldPy52YWx1ZSA/PyBudWxsLFxuICAgICAgICAgIGZpZWxkSWR4OiBwcm9wc0NvbHVtbnNba2V5XT8uZmllbGRJZHggPz8gLTEsXG4gICAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gey4uLnJlcXVpcmVkLCAuLi5vcHRpb25hbH07XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnPFxuICAgIExheWVyQ29uZmlnIGV4dGVuZHMgTGF5ZXJCYXNlQ29uZmlnICZcbiAgICAgIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz4gPSBMYXllckJhc2VDb25maWdcbiAgPihuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJDb25maWc+KTogTGF5ZXIge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wOiBzdHJpbmcsIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPik6IExheWVyIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTpcbiAgICAgICAgICBpc1BsYWluT2JqZWN0KGFjY3Vba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gey4uLmFjY3Vba2V5XSwgLi4uKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KX1cbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2VcbiAgICBjb25zdCBpc0NvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF0gJiYgdmlzQ29uZmlnW3Byb3BdLmNvbG9ycztcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIC8vIGlmIG9wZW4gZHJvcGRvd24gYW5kIHByb3AgaXMgY29sb3IgcmFuZ2VcbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yUmFuZ2VDb25maWcncyBzdGVwIGFuZCByZXZlcnNlZFxuICAgICAgdGhpcy51cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCk7XG5cbiAgICAgIC8vIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgICAvLyB1cGRhdGUgY3VycmVudCBsYXllciBjb2xvclJhbmdlXG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG5cbiAgICAgIC8vIGlmIHNldCBjb2xvclJhbmdlQ29uZmlnIHRvIGN1c3RvbVxuICAgICAgLy8gaW5pdGlhdGUgY3VzdG9tUGFsZXR0ZSB0byBiZSBlZGl0ZWQgaW4gdGhlIHVpXG4gICAgICB0aGlzLnVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBpZiBzZXQgY29sb3JSYW5nZUNvbmZpZyB0byBjdXN0b20gcGFsZXR0ZSBvciBjdXN0b20gYnJlYWtzXG4gIC8vIGluaXRpYXRlIGN1c3RvbVBhbGV0dGUgdG8gYmUgZWRpdGVkIGluIHRoZSB1aVxuICB1cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICBpZiAoIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnPy5jdXN0b20gJiYgIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnPy5jdXN0b21CcmVha3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobmV3Q29uZmlnLmN1c3RvbVBhbGV0dGUpIHtcbiAgICAgIC8vIGlmIG5ldyBjb25maWcgYWxzbyBzZXQgY3VzdG9tUGFsZXR0ZSwgbm8gbmVlZCB0byBpbml0aWF0ZSBuZXdcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgLy8gbWFrZSBjb3B5IG9mIGN1cnJlbnQgY29sb3IgcmFuZ2UgdG8gY3VzdG9tUGFsZXR0ZVxuICAgIGxldCBjdXN0b21QYWxldHRlID0ge1xuICAgICAgLi4udmlzQ29uZmlnW3Byb3BdXG4gICAgfTtcblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5jdXN0b21CcmVha3MgJiYgIWN1c3RvbVBhbGV0dGUuY29sb3JNYXApIHtcbiAgICAgIC8vIGZpbmQgdmlzdWFsQ2hhbmVsXG4gICAgICBjb25zdCB2aXN1YWxDaGFubmVscyA9IHRoaXMudmlzdWFsQ2hhbm5lbHM7XG4gICAgICBjb25zdCBjaGFubmVsS2V5ID0gT2JqZWN0LmtleXModmlzdWFsQ2hhbm5lbHMpLmZpbmQoXG4gICAgICAgIGtleSA9PiB2aXN1YWxDaGFubmVsc1trZXldLnJhbmdlID09PSBwcm9wXG4gICAgICApO1xuICAgICAgaWYgKCFjaGFubmVsS2V5KSB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwblxuICAgICAgICBDb25zb2xlLndhcm4oYHVwZGF0ZUNvbG9yVUk6IENhbid0IGZpbmQgdmlzdWFsIGNoYW5uZWwgd2hpY2ggcmFuZ2UgaXMgJHtwcm9wfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBhZGQgbmFtZXx0eXBlfGNhdGVnb3J5IHRvIHVwZGF0ZUN1c3RvbVBhbGV0dGUgaWYgY3VzdG9tQnJlYWtzLCBzbyB0aGF0XG4gICAgICAvLyBjb2xvcnMgd2lsbCBub3QgYmUgb3ZlcnJpZGUgYXMgd2VsbCB3aGVuIGludmVyc2UgcGFsZXR0ZSB3aXRoIGN1c3RvbSBicmVha1xuICAgICAgLy8gaW5pdGlhdGUgY29sb3JNYXAgZnJvbSBjdXJyZW50IHNjYWxlXG5cbiAgICAgIGNvbnN0IGNvbG9yTWFwID0gaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAodGhpcywgdmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV0pO1xuICAgICAgY3VzdG9tUGFsZXR0ZSA9IGluaXRpYWxpemVDdXN0b21QYWxldHRlKHZpc0NvbmZpZ1twcm9wXSwgY29sb3JNYXApO1xuICAgIH0gZWxzZSBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICBjdXN0b21QYWxldHRlID0gaW5pdGlhbGl6ZUN1c3RvbVBhbGV0dGUodmlzQ29uZmlnW3Byb3BdKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZiBvcGVuIGRyb3Bkb3duIGFuZCBwcm9wIGlzIGNvbG9yIHJhbmdlXG4gICAqIEF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yUmFuZ2VDb25maWcncyBzdGVwIGFuZCByZXZlcnNlZFxuICAgKiBAcGFyYW0geyp9IG5ld0NvbmZpZ1xuICAgKiBAcGFyYW0geyp9IHByb3BcbiAgICovXG4gIHVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKSB7XG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIC8vIHdoZW4gY3VzdG9tIHBhbGV0dGUgYWRkcy9yZW1vdmVzIHN0ZXAsIHRoZSBudW1iZXIgaW4gXCJTdGVwc1wiIGlucHV0IGNvbnRyb2xcbiAgICAvLyBzaG91bGQgYmUgdXBkYXRlZCBhcyB3ZWxsXG4gICAgY29uc3QgaXNDdXN0b20gPSBuZXdDb25maWcuY3VzdG9tUGFsZXR0ZT8uY2F0ZWdvcnkgPT09ICdDdXN0b20nO1xuICAgIGNvbnN0IGN1c3RvbVN0ZXBzQ2hhbmdlZCA9IGlzQ3VzdG9tXG4gICAgICA/IG5ld0NvbmZpZy5jdXN0b21QYWxldHRlLmNvbG9ycy5sZW5ndGggIT09IHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMubGVuZ3RoXG4gICAgICA6IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDb25maWcuc2hvd0Ryb3Bkb3duICE9PSAnbnVtYmVyJyAmJiAhY3VzdG9tU3RlcHNDaGFuZ2VkKSByZXR1cm47XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgICAgICBzdGVwczogY3VzdG9tU3RlcHNDaGFuZ2VkXG4gICAgICAgICAgICAgID8gY29sb3JVSVtwcm9wXS5jdXN0b21QYWxldHRlLmNvbG9ycy5sZW5ndGhcbiAgICAgICAgICAgICAgOiB2aXNDb25maWdbcHJvcF0uY29sb3JzLmxlbmd0aCxcbiAgICAgICAgICAgIHJldmVyc2VkOiBCb29sZWFuKHZpc0NvbmZpZ1twcm9wXS5yZXZlcnNlZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIC8vIG9ubHkgdXBkYXRlIGNvbG9yUmFuZ2UgaWYgY2hhbmdlcyBpbiBVSSBpcyBtYWRlIHRvICdyZXZlcnNlZCcsICdzdGVwcycgb3Igc3RlcHNcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgJiZcbiAgICAgIFsncmV2ZXJzZWQnLCAnc3RlcHMnLCAnY29sb3JCbGluZFNhZmUnLCAndHlwZSddLnNvbWUoXG4gICAgICAgIGtleSA9PlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZywga2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgLy8gZm9yIGN1c3RvbSBwYWxldHRlLCBvbmUgY2FuIG9ubHkgJ3JldmVyc2UnIHRoZSBjb2xvcnMgaW4gY3VzdG9tIHBhbGV0dGUuXG4gICAgLy8gY2hhbmdpbmcgJ3N0ZXBzJywgJ2NvbG9yQmluZFNhZmUnLCAndHlwZScgc2hvdWxkIGZhbGwgYmFjayB0byBwcmVkZWZpbmVkIHBhbGV0dGUuXG4gICAgY29uc3QgaXNDdXN0b21Db2xvclJldmVyc2VkID1cbiAgICAgIHZpc0NvbmZpZy5jb2xvclJhbmdlLmNhdGVnb3J5ID09PSAnQ3VzdG9tJyAmJlxuICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZywgJ3JldmVyc2VkJyk7XG5cbiAgICBjb25zdCB1cGRhdGUgPSBpc0N1c3RvbUNvbG9yUmV2ZXJzZWRcbiAgICAgID8gdXBkYXRlQ3VzdG9tQ29sb3JSYW5nZUJ5Q29sb3JVSSh2aXNDb25maWdbcHJvcF0sIGNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZylcbiAgICAgIDogdXBkYXRlQ29sb3JSYW5nZUJ5TWF0Y2hpbmdQYWxldHRlKHZpc0NvbmZpZ1twcm9wXSwgY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnKTtcblxuICAgIGlmICh1cGRhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1twcm9wXTogdXBkYXRlfSk7XG4gICAgfVxuICB9XG4gIGhhc0NvbHVtblZhbHVlKGNvbHVtbj86IExheWVyQ29sdW1uKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY29sdW1uICYmIGNvbHVtbi52YWx1ZSAmJiBjb2x1bW4uZmllbGRJZHggPiAtMSk7XG4gIH1cbiAgaGFzUmVxdWlyZWRDb2x1bW4oY29sdW1uPzogTGF5ZXJDb2x1bW4pIHtcbiAgICByZXR1cm4gQm9vbGVhbihjb2x1bW4gJiYgKGNvbHVtbi5vcHRpb25hbCB8fCB0aGlzLmhhc0NvbHVtblZhbHVlKGNvbHVtbikpKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMgeWVzIG9yIG5vXG4gICAqL1xuICBoYXNBbGxDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtjb2x1bW5zLCBjb2x1bW5Nb2RlfSA9IHRoaXMuY29uZmlnO1xuICAgIC8vIGlmIGxheWVyIGhhcyBkaWZmZXJlbnQgY29sdW1uIG1vZGUsIGNoZWNrIGlmIGhhdmUgYWxsIHJlcXVpcmVkIGNvbHVtbnMgb2YgY3VycmVudCBjb2x1bW4gTW9kZVxuICAgIGlmIChjb2x1bW5Nb2RlKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q29sdW1uTW9kZXMgPSAodGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyB8fCBbXSkuZmluZChcbiAgICAgICAgY29sTW9kZSA9PiBjb2xNb2RlLmtleSA9PT0gY29sdW1uTW9kZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgICBjdXJyZW50Q29sdW1uTW9kZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGN1cnJlbnRDb2x1bW5Nb2Rlcy5yZXF1aXJlZENvbHVtbnM/LmV2ZXJ5KGNvbEtleSA9PiB0aGlzLmhhc0NvbHVtblZhbHVlKGNvbHVtbnNbY29sS2V5XSkpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhjb2x1bW5zKS5ldmVyeSgoY29sdW1uPzogTGF5ZXJDb2x1bW4pID0+IHRoaXMuaGFzUmVxdWlyZWRDb2x1bW4oY29sdW1uKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGE6IHtkYXRhOiB1bmtub3duW10gfCBhcnJvdy5UYWJsZX0pIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgbGF5ZXJEYXRhLmRhdGEgJiZcbiAgICAgICAgKChsYXllckRhdGEuZGF0YSBhcyB1bmtub3duW10pLmxlbmd0aCB8fCAobGF5ZXJEYXRhLmRhdGEgYXMgYXJyb3cuVGFibGUpLm51bVJvd3MpXG4gICAgKTtcbiAgfVxuXG4gIGlzVmFsaWRUb1NhdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpKTtcbiAgfVxuXG4gIHNob3VsZFJlbmRlckxheWVyKGRhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgQm9vbGVhbih0aGlzLnR5cGUpICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nXG4gICAgKTtcbiAgfVxuXG4gIGdldENvbG9yU2NhbGUoXG4gICAgY29sb3JTY2FsZTogc3RyaW5nLFxuICAgIGNvbG9yRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluLFxuICAgIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2VcbiAgKTogR2V0VmlzQ2hhbm5lbFNjYWxlUmV0dXJuVHlwZSB7XG4gICAgaWYgKGNvbG9yU2NhbGUgPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwpIHtcbiAgICAgIHJldHVybiBnZXRDYXRlZ29yaWNhbENvbG9yU2NhbGUoY29sb3JEb21haW4sIGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIGlmIChoYXNDb2xvck1hcChjb2xvclJhbmdlKSAmJiBjb2xvclNjYWxlID09PSBTQ0FMRV9UWVBFUy5jdXN0b20pIHtcbiAgICAgIGNvbnN0IGNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICBjb2xvclJhbmdlLmNvbG9yTWFwPy5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgY01hcC5zZXQoaywgdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gaGV4VG9SZ2IodikgOiB2KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSBjb2xvclNjYWxlID09PSBTQ0FMRV9UWVBFUy5jdXN0b20gPyBjb2xvclNjYWxlIDogU0NBTEVfVFlQRVMub3JkaW5hbDtcblxuICAgICAgY29uc3Qgc2NhbGUgPSBnZXRTY2FsZUZ1bmN0aW9uKHNjYWxlVHlwZSwgY01hcC52YWx1ZXMoKSwgY01hcC5rZXlzKCksIGZhbHNlKTtcbiAgICAgIHNjYWxlLnVua25vd24oY01hcC5nZXQoVU5LTk9XTl9DT0xPUl9LRVkpIHx8IE5PX1ZBTFVFX0NPTE9SKTtcblxuICAgICAgcmV0dXJuIHNjYWxlIGFzIEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBhY2Nlc3NWU0ZpZWxkVmFsdWUoX2ZpZWxkLCBfaW5kZXhLZXkpIHtcbiAgICByZXR1cm4gZGVmYXVsdEdldEZpZWxkVmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSB2aXN1YWwgY2hhbm5lbHMgdG8gZGVjay5nbCBhY2Nlc29yc1xuICAgKiBAcGFyYW0gcGFyYW0gUGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW0uZGF0YUFjY2Vzc29yIEFjY2VzcyBrZXBsZXIuZ2wgbGF5ZXIgZGF0YSBmcm9tIGRlY2suZ2wgbGF5ZXJcbiAgICogQHBhcmFtIHBhcmFtLmRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byB1c2UgdXNlIHdpdGggZGF0YUFjY2Vzc29yXG4gICAqIEByZXR1cm4ge09iamVjdH0gYXR0cmlidXRlQWNjZXNzb3JzIC0gZGVjay5nbCBsYXllciBhdHRyaWJ1dGUgYWNjZXNzb3JzXG4gICAqL1xuICBnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe1xuICAgIGRhdGFBY2Nlc3NvciA9IGRlZmF1bHREYXRhQWNjZXNzb3IsXG4gICAgZGF0YUNvbnRhaW5lcixcbiAgICBpbmRleEtleVxuICB9OiB7XG4gICAgZGF0YUFjY2Vzc29yPzogdHlwZW9mIGRlZmF1bHREYXRhQWNjZXNzb3I7XG4gICAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTtcbiAgICBpbmRleEtleT86IG51bWJlciB8IG51bGw7XG4gIH0pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVBY2Nlc3NvcnM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlXG4gICAgICB9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcblxuICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gdGhpcy5jb25maWdbZmllbGRdO1xuXG4gICAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuXG4gICAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0Q29sb3JTY2FsZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKFxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdbc2NhbGVdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdbZG9tYWluXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgICBpc0ZpeGVkXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB0aGlzLmFjY2Vzc1ZTRmllbGRWYWx1ZSh0aGlzLmNvbmZpZ1tmaWVsZF0sIGluZGV4S2V5KTtcblxuICAgICAgICAgIGlmIChzY2FsZUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gc2NhbGVGdW5jdGlvbi5ieVpvb21cbiAgICAgICAgICAgICAgPyBtZW1vaXplKHogPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVGdW5jID0gc2NhbGVGdW5jdGlvbih6KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICBzY2FsZUZ1bmMsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0RmllbGRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogZCA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBzY2FsZUZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoZCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBnZXRGaWVsZFZhbHVlXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBzZXQgZ2V0RmlsbENvbG9yQnlab29tIHRvIHRydWVcbiAgICAgICAgICAgIGlmIChzY2FsZUZ1bmN0aW9uLmJ5Wm9vbSkge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYCR7YWNjZXNzb3J9Qnlab29tYF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZ2V0QXR0cmlidXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPVxuICAgICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0pIHtcbiAgICAgICAgICBDb25zb2xlLndhcm4oYEZhaWxlZCB0byBwcm92aWRlIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciAke2FjY2Vzc29yIHx8IGNoYW5uZWx9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVBY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRWaXNDaGFubmVsU2NhbGUoXG4gICAgc2NhbGU6IHN0cmluZyxcbiAgICBkb21haW46IFZpc3VhbENoYW5uZWxEb21haW4gfCBEb21haW5RdWFudGlsZXMsXG4gICAgcmFuZ2U6IGFueSxcbiAgICBmaXhlZD86IGJvb2xlYW5cbiAgKTogR2V0VmlzQ2hhbm5lbFNjYWxlUmV0dXJuVHlwZSB7XG4gICAgLy8gaWYgcXVhbnRpbGUgaXMgcHJvdmlkZWQgcGVyIHpvb21cbiAgICBpZiAoaXNEb21haW5RdWFudGlsZShkb21haW4pICYmIHNjYWxlID09PSBTQ0FMRV9UWVBFUy5xdWFudGlsZSkge1xuICAgICAgY29uc3QgelN0ZXBzID0gZG9tYWluLno7XG5cbiAgICAgIGNvbnN0IGdldFNjYWxlID0gZnVuY3Rpb24gZ2V0U2NhbGVCeVpvb20oeikge1xuICAgICAgICBjb25zdCBzY2FsZURvbWFpbiA9IGdldERvbWFpblN0ZXBzYnlab29tKGRvbWFpbi5xdWFudGlsZXMsIHpTdGVwcywgeik7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZHMgPSBnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlcyhzY2FsZURvbWFpbiwgcmFuZ2UubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gZ2V0U2NhbGVGdW5jdGlvbigndGhyZXNob2xkJywgcmFuZ2UsIHRocmVzaG9sZHMsIGZhbHNlKTtcbiAgICAgIH07XG5cbiAgICAgIGdldFNjYWxlLmJ5Wm9vbSA9IHRydWU7XG4gICAgICByZXR1cm4gZ2V0U2NhbGU7XG4gICAgfSBlbHNlIGlmIChpc0RvbWFpblN0b3BzKGRvbWFpbikpIHtcbiAgICAgIC8vIGNvbG9yIGlzIGJhc2VkIG9uIHpvb21cbiAgICAgIGNvbnN0IHpTdGVwcyA9IGRvbWFpbi56O1xuICAgICAgLy8gZ2V0IHNjYWxlIGZ1bmN0aW9uIGJ5IHpcbiAgICAgIC8vIHtcbiAgICAgIC8vICB6OiBbeiwgeiwgel0sXG4gICAgICAvLyAgc3RvcHM6IFtbbWluLCBtYXhdLCBbbWluLCBtYXhdXSxcbiAgICAgIC8vICBpbnRlcnBvbGF0aW9uOiAnaW50ZXJwb2xhdGUnXG4gICAgICAvLyB9XG5cbiAgICAgIGNvbnN0IGdldFNjYWxlID0gZnVuY3Rpb24gZ2V0U2NhbGVCeVpvb20oeikge1xuICAgICAgICBjb25zdCBzY2FsZURvbWFpbiA9IGdldERvbWFpblN0ZXBzYnlab29tKGRvbWFpbi5zdG9wcywgelN0ZXBzLCB6KTtcblxuICAgICAgICByZXR1cm4gZ2V0U2NhbGVGdW5jdGlvbihzY2FsZSwgcmFuZ2UsIHNjYWxlRG9tYWluLCBmaXhlZCk7XG4gICAgICB9O1xuXG4gICAgICBnZXRTY2FsZS5ieVpvb20gPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiBTQ0FMRV9GVU5DW2ZpeGVkID8gJ2xpbmVhcicgOiBzY2FsZV0oKVxuICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0UG9pbnRzQm91bmRzKFxuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gICAgZ2V0UG9zaXRpb246ICh4OiBhbnksIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBudW1iZXJbXSA9IGlkZW50aXR5XG4gICk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgLy8gbm8gbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIGVudGlyZSBkYXRhc2V0XG4gICAgLy8gZ2V0IGEgc2FtcGxlIG9mIGRhdGEgdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGNvbnN0IHNhbXBsZURhdGEgPVxuICAgICAgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiBNQVhfU0FNUExFX1NJWkVcbiAgICAgICAgPyBnZXRTYW1wbGVDb250YWluZXJEYXRhKGRhdGFDb250YWluZXIsIE1BWF9TQU1QTEVfU0laRSlcbiAgICAgICAgOiBkYXRhQ29udGFpbmVyO1xuXG4gICAgY29uc3QgcG9pbnRzID0gZ2V0UG9zaXRpb24gPyBzYW1wbGVEYXRhLm1hcEluZGV4KGdldFBvc2l0aW9uKSA6IFtdO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoXG4gICAgc2NhbGU6ICh2YWx1ZSkgPT4gYW55LFxuICAgIGRhdGE6IGFueVtdLFxuICAgIGZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQsXG4gICAgbnVsbFZhbHVlID0gTk9fVkFMVUVfQ09MT1IsXG4gICAgZ2V0VmFsdWUgPSBkZWZhdWx0R2V0RmllbGRWYWx1ZVxuICApIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGZpZWxkLCBkYXRhKTtcblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgYXR0cmlidXRlVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHZhbHVlLm1hcChzY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhOiBMYXllclsnbWV0YSddKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICBnZXREYXRhVXBkYXRlVHJpZ2dlcnMoe2ZpbHRlcmVkSW5kZXgsIGlkLCBkYXRhQ29udGFpbmVyfTogS2VwbGVyVGFibGUpOiBhbnkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldERhdGE6IHtkYXRhc2V0SWQ6IGlkLCBkYXRhQ29udGFpbmVyLCBjb2x1bW5zLCBmaWx0ZXJlZEluZGV4fSxcbiAgICAgIGdldE1ldGE6IHtkYXRhc2V0SWQ6IGlkLCBkYXRhQ29udGFpbmVyLCBjb2x1bW5zfSxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy50ZXh0TGFiZWwgfHwgW10pLnJlZHVjZShcbiAgICAgICAgKGFjY3UsIHRsLCBpKSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2BnZXRMYWJlbENoYXJhY3RlclNldC0ke2l9YF06IHRsLmZpZWxkID8gdGwuZmllbGQubmFtZSA6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZURhdGEoZGF0YXNldHM6IERhdGFzZXRzLCBvbGRMYXllckRhdGE6IGFueSkge1xuICAgIGlmICghdGhpcy5jb25maWcuZGF0YUlkKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGxheWVyRGF0YXNldCA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gbGF5ZXJEYXRhc2V0O1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lciwgbGF5ZXJEYXRhc2V0KTtcbiAgICBjb25zdCBkYXRhVXBkYXRlVHJpZ2dlcnMgPSB0aGlzLmdldERhdGFVcGRhdGVUcmlnZ2VycyhsYXllckRhdGFzZXQpO1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gdGhpcy5nZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKTtcblxuICAgIGlmICh0cmlnZ2VyQ2hhbmdlZCAmJiAodHJpZ2dlckNoYW5nZWQuZ2V0TWV0YSB8fCB0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllck1ldGEobGF5ZXJEYXRhc2V0LCBnZXRQb3NpdGlvbik7XG5cbiAgICAgIC8vIHJlc2V0IGZpbHRlcmVkSXRlbUNvdW50XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbUNvdW50ID0ge307XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBbXTtcblxuICAgIGlmICghKHRyaWdnZXJDaGFuZ2VkICYmIHRyaWdnZXJDaGFuZ2VkLmdldERhdGEpICYmIG9sZExheWVyRGF0YSAmJiBvbGRMYXllckRhdGEuZGF0YSkge1xuICAgICAgLy8gc2FtZSBkYXRhXG4gICAgICBkYXRhID0gb2xkTGF5ZXJEYXRhLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUobGF5ZXJEYXRhc2V0LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0cmlnZ2VyQ2hhbmdlZH07XG4gIH1cblxuICAvKipcbiAgICogaGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBvbmUgbGF5ZXIgZG9tYWluIHdoZW4gc3RhdGUuZGF0YSBjaGFuZ2VkXG4gICAqIGlmIHN0YXRlLmRhdGEgY2hhbmdlIGlzIGR1ZSBvdCB1cGRhdGUgZmlsdGVyLCBuZXdGaWxlciB3aWxsIGJlIHBhc3NlZFxuICAgKiBjYWxsZWQgYnkgdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhXG4gICAqIEBwYXJhbSBkYXRhc2V0c1xuICAgKiBAcGFyYW0gbmV3RmlsdGVyXG4gICAqIEByZXR1cm5zIGxheWVyXG4gICAqL1xuICB1cGRhdGVMYXllckRvbWFpbihkYXRhc2V0czogRGF0YXNldHMsIG5ld0ZpbHRlcj86IEZpbHRlcik6IExheWVyIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtzY2FsZX0gPSBjaGFubmVsO1xuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuICAgICAgLy8gb3JkaW5hbCBkb21haW4gaXMgYmFzZWQgb24gZGF0YUNvbnRhaW5lciwgaWYgb25seSBmaWx0ZXIgY2hhbmdlZFxuICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW5cbiAgICAgIGlmICghbmV3RmlsdGVyIHx8IHNjYWxlVHlwZSAhPT0gU0NBTEVfVFlQRVMub3JkaW5hbCkge1xuICAgICAgICBjb25zdCB7ZG9tYWlufSA9IGNoYW5uZWw7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKHRhYmxlLCBjaGFubmVsKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2RvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0RGF0YXNldChkYXRhc2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhSWQgPyBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB2aXN1YWwgY2hhbm5lbCBmaWVsZCBhbmQgc2NhbGVzIGJhc2VkIG9uIHN1cHBvcnRlZCBmaWVsZCAmIHNjYWxlIHR5cGVcbiAgICogQHBhcmFtIGNoYW5uZWxcbiAgICovXG4gIHZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpO1xuICAgIHRoaXMudmFsaWRhdGVTY2FsZShjaGFubmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBmaWVsZCB0eXBlIGJhc2VkIG9uIGNoYW5uZWxTY2FsZVR5cGVcbiAgICovXG4gIHZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWw6IHN0cmluZykge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZSwgc3VwcG9ydGVkRmllbGRUeXBlc30gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgLy8gaWYgZmllbGQgaXMgc2VsZWN0ZWQsIGNoZWNrIGlmIGZpZWxkIHR5cGUgaXMgc3VwcG9ydGVkXG4gICAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuXG4gICAgICBpZiAoIWNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHRoaXMuY29uZmlnW2ZpZWxkXS50eXBlKSkge1xuICAgICAgICAvLyBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBiYWNrIHRvIG51bGxcbiAgICAgICAgLy8gc2V0IHNjYWxlIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBudWxsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNjYWxlIHR5cGUgYmFzZWQgb24gYWdncmVnYXRpb25cbiAgICovXG4gIHZhbGlkYXRlU2NhbGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGlmICghc2NhbGUpIHtcbiAgICAgIC8vIHZpc3VhbENoYW5uZWwgZG9lc24ndCBoYXZlIHNjYWxlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IHRoaXMuZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpO1xuICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgc2VsZWN0ZWQgc2NhbGUgaXNcbiAgICAvLyBzdXBwb3J0ZWQsIGlmIG5vdCwgY2hhbmdlIHRvIGRlZmF1bHRcbiAgICBpZiAoIXNjYWxlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tzY2FsZV0pKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbc2NhbGVdOiBzY2FsZU9wdGlvbnNbMF19KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjYWxlIG9wdGlvbnMgYmFzZWQgb24gY3VycmVudCBmaWVsZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbFxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBnZXRTY2FsZU9wdGlvbnMoY2hhbm5lbDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgc2NhbGUsIGNoYW5uZWxTY2FsZVR5cGV9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgID8gRklFTERfT1BUU1t0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZV0uc2NhbGVbY2hhbm5lbFNjYWxlVHlwZV1cbiAgICAgIDogW3RoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSlbc2NhbGVdXTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0OiBLZXBsZXJUYWJsZSwgY2hhbm5lbDogc3RyaW5nKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgLy8gY2FsY3VsYXRlIGxheWVyIGNoYW5uZWwgZG9tYWluXG4gICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCk7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3Zpc3VhbENoYW5uZWwuZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICB9XG5cbiAgZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzKCk6IFVwZGF0ZVRyaWdnZXJzIHtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VyczogVXBkYXRlVHJpZ2dlcnMgPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godmlzdWFsQ2hhbm5lbCA9PiB7XG4gICAgICAvLyBmaWVsZCByYW5nZSBzY2FsZSBkb21haW5cbiAgICAgIGNvbnN0IHthY2Nlc3NvciwgZmllbGQsIHNjYWxlLCBkb21haW4sIHJhbmdlLCBkZWZhdWx0VmFsdWUsIGZpeGVkfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0gPSB7XG4gICAgICAgICAgW2ZpZWxkXTogdGhpcy5jb25maWdbZmllbGRdLFxuICAgICAgICAgIFtzY2FsZV06IHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgICBbZG9tYWluXTogdGhpcy5jb25maWdbZG9tYWluXSxcbiAgICAgICAgICBbcmFuZ2VdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTpcbiAgICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIC4uLihmaXhlZCA/IHtbZml4ZWRdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdfSA6IHt9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVUcmlnZ2VycztcbiAgfVxuXG4gIGNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpIHtcbiAgICBjb25zdCB7c2NhbGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICAgIGlmICghZmllbGQpIHtcbiAgICAgIC8vIGlmIGNvbG9yRmllbGQgb3Igc2l6ZUZpZWxkIHdlcmUgc2V0IGJhY2sgdG8gbnVsbFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFzZXQuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZmllbGQsIHNjYWxlVHlwZSkgfHwgZGVmYXVsdERvbWFpbjtcbiAgfVxuXG4gIGhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbykge1xuICAgIHJldHVybiB0aGlzLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pICYmIG9iamVjdEluZm8ub2JqZWN0ID8gb2JqZWN0SW5mby5vYmplY3QgOiBudWxsO1xuICB9XG5cbiAgaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvYmplY3RJbmZvPy5waWNrZWQgJiYgb2JqZWN0SW5mbz8ubGF5ZXI/LnByb3BzPy5pZCA9PT0gdGhpcy5pZDtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlQnlab29tKG1hcFN0YXRlOiBNYXBTdGF0ZSwgZml4ZWRSYWRpdXM/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0NoYW5uZWwuZmllbGQ7XG4gICAgY29uc3QgZml4ZWQgPSBmaXhlZFJhZGl1cyA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzIDogZml4ZWRSYWRpdXM7XG4gICAgY29uc3Qge3JhZGl1c30gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG5cbiAgICByZXR1cm4gZml4ZWQgPyAxIDogKHRoaXMuY29uZmlnW2ZpZWxkXSA/IDEgOiByYWRpdXMpICogdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcHJvcHMuc29tZShwID0+ICF0aGlzLm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcy5pbmNsdWRlcyhwKSk7XG4gIH1cblxuICBnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzKGludGVyYWN0aW9uQ29uZmlnLCBicnVzaGluZ1RhcmdldD8pIHtcbiAgICBjb25zdCB7YnJ1c2h9ID0gaW50ZXJhY3Rpb25Db25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gYnJ1c2hpbmdcbiAgICAgIGF1dG9IaWdobGlnaHQ6ICFicnVzaC5lbmFibGVkLFxuICAgICAgYnJ1c2hpbmdSYWRpdXM6IGJydXNoLmNvbmZpZy5zaXplICogMTAwMCxcbiAgICAgIGJydXNoaW5nVGFyZ2V0OiBicnVzaGluZ1RhcmdldCB8fCAnc291cmNlJyxcbiAgICAgIGJydXNoaW5nRW5hYmxlZDogYnJ1c2guZW5hYmxlZFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0RGVja0xheWVyUHJvcHMoe1xuICAgIGlkeCxcbiAgICBncHVGaWx0ZXIsXG4gICAgbWFwU3RhdGUsXG4gICAgbGF5ZXJDYWxsYmFja3MsXG4gICAgdmlzaWJsZVxuICB9OiB7XG4gICAgaWR4OiBudW1iZXI7XG4gICAgZ3B1RmlsdGVyOiBHcHVGaWx0ZXI7XG4gICAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICAgIGxheWVyQ2FsbGJhY2tzOiBhbnk7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGlkeCxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVCxcbiAgICAgIHBpY2thYmxlOiB0cnVlLFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4obWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QpfSxcbiAgICAgIGhpZGRlbjogdGhpcy5jb25maWcuaGlkZGVuLFxuICAgICAgLy8gdmlzY29uZmlnXG4gICAgICBvcGFjaXR5OiB0aGlzLmNvbmZpZy52aXNDb25maWcub3BhY2l0eSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgIC8vIGRhdGEgZmlsdGVyaW5nXG4gICAgICBleHRlbnNpb25zOiBbZGF0YUZpbHRlckV4dGVuc2lvbl0sXG4gICAgICBmaWx0ZXJSYW5nZTogZ3B1RmlsdGVyID8gZ3B1RmlsdGVyLmZpbHRlclJhbmdlIDogdW5kZWZpbmVkLFxuICAgICAgb25GaWx0ZXJlZEl0ZW1zQ2hhbmdlOiBncHVGaWx0ZXIgPyBsYXllckNhbGxiYWNrcz8ub25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIDogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBsYXllciBzaG91bGQgYmUgdmlzaWJsZSBhbmQgaWYgc3BsaXRNYXAsIHNob3duIGluIHRvIG9uZSBvZiBwYW5lbFxuICAgICAgdmlzaWJsZTogdGhpcy5jb25maWcuaXNWaXNpYmxlICYmIHZpc2libGVcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke3RoaXMuaWR9LWhvdmVyZWRgLFxuICAgICAgcGlja2FibGU6IGZhbHNlLFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVFxuICAgIH07XG4gIH1cblxuICByZW5kZXJUZXh0TGFiZWxMYXllcihcbiAgICB7XG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldEZpbHRlcmVkLFxuICAgICAgZ2V0UGl4ZWxPZmZzZXQsXG4gICAgICBiYWNrZ3JvdW5kUHJvcHMsXG4gICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgIHNoYXJlZFByb3BzXG4gICAgfToge1xuICAgICAgZ2V0UG9zaXRpb24/OiAoKGQ6IGFueSkgPT4gbnVtYmVyW10pIHwgYXJyb3cuVmVjdG9yO1xuICAgICAgZ2V0RmlsdGVyZWQ/OiAoZGF0YToge2luZGV4OiBudW1iZXJ9LCBvYmplY3RJbmZvOiB7aW5kZXg6IG51bWJlcn0pID0+IG51bWJlcjtcbiAgICAgIGdldFBpeGVsT2Zmc2V0OiAodGV4dExhYmVsOiBhbnkpID0+IG51bWJlcltdIHwgKChkOiBhbnkpID0+IG51bWJlcltdKTtcbiAgICAgIGJhY2tncm91bmRQcm9wcz86IHtiYWNrZ3JvdW5kOiBib29sZWFufTtcbiAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgIH07XG4gICAgICBzaGFyZWRQcm9wczogYW55O1xuICAgIH0sXG4gICAgcmVuZGVyT3B0c1xuICApIHtcbiAgICBjb25zdCB7ZGF0YSwgbWFwU3RhdGV9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgY29uc3QgVGV4dExheWVyQ2xhc3MgPSBkYXRhLmRhdGEgaW5zdGFuY2VvZiBhcnJvdy5UYWJsZSA/IEdlb0Fycm93VGV4dExheWVyIDogVGV4dExheWVyO1xuXG4gICAgcmV0dXJuIGRhdGEudGV4dExhYmVscy5yZWR1Y2UoKGFjY3UsIGQsIGkpID0+IHtcbiAgICAgIGlmIChkLmdldFRleHQpIHtcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IHRleHRMYWJlbFtpXS5iYWNrZ3JvdW5kIHx8IGJhY2tncm91bmRQcm9wcz8uYmFja2dyb3VuZDtcblxuICAgICAgICBhY2N1LnB1c2goXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIG5ldyBUZXh0TGF5ZXJDbGFzcyh7XG4gICAgICAgICAgICAuLi5zaGFyZWRQcm9wcyxcbiAgICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS1sYWJlbC0ke3RleHRMYWJlbFtpXS5maWVsZD8ubmFtZX1gLFxuICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhLFxuICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5jb25maWcuaXNWaXNpYmxlLFxuICAgICAgICAgICAgZ2V0VGV4dDogZC5nZXRUZXh0LFxuICAgICAgICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICAgICAgICBnZXRGaWx0ZXJlZCxcbiAgICAgICAgICAgIGNoYXJhY3RlclNldDogZC5jaGFyYWN0ZXJTZXQsXG4gICAgICAgICAgICBnZXRQaXhlbE9mZnNldDogZ2V0UGl4ZWxPZmZzZXQodGV4dExhYmVsW2ldKSxcbiAgICAgICAgICAgIGdldFNpemU6IFBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIsXG4gICAgICAgICAgICBzaXplU2NhbGU6IHRleHRMYWJlbFtpXS5zaXplLFxuICAgICAgICAgICAgZ2V0VGV4dEFuY2hvcjogdGV4dExhYmVsW2ldLmFuY2hvcixcbiAgICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50LFxuICAgICAgICAgICAgZ2V0Q29sb3I6IHRleHRMYWJlbFtpXS5jb2xvcixcbiAgICAgICAgICAgIG91dGxpbmVXaWR0aDogdGV4dExhYmVsW2ldLm91dGxpbmVXaWR0aCAqIFRFWFRfT1VUTElORV9NVUxUSVBMSUVSLFxuICAgICAgICAgICAgb3V0bGluZUNvbG9yOiB0ZXh0TGFiZWxbaV0ub3V0bGluZUNvbG9yLFxuICAgICAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgICAgIGdldEJhY2tncm91bmRDb2xvcjogdGV4dExhYmVsW2ldLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGZvbnRTZXR0aW5nczoge1xuICAgICAgICAgICAgICBzZGY6IHRleHRMYWJlbFtpXS5vdXRsaW5lV2lkdGggPiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAvLyB0ZXh0IHdpbGwgYWx3YXlzIHNob3cgb24gdG9wIG9mIGFsbCBsYXllcnNcbiAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgICAgICAuLi51cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICAgICAgZ2V0VGV4dDogdGV4dExhYmVsW2ldLmZpZWxkPy5uYW1lLFxuICAgICAgICAgICAgICBnZXRQaXhlbE9mZnNldDoge1xuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50LFxuICAgICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3N1YkxheWVyUHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uKGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1bGw6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoa2VwbGVyVGFibGU6IEtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbik6IGFueSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFzZXQ6IEtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgZ2V0UG9zaXRpb25BY2Nlc3NvcihcbiAgICBfZGF0YUNvbnRhaW5lcj86IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gICAgLy8gVE9ETyByZWZhY3RvciBmb3IgdGhlIG5leHQgbWFqb3IgdmVyc2lvbiB0byBwYXNzIG9ubHkgZGF0YXNldFxuICAgIF9kYXRhc2V0PzogS2VwbGVyVGFibGVcbiAgKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIGdldExlZ2VuZFZpc3VhbENoYW5uZWxzKCk6IHtba2V5OiBzdHJpbmddOiBWaXN1YWxDaGFubmVsfSB7XG4gICAgcmV0dXJuIHRoaXMudmlzdWFsQ2hhbm5lbHM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxrQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBQyxzQkFBQSxDQUFBTixPQUFBO0FBRUEsSUFBQU8sS0FBQSxHQUFBQyx1QkFBQSxDQUFBUixPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFdBQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLFVBQUEsR0FBQVosT0FBQTtBQWtCQSxJQUFBYSxNQUFBLEdBQUFiLE9BQUE7QUFZQSxJQUFBYyxZQUFBLEdBQUFkLE9BQUE7QUFtQ0EsSUFBQWUsUUFBQSxHQUFBVCxzQkFBQSxDQUFBTixPQUFBO0FBQXFDLElBQUFnQixxQkFBQSxFQWhGckM7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxF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
|
|
1536
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZGVja2dsQXJyb3dMYXllcnMiLCJfZXh0ZW5zaW9ucyIsIl9sYXllcnMiLCJfd2luZG93IiwiX2tleW1pcnJvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZGVmYXVsdExheWVySWNvbiIsIl9sYXllclVwZGF0ZSIsIl9sYXllclV0aWxzIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9tZW1vaXplIiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX21hcmtlZCIsIl9yZWdlbmVyYXRvclJ1bnRpbWUyIiwibWFyayIsImdlbmVyYXRlQ29sb3IiLCJMQVlFUl9JRF9MRU5HVEgiLCJleHBvcnRzIiwiTUFYX1NBTVBMRV9TSVpFIiwiZGVmYXVsdERvbWFpbiIsImRhdGFGaWx0ZXJFeHRlbnNpb24iLCJEYXRhRmlsdGVyRXh0ZW5zaW9uIiwiZmlsdGVyU2l6ZSIsIk1BWF9HUFVfRklMVEVSUyIsImNvdW50SXRlbXMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZU9uRmlsdGVyZWRJdGVtc0NoYW5nZSIsImRlZmF1bHREYXRhQWNjZXNzb3IiLCJkYyIsImQiLCJpZGVudGl0eSIsImRlZmF1bHRHZXRGaWVsZFZhbHVlIiwiZmllbGQiLCJ2YWx1ZUFjY2Vzc29yIiwiT1ZFUkxBWV9UWVBFX0NPTlNUIiwia2V5bWlycm9yIiwiZGVja2dsIiwibWFwYm94Z2wiLCJsYXllckNvbG9ycyIsInZhbHVlcyIsIkRhdGFWaXpDb2xvcnMiLCJtYXAiLCJoZXhUb1JnYiIsImluZGV4IiwiX3JlZ2VuZXJhdG9yIiwid3JhcCIsImdlbmVyYXRlQ29sb3IkIiwiX2NvbnRleHQiLCJwcmV2Iiwic3RvcCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiX2NsYXNzQ2FsbENoZWNrMiIsImlkIiwiZ2VuZXJhdGVIYXNoSWQiLCJtZXRhIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJjb25maWciLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJfc3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJrZXkiLCJjb2x1bW5zIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiaXNWYWxpZCIsImVycm9yTWVzc2FnZSIsImZpbHRlcmVkSXRlbUNvdW50IiwiX2NyZWF0ZUNsYXNzMiIsImdldCIsIkRlZmF1bHRMYXllckljb24iLCJ0eXBlIiwicmVkdWNlIiwiYWNjIiwib2JqIiwicmVxdWlyZWRDb2x1bW5zIiwiY29uY2F0Iiwib3B0aW9uYWxDb2x1bW5zIiwiY29sb3IiLCJwcm9wZXJ0eSIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJudWxsVmFsdWUiLCJOT19WQUxVRV9DT0xPUiIsImRlZmF1bHRWYWx1ZSIsInNpemUiLCJsYXQiLCJwYWlyIiwiZmllbGRQYWlyS2V5IiwibG5nIiwiYWx0aXR1ZGUiLCJhbHQiLCJsYXQwIiwibG5nMCIsImFsdDAiLCJsYXQxIiwibG5nMSIsImFsdDEiLCJfcHJvcHMkaXNWaXNpYmxlIiwiX3Byb3BzJGlzQ29uZmlnQWN0aXZlIiwiX3Byb3BzJGhpZGRlbiIsImRhdGFJZCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInZpc0NvbmZpZyIsInRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImNvbG9yVUkiLCJERUZBVUxUX0NPTE9SX1VJIiwiY29sb3JSYW5nZSIsImFuaW1hdGlvbiIsImVuYWJsZWQiLCJnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24iLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJtZWFzdXJlIiwidW5kZWZpbmVkIiwicmFuZ2VTZXR0aW5ncyIsImZpZWxkU2V0dGluZ3MiLCJkaXNwbGF5TmFtZSIsImRlZmF1bHRNZWFzdXJlIiwiYXNzaWduQ29sdW1uIiwiX3RoaXMkY29uZmlnJGNvbHVtbnMiLCJ1cGRhdGUiLCJmaWVsZElkeCIsImFzc2lnbkNvbHVtblBhaXJzIiwiZmllbGRQYWlycyIsIl90aGlzJGNvbHVtblBhaXJzIiwiX3RoaXMkY29sdW1uUGFpcnMyIiwiY29sdW1uUGFpcnMiLCJfcmVmIiwidXBkYXRlZENvbHVtbiIsInBhcnRuZXJLZXlzIiwidG9BcnJheSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX3RoaXMkY29sdW1uUGFpcnMzIiwiX3RoaXMkY29sdW1uUGFpcnM0IiwicGFydG5lcktleSIsIl90aGlzJGNvbHVtblBhaXJzNSIsImVyciIsImdldFpvb21GYWN0b3IiLCJfcmVmMiIsInpvb20iLCJfcmVmMiR6b29tT2Zmc2V0Iiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJtYXgiLCJnZXRFbGV2YXRpb25ab29tRmFjdG9yIiwiX3JlZjMiLCJfcmVmMyR6b29tT2Zmc2V0IiwiX3RoaXMkY29uZmlnJHZpc0NvbmZpIiwiZml4ZWRIZWlnaHQiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJvbGRMYXllckRhdGEiLCJhbmltYXRpb25Db25maWciLCJyZW5kZXJMYXllciIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsImRhdGFDb250YWluZXIiLCJmaWVsZHMiLCJob3ZlckluZm8iLCJyb3ciLCJnZXRGaWx0ZXJlZEl0ZW1Db3VudCIsImZpcnN0TGF5ZXIiLCJhc3NpZ25Db25maWdUb0xheWVyIiwiY29uZmlnVG9Db3B5IiwiZGVmYXVsdExheWVyUHJvcHMiLCJfdGhpcyIsInNoYWxsb3dDb3B5IiwidiIsIm5vdFRvQ29weSIsImdyb3VwIiwiY3VycmVudENvbmZpZyIsImNvcGllZCIsImNvcHlMYXllckNvbmZpZyIsIl9zYXRpc2ZpZWRDb2x1bW5Nb2RlIiwiZGF0YXNldCIsInNhdGlzZmllZENvbHVtbk1vZGUiLCJnZXRTYXRpc2ZpZWRDb2x1bW5Nb2RlIiwib3B0aW9ucyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhbHRQcm9wcyIsImRlZmF1bHRDb2x1bW5Db25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl90aGlzMiIsIl9yZWY0IiwiX3JlZjQkc2hhbGxvd0NvcHkiLCJfcmVmNCRub3RUb0NvcHkiLCJpc1BsYWluT2JqZWN0IiwiaW5jbHVkZXMiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJyZWdpc3RlclZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlncyIsIl90aGlzMyIsIml0ZW0iLCJjb25maWdJdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJfdHlwZW9mMiIsImV2ZXJ5IiwicCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicHJvcHNDb2x1bW5zIiwiY29sdW1uVmFsaWRhdG9ycyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYXllckNvbHVtbnMiLCJhY2N1IiwiX3Byb3BzQ29sdW1ucyRrZXkkdmFsIiwiX3Byb3BzQ29sdW1ucyRrZXkiLCJfcHJvcHNDb2x1bW5zJGtleSRmaWUiLCJfcHJvcHNDb2x1bW5zJGtleTIiLCJfcHJvcHNDb2x1bW5zJGtleSR2YWwyIiwiX3Byb3BzQ29sdW1ucyRrZXkzIiwiX3Byb3BzQ29sdW1ucyRrZXkkZmllMiIsIl9wcm9wc0NvbHVtbnMka2V5NCIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwiX3Byb3BzQ29sdW1ucyRrZXkkdmFsMyIsIl9wcm9wc0NvbHVtbnMka2V5NSIsIl9wcm9wc0NvbHVtbnMka2V5JGZpZTMiLCJfcHJvcHNDb2x1bW5zJGtleTYiLCJuZXdDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInByb3AiLCJfdGhpcyRjb25maWciLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsIl9yZWY1IiwiX3JlZjYiLCJfc2xpY2VkVG9BcnJheTIiLCJpc0NvbG9yUmFuZ2UiLCJjb2xvcnMiLCJ1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlIiwidXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJfbmV3Q29uZmlnJGNvbG9yUmFuZ2UiLCJfbmV3Q29uZmlnJGNvbG9yUmFuZ2UyIiwiY29sb3JSYW5nZUNvbmZpZyIsImN1c3RvbSIsImN1c3RvbUJyZWFrcyIsImN1c3RvbVBhbGV0dGUiLCJfdGhpcyRjb25maWcyIiwiY29sb3JNYXAiLCJjaGFubmVsS2V5IiwiZmluZCIsIkNvbnNvbGUiLCJ3YXJuIiwiaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAiLCJpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSIsIl9uZXdDb25maWckY3VzdG9tUGFsZSIsIl90aGlzJGNvbmZpZzMiLCJpc0N1c3RvbSIsImNhdGVnb3J5IiwiY3VzdG9tU3RlcHNDaGFuZ2VkIiwic2hvd0Ryb3Bkb3duIiwic3RlcHMiLCJyZXZlcnNlZCIsIkJvb2xlYW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwiX3RoaXMkY29uZmlnNCIsImlzQ3VzdG9tQ29sb3JSZXZlcnNlZCIsInVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUkiLCJ1cGRhdGVDb2xvclJhbmdlQnlNYXRjaGluZ1BhbGV0dGUiLCJoYXNDb2x1bW5WYWx1ZSIsImNvbHVtbiIsImhhc1JlcXVpcmVkQ29sdW1uIiwiaGFzQWxsQ29sdW1ucyIsIl90aGlzNCIsIl90aGlzJGNvbmZpZzUiLCJfY3VycmVudENvbHVtbk1vZGVzJHIiLCJjdXJyZW50Q29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiY29sS2V5IiwiaGFzTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiZGF0YSIsIm51bVJvd3MiLCJpc1ZhbGlkVG9TYXZlIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImdldENhdGVnb3JpY2FsQ29sb3JTY2FsZSIsImhhc0NvbG9yTWFwIiwiX2NvbG9yUmFuZ2UkY29sb3JNYXAiLCJjTWFwIiwiTWFwIiwiX3JlZjciLCJfcmVmOCIsImsiLCJzZXQiLCJzY2FsZVR5cGUiLCJvcmRpbmFsIiwiZ2V0U2NhbGVGdW5jdGlvbiIsInVua25vd24iLCJVTktOT1dOX0NPTE9SX0tFWSIsImdldFZpc0NoYW5uZWxTY2FsZSIsImFjY2Vzc1ZTRmllbGRWYWx1ZSIsIl9maWVsZCIsIl9pbmRleEtleSIsImdldEF0dHJpYnV0ZUFjY2Vzc29ycyIsIl9yZWY5IiwiX3RoaXM1IiwiX3JlZjkkZGF0YUFjY2Vzc29yIiwiZGF0YUFjY2Vzc29yIiwiaW5kZXhLZXkiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJfdGhpczUkdmlzdWFsQ2hhbm5lbHMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJzaG91bGRHZXRTY2FsZSIsImlzRml4ZWQiLCJzY2FsZUZ1bmN0aW9uIiwiZ2V0RmllbGRWYWx1ZSIsImJ5Wm9vbSIsIm1lbW9pemUiLCJ6Iiwic2NhbGVGdW5jIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsImlzRG9tYWluUXVhbnRpbGUiLCJ6U3RlcHMiLCJnZXRTY2FsZSIsImdldFNjYWxlQnlab29tIiwic2NhbGVEb21haW4iLCJnZXREb21haW5TdGVwc2J5Wm9vbSIsInF1YW50aWxlcyIsInRocmVzaG9sZHMiLCJnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlcyIsImlzRG9tYWluU3RvcHMiLCJzdG9wcyIsIlNDQUxFX0ZVTkMiLCJnZXRQb2ludHNCb3VuZHMiLCJnZXRQb3NpdGlvbiIsInNhbXBsZURhdGEiLCJnZXRTYW1wbGVDb250YWluZXJEYXRhIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJnZXRMYXRMbmdCb3VuZHMiLCJsbmdCb3VuZHMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsImRpZmZVcGRhdGVUcmlnZ2VycyIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRWYWx1ZSIsImF0dHJpYnV0ZVZhbHVlIiwidXBkYXRlTWV0YSIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsIl9yZWYxMCIsImZpbHRlcmVkSW5kZXgiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwiaSIsInVwZGF0ZURhdGEiLCJsYXllckRhdGFzZXQiLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwidXBkYXRlTGF5ZXJNZXRhIiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwibmV3RmlsdGVyIiwiX3RoaXM2IiwidGFibGUiLCJnZXREYXRhc2V0IiwidXBkYXRlZERvbWFpbiIsImNhbGN1bGF0ZUxheWVyRG9tYWluIiwidmFsaWRhdGVGaWVsZFR5cGUiLCJ2YWxpZGF0ZVNjYWxlIiwidmlzdWFsQ2hhbm5lbCIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInNjYWxlT3B0aW9ucyIsImdldFNjYWxlT3B0aW9ucyIsIkZJRUxEX09QVFMiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJfdGhpczciLCJ1cGRhdGVUcmlnZ2VycyIsImdldENvbHVtbkxheWVyRG9tYWluIiwiaGFzSG92ZXJlZE9iamVjdCIsIm9iamVjdEluZm8iLCJpc0xheWVySG92ZXJlZCIsIl9vYmplY3RJbmZvJGxheWVyIiwicGlja2VkIiwibGF5ZXIiLCJnZXRSYWRpdXNTY2FsZUJ5Wm9vbSIsIm1hcFN0YXRlIiwiZml4ZWRSYWRpdXMiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJyYWRpdXMiLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJfdGhpczgiLCJub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMiLCJnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzIiwiaW50ZXJhY3Rpb25Db25maWciLCJicnVzaGluZ1RhcmdldCIsImJydXNoIiwiYXV0b0hpZ2hsaWdodCIsImJydXNoaW5nUmFkaXVzIiwiYnJ1c2hpbmdFbmFibGVkIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwiX3JlZjEyIiwiaWR4IiwiZ3B1RmlsdGVyIiwibGF5ZXJDYWxsYmFja3MiLCJ2aXNpYmxlIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwicGlja2FibGUiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJvbkZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJfcmVmMTMiLCJyZW5kZXJPcHRzIiwiX3RoaXM5IiwiZ2V0RmlsdGVyZWQiLCJnZXRQaXhlbE9mZnNldCIsImJhY2tncm91bmRQcm9wcyIsInNoYXJlZFByb3BzIiwiVGV4dExheWVyQ2xhc3MiLCJpc0Fycm93VGFibGUiLCJHZW9BcnJvd1RleHRMYXllciIsIlRleHRMYXllciIsInRleHRMYWJlbHMiLCJnZXRUZXh0IiwiX3RleHRMYWJlbCRpJGZpZWxkIiwiX3RleHRMYWJlbCRpJGZpZWxkMiIsImJhY2tncm91bmQiLCJjaGFyYWN0ZXJTZXQiLCJnZXRTaXplIiwiUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUiIsImdldFRleHRBbmNob3IiLCJhbmNob3IiLCJnZXRBbGlnbm1lbnRCYXNlbGluZSIsImFsaWdubWVudCIsImdldENvbG9yIiwib3V0bGluZVdpZHRoIiwiVEVYVF9PVVRMSU5FX01VTFRJUExJRVIiLCJvdXRsaW5lQ29sb3IiLCJnZXRCYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250U2V0dGluZ3MiLCJzZGYiLCJnZXRGaWx0ZXJWYWx1ZSIsImdldFJhZGl1cyIsIl9zdWJMYXllclByb3BzIiwiY3VsbCIsImtlcGxlclRhYmxlIiwiX2RhdGFDb250YWluZXIiLCJfZGF0YXNldCIsImdldExlZ2VuZFZpc3VhbENoYW5uZWxzIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdENvbHVtbkZpZWxkIiwiZGVmYXVsdEZpZWxkcyIsImFsbEZpZWxkcyIsInJlcXVpcmVkRmllbGRzIiwiZ2V0QWxsUG9zc2libGVDb2x1bW5QYWlycyIsImFsbEtleXMiLCJwb2ludGVycyIsImNvdW50UGVyS2V5IiwicGFpcnMiLCJpbmNyZW1lbnRQb2ludGVycyIsIm5ld1BhaXIiLCJjdXVyIiwicHRzIiwiY291bnRzIiwiYyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge0dlb0Fycm93VGV4dExheWVyfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1hcnJvdy1sYXllcnMnO1xuaW1wb3J0IHtEYXRhRmlsdGVyRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7VGV4dExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGtleW1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgRGVmYXVsdExheWVySWNvbiBmcm9tICcuL2RlZmF1bHQtbGF5ZXItaWNvbic7XG5pbXBvcnQge2RpZmZVcGRhdGVUcmlnZ2Vyc30gZnJvbSAnLi9sYXllci11cGRhdGUnO1xuaW1wb3J0IHtnZXRTYXRpc2ZpZWRDb2x1bW5Nb2RlLCBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZX0gZnJvbSAnLi9sYXllci11dGlscyc7XG5cbmltcG9ydCB7XG4gIENIQU5ORUxfU0NBTEVTLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIERFRkFVTFRfQ09MT1JfVUksXG4gIERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIERhdGFWaXpDb2xvcnMsXG4gIEZJRUxEX09QVFMsXG4gIExBWUVSX1ZJU19DT05GSUdTLFxuICBNQVhfR1BVX0ZJTFRFUlMsXG4gIE5PX1ZBTFVFX0NPTE9SLFxuICBQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSLFxuICBTQ0FMRV9GVU5DLFxuICBTQ0FMRV9UWVBFUyxcbiAgVEVYVF9PVVRMSU5FX01VTFRJUExJRVIsXG4gIFVOS05PV05fQ09MT1JfS0VZXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIERvbWFpblF1YW50aWxlcyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIGdldExhdExuZ0JvdW5kcyxcbiAgZ2V0U2FtcGxlQ29udGFpbmVyRGF0YSxcbiAgaGFzQ29sb3JNYXAsXG4gIGhleFRvUmdiLFxuICBpc1BsYWluT2JqZWN0LFxuICBpc0RvbWFpblN0b3BzLFxuICB1cGRhdGVDb2xvclJhbmdlQnlNYXRjaGluZ1BhbGV0dGUsXG4gIGlzQXJyb3dUYWJsZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtEYXRhc2V0cywgR3B1RmlsdGVyLCBLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVkQmluLFxuICBDb2xvclJhbmdlLFxuICBDb2xvclVJLFxuICBGaWVsZCxcbiAgRmlsdGVyLFxuICBHZXRWaXNDaGFubmVsU2NhbGVSZXR1cm5UeXBlLFxuICBMYXllclZpc0NvbmZpZ1NldHRpbmdzLFxuICBNYXBTdGF0ZSxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBLZXBsZXJMYXllcixcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBDb2x1bW5QYWlycyxcbiAgQ29sdW1uTGFiZWxzLFxuICBTdXBwb3J0ZWRDb2x1bW5Nb2RlLFxuICBGaWVsZFBhaXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFJHQkNvbG9yLFxuICBWYWx1ZU9mLFxuICBWaXN1YWxDaGFubmVsLFxuICBWaXN1YWxDaGFubmVscyxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgVmlzdWFsQ2hhbm5lbEZpZWxkLFxuICBWaXN1YWxDaGFubmVsU2NhbGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBnZXRTY2FsZUZ1bmN0aW9uLFxuICBpbml0aWFsaXplTGF5ZXJDb2xvck1hcCxcbiAgZ2V0Q2F0ZWdvcmljYWxDb2xvclNjYWxlLFxuICB1cGRhdGVDdXN0b21Db2xvclJhbmdlQnlDb2xvclVJXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZUN1c3RvbVBhbGV0dGUsXG4gIGlzRG9tYWluUXVhbnRpbGUsXG4gIGdldERvbWFpblN0ZXBzYnlab29tLFxuICBnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuZXhwb3J0IHR5cGUge1xuICBBZ2dyZWdhdGVkQmluLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWwsXG4gIFZpc3VhbENoYW5uZWxzLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBWaXN1YWxDaGFubmVsRmllbGQsXG4gIFZpc3VhbENoYW5uZWxTY2FsZVxufTtcblxuZXhwb3J0IHR5cGUgTGF5ZXJCYXNlQ29uZmlnUGFydGlhbCA9IHtkYXRhSWQ6IExheWVyQmFzZUNvbmZpZ1snZGF0YUlkJ119ICYgUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xuXG5leHBvcnQgdHlwZSBMYXllckNvbG9yQ29uZmlnID0ge1xuICBjb2xvckZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gIGNvbG9yRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBjb2xvclNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG59O1xuZXhwb3J0IHR5cGUgTGF5ZXJTaXplQ29uZmlnID0ge1xuICAvLyBjb2xvciBieSBzaXplLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gIHNpemVEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIHNpemVTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xuICBzaXplRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbn07XG5leHBvcnQgdHlwZSBMYXllckhlaWdodENvbmZpZyA9IHtcbiAgaGVpZ2h0RmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgaGVpZ2h0RG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBoZWlnaHRTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xufTtcbmV4cG9ydCB0eXBlIExheWVyU3Ryb2tlQ29sb3JDb25maWcgPSB7XG4gIHN0cm9rZUNvbG9yRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgc3Ryb2tlQ29sb3JEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIHN0cm9rZUNvbG9yU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllckNvdmVyYWdlQ29uZmlnID0ge1xuICBjb3ZlcmFnZUZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gIGNvdmVyYWdlRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBjb3ZlcmFnZVNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG59O1xuZXhwb3J0IHR5cGUgTGF5ZXJSYWRpdXNDb25maWcgPSB7XG4gIHJhZGl1c0ZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gIHJhZGl1c0RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgcmFkaXVzU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllcldlaWdodENvbmZpZyA9IHtcbiAgd2VpZ2h0RmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbn07XG5cbmV4cG9ydCB0eXBlIFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbiA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbWVhc3VyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxudHlwZSBDb2x1bW5WYWxpZGF0b3IgPSAoY29sdW1uOiBMYXllckNvbHVtbiwgY29sdW1uczogTGF5ZXJDb2x1bW5zLCBhbGxGaWVsZHM6IEZpZWxkW10pID0+IGJvb2xlYW47XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZVRyaWdnZXJzID0ge1xuICBba2V5OiBzdHJpbmddOiBVcGRhdGVUcmlnZ2VyO1xufTtcbmV4cG9ydCB0eXBlIFVwZGF0ZVRyaWdnZXIgPSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5leHBvcnQgdHlwZSBMYXllckJvdW5kcyA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICovXG5leHBvcnQgY29uc3QgTEFZRVJfSURfTEVOR1RIID0gNjtcblxuY29uc3QgTUFYX1NBTVBMRV9TSVpFID0gNTAwMDtcbmNvbnN0IGRlZmF1bHREb21haW46IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG5jb25zdCBkYXRhRmlsdGVyRXh0ZW5zaW9uID0gbmV3IERhdGFGaWx0ZXJFeHRlbnNpb24oe1xuICBmaWx0ZXJTaXplOiBNQVhfR1BVX0ZJTFRFUlMsXG4gIC8vIGBjb3VudEl0ZW1zYCBvcHRpb24uIEl0IGVuYWJsZXMgdGhlIEdQVSB0byByZXBvcnQgdGhlIG51bWJlciBvZiBvYmplY3RzIHRoYXQgcGFzcyB0aGUgZmlsdGVyIGNyaXRlcmlhIHZpYSB0aGUgYG9uRmlsdGVyZWRJdGVtc0NoYW5nZWAgY2FsbGJhY2suXG4gIC8vIEB0cy1leHBlY3QtZXJyb3Igbm90IHR5cGVkXG4gIGNvdW50SXRlbXM6IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlT25GaWx0ZXJlZEl0ZW1zQ2hhbmdlID8/IGZhbHNlXG59KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuY29uc3QgZGVmYXVsdERhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gZDtcbmNvbnN0IGlkZW50aXR5ID0gZCA9PiBkO1xuLy8gQ2FuJ3QgdXNlIGZpZWRWYWx1ZUFjY2Vzb3IgYmVjYXVzZSBuZWVkIHRoZSByYXcgZGF0YSB0byByZW5kZXIgdG9vbHRpcFxuLy8gU0hBTjogUmV2aXNpdCBoZXJlXG5leHBvcnQgY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEVfQ09OU1QgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKTogR2VuZXJhdG9yPFJHQkNvbG9yPiB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBMYXllckluZm9Nb2RhbCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGVtcGxhdGU6IFJlYWN0LkZDPHZvaWQ+O1xuICBtb2RhbFByb3BzOiB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb2xvck1ha2VyID0gZ2VuZXJhdGVDb2xvcigpO1xuXG5leHBvcnQgdHlwZSBCYXNlTGF5ZXJDb25zdHJ1Y3RvclByb3BzID0ge1xuICBpZD86IHN0cmluZztcbn0gJiBMYXllckJhc2VDb25maWdQYXJ0aWFsO1xuXG5jbGFzcyBMYXllciBpbXBsZW1lbnRzIEtlcGxlckxheWVyIHtcbiAgaWQ6IHN0cmluZztcbiAgbWV0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdmlzQ29uZmlnU2V0dGluZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiBWYWx1ZU9mPExheWVyVmlzQ29uZmlnU2V0dGluZ3M+O1xuICB9O1xuICBjb25maWc6IExheWVyQmFzZUNvbmZpZyAmIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz47XG4gIC8vIFRPRE86IGRlZmluZSBfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzXG4gIF9vbGREYXRhVXBkYXRlVHJpZ2dlcnM6IGFueTtcblxuICBpc1ZhbGlkOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGZpbHRlcmVkSXRlbUNvdW50OiB7XG4gICAgW2RlY2tMYXllcklkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJhc2VMYXllckNvbnN0cnVjdG9yUHJvcHMpIHtcbiAgICB0aGlzLmlkID0gcHJvcHMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcbiAgICAvLyBtZXRhXG4gICAgdGhpcy5tZXRhID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpO1xuXG4gICAgLy8gc2V0IGNvbHVtbk1vZGUgZnJvbSBzdXBwb3J0ZWQgY29sdW1uc1xuICAgIGlmICghdGhpcy5jb25maWcuY29sdW1uTW9kZSkge1xuICAgICAgY29uc3Qge3N1cHBvcnRlZENvbHVtbk1vZGVzfSA9IHRoaXM7XG4gICAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID0gc3VwcG9ydGVkQ29sdW1uTW9kZXNbMF0/LmtleTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlbiBzZXQgY29sdW1uLCBjb2x1bW5Nb2RlIHNob3VsZCBhbHJlYWR5IGJlZW4gc2V0XG4gICAgdGhpcy5jb25maWcuY29sdW1ucyA9IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKHByb3BzLmNvbHVtbnMpO1xuXG4gICAgLy8gZmFsc2UgaW5kaWNhdGVzIHRoYXQgdGhlIGxheWVyIGNhdXNlZCBhbiBlcnJvciwgYW5kIHdhcyBkaXNhYmxlZFxuICAgIHRoaXMuaXNWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgIC8vIGl0ZW0gY291bnRcbiAgICB0aGlzLmZpbHRlcmVkSXRlbUNvdW50ID0ge307XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCk6IFJlYWN0LkVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpOiBrZXlvZiB0eXBlb2YgT1ZFUkxBWV9UWVBFX0NPTlNUIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRDb2x1bW5Nb2Rlcy5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAoYWNjLCBvYmopID0+IChvYmoucmVxdWlyZWRDb2x1bW5zID8gYWNjLmNvbmNhdChvYmoucmVxdWlyZWRDb2x1bW5zKSA6IGFjYyksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRDb2x1bW5Nb2Rlcy5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAoYWNjLCBvYmopID0+IChvYmoub3B0aW9uYWxDb2x1bW5zID8gYWNjLmNvbmNhdChvYmoub3B0aW9uYWxDb2x1bW5zKSA6IGFjYyksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpOiBWaXN1YWxDaGFubmVscyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgY29sdW1uVmFsaWRhdG9ycygpOiB7W2tleTogc3RyaW5nXTogQ29sdW1uVmFsaWRhdG9yfSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCk6IENvbHVtblBhaXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29sdW1uIGxhYmVscyBpZiBpdHMgZGlmZmVyZW50IHRoYW4gY29sdW1uIGtleVxuICAgKi9cbiAgZ2V0IGNvbHVtbkxhYmVscygpOiBDb2x1bW5MYWJlbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKTogQ29sdW1uUGFpcnMge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQ6IHtwYWlyOiBbJ2xuZycsICdhbHRpdHVkZSddLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6IFsnbGF0JywgJ2FsdGl0dWRlJ10sIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0aXR1ZGU6IHtwYWlyOiBbJ2xuZycsICdsYXQnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCk6IENvbHVtblBhaXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogWydsbmcnLCAnYWx0J10sIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogWydsYXQnLCAnYWx0J10sIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0OiB7cGFpcjogWydsbmcnLCAnbGF0J10sIGZpZWxkUGFpcktleTogJ2FsdGl0dWRlJ30sXG5cbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBhbHQwOiB7cGFpcjogWydsbmcwJywgJ2xhdDAnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfSxcblxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfSxcbiAgICAgIGFsdDE6IHtwYWlyOiBbJ2xuZzEnLCAnbGF0MSddLCBmaWVsZFBhaXJLZXk6ICdhbHRpdHVkZSd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKTogTGF5ZXJJbmZvTW9kYWwgfCBSZWNvcmQ8c3RyaW5nLCBMYXllckluZm9Nb2RhbD4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoaWNoIGNvbHVtbiBtb2RlcyB0aGlzIGxheWVyIHN1cHBvcnRzXG4gICAqL1xuICBnZXQgc3VwcG9ydGVkQ29sdW1uTW9kZXMoKTogU3VwcG9ydGVkQ29sdW1uTW9kZVtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgc3VwcG9ydGVkRGF0YXNldFR5cGVzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKlxuICAgKiBHaXZlbiBhIGRhdGFzZXQsIGF1dG9tYXRpY2FsbHkgZmluZCBwcm9wcyB0byBjcmVhdGUgbGF5ZXIgYmFzZWQgb24gaXRcbiAgICogYW5kIHJldHVybiB0aGUgcHJvcHMgYW5kIHByZXZpb3VzIGZvdW5kIGxheWVycy5cbiAgICogQnkgZGVmYXVsdCwgbm8gbGF5ZXJzIHdpbGwgYmUgZm91bmRcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoXG4gICAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gICAgZm91bmRMYXllcnM/OiBhbnlbXVxuICApOiBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFpcnMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhaXJzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKGkgPT09IGFsbEtleXMubGVuZ3RoIC0gMSA/IC0xIDogMCkpO1xuICAgIGNvbnN0IGNvdW50UGVyS2V5ID0gYWxsS2V5cy5tYXAoayA9PiByZXF1aXJlZENvbHVtbnNba10ubGVuZ3RoKTtcbiAgICAvLyBUT0RPOiBCZXR0ZXIgdHlwaW5nc1xuICAgIGNvbnN0IHBhaXJzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG4gICAgd2hpbGUgKGluY3JlbWVudFBvaW50ZXJzKHBvaW50ZXJzLCBjb3VudFBlcktleSwgcG9pbnRlcnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGNvbnN0IG5ld1BhaXIgPSBwb2ludGVycy5yZWR1Y2UoKHByZXYsIGN1dXIsIGkpID0+IHtcbiAgICAgICAgcHJldlthbGxLZXlzW2ldXSA9IHJlcXVpcmVkQ29sdW1uc1thbGxLZXlzW2ldXVtjdXVyXTtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHBhaXJzLnB1c2gobmV3UGFpcik7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cbiAgICAvLyByZWN1cnNpdmVseSBpbmNyZW1lbnQgcG9pbnRlcnNcbiAgICBmdW5jdGlvbiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBwdHNbMF0gPT09IGNvdW50c1swXSAtIDEpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBpbmNyZW1lbnRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHRzW2luZGV4XSArIDEgPCBjb3VudHNbaW5kZXhdKSB7XG4gICAgICAgIHB0c1tpbmRleF0gPSBwdHNbaW5kZXhdICsgMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHB0c1tpbmRleF0gPSAwO1xuICAgICAgcmV0dXJuIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIHN0YXRpYyBoZXhUb1JnYihjKSB7XG4gICAgcmV0dXJuIGhleFRvUmdiKGMpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKFxuICAgIHByb3BzOiBMYXllckJhc2VDb25maWdQYXJ0aWFsXG4gICk6IExheWVyQmFzZUNvbmZpZyAmIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgLy8gc2V0IGNvbHVtbnMgbGF0ZXJcbiAgICAgIGNvbHVtbnM6IHt9LFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBwcm9wcy5pc0NvbmZpZ0FjdGl2ZSA/PyBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBwcm9wcy5oaWdobGlnaHRDb2xvciB8fCBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgICAgIGhpZGRlbjogcHJvcHMuaGlkZGVuID8/IGZhbHNlLFxuXG4gICAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGludG8gc2VwYXJhdGUgdmlzdWFsIENoYW5uZWwgY29uZmlnXG4gICAgICAvLyBjb2xvciBieSBmaWVsZCwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgY29sb3JGaWVsZDogbnVsbCxcbiAgICAgIGNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBjb2xvclNjYWxlOiBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcblxuICAgICAgLy8gY29sb3IgYnkgc2l6ZSwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgc2l6ZURvbWFpbjogWzAsIDFdLFxuICAgICAgc2l6ZVNjYWxlOiBTQ0FMRV9UWVBFUy5saW5lYXIsXG4gICAgICBzaXplRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX0sXG4gICAgICAuLi4ocHJvcHMuY29sdW1uTW9kZSA/IHtjb2x1bW5Nb2RlOiBwcm9wcy5jb2x1bW5Nb2RlfSA6IHt9KVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHZpc3VhbENoYW5uZWwgY29uZmlnXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXk6IHN0cmluZyk6IFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbiB7XG4gICAgLy8gZS5nLiBsYWJlbDogQ29sb3IsIG1lYXN1cmU6IFZlaGljbGUgVHlwZVxuICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2tleV07XG4gICAgaWYgKCFjaGFubmVsKSByZXR1cm4ge2xhYmVsOiAnJywgbWVhc3VyZTogdW5kZWZpbmVkfTtcbiAgICBjb25zdCByYW5nZVNldHRpbmdzID0gdGhpcy52aXNDb25maWdTZXR0aW5nc1tjaGFubmVsLnJhbmdlXTtcbiAgICBjb25zdCBmaWVsZFNldHRpbmdzID0gdGhpcy5jb25maWdbY2hhbm5lbC5maWVsZF07XG4gICAgY29uc3QgbGFiZWwgPSByYW5nZVNldHRpbmdzPy5sYWJlbDtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHR5cGVvZiBsYWJlbCA9PT0gJ2Z1bmN0aW9uJyA/IGxhYmVsKHRoaXMuY29uZmlnKSA6IGxhYmVsIHx8ICcnLFxuICAgICAgbWVhc3VyZTogZmllbGRTZXR0aW5nc1xuICAgICAgICA/IGZpZWxkU2V0dGluZ3MuZGlzcGxheU5hbWUgfHwgZmllbGRTZXR0aW5ncy5uYW1lXG4gICAgICAgIDogY2hhbm5lbC5kZWZhdWx0TWVhc3VyZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgdG8gbGF5ZXIgY29sdW1uLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uKGtleTogc3RyaW5nLCBmaWVsZDoge25hbWU6IHN0cmluZzsgZmllbGRJZHg6IG51bWJlcn0pOiBMYXllckNvbHVtbnMge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zPy5ba2V5XSxcbiAgICAgICAgLi4udXBkYXRlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCBwYWlyIHRvIGNvbHVtbiBjb25maWcsIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXk6IHN0cmluZywgZmllbGRQYWlyczogRmllbGRQYWlyKTogTGF5ZXJDb2x1bW5zIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG4gICAgLy8ga2V5ID0gJ2xhdCdcbiAgICBjb25zdCB7cGFpciwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBmaWVsZFBhaXJLZXkgPT09ICdzdHJpbmcnICYmICFmaWVsZFBhaXJzW2ZpZWxkUGFpcktleV0pIHtcbiAgICAgIC8vIGRvIG5vdCBhbGxvdyBga2V5OiB1bmRlZmluZWRgIHRvIGNyZWVwIGludG8gdGhlIGB1cGRhdGVkQ29sdW1uYCBvYmplY3RcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zO1xuICAgIH1cblxuICAgIC8vIHBhaXIgPSBbJ2xuZycsICdhbHRdIHwgJ2xuZydcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1uID0ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZmllbGRQYWlyS2V5IGNhbiBiZSBzdHJpbmdbXSBoZXJlP1xuICAgICAgW2tleV06IGZpZWxkUGFpcnNbZmllbGRQYWlyS2V5XVxuICAgIH07XG5cbiAgICBjb25zdCBwYXJ0bmVyS2V5cyA9IHRvQXJyYXkocGFpcik7XG4gICAgZm9yIChjb25zdCBwYXJ0bmVyS2V5IG9mIHBhcnRuZXJLZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnNbcGFydG5lcktleV0gJiZcbiAgICAgICAgdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZmllbGRQYWlyc1t0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV0uZmllbGRQYWlyS2V5XVxuICAgICAgKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdXBkYXRlZENvbHVtbltwYXJ0bmVyS2V5XSA9IGZpZWxkUGFpcnNbdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldLmZpZWxkUGFpcktleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgcmFkaXVzIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdm9pZH0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiBNYXRoLnBvdygyLCBNYXRoLm1heCgxNCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgZWxldmF0aW9uIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEVsZXZhdGlvblpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfToge3pvb206IG51bWJlcjsgem9vbU9mZnNldD86IG51bWJlcn0pOiBudW1iZXIge1xuICAgIC8vIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IgaXMgdXNlZCB0byBzdXBwb3J0IGV4aXN0aW5nIG1hcHNcbiAgICBjb25zdCB7Zml4ZWRIZWlnaHQsIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3J9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuICAgIHJldHVybiBmaXhlZEhlaWdodCB8fCBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yID09PSBmYWxzZVxuICAgICAgPyAxXG4gICAgICA6IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHM6IERhdGFzZXRzLCBvbGRMYXllckRhdGE/OiB1bmtub3duLCBhbmltYXRpb25Db25maWc/OiBBbmltYXRpb25Db25maWcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJlbmRlckxheWVyKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgZ2V0SG92ZXJEYXRhKFxuICAgIG9iamVjdDogYW55LFxuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGZpZWxkcz86IEZpZWxkW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGFuaW1hdGlvbkNvbmZpZz86IEFuaW1hdGlvbkNvbmZpZyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgaG92ZXJJbmZvPzoge2luZGV4OiBudW1iZXJ9XG4gICk6IGFueSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZEl0ZW1Db3VudCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAvLyB1c2UgZmlyc3QgbGF5ZXJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudCkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaXJzdExheWVyID0gT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudClbMF07XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEl0ZW1Db3VudFtmaXJzdExheWVyXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdoZW4gY2hhbmdlIGxheWVyIHR5cGUsIHRyeSB0byBjb3B5IG92ZXIgbGF5ZXIgY29uZmlncyBhcyBtdWNoIGFzIHBvc3NpYmxlXG4gICAqIEBwYXJhbSBjb25maWdUb0NvcHkgLSBjb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB2aXNDb25maWdTZXR0aW5ncyAtIHZpc0NvbmZpZyBzZXR0aW5ncyBvZiBjb25maWcgdG8gY29weVxuICAgKiBAcGFyYW0gZGF0YXNldHMgLSBjdXJyZW50IGRhdGFzZXRzLlxuICAgKiBAcGFyYW0gZGVmYXVsdExheWVyUHJvcHMgLSBkZWZhdWx0IGxheWVyIGNyZWF0aW9uIGNvbmZpZ3VyYXRpb25zIGZvciBjdXJyZW50IGxheWVyIGFuZCBkYXRhc2V0cy5cbiAgICovXG4gIGFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgY29uZmlnVG9Db3B5OiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllclNpemVDb25maWc+LFxuICAgIHZpc0NvbmZpZ1NldHRpbmdzOiB7W2tleTogc3RyaW5nXTogVmFsdWVPZjxMYXllclZpc0NvbmZpZ1NldHRpbmdzPn0sXG4gICAgZGF0YXNldHM/OiBEYXRhc2V0cyxcbiAgICBkZWZhdWx0TGF5ZXJQcm9wcz86IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlIHwgbnVsbFxuICApIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIGNvbHVtTm9kZSBiYXNlZCBvbiBuZXcgY29sdW1uc1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlICYmIHRoaXMuc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cz8uW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgICAvLyB0cnkgdG8gZmluZCBhIG1vZGUgd2l0aCBhbGwgcmVxdWllZCBjb2x1bW5zIGZyb20gdGhlIHNvdXJjZSBjb25maWdcbiAgICAgIGxldCBzYXRpc2ZpZWRDb2x1bW5Nb2RlID0gZ2V0U2F0aXNmaWVkQ29sdW1uTW9kZShcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyxcbiAgICAgICAgY29waWVkLmNvbHVtbnMsXG4gICAgICAgIGRhdGFzZXQ/LmZpZWxkc1xuICAgICAgKTtcblxuICAgICAgLy8gaWYgbm8gc3VpdGFibGUgY29sdW1uIG1vZGUgZm91bmQgb3Igbm8gc3VjaCBjb2x1bU1vZGUgZXhpc3RzIGZvciB0aGUgbGF5ZXJcbiAgICAgIC8vIHRoZW4gdHJ5IHVzZSBvbmUgb2YgdGhlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgbGF5ZXIgY29uZmlnc1xuICAgICAgaWYgKCFzYXRpc2ZpZWRDb2x1bW5Nb2RlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICAgICAgLi4uKGRlZmF1bHRMYXllclByb3BzPy5wcm9wcyB8fCBbXSksXG4gICAgICAgICAgLi4uKGRlZmF1bHRMYXllclByb3BzPy5hbHRQcm9wcyB8fCBbXSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSBmaXJzdCBvZiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uc1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5Db25maWcgPSBvcHRpb25zWzBdLmNvbHVtbnM7XG5cbiAgICAgICAgICBzYXRpc2ZpZWRDb2x1bW5Nb2RlID0gZ2V0U2F0aXNmaWVkQ29sdW1uTW9kZShcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydGVkQ29sdW1uTW9kZXMsXG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uQ29uZmlnLFxuICAgICAgICAgICAgZGF0YXNldD8uZmllbGRzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzYXRpc2ZpZWRDb2x1bW5Nb2RlKSB7XG4gICAgICAgICAgICBjb3BpZWQuY29sdW1ucyA9IHtcbiAgICAgICAgICAgICAgLi4uY29waWVkLmNvbHVtbnMsXG4gICAgICAgICAgICAgIC4uLmRlZmF1bHRDb2x1bW5Db25maWdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvcGllZC5jb2x1bW5Nb2RlID0gc2F0aXNmaWVkQ29sdW1uTW9kZT8ua2V5IHx8IGNvcGllZC5jb2x1bW5Nb2RlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhcbiAgICBjdXJyZW50Q29uZmlnLFxuICAgIGNvbmZpZ1RvQ29weSxcbiAgICB7c2hhbGxvd0NvcHkgPSBbXSwgbm90VG9Db3B5ID0gW119OiB7c2hhbGxvd0NvcHk/OiBzdHJpbmdbXTsgbm90VG9Db3B5Pzogc3RyaW5nW119ID0ge31cbiAgKSB7XG4gICAgY29uc3QgY29waWVkOiB7Y29sdW1uTW9kZT86IHN0cmluZzsgY29sdW1ucz86IExheWVyQ29sdW1uc30gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY3VycmVudENvbmZpZ1trZXldKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KGNvbmZpZ1RvQ29weVtrZXldKSAmJlxuICAgICAgICAhc2hhbGxvd0NvcHkuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSlcbiAgICAgICkge1xuICAgICAgICAvLyByZWN1cnNpdmVseSBhc3NpZ24gb2JqZWN0IHZhbHVlXG4gICAgICAgIGNvcGllZFtrZXldID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZ1trZXldLCBjb25maWdUb0NvcHlba2V5XSwge1xuICAgICAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgICAgIG5vdFRvQ29weVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKGNvbmZpZ1RvQ29weVtrZXldKSAmJiAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgLy8gY29weVxuICAgICAgICBjb3BpZWRba2V5XSA9IGNvbmZpZ1RvQ29weVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZ1xuICAgICAgICBjb3BpZWRba2V5XSA9IGN1cnJlbnRDb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICByZWdpc3RlclZpc0NvbmZpZyhsYXllclZpc0NvbmZpZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiBrZXlvZiBMYXllclZpc0NvbmZpZ1NldHRpbmdzIHwgVmFsdWVPZjxMYXllclZpc0NvbmZpZ1NldHRpbmdzPjtcbiAgfSkge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0l0ZW0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZ0l0ZW0gPT09ICdzdHJpbmcnICYmIExBWUVSX1ZJU19DT05GSUdTW2NvbmZpZ0l0ZW1dKSB7XG4gICAgICAgIC8vIGlmIGFzc2lnbmVkIG9uZSBvZiBkZWZhdWx0IExBWUVSX0NPTkZJR1NcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbY29uZmlnSXRlbV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbY29uZmlnSXRlbV07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgY29uZmlnSXRlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZ0l0ZW0sIHApKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHByb3ZpZGVkIGN1c3RvbWl6ZWQgdmlzQ29uZmlnLCBhbmQgaGFzIHR5cGUgJiYgZGVmYXVsdFZhbHVlXG4gICAgICAgIC8vIFRPRE86IGZ1cnRoZXIgY2hlY2sgaWYgY3VzdG9taXplZCB2aXNDb25maWcgaXMgdmFsaWRcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gY29uZmlnSXRlbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBjb25maWdJdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGF5ZXJDb2x1bW5zKHByb3BzQ29sdW1ucyA9IHt9KSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNDb2x1bW5zW2tleV0/LnZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICAgIGZpZWxkSWR4OiBwcm9wc0NvbHVtbnNba2V5XT8uZmllbGRJZHggPz8gLTEsXG4gICAgICAgICAgICAgIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7dmFsdWU6IHByb3BzQ29sdW1uc1trZXldPy52YWx1ZSA/PyBudWxsLCBmaWVsZElkeDogcHJvcHNDb2x1bW5zW2tleV0/LmZpZWxkSWR4ID8/IC0xfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToge1xuICAgICAgICAgIHZhbHVlOiBwcm9wc0NvbHVtbnNba2V5XT8udmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICBmaWVsZElkeDogcHJvcHNDb2x1bW5zW2tleV0/LmZpZWxkSWR4ID8/IC0xLFxuICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHsuLi5yZXF1aXJlZCwgLi4ub3B0aW9uYWx9O1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICB1cGRhdGVMYXllckNvbmZpZzxcbiAgICBMYXllckNvbmZpZyBleHRlbmRzIExheWVyQmFzZUNvbmZpZyAmXG4gICAgICBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllclNpemVDb25maWc+ID0gTGF5ZXJCYXNlQ29uZmlnXG4gID4obmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyQ29uZmlnPik6IExheWVyIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsuLi50aGlzLmNvbmZpZywgLi4ubmV3Q29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZyA9IHsuLi50aGlzLmNvbmZpZy52aXNDb25maWcsIC4uLm5ld1Zpc0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllckNvbG9yVUkocHJvcDogc3RyaW5nLCBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST4pOiBMYXllciB7XG4gICAgY29uc3Qge2NvbG9yVUk6IHByZXZpb3VzLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QobmV3Q29uZmlnKSB8fCB0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yVUlQcm9wID0gT2JqZWN0LmVudHJpZXMobmV3Q29uZmlnKS5yZWR1Y2UoKGFjY3UsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06XG4gICAgICAgICAgaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IHsuLi5hY2N1W2tleV0sIC4uLih2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPil9XG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICB9O1xuICAgIH0sIHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpO1xuXG4gICAgY29uc3QgY29sb3JVSSA9IHtcbiAgICAgIC4uLnByZXZpb3VzLFxuICAgICAgW3Byb3BdOiBjb2xvclVJUHJvcFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtjb2xvclVJfSk7XG4gICAgLy8gaWYgY29sb3JVSVtwcm9wXSBpcyBjb2xvclJhbmdlXG4gICAgY29uc3QgaXNDb2xvclJhbmdlID0gdmlzQ29uZmlnW3Byb3BdICYmIHZpc0NvbmZpZ1twcm9wXS5jb2xvcnM7XG5cbiAgICBpZiAoaXNDb2xvclJhbmdlKSB7XG4gICAgICAvLyBpZiBvcGVuIGRyb3Bkb3duIGFuZCBwcm9wIGlzIGNvbG9yIHJhbmdlXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCBhbmQgcmV2ZXJzZWRcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuXG4gICAgICAvLyBpZiBjaGFuZ2VzIGluIFVJIGlzIG1hZGUgdG8gJ3JldmVyc2VkJywgJ3N0ZXBzJyBvciBzdGVwc1xuICAgICAgLy8gdXBkYXRlIGN1cnJlbnQgbGF5ZXIgY29sb3JSYW5nZVxuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuXG4gICAgICAvLyBpZiBzZXQgY29sb3JSYW5nZUNvbmZpZyB0byBjdXN0b21cbiAgICAgIC8vIGluaXRpYXRlIGN1c3RvbVBhbGV0dGUgdG8gYmUgZWRpdGVkIGluIHRoZSB1aVxuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gaWYgc2V0IGNvbG9yUmFuZ2VDb25maWcgdG8gY3VzdG9tIHBhbGV0dGUgb3IgY3VzdG9tIGJyZWFrc1xuICAvLyBpbml0aWF0ZSBjdXN0b21QYWxldHRlIHRvIGJlIGVkaXRlZCBpbiB0aGUgdWlcbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZz8uY3VzdG9tICYmICFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZz8uY3VzdG9tQnJlYWtzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5ld0NvbmZpZy5jdXN0b21QYWxldHRlKSB7XG4gICAgICAvLyBpZiBuZXcgY29uZmlnIGFsc28gc2V0IGN1c3RvbVBhbGV0dGUsIG5vIG5lZWQgdG8gaW5pdGlhdGUgbmV3XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIXZpc0NvbmZpZ1twcm9wXSkgcmV0dXJuO1xuICAgIC8vIG1ha2UgY29weSBvZiBjdXJyZW50IGNvbG9yIHJhbmdlIHRvIGN1c3RvbVBhbGV0dGVcbiAgICBsZXQgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLnZpc0NvbmZpZ1twcm9wXVxuICAgIH07XG5cbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tQnJlYWtzICYmICFjdXN0b21QYWxldHRlLmNvbG9yTWFwKSB7XG4gICAgICAvLyBmaW5kIHZpc3VhbENoYW5lbFxuICAgICAgY29uc3QgdmlzdWFsQ2hhbm5lbHMgPSB0aGlzLnZpc3VhbENoYW5uZWxzO1xuICAgICAgY29uc3QgY2hhbm5lbEtleSA9IE9iamVjdC5rZXlzKHZpc3VhbENoYW5uZWxzKS5maW5kKFxuICAgICAgICBrZXkgPT4gdmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZSA9PT0gcHJvcFxuICAgICAgKTtcbiAgICAgIGlmICghY2hhbm5lbEtleSkge1xuICAgICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcG5cbiAgICAgICAgQ29uc29sZS53YXJuKGB1cGRhdGVDb2xvclVJOiBDYW4ndCBmaW5kIHZpc3VhbCBjaGFubmVsIHdoaWNoIHJhbmdlIGlzICR7cHJvcH1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gYWRkIG5hbWV8dHlwZXxjYXRlZ29yeSB0byB1cGRhdGVDdXN0b21QYWxldHRlIGlmIGN1c3RvbUJyZWFrcywgc28gdGhhdFxuICAgICAgLy8gY29sb3JzIHdpbGwgbm90IGJlIG92ZXJyaWRlIGFzIHdlbGwgd2hlbiBpbnZlcnNlIHBhbGV0dGUgd2l0aCBjdXN0b20gYnJlYWtcbiAgICAgIC8vIGluaXRpYXRlIGNvbG9yTWFwIGZyb20gY3VycmVudCBzY2FsZVxuXG4gICAgICBjb25zdCBjb2xvck1hcCA9IGluaXRpYWxpemVMYXllckNvbG9yTWFwKHRoaXMsIHZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldKTtcbiAgICAgIGN1c3RvbVBhbGV0dGUgPSBpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSh2aXNDb25maWdbcHJvcF0sIGNvbG9yTWFwKTtcbiAgICB9IGVsc2UgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmN1c3RvbSkge1xuICAgICAgY3VzdG9tUGFsZXR0ZSA9IGluaXRpYWxpemVDdXN0b21QYWxldHRlKHZpc0NvbmZpZ1twcm9wXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCBhbmQgcmV2ZXJzZWRcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICAvLyB3aGVuIGN1c3RvbSBwYWxldHRlIGFkZHMvcmVtb3ZlcyBzdGVwLCB0aGUgbnVtYmVyIGluIFwiU3RlcHNcIiBpbnB1dCBjb250cm9sXG4gICAgLy8gc2hvdWxkIGJlIHVwZGF0ZWQgYXMgd2VsbFxuICAgIGNvbnN0IGlzQ3VzdG9tID0gbmV3Q29uZmlnLmN1c3RvbVBhbGV0dGU/LmNhdGVnb3J5ID09PSAnQ3VzdG9tJztcbiAgICBjb25zdCBjdXN0b21TdGVwc0NoYW5nZWQgPSBpc0N1c3RvbVxuICAgICAgPyBuZXdDb25maWcuY3VzdG9tUGFsZXR0ZS5jb2xvcnMubGVuZ3RoICE9PSB2aXNDb25maWdbcHJvcF0uY29sb3JzLmxlbmd0aFxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicgJiYgIWN1c3RvbVN0ZXBzQ2hhbmdlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgc3RlcHM6IGN1c3RvbVN0ZXBzQ2hhbmdlZFxuICAgICAgICAgICAgICA/IGNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZS5jb2xvcnMubGVuZ3RoXG4gICAgICAgICAgICAgIDogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycy5sZW5ndGgsXG4gICAgICAgICAgICByZXZlcnNlZDogQm9vbGVhbih2aXNDb25maWdbcHJvcF0ucmV2ZXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJywgJ2NvbG9yQmxpbmRTYWZlJywgJ3R5cGUnXS5zb21lKFxuICAgICAgICBrZXkgPT5cbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcsIGtleSkgJiZcbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZ1trZXldICE9PVxuICAgICAgICAgICAgKHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpLmNvbG9yUmFuZ2VDb25maWdba2V5XVxuICAgICAgKTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIC8vIGZvciBjdXN0b20gcGFsZXR0ZSwgb25lIGNhbiBvbmx5ICdyZXZlcnNlJyB0aGUgY29sb3JzIGluIGN1c3RvbSBwYWxldHRlLlxuICAgIC8vIGNoYW5naW5nICdzdGVwcycsICdjb2xvckJpbmRTYWZlJywgJ3R5cGUnIHNob3VsZCBmYWxsIGJhY2sgdG8gcHJlZGVmaW5lZCBwYWxldHRlLlxuICAgIGNvbnN0IGlzQ3VzdG9tQ29sb3JSZXZlcnNlZCA9XG4gICAgICB2aXNDb25maWcuY29sb3JSYW5nZS5jYXRlZ29yeSA9PT0gJ0N1c3RvbScgJiZcbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcsICdyZXZlcnNlZCcpO1xuXG4gICAgY29uc3QgdXBkYXRlID0gaXNDdXN0b21Db2xvclJldmVyc2VkXG4gICAgICA/IHVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUkodmlzQ29uZmlnW3Byb3BdLCBjb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcpXG4gICAgICA6IHVwZGF0ZUNvbG9yUmFuZ2VCeU1hdGNoaW5nUGFsZXR0ZSh2aXNDb25maWdbcHJvcF0sIGNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZyk7XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuICBoYXNDb2x1bW5WYWx1ZShjb2x1bW4/OiBMYXllckNvbHVtbikge1xuICAgIHJldHVybiBCb29sZWFuKGNvbHVtbiAmJiBjb2x1bW4udmFsdWUgJiYgY29sdW1uLmZpZWxkSWR4ID4gLTEpO1xuICB9XG4gIGhhc1JlcXVpcmVkQ29sdW1uKGNvbHVtbj86IExheWVyQ29sdW1uKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY29sdW1uICYmIChjb2x1bW4ub3B0aW9uYWwgfHwgdGhpcy5oYXNDb2x1bW5WYWx1ZShjb2x1bW4pKSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICBjb25zdCB7Y29sdW1ucywgY29sdW1uTW9kZX0gPSB0aGlzLmNvbmZpZztcbiAgICAvLyBpZiBsYXllciBoYXMgZGlmZmVyZW50IGNvbHVtbiBtb2RlLCBjaGVjayBpZiBoYXZlIGFsbCByZXF1aXJlZCBjb2x1bW5zIG9mIGN1cnJlbnQgY29sdW1uIE1vZGVcbiAgICBpZiAoY29sdW1uTW9kZSkge1xuICAgICAgY29uc3QgY3VycmVudENvbHVtbk1vZGVzID0gKHRoaXMuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IGNvbHVtbk1vZGVcbiAgICAgICk7XG4gICAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgICAgY3VycmVudENvbHVtbk1vZGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjdXJyZW50Q29sdW1uTW9kZXMucmVxdWlyZWRDb2x1bW5zPy5ldmVyeShjb2xLZXkgPT4gdGhpcy5oYXNDb2x1bW5WYWx1ZShjb2x1bW5zW2NvbEtleV0pKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICBjb2x1bW5zICYmXG4gICAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkoKGNvbHVtbj86IExheWVyQ29sdW1uKSA9PiB0aGlzLmhhc1JlcXVpcmVkQ29sdW1uKGNvbHVtbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBPYmplY3R9IGxheWVyRGF0YVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNMYXllckRhdGEobGF5ZXJEYXRhOiB7ZGF0YTogdW5rbm93bltdIHwgYXJyb3cuVGFibGV9KSB7XG4gICAgaWYgKCFsYXllckRhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIGxheWVyRGF0YS5kYXRhICYmXG4gICAgICAgICgobGF5ZXJEYXRhLmRhdGEgYXMgdW5rbm93bltdKS5sZW5ndGggfHwgKGxheWVyRGF0YS5kYXRhIGFzIGFycm93LlRhYmxlKS5udW1Sb3dzKVxuICAgICk7XG4gIH1cblxuICBpc1ZhbGlkVG9TYXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMudHlwZSAmJiB0aGlzLmhhc0FsbENvbHVtbnMoKSk7XG4gIH1cblxuICBzaG91bGRSZW5kZXJMYXllcihkYXRhKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIEJvb2xlYW4odGhpcy50eXBlKSAmJlxuICAgICAgdGhpcy5oYXNBbGxDb2x1bW5zKCkgJiZcbiAgICAgIHRoaXMuaGFzTGF5ZXJEYXRhKGRhdGEpICYmXG4gICAgICB0eXBlb2YgdGhpcy5yZW5kZXJMYXllciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKFxuICAgIGNvbG9yU2NhbGU6IHN0cmluZyxcbiAgICBjb2xvckRvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgICBjb2xvclJhbmdlOiBDb2xvclJhbmdlXG4gICk6IEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGUge1xuICAgIGlmIChjb2xvclNjYWxlID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsKSB7XG4gICAgICByZXR1cm4gZ2V0Q2F0ZWdvcmljYWxDb2xvclNjYWxlKGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ29sb3JNYXAoY29sb3JSYW5nZSkgJiYgY29sb3JTY2FsZSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tKSB7XG4gICAgICBjb25zdCBjTWFwID0gbmV3IE1hcCgpO1xuICAgICAgY29sb3JSYW5nZS5jb2xvck1hcD8uZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gY29sb3JTY2FsZSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tID8gY29sb3JTY2FsZSA6IFNDQUxFX1RZUEVTLm9yZGluYWw7XG5cbiAgICAgIGNvbnN0IHNjYWxlID0gZ2V0U2NhbGVGdW5jdGlvbihzY2FsZVR5cGUsIGNNYXAudmFsdWVzKCksIGNNYXAua2V5cygpLCBmYWxzZSk7XG4gICAgICBzY2FsZS51bmtub3duKGNNYXAuZ2V0KFVOS05PV05fQ09MT1JfS0VZKSB8fCBOT19WQUxVRV9DT0xPUik7XG5cbiAgICAgIHJldHVybiBzY2FsZSBhcyBHZXRWaXNDaGFubmVsU2NhbGVSZXR1cm5UeXBlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UuY29sb3JzLm1hcChoZXhUb1JnYikpO1xuICB9XG5cbiAgYWNjZXNzVlNGaWVsZFZhbHVlKF9maWVsZCwgX2luZGV4S2V5KSB7XG4gICAgcmV0dXJuIGRlZmF1bHRHZXRGaWVsZFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gdmlzdWFsIGNoYW5uZWxzIHRvIGRlY2suZ2wgYWNjZXNvcnNcbiAgICogQHBhcmFtIHBhcmFtIFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtcbiAgICBkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLFxuICAgIGRhdGFDb250YWluZXIsXG4gICAgaW5kZXhLZXlcbiAgfToge1xuICAgIGRhdGFBY2Nlc3Nvcj86IHR5cGVvZiBkZWZhdWx0RGF0YUFjY2Vzc29yO1xuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gICAgaW5kZXhLZXk/OiBudW1iZXIgfCBudWxsO1xuICB9KSB7XG4gICAgY29uc3QgYXR0cmlidXRlQWNjZXNzb3JzOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpeGVkLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgYWNjZXNzb3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWUsXG4gICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZVxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICBjb25zdCBzaG91bGRHZXRTY2FsZSA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcblxuICAgICAgICBpZiAoc2hvdWxkR2V0U2NhbGUpIHtcbiAgICAgICAgICBjb25zdCBpc0ZpeGVkID0gZml4ZWQgJiYgdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXTtcblxuICAgICAgICAgIGNvbnN0IHNjYWxlRnVuY3Rpb24gPVxuICAgICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3JcbiAgICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICAgICAgICAgICAgaXNGaXhlZFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdGhpcy5hY2Nlc3NWU0ZpZWxkVmFsdWUodGhpcy5jb25maWdbZmllbGRdLCBpbmRleEtleSk7XG5cbiAgICAgICAgICBpZiAoc2NhbGVGdW5jdGlvbikge1xuICAgICAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IHNjYWxlRnVuY3Rpb24uYnlab29tXG4gICAgICAgICAgICAgID8gbWVtb2l6ZSh6ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlRnVuYyA9IHNjYWxlRnVuY3Rpb24oeik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZCA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEVuY29kZWRDaGFubmVsVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgc2NhbGVGdW5jLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShkKSxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGdldEZpZWxkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IGQgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RmllbGRWYWx1ZVxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gc2V0IGdldEZpbGxDb2xvckJ5Wm9vbSB0byB0cnVlXG4gICAgICAgICAgICBpZiAoc2NhbGVGdW5jdGlvbi5ieVpvb20pIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2Ake2FjY2Vzc29yfUJ5Wm9vbWBdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGdldEF0dHJpYnV0ZVZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGdldEF0dHJpYnV0ZVZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID1cbiAgICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdKSB7XG4gICAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXR0cmlidXRlQWNjZXNzb3JzO1xuICB9XG5cbiAgZ2V0VmlzQ2hhbm5lbFNjYWxlKFxuICAgIHNjYWxlOiBzdHJpbmcsXG4gICAgZG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluIHwgRG9tYWluUXVhbnRpbGVzLFxuICAgIHJhbmdlOiBhbnksXG4gICAgZml4ZWQ/OiBib29sZWFuXG4gICk6IEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGUge1xuICAgIC8vIGlmIHF1YW50aWxlIGlzIHByb3ZpZGVkIHBlciB6b29tXG4gICAgaWYgKGlzRG9tYWluUXVhbnRpbGUoZG9tYWluKSAmJiBzY2FsZSA9PT0gU0NBTEVfVFlQRVMucXVhbnRpbGUpIHtcbiAgICAgIGNvbnN0IHpTdGVwcyA9IGRvbWFpbi56O1xuXG4gICAgICBjb25zdCBnZXRTY2FsZSA9IGZ1bmN0aW9uIGdldFNjYWxlQnlab29tKHopIHtcbiAgICAgICAgY29uc3Qgc2NhbGVEb21haW4gPSBnZXREb21haW5TdGVwc2J5Wm9vbShkb21haW4ucXVhbnRpbGVzLCB6U3RlcHMsIHopO1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRzID0gZ2V0VGhyZXNob2xkc0Zyb21RdWFudGlsZXMoc2NhbGVEb21haW4sIHJhbmdlLmxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIGdldFNjYWxlRnVuY3Rpb24oJ3RocmVzaG9sZCcsIHJhbmdlLCB0aHJlc2hvbGRzLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBnZXRTY2FsZS5ieVpvb20gPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFNjYWxlO1xuICAgIH0gZWxzZSBpZiAoaXNEb21haW5TdG9wcyhkb21haW4pKSB7XG4gICAgICAvLyBjb2xvciBpcyBiYXNlZCBvbiB6b29tXG4gICAgICBjb25zdCB6U3RlcHMgPSBkb21haW4uejtcbiAgICAgIC8vIGdldCBzY2FsZSBmdW5jdGlvbiBieSB6XG4gICAgICAvLyB7XG4gICAgICAvLyAgejogW3osIHosIHpdLFxuICAgICAgLy8gIHN0b3BzOiBbW21pbiwgbWF4XSwgW21pbiwgbWF4XV0sXG4gICAgICAvLyAgaW50ZXJwb2xhdGlvbjogJ2ludGVycG9sYXRlJ1xuICAgICAgLy8gfVxuXG4gICAgICBjb25zdCBnZXRTY2FsZSA9IGZ1bmN0aW9uIGdldFNjYWxlQnlab29tKHopIHtcbiAgICAgICAgY29uc3Qgc2NhbGVEb21haW4gPSBnZXREb21haW5TdGVwc2J5Wm9vbShkb21haW4uc3RvcHMsIHpTdGVwcywgeik7XG5cbiAgICAgICAgcmV0dXJuIGdldFNjYWxlRnVuY3Rpb24oc2NhbGUsIHJhbmdlLCBzY2FsZURvbWFpbiwgZml4ZWQpO1xuICAgICAgfTtcblxuICAgICAgZ2V0U2NhbGUuYnlab29tID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRTY2FsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdKClcbiAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgLnJhbmdlKGZpeGVkID8gZG9tYWluIDogcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhcbiAgICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICAgIGdldFBvc2l0aW9uOiAoeDogYW55LCBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gbnVtYmVyW10gPSBpZGVudGl0eVxuICApOiBudW1iZXJbXSB8IG51bGwge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlQ29udGFpbmVyRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IGdldFBvc2l0aW9uID8gc2FtcGxlRGF0YS5tYXBJbmRleChnZXRQb3NpdGlvbikgOiBbXTtcblxuICAgIGNvbnN0IGxhdEJvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDEsIFstOTAsIDkwXSk7XG4gICAgY29uc3QgbG5nQm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMCwgWy0xODAsIDE4MF0pO1xuXG4gICAgaWYgKCFsYXRCb3VuZHMgfHwgIWxuZ0JvdW5kcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsbmdCb3VuZHNbMF0sIGxhdEJvdW5kc1swXSwgbG5nQm91bmRzWzFdLCBsYXRCb3VuZHNbMV1dO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycykge1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gZGlmZlVwZGF0ZVRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2VycywgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzKTtcbiAgICB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSBkYXRhVXBkYXRlVHJpZ2dlcnM7XG5cbiAgICByZXR1cm4gdHJpZ2dlckNoYW5nZWQ7XG4gIH1cblxuICBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgIHNjYWxlOiAodmFsdWUpID0+IGFueSxcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBmaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShmaWVsZCwgZGF0YSk7XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGF0dHJpYnV0ZVZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSB2YWx1ZS5tYXAoc2NhbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZU1ldGEobWV0YTogTGF5ZXJbJ21ldGEnXSkge1xuICAgIHRoaXMubWV0YSA9IHsuLi50aGlzLm1ldGEsIC4uLm1ldGF9O1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgZGF0YUNvbnRhaW5lcn06IEtlcGxlclRhYmxlKTogYW55IHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgZGF0YUNvbnRhaW5lciwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgZGF0YUNvbnRhaW5lciwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzOiBEYXRhc2V0cywgb2xkTGF5ZXJEYXRhOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBsYXllckRhdGFzZXQgPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGxheWVyRGF0YXNldDtcblxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIsIGxheWVyRGF0YXNldCk7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMobGF5ZXJEYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQgJiYgKHRyaWdnZXJDaGFuZ2VkLmdldE1ldGEgfHwgdHJpZ2dlckNoYW5nZWQuZ2V0RGF0YSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGxheWVyRGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuXG4gICAgICAvLyByZXNldCBmaWx0ZXJlZEl0ZW1Db3VudFxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1Db3VudCA9IHt9O1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoISh0cmlnZ2VyQ2hhbmdlZCAmJiB0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhKSAmJiBvbGRMYXllckRhdGEgJiYgb2xkTGF5ZXJEYXRhLmRhdGEpIHtcbiAgICAgIC8vIHNhbWUgZGF0YVxuICAgICAgZGF0YSA9IG9sZExheWVyRGF0YS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlKGxheWVyRGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0gZGF0YXNldHNcbiAgICogQHBhcmFtIG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHM6IERhdGFzZXRzLCBuZXdGaWx0ZXI/OiBGaWx0ZXIpOiBMYXllciB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghdGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7c2NhbGV9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbDogc3RyaW5nKSB7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKTtcbiAgICB0aGlzLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZmllbGQgdHlwZSBiYXNlZCBvbiBjaGFubmVsU2NhbGVUeXBlXG4gICAqL1xuICB2YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGNoYW5uZWxTY2FsZVR5cGUsIHN1cHBvcnRlZEZpZWxkVHlwZXN9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIGlmICh0aGlzLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgIC8vIGlmIGZpZWxkIGlzIHNlbGVjdGVkLCBjaGVjayBpZiBmaWVsZCB0eXBlIGlzIHN1cHBvcnRlZFxuICAgICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcblxuICAgICAgaWYgKCFjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZSkpIHtcbiAgICAgICAgLy8gZmllbGQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBzZXQgaXQgYmFjayB0byBudWxsXG4gICAgICAgIC8vIHNldCBzY2FsZSBiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbnVsbH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzY2FsZSB0eXBlIGJhc2VkIG9uIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVNjYWxlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7c2NhbGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoIXNjYWxlKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldDogS2VwbGVyVGFibGUsIGNoYW5uZWw6IHN0cmluZykge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpOiBVcGRhdGVUcmlnZ2VycyB7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnM6IFVwZGF0ZVRyaWdnZXJzID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKHZpc3VhbENoYW5uZWwgPT4ge1xuICAgICAgLy8gZmllbGQgcmFuZ2Ugc2NhbGUgZG9tYWluXG4gICAgICBjb25zdCB7YWNjZXNzb3IsIGZpZWxkLCBzY2FsZSwgZG9tYWluLCByYW5nZSwgZGVmYXVsdFZhbHVlLCBmaXhlZH0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICAgIFtmaWVsZF06IHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICBbc2NhbGVdOiB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgICAgW3JhbmdlXTogdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6XG4gICAgICAgICAgICB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnZnVuY3Rpb24nID8gZGVmYXVsdFZhbHVlKHRoaXMuY29uZmlnKSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAuLi4oZml4ZWQgPyB7W2ZpeGVkXTogdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXX0gOiB7fSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhc2V0LmdldENvbHVtbkxheWVyRG9tYWluKGZpZWxkLCBzY2FsZVR5cGUpIHx8IGRlZmF1bHREb21haW47XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gdGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSAmJiBvYmplY3RJbmZvLm9iamVjdCA/IG9iamVjdEluZm8ub2JqZWN0IDogbnVsbDtcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb2JqZWN0SW5mbz8ucGlja2VkICYmIG9iamVjdEluZm8/LmxheWVyPy5wcm9wcz8uaWQgPT09IHRoaXMuaWQ7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZUJ5Wm9vbShtYXBTdGF0ZTogTWFwU3RhdGUsIGZpeGVkUmFkaXVzPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgcmV0dXJuIGZpeGVkID8gMSA6ICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKSAqIHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gIH1cblxuICBzaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHByb3BzLnNvbWUocCA9PiAhdGhpcy5ub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMuaW5jbHVkZXMocCkpO1xuICB9XG5cbiAgZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZywgYnJ1c2hpbmdUYXJnZXQ/KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtcbiAgICBpZHgsXG4gICAgZ3B1RmlsdGVyLFxuICAgIG1hcFN0YXRlLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIHZpc2libGVcbiAgfToge1xuICAgIGlkeDogbnVtYmVyO1xuICAgIGdwdUZpbHRlcjogR3B1RmlsdGVyO1xuICAgIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgICBsYXllckNhbGxiYWNrczogYW55O1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBpZHgsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICBwaWNrYWJsZTogdHJ1ZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJzOiB7ZGVwdGhUZXN0OiBCb29sZWFuKG1hcFN0YXRlLmRyYWdSb3RhdGUgfHwgdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZTNkKX0sXG4gICAgICBoaWRkZW46IHRoaXMuY29uZmlnLmhpZGRlbixcbiAgICAgIC8vIHZpc2NvbmZpZ1xuICAgICAgb3BhY2l0eTogdGhpcy5jb25maWcudmlzQ29uZmlnLm9wYWNpdHksXG4gICAgICBoaWdobGlnaHRDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAvLyBkYXRhIGZpbHRlcmluZ1xuICAgICAgZXh0ZW5zaW9uczogW2RhdGFGaWx0ZXJFeHRlbnNpb25dLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIG9uRmlsdGVyZWRJdGVtc0NoYW5nZTogZ3B1RmlsdGVyID8gbGF5ZXJDYWxsYmFja3M/Lm9uRmlsdGVyZWRJdGVtc0NoYW5nZSA6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUgYW5kIGlmIHNwbGl0TWFwLCBzaG93biBpbiB0byBvbmUgb2YgcGFuZWxcbiAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSAmJiB2aXNpYmxlXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyVGV4dExhYmVsTGF5ZXIoXG4gICAge1xuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXRGaWx0ZXJlZCxcbiAgICAgIGdldFBpeGVsT2Zmc2V0LFxuICAgICAgYmFja2dyb3VuZFByb3BzLFxuICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICBzaGFyZWRQcm9wc1xuICAgIH06IHtcbiAgICAgIGdldFBvc2l0aW9uPzogKChkOiBhbnkpID0+IG51bWJlcltdKSB8IGFycm93LlZlY3RvcjtcbiAgICAgIGdldEZpbHRlcmVkPzogKGRhdGE6IHtpbmRleDogbnVtYmVyfSwgb2JqZWN0SW5mbzoge2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXI7XG4gICAgICBnZXRQaXhlbE9mZnNldDogKHRleHRMYWJlbDogYW55KSA9PiBudW1iZXJbXSB8ICgoZDogYW55KSA9PiBudW1iZXJbXSk7XG4gICAgICBiYWNrZ3JvdW5kUHJvcHM/OiB7YmFja2dyb3VuZDogYm9vbGVhbn07XG4gICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICB9O1xuICAgICAgc2hhcmVkUHJvcHM6IGFueTtcbiAgICB9LFxuICAgIHJlbmRlck9wdHNcbiAgKSB7XG4gICAgY29uc3Qge2RhdGEsIG1hcFN0YXRlfSA9IHJlbmRlck9wdHM7XG4gICAgY29uc3Qge3RleHRMYWJlbH0gPSB0aGlzLmNvbmZpZztcblxuICAgIGNvbnN0IFRleHRMYXllckNsYXNzID0gaXNBcnJvd1RhYmxlKGRhdGEuZGF0YSkgPyBHZW9BcnJvd1RleHRMYXllciA6IFRleHRMYXllcjtcblxuICAgIHJldHVybiBkYXRhLnRleHRMYWJlbHMucmVkdWNlKChhY2N1LCBkLCBpKSA9PiB7XG4gICAgICBpZiAoZC5nZXRUZXh0KSB7XG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSB0ZXh0TGFiZWxbaV0uYmFja2dyb3VuZCB8fCBiYWNrZ3JvdW5kUHJvcHM/LmJhY2tncm91bmQ7XG5cbiAgICAgICAgYWNjdS5wdXNoKFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBuZXcgVGV4dExheWVyQ2xhc3Moe1xuICAgICAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG4gICAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tbGFiZWwtJHt0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWV9YCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSxcbiAgICAgICAgICAgIGdldFRleHQ6IGQuZ2V0VGV4dCxcbiAgICAgICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICAgICAgZ2V0RmlsdGVyZWQsXG4gICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6IGQuY2hhcmFjdGVyU2V0LFxuICAgICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IGdldFBpeGVsT2Zmc2V0KHRleHRMYWJlbFtpXSksXG4gICAgICAgICAgICBnZXRTaXplOiBQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSLFxuICAgICAgICAgICAgc2l6ZVNjYWxlOiB0ZXh0TGFiZWxbaV0uc2l6ZSxcbiAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogdGV4dExhYmVsW2ldLmFsaWdubWVudCxcbiAgICAgICAgICAgIGdldENvbG9yOiB0ZXh0TGFiZWxbaV0uY29sb3IsXG4gICAgICAgICAgICBvdXRsaW5lV2lkdGg6IHRleHRMYWJlbFtpXS5vdXRsaW5lV2lkdGggKiBURVhUX09VVExJTkVfTVVMVElQTElFUixcbiAgICAgICAgICAgIG91dGxpbmVDb2xvcjogdGV4dExhYmVsW2ldLm91dGxpbmVDb2xvcixcbiAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICBnZXRCYWNrZ3JvdW5kQ29sb3I6IHRleHRMYWJlbFtpXS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBmb250U2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgc2RmOiB0ZXh0TGFiZWxbaV0ub3V0bGluZVdpZHRoID4gMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgLy8gdGV4dCB3aWxsIGFsd2F5cyBzaG93IG9uIHRvcCBvZiBhbGwgbGF5ZXJzXG4gICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2VcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgICAgICAgIGdldFRleHQ6IHRleHRMYWJlbFtpXS5maWVsZD8ubmFtZSxcbiAgICAgICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICAuLi51cGRhdGVUcmlnZ2Vycy5nZXRSYWRpdXMsXG4gICAgICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICAgICAgYW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogdGV4dExhYmVsW2ldLmFsaWdubWVudFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogdGV4dExhYmVsW2ldLmFsaWdubWVudCxcbiAgICAgICAgICAgICAgZ2V0Q29sb3I6IHRleHRMYWJlbFtpXS5jb2xvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlOiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pOiBhbnkge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhc2V0OiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldFBvc2l0aW9uQWNjZXNzb3IoXG4gICAgX2RhdGFDb250YWluZXI/OiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICAgIC8vIFRPRE8gcmVmYWN0b3IgZm9yIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gdG8gcGFzcyBvbmx5IGRhdGFzZXRcbiAgICBfZGF0YXNldD86IEtlcGxlclRhYmxlXG4gICk6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55IHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cblxuICBnZXRMZWdlbmRWaXN1YWxDaGFubmVscygpOiB7W2tleTogc3RyaW5nXTogVmlzdWFsQ2hhbm5lbH0ge1xuICAgIHJldHVybiB0aGlzLnZpc3VhbENoYW5uZWxzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheWVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxrQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBQyxzQkFBQSxDQUFBTixPQUFBO0FBR0EsSUFBQU8saUJBQUEsR0FBQUQsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFdBQUEsR0FBQVQsT0FBQTtBQUVBLElBQUFVLFVBQUEsR0FBQVYsT0FBQTtBQWtCQSxJQUFBVyxNQUFBLEdBQUFYLE9BQUE7QUFhQSxJQUFBWSxZQUFBLEdBQUFaLE9BQUE7QUFtQ0EsSUFBQWEsUUFBQSxHQUFBUCxzQkFBQSxDQUFBTixPQUFBO0FBQXFDLElBQUFjLHFCQUFBLEVBakZyQztBQUNBO0FBQUEsU0FBQUMsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFB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
|