@carto/kepler.gl 0.0.68 → 0.0.69-alpha.hackathon-3dtiles
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/CHANGELOG.md +19 -1
- package/dist/components/map-container.js +43 -2
- package/dist/constants/default-settings.js +2 -2
- package/dist/constants/tooltip.js +7 -1
- package/dist/localization/index.js +23 -10
- package/dist/localization/locales.js +2 -9
- package/package.json +2 -2
- package/src/components/.map-container.js.swp +0 -0
- package/src/components/map-container.js +33 -1
- package/src/constants/tooltip.js +6 -0
- package/src/localization/index.js +3 -8
- package/src/localization/locales.js +1 -8
- package/dist/components/side-panel/layer-panel/custom-marker-categories-selector.js +0 -45
- package/dist/localization/ca.js +0 -456
- package/dist/localization/cn.js +0 -459
- package/dist/localization/es.js +0 -456
- package/dist/localization/fi.js +0 -428
- package/dist/localization/ja.js +0 -457
- package/dist/localization/pt.js +0 -428
- package/dist/localization/ru.js +0 -465
- package/src/components/side-panel/layer-panel/custom-marker-categories-selector.js +0 -33
- package/src/localization/ca.js +0 -477
- package/src/localization/cn.js +0 -478
- package/src/localization/es.js +0 -478
- package/src/localization/fi.js +0 -449
- package/src/localization/ja.js +0 -478
- package/src/localization/pt.js +0 -450
- package/src/localization/ru.js +0 -488
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Not released
|
|
4
4
|
|
|
5
|
+
## 0.0.69
|
|
6
|
+
|
|
7
|
+
- Remove dynamic require + all locale files but 'en' (English) [147](https://github.com/CartoDB/carto-kepler/pull/147)
|
|
8
|
+
|
|
9
|
+
- Add new format for numeric types [159](https://github.com/CartoDB/carto-kepler/pull/159)
|
|
10
|
+
|
|
5
11
|
## 0.0.68
|
|
6
12
|
|
|
7
13
|
- map-container: Ignore invalid updates of DeckGL viewState [157](https://github.com/CartoDB/carto-kepler/pull/157)
|
|
@@ -20,40 +26,51 @@
|
|
|
20
26
|
- New labels in Point and Tile layers [151](https://github.com/CartoDB/carto-kepler/pull/151)
|
|
21
27
|
|
|
22
28
|
## 0.0.64
|
|
29
|
+
|
|
23
30
|
- Avoid guessing a column with "census" inside it's name as string data type [144](https://github.com/CartoDB/carto-kepler/pull/144)
|
|
24
31
|
|
|
25
32
|
## 0.0.63
|
|
33
|
+
|
|
26
34
|
- Simplify release process and improve doc [146](https://github.com/CartoDB/carto-kepler/pull/146)
|
|
27
35
|
- Remove fixed radius [145](https://github.com/CartoDB/carto-kepler/pull/145)
|
|
28
36
|
|
|
29
37
|
## 0.0.62
|
|
38
|
+
|
|
30
39
|
- Support for count aggregation [141](https://github.com/CartoDB/carto-kepler/pull/141)
|
|
31
40
|
|
|
32
41
|
## 0.0.61
|
|
42
|
+
|
|
33
43
|
- Round layer zoom level [138](https://github.com/CartoDB/carto-kepler/pull/138)
|
|
34
44
|
|
|
35
45
|
## 0.0.60
|
|
46
|
+
|
|
36
47
|
- Rendering performance improvements 2 [137](https://github.com/CartoDB/carto-kepler/pull/137)
|
|
37
48
|
|
|
38
49
|
## 0.0.59
|
|
50
|
+
|
|
39
51
|
- TextLayer: inherit the visibilityByZoom configuration [129](https://github.com/CartoDB/carto-kepler/pull/129)
|
|
40
52
|
- Rendering performance improvements [132](https://github.com/CartoDB/carto-kepler/pull/132)
|
|
41
53
|
|
|
42
54
|
## 0.0.58
|
|
55
|
+
|
|
43
56
|
- Layer resolution component [125](https://github.com/CartoDB/carto-kepler/pull/125)
|
|
44
57
|
|
|
45
58
|
- Add Mode and Any Value to aggregation types [126](https://github.com/CartoDB/carto-kepler/pull/126)
|
|
46
59
|
|
|
47
60
|
## 0.0.57
|
|
61
|
+
|
|
48
62
|
- Declare custom logarithmic scale and remember setting [127](https://github.com/CartoDB/carto-kepler/pull/127)
|
|
49
63
|
|
|
50
64
|
## 0.0.55
|
|
65
|
+
|
|
51
66
|
- PointLayer: dont use mask for custom markers is fillColor is not set [123](https://github.com/CartoDB/carto-kepler/pull/123)
|
|
52
67
|
|
|
53
68
|
## 0.0.54
|
|
69
|
+
|
|
54
70
|
- Fix: Hover on the map is active even when there is no interaction configured [121](https://github.com/CartoDB/carto-kepler/pull/121)
|
|
55
71
|
|
|
56
72
|
## 0.0.53 (Unpublished)
|
|
73
|
+
|
|
57
74
|
Unpublished due to an error in a previous merge.
|
|
58
75
|
|
|
59
76
|
## 0.0.52
|
|
@@ -202,7 +219,8 @@ Unpublished due to an error in a previous merge.
|
|
|
202
219
|
|
|
203
220
|
- Update deck.gl version to 8.7.0-beta.2 and add support for new deck.gl MaskExtension with a new maskPolygon kepler property [#37](https://github.com/CartoDB/carto-kepler/pull/37)
|
|
204
221
|
|
|
205
|
-
|
|
222
|
+
---
|
|
223
|
+
|
|
206
224
|
# Below is the original Kepler.gl changelog until v2.5.5
|
|
207
225
|
|
|
208
226
|
All notable changes to kepler.gl will be documented in this file.
|
|
@@ -12,6 +12,8 @@ exports.Attribution = void 0;
|
|
|
12
12
|
|
|
13
13
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
14
14
|
|
|
15
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
16
|
+
|
|
15
17
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
16
18
|
|
|
17
19
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
@@ -70,6 +72,8 @@ var _observeDimensions = require("../utils/observe-dimensions");
|
|
|
70
72
|
|
|
71
73
|
var _locales = require("../localization/locales");
|
|
72
74
|
|
|
75
|
+
var _extensions = require("@deck.gl/extensions");
|
|
76
|
+
|
|
73
77
|
var _performance = require("./performance");
|
|
74
78
|
|
|
75
79
|
var _window, _window$location, _window$location$sear;
|
|
@@ -82,6 +86,27 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
82
86
|
|
|
83
87
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
84
88
|
|
|
89
|
+
var GOOGLE_MAPS_API_KEY = 'AIzaSyCpvQymc5wjSYIsxy3RV1widM3p3h78CAk';
|
|
90
|
+
var tiles3d = new _geoLayers.Tile3DLayer({
|
|
91
|
+
id: 'google-3d-tiles',
|
|
92
|
+
data: 'https://tile.googleapis.com/v1/3dtiles/root.json',
|
|
93
|
+
onTilesetLoad: function onTilesetLoad(tileset3d) {
|
|
94
|
+
// tileset3d.options.maximumScreenSpaceError = 4;
|
|
95
|
+
tileset3d._onTileLoadError = function () {};
|
|
96
|
+
},
|
|
97
|
+
loadOptions: {
|
|
98
|
+
fetch: {
|
|
99
|
+
headers: {
|
|
100
|
+
'X-GOOG-API-KEY': GOOGLE_MAPS_API_KEY
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
// @ts-ignore
|
|
105
|
+
operation: 'terrain+draw' // Required to enable draping of other layers
|
|
106
|
+
|
|
107
|
+
});
|
|
108
|
+
var terrainExtension = new _extensions._TerrainExtension(); // Performance debugging
|
|
109
|
+
|
|
85
110
|
var trackers = {};
|
|
86
111
|
var PERF_DEBUG = (_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : (_window$location$sear = _window$location.search) === null || _window$location$sear === void 0 ? void 0 : _window$location$sear.includes('PERF_DEBUG');
|
|
87
112
|
|
|
@@ -442,6 +467,18 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
442
467
|
getFillColor: mapStyle.threeDBuildingColor
|
|
443
468
|
}
|
|
444
469
|
}));
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (mapStyle.styleType === 'tiles3d') {
|
|
473
|
+
// Inject 3D tiles when blank Google map style detected
|
|
474
|
+
deckGlLayers = deckGlLayers.filter(function (l) {
|
|
475
|
+
return Boolean(l && l.clone);
|
|
476
|
+
}).map(function (l) {
|
|
477
|
+
return l.clone({
|
|
478
|
+
extensions: [].concat((0, _toConsumableArray2["default"])(l.props.extensions), [terrainExtension])
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
deckGlLayers.push(tiles3d.clone());
|
|
445
482
|
} // Limit renders
|
|
446
483
|
|
|
447
484
|
|
|
@@ -474,7 +511,11 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
474
511
|
},
|
|
475
512
|
onHover: visStateActions.onLayerHover,
|
|
476
513
|
onClick: visStateActions.onLayerClick,
|
|
477
|
-
onError:
|
|
514
|
+
onError: function onError(e) {
|
|
515
|
+
debugger;
|
|
516
|
+
|
|
517
|
+
_this2._onDeckError(e);
|
|
518
|
+
},
|
|
478
519
|
ref: function ref(comp) {
|
|
479
520
|
if (comp && comp.deck && comp.deck !== _this2._deck) {
|
|
480
521
|
_this2._deck = comp.deck;
|
|
@@ -685,4 +726,4 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
685
726
|
MapContainer.displayName = 'MapContainer';
|
|
686
727
|
return MapContainer;
|
|
687
728
|
}
|
|
688
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL21hcC1jb250YWluZXIuanMiXSwibmFtZXMiOlsidHJhY2tlcnMiLCJQRVJGX0RFQlVHIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJpbmNsdWRlcyIsImRyYXdDb3VudCIsInZpZXdwb3J0Q2hhbmdlQ291bnQiLCJMYXllciIsIlRpbGVMYXllciIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIk1BUEJPWEdMX1NUWUxFX1VQREFURSIsIk1BUEJPWEdMX1JFTkRFUiIsIlRSQU5TSVRJT05fRFVSQVRJT04iLCJBdHRyaWJ1dGlvbiIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcENvbnRhaW5lciIsInByb3BzIiwiZGltZW5zaW9ucyIsInByaW1hcnkiLCJpc0V4cG9ydCIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsIm1hcExheWVycyIsImxheWVyT3JkZXIiLCJwb3B1cFNldHRpbmdzIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwicG9wdXBTZXR0aW5nc1NlbGVjdG9yIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJmaWx0ZXJzIiwiZmlsdGVyc1NlbGVjdG9yIiwiZmlsdGVyIiwiZiIsInR5cGUiLCJGSUxURVJfVFlQRVMiLCJwb2x5Z29uIiwibGF5ZXJPcmRlclNlbGVjdG9yIiwibGF5ZXJzVG9SZW5kZXJTZWxlY3RvciIsImdlbmVyYXRlTWFwYm94TGF5ZXJzIiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiaWR4IiwiY29sb3JEb21haW4iLCJsYXllckNvbmZpZ0NoYW5nZSIsImxheWVySWQiLCJpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJvbk1hcFN0eWxlTG9hZGVkIiwiX21hcCIsIm1hcGJveCIsImdldE1hcCIsIm9uIiwiX29uTWFwYm94U3R5bGVVcGRhdGUiLCJvbk1hcFJlbmRlciIsImdldE1hcGJveFJlZiIsImdsIiwibGF5ZXJCbGVuZGluZyIsImVycm9yIiwibGF5ZXIiLCJtZXNzYWdlIiwic2V0U3RhdGUiLCJjb250ZXh0TG9zdCIsImVycm9yTWVzc2FnZSIsImlkIiwibm90aWZpY2F0aW9uSWQiLCJfZGVja0dMRXJyb3JzRWxhcHNlZCIsImxhc3RTaG93biIsIkRhdGUiLCJub3ciLCJUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSIsInVpU3RhdGVBY3Rpb25zIiwiYWRkTm90aWZpY2F0aW9uIiwidmlld1N0YXRlIiwiaW5jcmVtZW50IiwicmVzdFZpZXdTdGF0ZSIsIm5leHQiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJvblZpZXdTdGF0ZUNoYW5nZSIsInBhbmVsSWQiLCJ0b2dnbGVNYXBDb250cm9sIiwiX2RlY2siLCJfcmVmIiwiX2hhc1JlbmRlcmVkIiwiX21vdXNlUG9zaXRpb24iLCJjdXJyZW50IiwiX2hhbmRsZVJlc2l6ZSIsInN0YXRlIiwib2ZmIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJsYXllcnNUb1JlbmRlciIsInZpZXdwb3J0IiwibG5nTGF0Iiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwieCIsInkiLCJsYXllcnNGb3JEZWNrIiwibWFwU3RhdGUiLCJtYXBTdHlsZSIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwibWFza1BvbHlnb24iLCJkZWNrR2xMYXllcnMiLCJkZWNrR2xQcm9wcyIsImxlbmd0aCIsImRhdGFMYXllcnMiLCJzbGljZSIsInJldmVyc2UiLCJyZWR1Y2UiLCJvdmVybGF5cyIsImxheWVyQ2FsbGJhY2tzIiwib25TZXRMYXllckRvbWFpbiIsInZhbCIsIl9vbkxheWVyU2V0RG9tYWluIiwibGF5ZXJPdmVybGF5IiwiY29uY2F0IiwibGF5ZXJzT25Ub3AiLCJwdXNoIiwiU29saWRQb2x5Z29uTGF5ZXIiLCJNQVNLX0xBWUVSX0lEIiwib3BlcmF0aW9uIiwiT1BFUkFUSU9OIiwiTUFTSyIsImRhdGEiLCJkYXRhQ29tcGFyYXRvciIsIm9sZERhdGEiLCJnZXRQb2x5Z29uIiwiZCIsImdldEZpbGxDb2xvciIsInZpc2libGVMYXllckdyb3VwcyIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJoYXNSZW5kZXJlZCIsInJlc2V0SGFzUmVuZGVyZWQiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9wdHMiLCJfb25CZWZvcmVSZW5kZXIiLCJvbkxheWVySG92ZXIiLCJfb25EZWNrRXJyb3IiLCJjb21wIiwiZGVjayIsIl9vbkRlY2tJbml0aWFsaXplZCIsImlzTmFOIiwidmlzaWJpbGl0eUJ5Wm9vbSIsIm1pbiIsIm1heCIsImN1cnJlbnRab29tUmFuZ2UiLCJNYXRoIiwicm91bmQiLCJ6b29tIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJPYmplY3QiLCJrZXlzIiwiaXNTdHlsZUxvYWRlZCIsIk1hcENvbXBvbmVudCIsImRhdGFzZXRzIiwibWFwQ29udHJvbHMiLCJsb2NhbGUiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImVkaXRvciIsImxheWVyc0ZvckRlY2tTZWxlY3RvciIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImlzRWRpdCIsIm1hcERyYXciLCJhY3RpdmUiLCJoYXNHZW9jb2RlckxheWVyIiwiZmluZCIsImwiLCJHRU9DT0RFUl9MQVlFUl9JRCIsImlzU3BsaXQiLCJCb29sZWFuIiwibW91c2VQb3NpdGlvbiIsIkxPQ0FMRV9DT0RFUyIsImRyYWdSb3RhdGUiLCJyZWFkT25seSIsInNjYWxlIiwiZ2VvY29kZXIiLCJlbmFibGVkIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJ0b2dnbGVTcGxpdE1hcCIsIl9oYW5kbGVNYXBUb2dnbGVMYXllciIsIl90b2dnbGVNYXBDb250cm9sIiwic2V0RWRpdG9yTW9kZSIsInNldExvY2FsZSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJfc2V0TWFwYm94TWFwIiwiYm90dG9tTWFwU3R5bGUiLCJob3ZlckluZm8iLCJ1bmRlZmluZWQiLCJldnQiLCJwb2ludCIsIl9yZW5kZXJEZWNrT3ZlcmxheSIsIl9yZW5kZXJNYXBib3hPdmVybGF5cyIsInBvbHlnb25GaWx0ZXJzIiwiZGVsZXRlRmVhdHVyZSIsInNldFNlbGVjdGVkRmVhdHVyZSIsInNldEZlYXR1cmVzIiwic2V0UG9seWdvbkZpbHRlckxheWVyIiwidmlzaWJsZSIsInRvcE1hcFN0eWxlIiwiX3JlbmRlck1hcFBvcG92ZXIiLCJnbG9iZSIsIl9yZW5kZXJNYXAiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiYXJyYXlPZiIsImFueSIsImJvb2wiLCJjbGlja2VkIiwib25NYXBUb2dnbGVMYXllciIsImZ1bmMiLCJudW1iZXIiLCJNYXBib3hHTE1hcCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBR0E7Ozs7Ozs7Ozs7OztBQUNBLElBQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUNBLElBQU1DLFVBQVUsY0FBR0MsTUFBSCxn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RVIsc0JBQVVTLElBekJYO0FBMEJqQjFLLElBQUFBLGdCQUFnQixFQUFFaUssc0JBQVVTLElBMUJYO0FBMkJqQnBLLElBQUFBLFdBQVcsRUFBRTJKLHNCQUFVUyxJQTNCTjtBQTRCakJuSyxJQUFBQSxZQUFZLEVBQUUwSixzQkFBVVMsSUE1QlA7QUE2QmpCL0ssSUFBQUEsS0FBSyxFQUFFc0ssc0JBQVVVLE1BN0JBO0FBOEJqQnZNLElBQUFBLGFBQWEsRUFBRTZMLHNCQUFVQztBQTlCUixHQUZxRDtBQUFBLG1DQUNwRXpNLFlBRG9FLGtCQW1DbEQ7QUFDcEJvSixJQUFBQSxZQUFZLEVBQUUrRCxzQkFETTtBQUVwQnBILElBQUFBLFdBQVcsRUFBRSxFQUZPO0FBR3BCN0QsSUFBQUEsS0FBSyxFQUFFLENBSGE7QUFJcEIvQixJQUFBQSxPQUFPLEVBQUU7QUFKVyxHQW5Da0Q7QUE4ZjFFSCxFQUFBQSxZQUFZLENBQUNvTixXQUFiLEdBQTJCLGNBQTNCO0FBRUEsU0FBT3BOLFlBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgTWFwYm94R0xNYXAgZnJvbSAncmVhY3QtbWFwLWdsJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtPUEVSQVRJT04sIExheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7U29saWRQb2x5Z29uTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1RpbGVMYXllcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycyc7XG5pbXBvcnQge2Vycm9yTm90aWZpY2F0aW9ufSBmcm9tICd1dGlscy9ub3RpZmljYXRpb25zLXV0aWxzJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IE1hcFBvcG92ZXJGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvbWFwL21hcC1wb3BvdmVyJztcbmltcG9ydCBNYXBDb250cm9sRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL21hcC9tYXAtY29udHJvbCc7XG5pbXBvcnQge1N0eWxlZE1hcENvbnRhaW5lciwgU3R5bGVkQXR0cmJ1dGlvbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgRWRpdG9yRmFjdG9yeSBmcm9tICcuL2VkaXRvci9lZGl0b3InO1xuXG4vLyB1dGlsc1xuaW1wb3J0IHtnZW5lcmF0ZU1hcGJveExheWVycywgdXBkYXRlTWFwYm94TGF5ZXJzfSBmcm9tICdsYXllcnMvbWFwYm94LXV0aWxzJztcbmltcG9ydCB7c2V0TGF5ZXJCbGVuZGluZ30gZnJvbSAndXRpbHMvZ2wtdXRpbHMnO1xuaW1wb3J0IHt0cmFuc2Zvcm1SZXF1ZXN0fSBmcm9tICd1dGlscy9tYXAtc3R5bGUtdXRpbHMvbWFwYm94LXV0aWxzJztcbmltcG9ydCB7cmVuZGVyRGVja0dsTGF5ZXIsIHByZXBhcmVMYXllcnNUb1JlbmRlciwgcHJlcGFyZUxheWVyc0ZvckRlY2t9IGZyb20gJ3V0aWxzL2xheWVyLXV0aWxzJztcblxuLy8gZGVmYXVsdC1zZXR0aW5nc1xuaW1wb3J0IFRocmVlREJ1aWxkaW5nTGF5ZXIgZnJvbSAnZGVja2dsLWxheWVycy8zZC1idWlsZGluZy1sYXllci8zZC1idWlsZGluZy1sYXllcic7XG5pbXBvcnQge1xuICBGSUxURVJfVFlQRVMsXG4gIEdFT0NPREVSX0xBWUVSX0lELFxuICBNQVNLX0xBWUVSX0lELFxuICBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRVxufSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5cbmltcG9ydCB7b2JzZXJ2ZURpbWVuc2lvbnMsIHVub2JzZXJ2ZURpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxzL29ic2VydmUtZGltZW5zaW9ucyc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnbG9jYWxpemF0aW9uL2xvY2FsZXMnO1xuXG4vLyBQZXJmb3JtYW5jZSBkZWJ1Z2dpbmdcbmltcG9ydCB7Y3JlYXRlVHJhY2tlciwgY3JlYXRlTGF5ZXJVcGRhdGVUcmFja2VyLCByZW5kZXJQZXJmb3JtYW5jZVN0YXRzfSBmcm9tICcuL3BlcmZvcm1hbmNlJztcbmNvbnN0IHRyYWNrZXJzID0ge307XG5jb25zdCBQRVJGX0RFQlVHID0gd2luZG93Py5sb2NhdGlvbj8uc2VhcmNoPy5pbmNsdWRlcygnUEVSRl9ERUJVRycpO1xuaWYgKFBFUkZfREVCVUcpIHtcbiAgdHJhY2tlcnMuZHJhd0NvdW50ID0gY3JlYXRlVHJhY2tlcignZHJhd3MnKTtcbiAgdHJhY2tlcnMudmlld3BvcnRDaGFuZ2VDb3VudCA9IGNyZWF0ZVRyYWNrZXIoJ3ZpZXdwb3J0IGNoYW5nZXMnKTtcbiAgY3JlYXRlTGF5ZXJVcGRhdGVUcmFja2VyKCdzdGF0ZSB1cGRhdGVzJywgW0xheWVyLCBUaWxlTGF5ZXJdKTtcbn1cblxuLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogUmVhY3QuQ1NTUHJvcGVydGllc319ICovXG5jb25zdCBNQVBfU1RZTEUgPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfSxcbiAgdG9wOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnMHB4JyxcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9XG59O1xuXG5jb25zdCBNQVBCT1hHTF9TVFlMRV9VUERBVEUgPSAnc3R5bGUubG9hZCc7XG5jb25zdCBNQVBCT1hHTF9SRU5ERVIgPSAncmVuZGVyJztcbmNvbnN0IFRSQU5TSVRJT05fRFVSQVRJT04gPSAwO1xuXG5leHBvcnQgY29uc3QgQXR0cmlidXRpb24gPSAoKSA9PiAoXG4gIDxTdHlsZWRBdHRyYnV0aW9uPlxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxvZ29cIj5cbiAgICAgIEJhc2VtYXAgYnk6XG4gICAgICA8YVxuICAgICAgICBjbGFzc05hbWU9XCJtYXBib3hnbC1jdHJsLWxvZ29cIlxuICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgaHJlZj1cImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIk1hcGJveCBsb2dvXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbGlua1wiPlxuICAgICAgPGEgaHJlZj1cImh0dHBzOi8va2VwbGVyLmdsL3BvbGljeS9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIMKpIGtlcGxlci5nbCB8eycgJ31cbiAgICAgIDwvYT5cbiAgICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy5tYXBib3guY29tL2Fib3V0L21hcHMvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICDCqSBNYXBib3ggfHsnICd9XG4gICAgICA8L2E+XG4gICAgICA8YSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIMKpIE9wZW5TdHJlZXRNYXAgfHsnICd9XG4gICAgICA8L2E+XG4gICAgICA8YSBocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXAtZmVlZGJhY2svXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICA8c3Ryb25nPkltcHJvdmUgdGhpcyBtYXA8L3N0cm9uZz5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9TdHlsZWRBdHRyYnV0aW9uPlxuKTtcblxuTWFwQ29udGFpbmVyRmFjdG9yeS5kZXBzID0gW01hcFBvcG92ZXJGYWN0b3J5LCBNYXBDb250cm9sRmFjdG9yeSwgRWRpdG9yRmFjdG9yeV07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hcENvbnRhaW5lckZhY3RvcnkoTWFwUG9wb3ZlciwgTWFwQ29udHJvbCwgRWRpdG9yKSB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIC8vIHJlcXVpcmVkXG4gICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIGludGVyYWN0aW9uQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBsYXllckJsZW5kaW5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBsYXllck9yZGVyOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgICAgbGF5ZXJEYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgICAgbGF5ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgICAgZmlsdGVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIG1hcFN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBtYXBDb250cm9sczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3R5bGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBtYXBib3hBcGlVcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB2aXNTdGF0ZUFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIG1hcFN0YXRlQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgdWlTdGF0ZUFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcblxuICAgICAgLy8gb3B0aW9uYWxcbiAgICAgIHByaW1hcnk6IFByb3BUeXBlcy5ib29sLCAvLyBwcmltYXJ5IG9uZSB3aWxsIGJlIHJlcG9ydGluZyBpdHMgc2l6ZSB0byBhcHBTdGF0ZVxuICAgICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgICAgaXNFeHBvcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgY2xpY2tlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIGhvdmVySW5mbzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIG1hcExheWVyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIG9uTWFwVG9nZ2xlTGF5ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgb25NYXBTdHlsZUxvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbk1hcFJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBnZXRNYXBib3hSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBwb3B1cFNldHRpbmdzOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfTtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBNYXBDb21wb25lbnQ6IE1hcGJveEdMTWFwLFxuICAgICAgZGVja0dsUHJvcHM6IHt9LFxuICAgICAgaW5kZXg6IDAsXG4gICAgICBwcmltYXJ5OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7XG4gICAgICAgIC8vIFtsYXllcnMuaWRdOiBtYXBib3hMYXllckNvbmZpZ1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fZGVjayA9IG51bGw7XG4gICAgICB0aGlzLl9yZWYgPSBjcmVhdGVSZWYoKTtcblxuICAgICAgLy8gUmVuZGVyIGxpbWl0aW5nIG1lY2hhbmlzbVxuICAgICAgdGhpcy5faGFzUmVuZGVyZWQgPSBjcmVhdGVSZWYoKTtcbiAgICAgIHRoaXMuX21vdXNlUG9zaXRpb24gPSBjcmVhdGVSZWYoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IGNvbnRleHRMb3N0ID0gdGhpcy5zdGF0ZT8uY29udGV4dExvc3Q7XG5cbiAgICAgIGlmIChjb250ZXh0TG9zdCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29udGV4dExvc3Q6IGZhbHNlfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAvLyB1bmJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1JFTkRFUik7XG4gICAgICB9XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgaXNFeHBvcnR9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChwcmltYXJ5KSB7XG4gICAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCFpc0V4cG9ydCAmJiBkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMud2lkdGggPiAwICYmIGRpbWVuc2lvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoZGltZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGF5ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5sYXllcnM7XG4gICAgbGF5ZXJEYXRhU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5sYXllckRhdGE7XG4gICAgbWFwTGF5ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBMYXllcnM7XG4gICAgbGF5ZXJPcmRlclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubGF5ZXJPcmRlcjtcbiAgICBwb3B1cFNldHRpbmdzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5wb3B1cFNldHRpbmdzO1xuXG4gICAgbGF5ZXJzVG9SZW5kZXJTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcExheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5wb3B1cFNldHRpbmdzU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXJcbiAgICApO1xuICAgIGxheWVyc0ZvckRlY2tTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzRm9yRGVja1xuICAgICk7XG4gICAgZmlsdGVyc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZmlsdGVycztcbiAgICBwb2x5Z29uRmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmlsdGVyc1NlbGVjdG9yLCBmaWx0ZXJzID0+XG4gICAgICBmaWx0ZXJzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24pXG4gICAgKTtcblxuICAgIG1hcGJveExheWVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJPcmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yLFxuICAgICAgZ2VuZXJhdGVNYXBib3hMYXllcnNcbiAgICApO1xuXG4gICAgLyogY29tcG9uZW50IHByaXZhdGUgZnVuY3Rpb25zICovXG4gICAgX29uQ2xvc2VNYXBQb3BvdmVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKG51bGwpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChpZHgsIGNvbG9yRG9tYWluKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyc1tpZHhdLCB7XG4gICAgICAgIGNvbG9yRG9tYWluXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2hhbmRsZU1hcFRvZ2dsZUxheWVyID0gbGF5ZXJJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXg6IG1hcEluZGV4ID0gMCwgdmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICBfb25NYXBib3hTdHlsZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIC8vIGZvcmNlIHJlZnJlc2ggbWFwYm94Z2wgbGF5ZXJzXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0ge307XG4gICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9zZXRNYXBib3hNYXAgPSBtYXBib3ggPT4ge1xuICAgICAgaWYgKCF0aGlzLl9tYXAgJiYgbWFwYm94KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcGJveC5nZXRNYXAoKTtcbiAgICAgICAgLy8gaSBub3RpY2VkIGluIGNlcnRhaW4gY29udGV4dCB3ZSBkb24ndCBhY2Nlc3MgdGhlIGFjdHVhbCBtYXAgZWxlbWVudFxuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBiaW5kIG1hcGJveGdsIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9SRU5ERVIsICgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25NYXBSZW5kZXIodGhpcy5fbWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5nZXRNYXBib3hSZWYpIHtcbiAgICAgICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgY2FuIGdhaW4gYWNjZXNzIHRvIG91ciBNYXBib3hHbE1hcCBieVxuICAgICAgICAvLyBwcm92aWRpbmcgdGhpcyBjYWxsYmFjay4gTm90ZSB0aGF0ICdtYXBib3gnIHdpbGwgYmUgbnVsbCB3aGVuIHRoZVxuICAgICAgICAvLyByZWYgaXMgdW5zZXQgKGUuZy4gd2hlbiBhIHNwbGl0IG1hcCBpcyBjbG9zZWQpLlxuICAgICAgICB0aGlzLnByb3BzLmdldE1hcGJveFJlZihtYXBib3gsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfb25EZWNrSW5pdGlhbGl6ZWQoZ2wpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQodGhpcy5fZGVjaywgZ2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICh7Z2x9KSA9PiB7XG4gICAgICBzZXRMYXllckJsZW5kaW5nKGdsLCB0aGlzLnByb3BzLmxheWVyQmxlbmRpbmcpO1xuICAgIH07XG5cbiAgICBfb25EZWNrRXJyb3IgPSAoZXJyb3IsIGxheWVyKSA9PiB7XG4gICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UgPT09ICdXZWJHTCBjb250ZXh0IGlzIGxvc3QnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NvbnRleHRMb3N0OiB0cnVlfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEFuIGVycm9yIGluIGRlY2suZ2w6ICR7ZXJyb3I/Lm1lc3NhZ2V9IGluICR7bGF5ZXI/LmlkfWA7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25JZCA9IGAke2xheWVyPy5pZH0tJHtlcnJvcj8ubWVzc2FnZX1gO1xuXG4gICAgICAvLyBUaHJvdHRsZSBlcnJvciBub3RpZmljYXRpb25zLCBhcyBSZWFjdCBkb2Vzbid0IGxpa2UgdG9vIG1hbnkgc3RhdGUgY2hhbmdlcyBmcm9tIGhlcmUuXG4gICAgICB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZCB8fCB7fTtcbiAgICAgIGNvbnN0IGxhc3RTaG93biA9IHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbbm90aWZpY2F0aW9uSWRdO1xuICAgICAgaWYgKCFsYXN0U2hvd24gfHwgbGFzdFNob3duIDwgRGF0ZS5ub3coKSAtIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FKSB7XG4gICAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbbm90aWZpY2F0aW9uSWRdID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIG5vdGlmaWNhdGlvbiBvciB1cGRhdGUgZXhpc3Rpbmcgb25lIHdpdGggc2FtZSBpZC5cbiAgICAgICAgLy8gVXBkYXRlIGlzIHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBub3RpZmljYXRpb25zIGFzIHRoZXkgcHJvYmFibHkgYXJlIGdvaW5nIHRvIFwianVtcFwiIGJhc2VkIG9uIG9yZGVyIG9mIGVycm9ycy5cbiAgICAgICAgY29uc3Qge3VpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBpZDogbm90aWZpY2F0aW9uSWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9ucyAqL1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXBQb3BvdmVyKGxheWVyc1RvUmVuZGVyKSB7XG4gICAgICAvLyBPdmVycmlkZW4gaW4gQnVpbGRlcjogZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9NYXBDb250YWluZXIvTWFwQ29udGFpbmVyLnRzeFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICBfZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KSB7XG4gICAgICBjb25zdCBzY3JlZW5Db29yZCA9ICF2aWV3cG9ydCB8fCAhbG5nTGF0ID8gbnVsbCA6IHZpZXdwb3J0LnByb2plY3QobG5nTGF0KTtcbiAgICAgIHJldHVybiBzY3JlZW5Db29yZCAmJiB7eDogc2NyZWVuQ29vcmRbMF0sIHk6IHNjcmVlbkNvb3JkWzFdfTtcbiAgICB9XG5cbiAgICBfcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgbGF5ZXJPcmRlcixcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hc2tQb2x5Z29uXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRyYWNrZXJzLmRyYXdDb3VudD8uaW5jcmVtZW50KCk7XG5cbiAgICAgIC8vIGluaXRpYWxpc2UgbGF5ZXJzIGZyb20gcHJvcHMgaWYgZXhpc3RzXG4gICAgICBsZXQgZGVja0dsTGF5ZXJzID0gdGhpcy5wcm9wcy5kZWNrR2xQcm9wcz8ubGF5ZXJzIHx8IFtdO1xuXG4gICAgICAvLyB3YWl0IHVudGlsIGRhdGEgaXMgcmVhZHkgYmVmb3JlIHJlbmRlciBkYXRhIGxheWVyc1xuICAgICAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIGxhc3QgbGF5ZXIgcmVuZGVyIGZpcnN0XG4gICAgICAgIGNvbnN0IGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgLmZpbHRlcihpZHggPT4gbGF5ZXJzRm9yRGVja1tsYXllcnNbaWR4XS5pZF0pXG4gICAgICAgICAgLnJlZHVjZSgob3ZlcmxheXMsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJDYWxsYmFja3MgPSB7XG4gICAgICAgICAgICAgIG9uU2V0TGF5ZXJEb21haW46IHZhbCA9PiB0aGlzLl9vbkxheWVyU2V0RG9tYWluKGlkeCwgdmFsKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKHRoaXMucHJvcHMsIGxheWVyQ2FsbGJhY2tzLCBpZHgpO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgZGVja0dsTGF5ZXJzID0gZGVja0dsTGF5ZXJzLmNvbmNhdChkYXRhTGF5ZXJzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZGVja0dsUHJvcHM/LmxheWVyc09uVG9wKSB7XG4gICAgICAgIGRlY2tHbExheWVycyA9IGRlY2tHbExheWVycy5jb25jYXQodGhpcy5wcm9wcy5kZWNrR2xQcm9wcy5sYXllcnNPblRvcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXNrUG9seWdvbikge1xuICAgICAgICBkZWNrR2xMYXllcnMucHVzaChcbiAgICAgICAgICBuZXcgU29saWRQb2x5Z29uTGF5ZXIoe1xuICAgICAgICAgICAgaWQ6IE1BU0tfTEFZRVJfSUQsXG4gICAgICAgICAgICBvcGVyYXRpb246IE9QRVJBVElPTi5NQVNLLFxuICAgICAgICAgICAgZGF0YTogW21hc2tQb2x5Z29uXSxcbiAgICAgICAgICAgIGRhdGFDb21wYXJhdG9yOiAoZGF0YSwgb2xkRGF0YSkgPT4gZGF0YVswXSA9PT0gb2xkRGF0YVswXSxcbiAgICAgICAgICAgIGdldFBvbHlnb246IGQgPT4gZCxcbiAgICAgICAgICAgIGdldEZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTUsIDI1NV1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWFwU3R5bGUudmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddKSB7XG4gICAgICAgIGRlY2tHbExheWVycy5wdXNoKFxuICAgICAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbWl0IHJlbmRlcnNcbiAgICAgIGNvbnN0IGhhc1JlbmRlcmVkID0gdGhpcy5faGFzUmVuZGVyZWQ7XG4gICAgICBjb25zdCByZXNldEhhc1JlbmRlcmVkID0gKCkgPT4gKGhhc1JlbmRlcmVkLmN1cnJlbnQgPSBmYWxzZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGVja0dMXG4gICAgICAgICAgY29udHJvbGxlcj17dHJ1ZX1cbiAgICAgICAgICB7Li4udGhpcy5wcm9wcy5kZWNrR2xQcm9wc31cbiAgICAgICAgICB2aWV3U3RhdGU9e21hcFN0YXRlfVxuICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXsoe3ZpZXdTdGF0ZX0pID0+IHtcbiAgICAgICAgICAgIC8vIExpbWl0IHVwZGF0ZXMgKHByZXZlbnRzIGZyZWV6ZXMgd2hlbiBkZXYgdG9vbHMgb3BlbilcbiAgICAgICAgICAgIGlmICghaGFzUmVuZGVyZWQuY3VycmVudCAmJiB2aWV3U3RhdGUud2lkdGggPiAxICYmIHZpZXdTdGF0ZS5oZWlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgIGhhc1JlbmRlcmVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlKHZpZXdTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgIGxheWVycz17ZGVja0dsTGF5ZXJzfVxuICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXtvcHRzID0+IHtcbiAgICAgICAgICAgIHJlc2V0SGFzUmVuZGVyZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyKG9wdHMpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25Ib3Zlcj17dmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3Zlcn1cbiAgICAgICAgICBvbkNsaWNrPXt2aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrfVxuICAgICAgICAgIG9uRXJyb3I9e3RoaXMuX29uRGVja0Vycm9yfVxuICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLmRlY2sgJiYgY29tcC5kZWNrICE9PSB0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbldlYkdMSW5pdGlhbGl6ZWQ9e2dsID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGdsKX1cbiAgICAgICAgICBsYXllckZpbHRlcj17KHtsYXllciwgdmlld3BvcnR9KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzTmFOKGxheWVyLnByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbikgfHxcbiAgICAgICAgICAgICAgaXNOYU4obGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VycmVudFpvb21SYW5nZSA9IE1hdGgucm91bmQobWFwU3RhdGUuem9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGxheWVyLnByb3BzLnZpc2liaWxpdHlCeVpvb20ubWluIDw9IGN1cnJlbnRab29tUmFuZ2UgJiZcbiAgICAgICAgICAgICAgbGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbS5tYXggPj0gY3VycmVudFpvb21SYW5nZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWFwYm94TGF5ZXJzKCkge1xuICAgICAgY29uc3QgbWFwYm94TGF5ZXJzID0gdGhpcy5tYXBib3hMYXllcnNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGlmICghT2JqZWN0LmtleXMobWFwYm94TGF5ZXJzKS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNMYXllcnMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZU1hcGJveExheWVycyh0aGlzLl9tYXAsIG1hcGJveExheWVycywgdGhpcy5wcmV2aW91c0xheWVycyk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSBtYXBib3hMYXllcnM7XG4gICAgfVxuXG4gICAgX3JlbmRlck1hcGJveE92ZXJsYXlzKCkge1xuICAgICAgaWYgKHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld1N0YXRlID0+IHtcbiAgICAgIHRyYWNrZXJzLnZpZXdwb3J0Q2hhbmdlQ291bnQ/LmluY3JlbWVudCgpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIC4uLnJlc3RWaWV3U3RhdGV9ID0gdmlld1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnksIGlzRXhwb3J0fSA9IHRoaXMucHJvcHM7XG4gICAgICAvLyByZWFjdC1tYXAtZ2wgc2VuZHMgMCwwIGRpbWVuc2lvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBhZnRlciB3ZSBoYXZlIHJlY2VpdmVkIHByb3BlciBkaW1lbnNpb25zIGZyb20gb2JzZXJ2ZURpbWVuc2lvbnNcbiAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgIC4uLih3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHZpZXdTdGF0ZSA6IHJlc3RWaWV3U3RhdGUpLFxuICAgICAgICAvLyBlbmFibGluZyB0cmFuc2l0aW9uIGluIHR3byBtYXBzIG1heSBsZWFkIHRvIGVuZGxlc3MgdXBkYXRlIGxvb3BzXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogcHJpbWFyeSA/IFRSQU5TSVRJT05fRFVSQVRJT04gOiAwXG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UobmV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFeHBvcnQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKG5leHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIGluZGV4KTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIE1hcENvbXBvbmVudCxcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBpc0V4cG9ydCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJpbWFyeVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJzRm9yRGVjayA9IHRoaXMubGF5ZXJzRm9yRGVja1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCBtYXBQcm9wcyA9IHtcbiAgICAgICAgLi4ubWFwU3RhdGUsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGlzRWRpdCA9IChtYXBDb250cm9scy5tYXBEcmF3IHx8IHt9KS5hY3RpdmU7XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGwuaWQgPT09IEdFT0NPREVSX0xBWUVSX0lEKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuICAgICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IHRoaXMuX21vdXNlUG9zaXRpb247XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPE1hcENvbnRyb2xcbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXM9e09iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyl9XG4gICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgIHByaW1hcnk9e3ByaW1hcnl9XG4gICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleH1cbiAgICAgICAgICAgIG1hcENvbnRyb2xzPXttYXBDb250cm9sc31cbiAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgc2NhbGU9e21hcFN0YXRlLnNjYWxlIHx8IDF9XG4gICAgICAgICAgICB0b3A9e2ludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgPyA1MiA6IDB9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2w9e3RoaXMuX3RvZ2dsZU1hcENvbnRyb2x9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8TWFwQ29tcG9uZW50XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBrZXk9XCJib3R0b21cIlxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBib3hNYXB9XG4gICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGUuYm90dG9tTWFwU3R5bGV9XG4gICAgICAgICAgICBnZXRDdXJzb3I9e3RoaXMucHJvcHMuaG92ZXJJbmZvID8gKCkgPT4gJ3BvaW50ZXInIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgb25Nb3VzZU1vdmU9e2V2dCA9PiB7XG4gICAgICAgICAgICAgIC8vIFNlbmRpbmcgbW91c2UgbW92ZSB1cGRhdGVzIHZpYSBSZWR1eCBpcyBleHBlbnNpdmUuIFN0b3JlXG4gICAgICAgICAgICAgIC8vIGxvY2FsbHkgYW5kIHJlbHkgb24gZGVjay5nbCB0byBkcml2ZSByZW5kZXIgdXBkYXRlc1xuICAgICAgICAgICAgICAvLyBTZWUgQnVpbGRlcjogZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9NYXBDb250YWluZXIvTWFwQ29udGFpbmVyLnRzeFxuICAgICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmN1cnJlbnQgPSB7bW91c2VQb3NpdGlvbjogZXZ0LnBvaW50fTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge1BFUkZfREVCVUcgJiYgcmVuZGVyUGVyZm9ybWFuY2VTdGF0cygpfVxuICAgICAgICAgICAge3RoaXMuX3JlbmRlckRlY2tPdmVybGF5KGxheWVyc0ZvckRlY2spfVxuICAgICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgICA8RWRpdG9yXG4gICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVycyh0aGlzLnByb3BzKX1cbiAgICAgICAgICAgICAgaXNFbmFibGVkPXtpc0VkaXR9XG4gICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICAgIG9uRGVsZXRlRmVhdHVyZT17dmlzU3RhdGVBY3Rpb25zLmRlbGV0ZUZlYXR1cmV9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICBvblVwZGF0ZT17dmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBvblRvZ2dsZVBvbHlnb25GaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyTGF5ZXJ9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNFZGl0ID8gJ2FsbCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTWFwQ29tcG9uZW50PlxuICAgICAgICAgIHttYXBTdHlsZS50b3BNYXBTdHlsZSB8fCBoYXNHZW9jb2RlckxheWVyID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17TUFQX1NUWUxFLnRvcH0+XG4gICAgICAgICAgICAgIDxNYXBDb21wb25lbnQgey4uLm1hcFByb3BzfSBrZXk9XCJ0b3BcIiBtYXBTdHlsZT17bWFwU3R5bGUudG9wTWFwU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheSh7W0dFT0NPREVSX0xBWUVSX0lEXTogdHJ1ZX0pfVxuICAgICAgICAgICAgICA8L01hcENvbXBvbmVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKGxheWVyc1RvUmVuZGVyKX1cbiAgICAgICAgICB7IWlzU3BsaXQgfHwgaW5kZXggPT09IDEgPyA8QXR0cmlidXRpb24gLz4gOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge21hcFN0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29udGV4dExvc3QgPSB0aGlzLnN0YXRlPy5jb250ZXh0TG9zdDtcblxuICAgICAgaWYgKGNvbnRleHRMb3N0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwQ29udGFpbmVyIHJlZj17dGhpcy5fcmVmfSBzdHlsZT17TUFQX1NUWUxFLmNvbnRhaW5lcn0gZ2xvYmU9e21hcFN0YXRlLmdsb2JlfT5cbiAgICAgICAgICB7bWFwU3R5bGUuYm90dG9tTWFwU3R5bGUgJiYgdGhpcy5fcmVuZGVyTWFwKCl9XG4gICAgICAgIDwvU3R5bGVkTWFwQ29udGFpbmVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBNYXBDb250YWluZXIuZGlzcGxheU5hbWUgPSAnTWFwQ29udGFpbmVyJztcblxuICByZXR1cm4gTWFwQ29udGFpbmVyO1xufVxuIl19
|
|
729
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL21hcC1jb250YWluZXIuanMiXSwibmFtZXMiOlsiR09PR0xFX01BUFNfQVBJX0tFWSIsInRpbGVzM2QiLCJUaWxlM0RMYXllciIsImlkIiwiZGF0YSIsIm9uVGlsZXNldExvYWQiLCJ0aWxlc2V0M2QiLCJfb25UaWxlTG9hZEVycm9yIiwibG9hZE9wdGlvbnMiLCJmZXRjaCIsImhlYWRlcnMiLCJvcGVyYXRpb24iLCJ0ZXJyYWluRXh0ZW5zaW9uIiwiVGVycmFpbkV4dGVuc2lvbiIsInRyYWNrZXJzIiwiUEVSRl9ERUJVRyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaW5jbHVkZXMiLCJkcmF3Q291bnQiLCJ2aWV3cG9ydENoYW5nZUNvdW50IiwiTGF5ZXIiLCJUaWxlTGF5ZXIiLCJNQVBfU1RZTEUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJNQVBCT1hHTF9TVFlMRV9VUERBVEUiLCJNQVBCT1hHTF9SRU5ERVIiLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwiQXR0cmlidXRpb24iLCJNYXBDb250YWluZXJGYWN0b3J5IiwiZGVwcyIsIk1hcFBvcG92ZXJGYWN0b3J5IiwiTWFwQ29udHJvbEZhY3RvcnkiLCJFZGl0b3JGYWN0b3J5IiwiTWFwUG9wb3ZlciIsIk1hcENvbnRyb2wiLCJFZGl0b3IiLCJNYXBDb250YWluZXIiLCJwcm9wcyIsImRpbWVuc2lvbnMiLCJwcmltYXJ5IiwiaXNFeHBvcnQiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJtYXBMYXllcnMiLCJsYXllck9yZGVyIiwicG9wdXBTZXR0aW5ncyIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsInBvcHVwU2V0dGluZ3NTZWxlY3RvciIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsImZpbHRlciIsImYiLCJ0eXBlIiwiRklMVEVSX1RZUEVTIiwicG9seWdvbiIsImxheWVyT3JkZXJTZWxlY3RvciIsImxheWVyc1RvUmVuZGVyU2VsZWN0b3IiLCJnZW5lcmF0ZU1hcGJveExheWVycyIsInZpc1N0YXRlQWN0aW9ucyIsIm9uTGF5ZXJDbGljayIsImlkeCIsImNvbG9yRG9tYWluIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllcklkIiwiaW5kZXgiLCJtYXBJbmRleCIsInRvZ2dsZUxheWVyRm9yTWFwIiwicHJldmlvdXNMYXllcnMiLCJfdXBkYXRlTWFwYm94TGF5ZXJzIiwib25NYXBTdHlsZUxvYWRlZCIsIl9tYXAiLCJtYXBib3giLCJnZXRNYXAiLCJvbiIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwib25NYXBSZW5kZXIiLCJnZXRNYXBib3hSZWYiLCJnbCIsImxheWVyQmxlbmRpbmciLCJlcnJvciIsImxheWVyIiwibWVzc2FnZSIsInNldFN0YXRlIiwiY29udGV4dExvc3QiLCJlcnJvck1lc3NhZ2UiLCJub3RpZmljYXRpb25JZCIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwibGFzdFNob3duIiwiRGF0ZSIsIm5vdyIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwidWlTdGF0ZUFjdGlvbnMiLCJhZGROb3RpZmljYXRpb24iLCJ2aWV3U3RhdGUiLCJpbmNyZW1lbnQiLCJyZXN0Vmlld1N0YXRlIiwibmV4dCIsInRyYW5zaXRpb25EdXJhdGlvbiIsIm9uVmlld1N0YXRlQ2hhbmdlIiwicGFuZWxJZCIsInRvZ2dsZU1hcENvbnRyb2wiLCJfZGVjayIsIl9yZWYiLCJfaGFzUmVuZGVyZWQiLCJfbW91c2VQb3NpdGlvbiIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwic3RhdGUiLCJvZmYiLCJvbkRlY2tJbml0aWFsaXplZCIsImxheWVyc1RvUmVuZGVyIiwidmlld3BvcnQiLCJsbmdMYXQiLCJzY3JlZW5Db29yZCIsInByb2plY3QiLCJ4IiwieSIsImxheWVyc0ZvckRlY2siLCJtYXBTdGF0ZSIsIm1hcFN0eWxlIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJtYXNrUG9seWdvbiIsImRlY2tHbExheWVycyIsImRlY2tHbFByb3BzIiwibGVuZ3RoIiwiZGF0YUxheWVycyIsInNsaWNlIiwicmV2ZXJzZSIsInJlZHVjZSIsIm92ZXJsYXlzIiwibGF5ZXJDYWxsYmFja3MiLCJvblNldExheWVyRG9tYWluIiwidmFsIiwiX29uTGF5ZXJTZXREb21haW4iLCJsYXllck92ZXJsYXkiLCJjb25jYXQiLCJsYXllcnNPblRvcCIsInB1c2giLCJTb2xpZFBvbHlnb25MYXllciIsIk1BU0tfTEFZRVJfSUQiLCJPUEVSQVRJT04iLCJNQVNLIiwiZGF0YUNvbXBhcmF0b3IiLCJvbGREYXRhIiwiZ2V0UG9seWdvbiIsImQiLCJnZXRGaWxsQ29sb3IiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJUaHJlZURCdWlsZGluZ0xheWVyIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInVwZGF0ZVRyaWdnZXJzIiwic3R5bGVUeXBlIiwibCIsIkJvb2xlYW4iLCJjbG9uZSIsIm1hcCIsImV4dGVuc2lvbnMiLCJoYXNSZW5kZXJlZCIsInJlc2V0SGFzUmVuZGVyZWQiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9wdHMiLCJfb25CZWZvcmVSZW5kZXIiLCJvbkxheWVySG92ZXIiLCJlIiwiX29uRGVja0Vycm9yIiwiY29tcCIsImRlY2siLCJfb25EZWNrSW5pdGlhbGl6ZWQiLCJpc05hTiIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJtYXgiLCJjdXJyZW50Wm9vbVJhbmdlIiwiTWF0aCIsInJvdW5kIiwiem9vbSIsIm1hcGJveExheWVycyIsIm1hcGJveExheWVyc1NlbGVjdG9yIiwiT2JqZWN0Iiwia2V5cyIsImlzU3R5bGVMb2FkZWQiLCJNYXBDb21wb25lbnQiLCJkYXRhc2V0cyIsIm1hcENvbnRyb2xzIiwibG9jYWxlIiwiaW50ZXJhY3Rpb25Db25maWciLCJlZGl0b3IiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJtYXBQcm9wcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJpc0VkaXQiLCJtYXBEcmF3IiwiYWN0aXZlIiwiaGFzR2VvY29kZXJMYXllciIsImZpbmQiLCJHRU9DT0RFUl9MQVlFUl9JRCIsImlzU3BsaXQiLCJtb3VzZVBvc2l0aW9uIiwiTE9DQUxFX0NPREVTIiwiZHJhZ1JvdGF0ZSIsInJlYWRPbmx5Iiwic2NhbGUiLCJnZW9jb2RlciIsImVuYWJsZWQiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsInRvZ2dsZVNwbGl0TWFwIiwiX2hhbmRsZU1hcFRvZ2dsZUxheWVyIiwiX3RvZ2dsZU1hcENvbnRyb2wiLCJzZXRFZGl0b3JNb2RlIiwic2V0TG9jYWxlIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsIl9zZXRNYXBib3hNYXAiLCJib3R0b21NYXBTdHlsZSIsImhvdmVySW5mbyIsInVuZGVmaW5lZCIsImV2dCIsInBvaW50IiwiX3JlbmRlckRlY2tPdmVybGF5IiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwicG9seWdvbkZpbHRlcnMiLCJkZWxldGVGZWF0dXJlIiwic2V0U2VsZWN0ZWRGZWF0dXJlIiwic2V0RmVhdHVyZXMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwidG9wTWFwU3R5bGUiLCJfcmVuZGVyTWFwUG9wb3ZlciIsImdsb2JlIiwiX3JlbmRlck1hcCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJhcnJheU9mIiwiYW55IiwiYm9vbCIsImNsaWNrZWQiLCJvbk1hcFRvZ2dsZUxheWVyIiwiZnVuYyIsIm51bWJlciIsIk1hcGJveEdMTWFwIiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFVTSxJQW5CRjtBQW1CUTtBQUN6QnBDLElBQUFBLFFBQVEsRUFBRThCLHNCQUFVTSxJQXBCSDtBQXFCakI1TSxJQUFBQSxRQUFRLEVBQUVzTSxzQkFBVU0sSUFyQkg7QUFzQmpCQyxJQUFBQSxPQUFPLEVBQUVQLHNCQUFVQyxNQXRCRjtBQXVCakJsQixJQUFBQSxTQUFTLEVBQUVpQixzQkFBVUMsTUF2Qko7QUF3QmpCbE0sSUFBQUEsU0FBUyxFQUFFaU0sc0JBQVVDLE1BeEJKO0FBeUJqQk8sSUFBQUEsZ0JBQWdCLEVBQUVSLHNCQUFVUyxJQXpCWDtBQTBCakI1SyxJQUFBQSxnQkFBZ0IsRUFBRW1LLHNCQUFVUyxJQTFCWDtBQTJCakJ0SyxJQUFBQSxXQUFXLEVBQUU2SixzQkFBVVMsSUEzQk47QUE0QmpCckssSUFBQUEsWUFBWSxFQUFFNEosc0JBQVVTLElBNUJQO0FBNkJqQmpMLElBQUFBLEtBQUssRUFBRXdLLHNCQUFVVSxNQTdCQTtBQThCakJ6TSxJQUFBQSxhQUFhLEVBQUUrTCxzQkFBVUM7QUE5QlIsR0FGcUQ7QUFBQSxtQ0FDcEUzTSxZQURvRSxrQkFtQ2xEO0FBQ3BCd0osSUFBQUEsWUFBWSxFQUFFNkQsc0JBRE07QUFFcEJ2SCxJQUFBQSxXQUFXLEVBQUUsRUFGTztBQUdwQjVELElBQUFBLEtBQUssRUFBRSxDQUhhO0FBSXBCL0IsSUFBQUEsT0FBTyxFQUFFO0FBSlcsR0FuQ2tEO0FBeWdCMUVILEVBQUFBLFlBQVksQ0FBQ3NOLFdBQWIsR0FBMkIsY0FBM0I7QUFFQSxTQUFPdE4sWUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBNYXBib3hHTE1hcCBmcm9tICdyZWFjdC1tYXAtZ2wnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge09QRVJBVElPTiwgTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTb2xpZFBvbHlnb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7VGlsZUxheWVyfSBmcm9tICdAZGVjay5nbC9nZW8tbGF5ZXJzJztcbmltcG9ydCB7ZXJyb3JOb3RpZmljYXRpb259IGZyb20gJ3V0aWxzL25vdGlmaWNhdGlvbnMtdXRpbHMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnY29tcG9uZW50cy9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvbWFwL21hcC1jb250cm9sJztcbmltcG9ydCB7U3R5bGVkTWFwQ29udGFpbmVyLCBTdHlsZWRBdHRyYnV0aW9ufSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCBFZGl0b3JGYWN0b3J5IGZyb20gJy4vZWRpdG9yL2VkaXRvcic7XG5cbi8vIHV0aWxzXG5pbXBvcnQge2dlbmVyYXRlTWFwYm94TGF5ZXJzLCB1cGRhdGVNYXBib3hMYXllcnN9IGZyb20gJ2xheWVycy9tYXBib3gtdXRpbHMnO1xuaW1wb3J0IHtzZXRMYXllckJsZW5kaW5nfSBmcm9tICd1dGlscy9nbC11dGlscyc7XG5pbXBvcnQge3RyYW5zZm9ybVJlcXVlc3R9IGZyb20gJ3V0aWxzL21hcC1zdHlsZS11dGlscy9tYXBib3gtdXRpbHMnO1xuaW1wb3J0IHtyZW5kZXJEZWNrR2xMYXllciwgcHJlcGFyZUxheWVyc1RvUmVuZGVyLCBwcmVwYXJlTGF5ZXJzRm9yRGVja30gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuXG4vLyBkZWZhdWx0LXNldHRpbmdzXG5pbXBvcnQgVGhyZWVEQnVpbGRpbmdMYXllciBmcm9tICdkZWNrZ2wtbGF5ZXJzLzNkLWJ1aWxkaW5nLWxheWVyLzNkLWJ1aWxkaW5nLWxheWVyJztcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIE1BU0tfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtvYnNlcnZlRGltZW5zaW9ucywgdW5vYnNlcnZlRGltZW5zaW9uc30gZnJvbSAnLi4vdXRpbHMvb2JzZXJ2ZS1kaW1lbnNpb25zJztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdsb2NhbGl6YXRpb24vbG9jYWxlcyc7XG5cbi8vIDNEIHRpbGVzXG5pbXBvcnQge19UZXJyYWluRXh0ZW5zaW9uIGFzIFRlcnJhaW5FeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtUaWxlM0RMYXllcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycyc7XG5cbmNvbnN0IEdPT0dMRV9NQVBTX0FQSV9LRVkgPSAnQUl6YVN5Q3B2UXltYzV3alNZSXN4eTNSVjF3aWRNM3AzaDc4Q0FrJztcblxuY29uc3QgdGlsZXMzZCA9IG5ldyBUaWxlM0RMYXllcih7XG4gIGlkOiAnZ29vZ2xlLTNkLXRpbGVzJyxcbiAgZGF0YTogJ2h0dHBzOi8vdGlsZS5nb29nbGVhcGlzLmNvbS92MS8zZHRpbGVzL3Jvb3QuanNvbicsXG4gIG9uVGlsZXNldExvYWQ6IHRpbGVzZXQzZCA9PiB7XG4gICAgLy8gdGlsZXNldDNkLm9wdGlvbnMubWF4aW11bVNjcmVlblNwYWNlRXJyb3IgPSA0O1xuICAgIHRpbGVzZXQzZC5fb25UaWxlTG9hZEVycm9yID0gKCkgPT4ge307XG4gIH0sXG4gIGxvYWRPcHRpb25zOiB7XG4gICAgZmV0Y2g6IHtoZWFkZXJzOiB7J1gtR09PRy1BUEktS0VZJzogR09PR0xFX01BUFNfQVBJX0tFWX19XG4gIH0sXG4gIC8vIEB0cy1pZ25vcmVcbiAgb3BlcmF0aW9uOiAndGVycmFpbitkcmF3JyAvLyBSZXF1aXJlZCB0byBlbmFibGUgZHJhcGluZyBvZiBvdGhlciBsYXllcnNcbn0pO1xuY29uc3QgdGVycmFpbkV4dGVuc2lvbiA9IG5ldyBUZXJyYWluRXh0ZW5zaW9uKCk7XG5cbi8vIFBlcmZvcm1hbmNlIGRlYnVnZ2luZ1xuaW1wb3J0IHtjcmVhdGVUcmFja2VyLCBjcmVhdGVMYXllclVwZGF0ZVRyYWNrZXIsIHJlbmRlclBlcmZvcm1hbmNlU3RhdHN9IGZyb20gJy4vcGVyZm9ybWFuY2UnO1xuY29uc3QgdHJhY2tlcnMgPSB7fTtcbmNvbnN0IFBFUkZfREVCVUcgPSB3aW5kb3c/LmxvY2F0aW9uPy5zZWFyY2g/LmluY2x1ZGVzKCdQRVJGX0RFQlVHJyk7XG5pZiAoUEVSRl9ERUJVRykge1xuICB0cmFja2Vycy5kcmF3Q291bnQgPSBjcmVhdGVUcmFja2VyKCdkcmF3cycpO1xuICB0cmFja2Vycy52aWV3cG9ydENoYW5nZUNvdW50ID0gY3JlYXRlVHJhY2tlcigndmlld3BvcnQgY2hhbmdlcycpO1xuICBjcmVhdGVMYXllclVwZGF0ZVRyYWNrZXIoJ3N0YXRlIHVwZGF0ZXMnLCBbTGF5ZXIsIFRpbGVMYXllcl0pO1xufVxuXG4vKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBSZWFjdC5DU1NQcm9wZXJ0aWVzfX0gKi9cbmNvbnN0IE1BUF9TVFlMRSA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICcwcHgnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH1cbn07XG5cbmNvbnN0IE1BUEJPWEdMX1NUWUxFX1VQREFURSA9ICdzdHlsZS5sb2FkJztcbmNvbnN0IE1BUEJPWEdMX1JFTkRFUiA9ICdyZW5kZXInO1xuY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiA9IDA7XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGlvbiA9ICgpID0+IChcbiAgPFN0eWxlZEF0dHJidXRpb24+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbG9nb1wiPlxuICAgICAgQmFzZW1hcCBieTpcbiAgICAgIDxhXG4gICAgICAgIGNsYXNzTmFtZT1cIm1hcGJveGdsLWN0cmwtbG9nb1wiXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9cIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTWFwYm94IGxvZ29cIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cImF0dHJpdGlvbi1saW5rXCI+XG4gICAgICA8YSBocmVmPVwiaHR0cHM6Ly9rZXBsZXIuZ2wvcG9saWN5L1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgwqkga2VwbGVyLmdsIHx7JyAnfVxuICAgICAgPC9hPlxuICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYWJvdXQvbWFwcy9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIMKpIE1hcGJveCB8eycgJ31cbiAgICAgIDwvYT5cbiAgICAgIDxhIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgwqkgT3BlblN0cmVldE1hcCB8eycgJ31cbiAgICAgIDwvYT5cbiAgICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy5tYXBib3guY29tL21hcC1mZWVkYmFjay9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIDxzdHJvbmc+SW1wcm92ZSB0aGlzIG1hcDwvc3Ryb25nPlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICA8L1N0eWxlZEF0dHJidXRpb24+XG4pO1xuXG5NYXBDb250YWluZXJGYWN0b3J5LmRlcHMgPSBbTWFwUG9wb3ZlckZhY3RvcnksIE1hcENvbnRyb2xGYWN0b3J5LCBFZGl0b3JGYWN0b3J5XTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFwQ29udGFpbmVyRmFjdG9yeShNYXBQb3BvdmVyLCBNYXBDb250cm9sLCBFZGl0b3IpIHtcbiAgY2xhc3MgTWFwQ29udGFpbmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgLy8gcmVxdWlyZWRcbiAgICAgIGRhdGFzZXRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgaW50ZXJhY3Rpb25Db25maWc6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyQmxlbmRpbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyT3JkZXI6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBsYXllckRhdGE6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBsYXllcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3RhdGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIG1hcENvbnRyb2xzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBtYXBTdHlsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIG1hcGJveEFwaVVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHZpc1N0YXRlQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3RhdGVBY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICB1aVN0YXRlQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuXG4gICAgICAvLyBvcHRpb25hbFxuICAgICAgcHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsIC8vIHByaW1hcnkgb25lIHdpbGwgYmUgcmVwb3J0aW5nIGl0cyBzaXplIHRvIGFwcFN0YXRlXG4gICAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBpc0V4cG9ydDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBjbGlja2VkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgaG92ZXJJbmZvOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgbWFwTGF5ZXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgb25NYXBUb2dnbGVMYXllcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbk1hcFN0eWxlTG9hZGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIG9uTWFwUmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGdldE1hcGJveFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIHBvcHVwU2V0dGluZ3M6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIE1hcENvbXBvbmVudDogTWFwYm94R0xNYXAsXG4gICAgICBkZWNrR2xQcm9wczoge30sXG4gICAgICBpbmRleDogMCxcbiAgICAgIHByaW1hcnk6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IHtcbiAgICAgICAgLy8gW2xheWVycy5pZF06IG1hcGJveExheWVyQ29uZmlnXG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9kZWNrID0gbnVsbDtcbiAgICAgIHRoaXMuX3JlZiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgICAvLyBSZW5kZXIgbGltaXRpbmcgbWVjaGFuaXNtXG4gICAgICB0aGlzLl9oYXNSZW5kZXJlZCA9IGNyZWF0ZVJlZigpO1xuICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbiA9IGNyZWF0ZVJlZigpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgY29udGV4dExvc3QgPSB0aGlzLnN0YXRlPy5jb250ZXh0TG9zdDtcblxuICAgICAgaWYgKGNvbnRleHRMb3N0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjb250ZXh0TG9zdDogZmFsc2V9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIC8vIHVuYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSKTtcbiAgICAgIH1cbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpc0V4cG9ydH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIWlzRXhwb3J0ICYmIGRpbWVuc2lvbnMgJiYgZGltZW5zaW9ucy53aWR0aCA+IDAgJiYgZGltZW5zaW9ucy5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChkaW1lbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBsYXllcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmxheWVycztcbiAgICBsYXllckRhdGFTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmxheWVyRGF0YTtcbiAgICBtYXBMYXllcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcExheWVycztcbiAgICBsYXllck9yZGVyU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5sYXllck9yZGVyO1xuICAgIHBvcHVwU2V0dGluZ3NTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnBvcHVwU2V0dGluZ3M7XG5cbiAgICBsYXllcnNUb1JlbmRlclNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwTGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLnBvcHVwU2V0dGluZ3NTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNUb1JlbmRlclxuICAgICk7XG4gICAgbGF5ZXJzRm9yRGVja1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNGb3JEZWNrXG4gICAgKTtcbiAgICBmaWx0ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5maWx0ZXJzO1xuICAgIHBvbHlnb25GaWx0ZXJzID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWx0ZXJzU2VsZWN0b3IsIGZpbHRlcnMgPT5cbiAgICAgIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbilcbiAgICApO1xuXG4gICAgbWFwYm94TGF5ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllck9yZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IsXG4gICAgICBnZW5lcmF0ZU1hcGJveExheWVyc1xuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyU2V0RG9tYWluID0gKGlkeCwgY29sb3JEb21haW4pID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXJzW2lkeF0sIHtcbiAgICAgICAgY29sb3JEb21haW5cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIgPSBsYXllcklkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleDogbWFwSW5kZXggPSAwLCB2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCk7XG4gICAgfTtcblxuICAgIF9vbk1hcGJveFN0eWxlVXBkYXRlID0gKCkgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3NldE1hcGJveE1hcCA9IG1hcGJveCA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21hcCAmJiBtYXBib3gpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwYm94LmdldE1hcCgpO1xuICAgICAgICAvLyBpIG5vdGljZWQgaW4gY2VydGFpbiBjb250ZXh0IHdlIGRvbid0IGFjY2VzcyB0aGUgYWN0dWFsIG1hcCBlbGVtZW50XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1JFTkRFUiwgKCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFJlbmRlcih0aGlzLl9tYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmdldE1hcGJveFJlZikge1xuICAgICAgICAvLyBUaGUgcGFyZW50IGNvbXBvbmVudCBjYW4gZ2FpbiBhY2Nlc3MgdG8gb3VyIE1hcGJveEdsTWFwIGJ5XG4gICAgICAgIC8vIHByb3ZpZGluZyB0aGlzIGNhbGxiYWNrLiBOb3RlIHRoYXQgJ21hcGJveCcgd2lsbCBiZSBudWxsIHdoZW4gdGhlXG4gICAgICAgIC8vIHJlZiBpcyB1bnNldCAoZS5nLiB3aGVuIGEgc3BsaXQgbWFwIGlzIGNsb3NlZCkuXG4gICAgICAgIHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKG1hcGJveCwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9vbkRlY2tJbml0aWFsaXplZChnbCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCh0aGlzLl9kZWNrLCBnbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKHtnbH0pID0+IHtcbiAgICAgIHNldExheWVyQmxlbmRpbmcoZ2wsIHRoaXMucHJvcHMubGF5ZXJCbGVuZGluZyk7XG4gICAgfTtcblxuICAgIF9vbkRlY2tFcnJvciA9IChlcnJvciwgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChlcnJvcj8ubWVzc2FnZSA9PT0gJ1dlYkdMIGNvbnRleHQgaXMgbG9zdCcpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29udGV4dExvc3Q6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQW4gZXJyb3IgaW4gZGVjay5nbDogJHtlcnJvcj8ubWVzc2FnZX0gaW4gJHtsYXllcj8uaWR9YDtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbklkID0gYCR7bGF5ZXI/LmlkfS0ke2Vycm9yPy5tZXNzYWdlfWA7XG5cbiAgICAgIC8vIFRocm90dGxlIGVycm9yIG5vdGlmaWNhdGlvbnMsIGFzIFJlYWN0IGRvZXNuJ3QgbGlrZSB0b28gbWFueSBzdGF0ZSBjaGFuZ2VzIGZyb20gaGVyZS5cbiAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWQgPSB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkIHx8IHt9O1xuICAgICAgY29uc3QgbGFzdFNob3duID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtub3RpZmljYXRpb25JZF07XG4gICAgICBpZiAoIWxhc3RTaG93biB8fCBsYXN0U2hvd24gPCBEYXRlLm5vdygpIC0gVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUpIHtcbiAgICAgICAgdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtub3RpZmljYXRpb25JZF0gPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igbm90aWZpY2F0aW9uIG9yIHVwZGF0ZSBleGlzdGluZyBvbmUgd2l0aCBzYW1lIGlkLlxuICAgICAgICAvLyBVcGRhdGUgaXMgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIG5vdGlmaWNhdGlvbnMgYXMgdGhleSBwcm9iYWJseSBhcmUgZ29pbmcgdG8gXCJqdW1wXCIgYmFzZWQgb24gb3JkZXIgb2YgZXJyb3JzLlxuICAgICAgICBjb25zdCB7dWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGlkOiBub3RpZmljYXRpb25JZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb25zICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcFBvcG92ZXIobGF5ZXJzVG9SZW5kZXIpIHtcbiAgICAgIC8vIE92ZXJyaWRlbiBpbiBCdWlsZGVyOiBmZWF0dXJlcy9idWlsZGVyL3VpL0tlcGxlckdsL01hcENvbnRhaW5lci9NYXBDb250YWluZXIudHN4XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIF9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpIHtcbiAgICAgIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICAgICAgcmV0dXJuIHNjcmVlbkNvb3JkICYmIHt4OiBzY3JlZW5Db29yZFswXSwgeTogc2NyZWVuQ29vcmRbMV19O1xuICAgIH1cblxuICAgIF9yZW5kZXJEZWNrT3ZlcmxheShsYXllcnNGb3JEZWNrKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICBsYXllck9yZGVyLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgbWFza1BvbHlnb25cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgdHJhY2tlcnMuZHJhd0NvdW50Py5pbmNyZW1lbnQoKTtcblxuICAgICAgLy8gaW5pdGlhbGlzZSBsYXllcnMgZnJvbSBwcm9wcyBpZiBleGlzdHNcbiAgICAgIGxldCBkZWNrR2xMYXllcnMgPSB0aGlzLnByb3BzLmRlY2tHbFByb3BzPy5sYXllcnMgfHwgW107XG5cbiAgICAgIC8vIHdhaXQgdW50aWwgZGF0YSBpcyByZWFkeSBiZWZvcmUgcmVuZGVyIGRhdGEgbGF5ZXJzXG4gICAgICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gbGFzdCBsYXllciByZW5kZXIgZmlyc3RcbiAgICAgICAgY29uc3QgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAuZmlsdGVyKGlkeCA9PiBsYXllcnNGb3JEZWNrW2xheWVyc1tpZHhdLmlkXSlcbiAgICAgICAgICAucmVkdWNlKChvdmVybGF5cywgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYXllckNhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdmFsID0+IHRoaXMuX29uTGF5ZXJTZXREb21haW4oaWR4LCB2YWwpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIodGhpcy5wcm9wcywgbGF5ZXJDYWxsYmFja3MsIGlkeCk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICBkZWNrR2xMYXllcnMgPSBkZWNrR2xMYXllcnMuY29uY2F0KGRhdGFMYXllcnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5kZWNrR2xQcm9wcz8ubGF5ZXJzT25Ub3ApIHtcbiAgICAgICAgZGVja0dsTGF5ZXJzID0gZGVja0dsTGF5ZXJzLmNvbmNhdCh0aGlzLnByb3BzLmRlY2tHbFByb3BzLmxheWVyc09uVG9wKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1hc2tQb2x5Z29uKSB7XG4gICAgICAgIGRlY2tHbExheWVycy5wdXNoKFxuICAgICAgICAgIG5ldyBTb2xpZFBvbHlnb25MYXllcih7XG4gICAgICAgICAgICBpZDogTUFTS19MQVlFUl9JRCxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogT1BFUkFUSU9OLk1BU0ssXG4gICAgICAgICAgICBkYXRhOiBbbWFza1BvbHlnb25dLFxuICAgICAgICAgICAgZGF0YUNvbXBhcmF0b3I6IChkYXRhLCBvbGREYXRhKSA9PiBkYXRhWzBdID09PSBvbGREYXRhWzBdLFxuICAgICAgICAgICAgZ2V0UG9seWdvbjogZCA9PiBkLFxuICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NSwgMjU1XVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXBTdHlsZS52aXNpYmxlTGF5ZXJHcm91cHNbJzNkIGJ1aWxkaW5nJ10pIHtcbiAgICAgICAgZGVja0dsTGF5ZXJzLnB1c2goXG4gICAgICAgICAgbmV3IFRocmVlREJ1aWxkaW5nTGF5ZXIoe1xuICAgICAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1hcFN0eWxlLnN0eWxlVHlwZSA9PT0gJ3RpbGVzM2QnKSB7XG4gICAgICAgIC8vIEluamVjdCAzRCB0aWxlcyB3aGVuIGJsYW5rIEdvb2dsZSBtYXAgc3R5bGUgZGV0ZWN0ZWRcbiAgICAgICAgZGVja0dsTGF5ZXJzID0gZGVja0dsTGF5ZXJzXG4gICAgICAgICAgLmZpbHRlcihsID0+IEJvb2xlYW4obCAmJiBsLmNsb25lKSlcbiAgICAgICAgICAubWFwKGwgPT4gbC5jbG9uZSh7ZXh0ZW5zaW9uczogWy4uLmwucHJvcHMuZXh0ZW5zaW9ucywgdGVycmFpbkV4dGVuc2lvbl19KSk7XG4gICAgICAgIGRlY2tHbExheWVycy5wdXNoKHRpbGVzM2QuY2xvbmUoKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbWl0IHJlbmRlcnNcbiAgICAgIGNvbnN0IGhhc1JlbmRlcmVkID0gdGhpcy5faGFzUmVuZGVyZWQ7XG4gICAgICBjb25zdCByZXNldEhhc1JlbmRlcmVkID0gKCkgPT4gKGhhc1JlbmRlcmVkLmN1cnJlbnQgPSBmYWxzZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGVja0dMXG4gICAgICAgICAgY29udHJvbGxlcj17dHJ1ZX1cbiAgICAgICAgICB7Li4udGhpcy5wcm9wcy5kZWNrR2xQcm9wc31cbiAgICAgICAgICB2aWV3U3RhdGU9e21hcFN0YXRlfVxuICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXsoe3ZpZXdTdGF0ZX0pID0+IHtcbiAgICAgICAgICAgIC8vIExpbWl0IHVwZGF0ZXMgKHByZXZlbnRzIGZyZWV6ZXMgd2hlbiBkZXYgdG9vbHMgb3BlbilcbiAgICAgICAgICAgIGlmICghaGFzUmVuZGVyZWQuY3VycmVudCAmJiB2aWV3U3RhdGUud2lkdGggPiAxICYmIHZpZXdTdGF0ZS5oZWlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgIGhhc1JlbmRlcmVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlKHZpZXdTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgIGxheWVycz17ZGVja0dsTGF5ZXJzfVxuICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXtvcHRzID0+IHtcbiAgICAgICAgICAgIHJlc2V0SGFzUmVuZGVyZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyKG9wdHMpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25Ib3Zlcj17dmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3Zlcn1cbiAgICAgICAgICBvbkNsaWNrPXt2aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrfVxuICAgICAgICAgIG9uRXJyb3I9e2UgPT4ge1xuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgICB0aGlzLl9vbkRlY2tFcnJvcihlKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLmRlY2sgJiYgY29tcC5kZWNrICE9PSB0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbldlYkdMSW5pdGlhbGl6ZWQ9e2dsID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGdsKX1cbiAgICAgICAgICBsYXllckZpbHRlcj17KHtsYXllciwgdmlld3BvcnR9KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzTmFOKGxheWVyLnByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbikgfHxcbiAgICAgICAgICAgICAgaXNOYU4obGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VycmVudFpvb21SYW5nZSA9IE1hdGgucm91bmQobWFwU3RhdGUuem9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGxheWVyLnByb3BzLnZpc2liaWxpdHlCeVpvb20ubWluIDw9IGN1cnJlbnRab29tUmFuZ2UgJiZcbiAgICAgICAgICAgICAgbGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbS5tYXggPj0gY3VycmVudFpvb21SYW5nZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWFwYm94TGF5ZXJzKCkge1xuICAgICAgY29uc3QgbWFwYm94TGF5ZXJzID0gdGhpcy5tYXBib3hMYXllcnNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGlmICghT2JqZWN0LmtleXMobWFwYm94TGF5ZXJzKS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNMYXllcnMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZU1hcGJveExheWVycyh0aGlzLl9tYXAsIG1hcGJveExheWVycywgdGhpcy5wcmV2aW91c0xheWVycyk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSBtYXBib3hMYXllcnM7XG4gICAgfVxuXG4gICAgX3JlbmRlck1hcGJveE92ZXJsYXlzKCkge1xuICAgICAgaWYgKHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld1N0YXRlID0+IHtcbiAgICAgIHRyYWNrZXJzLnZpZXdwb3J0Q2hhbmdlQ291bnQ/LmluY3JlbWVudCgpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIC4uLnJlc3RWaWV3U3RhdGV9ID0gdmlld1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnksIGlzRXhwb3J0fSA9IHRoaXMucHJvcHM7XG4gICAgICAvLyByZWFjdC1tYXAtZ2wgc2VuZHMgMCwwIGRpbWVuc2lvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBhZnRlciB3ZSBoYXZlIHJlY2VpdmVkIHByb3BlciBkaW1lbnNpb25zIGZyb20gb2JzZXJ2ZURpbWVuc2lvbnNcbiAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgIC4uLih3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHZpZXdTdGF0ZSA6IHJlc3RWaWV3U3RhdGUpLFxuICAgICAgICAvLyBlbmFibGluZyB0cmFuc2l0aW9uIGluIHR3byBtYXBzIG1heSBsZWFkIHRvIGVuZGxlc3MgdXBkYXRlIGxvb3BzXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogcHJpbWFyeSA/IFRSQU5TSVRJT05fRFVSQVRJT04gOiAwXG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UobmV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFeHBvcnQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKG5leHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIGluZGV4KTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIE1hcENvbXBvbmVudCxcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBpc0V4cG9ydCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJpbWFyeVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJzRm9yRGVjayA9IHRoaXMubGF5ZXJzRm9yRGVja1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCBtYXBQcm9wcyA9IHtcbiAgICAgICAgLi4ubWFwU3RhdGUsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGlzRWRpdCA9IChtYXBDb250cm9scy5tYXBEcmF3IHx8IHt9KS5hY3RpdmU7XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGwuaWQgPT09IEdFT0NPREVSX0xBWUVSX0lEKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuICAgICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IHRoaXMuX21vdXNlUG9zaXRpb247XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPE1hcENvbnRyb2xcbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXM9e09iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyl9XG4gICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgIHByaW1hcnk9e3ByaW1hcnl9XG4gICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleH1cbiAgICAgICAgICAgIG1hcENvbnRyb2xzPXttYXBDb250cm9sc31cbiAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgc2NhbGU9e21hcFN0YXRlLnNjYWxlIHx8IDF9XG4gICAgICAgICAgICB0b3A9e2ludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgPyA1MiA6IDB9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2w9e3RoaXMuX3RvZ2dsZU1hcENvbnRyb2x9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8TWFwQ29tcG9uZW50XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBrZXk9XCJib3R0b21cIlxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBib3hNYXB9XG4gICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGUuYm90dG9tTWFwU3R5bGV9XG4gICAgICAgICAgICBnZXRDdXJzb3I9e3RoaXMucHJvcHMuaG92ZXJJbmZvID8gKCkgPT4gJ3BvaW50ZXInIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgb25Nb3VzZU1vdmU9e2V2dCA9PiB7XG4gICAgICAgICAgICAgIC8vIFNlbmRpbmcgbW91c2UgbW92ZSB1cGRhdGVzIHZpYSBSZWR1eCBpcyBleHBlbnNpdmUuIFN0b3JlXG4gICAgICAgICAgICAgIC8vIGxvY2FsbHkgYW5kIHJlbHkgb24gZGVjay5nbCB0byBkcml2ZSByZW5kZXIgdXBkYXRlc1xuICAgICAgICAgICAgICAvLyBTZWUgQnVpbGRlcjogZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9NYXBDb250YWluZXIvTWFwQ29udGFpbmVyLnRzeFxuICAgICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmN1cnJlbnQgPSB7bW91c2VQb3NpdGlvbjogZXZ0LnBvaW50fTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge1BFUkZfREVCVUcgJiYgcmVuZGVyUGVyZm9ybWFuY2VTdGF0cygpfVxuICAgICAgICAgICAge3RoaXMuX3JlbmRlckRlY2tPdmVybGF5KGxheWVyc0ZvckRlY2spfVxuICAgICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgICA8RWRpdG9yXG4gICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVycyh0aGlzLnByb3BzKX1cbiAgICAgICAgICAgICAgaXNFbmFibGVkPXtpc0VkaXR9XG4gICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICAgIG9uRGVsZXRlRmVhdHVyZT17dmlzU3RhdGVBY3Rpb25zLmRlbGV0ZUZlYXR1cmV9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICBvblVwZGF0ZT17dmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBvblRvZ2dsZVBvbHlnb25GaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyTGF5ZXJ9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNFZGl0ID8gJ2FsbCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTWFwQ29tcG9uZW50PlxuICAgICAgICAgIHttYXBTdHlsZS50b3BNYXBTdHlsZSB8fCBoYXNHZW9jb2RlckxheWVyID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17TUFQX1NUWUxFLnRvcH0+XG4gICAgICAgICAgICAgIDxNYXBDb21wb25lbnQgey4uLm1hcFByb3BzfSBrZXk9XCJ0b3BcIiBtYXBTdHlsZT17bWFwU3R5bGUudG9wTWFwU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheSh7W0dFT0NPREVSX0xBWUVSX0lEXTogdHJ1ZX0pfVxuICAgICAgICAgICAgICA8L01hcENvbXBvbmVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKGxheWVyc1RvUmVuZGVyKX1cbiAgICAgICAgICB7IWlzU3BsaXQgfHwgaW5kZXggPT09IDEgPyA8QXR0cmlidXRpb24gLz4gOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge21hcFN0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29udGV4dExvc3QgPSB0aGlzLnN0YXRlPy5jb250ZXh0TG9zdDtcblxuICAgICAgaWYgKGNvbnRleHRMb3N0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwQ29udGFpbmVyIHJlZj17dGhpcy5fcmVmfSBzdHlsZT17TUFQX1NUWUxFLmNvbnRhaW5lcn0gZ2xvYmU9e21hcFN0YXRlLmdsb2JlfT5cbiAgICAgICAgICB7bWFwU3R5bGUuYm90dG9tTWFwU3R5bGUgJiYgdGhpcy5fcmVuZGVyTWFwKCl9XG4gICAgICAgIDwvU3R5bGVkTWFwQ29udGFpbmVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBNYXBDb250YWluZXIuZGlzcGxheU5hbWUgPSAnTWFwQ29udGFpbmVyJztcblxuICByZXR1cm4gTWFwQ29udGFpbmVyO1xufVxuIl19
|