mage-engine 3.14.0 → 3.15.1
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/README.md +9 -5
- package/dist/mage.js +135 -32
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
# Mage
|
|
2
2
|
|
|
3
|
-

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
7
8
|
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
Mage is a game engine built on top of THREEJS. It features all you need to create fully interactive 3D application that can be distributed via web, desktop or mobile.
|
|
11
12
|
|
|
12
|
-
[Documentation](https://
|
|
13
|
+
[Documentation](https://www.mage.studio/docs)
|
|
14
|
+
|
|
15
|
+
## Development
|
|
16
|
+
The engine is under heavy development. The best way to stay up to date with changes, new features and bug fixes is to [join the Discord server](https://discord.gg/NR5ZDGFG5j).
|
|
13
17
|
|
|
14
18
|
---
|
|
15
19
|
|
package/dist/mage.js
CHANGED
|
@@ -54270,7 +54270,9 @@ function () {
|
|
|
54270
54270
|
near: 0.1,
|
|
54271
54271
|
far: 100
|
|
54272
54272
|
},
|
|
54273
|
-
ui: {
|
|
54273
|
+
ui: {
|
|
54274
|
+
enabled: true
|
|
54275
|
+
}
|
|
54274
54276
|
};
|
|
54275
54277
|
this.isDefault = true;
|
|
54276
54278
|
}
|
|
@@ -54764,21 +54766,17 @@ function () {
|
|
|
54764
54766
|
});
|
|
54765
54767
|
|
|
54766
54768
|
_defineProperty(this, "onResize", function () {
|
|
54767
|
-
var _Config$screen = Config$1.screen(),
|
|
54768
|
-
h = _Config$screen.h,
|
|
54769
|
-
w = _Config$screen.w,
|
|
54770
|
-
ratio = _Config$screen.ratio;
|
|
54771
|
-
|
|
54772
54769
|
if (!_this.camera || !_this.renderer) return;
|
|
54773
|
-
_this.camera.getBody().aspect = ratio;
|
|
54774
54770
|
|
|
54775
|
-
|
|
54771
|
+
var _Config$screen = Config$1.screen(),
|
|
54772
|
+
h = _Config$screen.h,
|
|
54773
|
+
w = _Config$screen.w;
|
|
54776
54774
|
|
|
54777
|
-
_this.
|
|
54775
|
+
_this.resize(w, h);
|
|
54778
54776
|
});
|
|
54779
54777
|
|
|
54780
54778
|
_defineProperty(this, "render", function () {
|
|
54781
|
-
_this.renderer.setClearColor(_this.clearColor);
|
|
54779
|
+
_this.renderer.setClearColor(_this.clearColor, _this.alpha);
|
|
54782
54780
|
|
|
54783
54781
|
_this.renderer.clear();
|
|
54784
54782
|
|
|
@@ -54790,6 +54788,7 @@ function () {
|
|
|
54790
54788
|
this.clock = new Clock();
|
|
54791
54789
|
this.rendererElements = {};
|
|
54792
54790
|
this.clearColor = 0x000000;
|
|
54791
|
+
this.alpha = 1.0;
|
|
54793
54792
|
this.shadowType = SHADOW_TYPES[DEFAULT_SHADOWTYPE];
|
|
54794
54793
|
}
|
|
54795
54794
|
|
|
@@ -54842,9 +54841,12 @@ function () {
|
|
|
54842
54841
|
}, {
|
|
54843
54842
|
key: "setClearColor",
|
|
54844
54843
|
value: function setClearColor(value) {
|
|
54844
|
+
var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.0;
|
|
54845
|
+
|
|
54845
54846
|
if (this.renderer) {
|
|
54846
54847
|
this.clearColor = value;
|
|
54847
|
-
this.
|
|
54848
|
+
this.alpha = alpha;
|
|
54849
|
+
this.renderer.setClearColor(value, alpha);
|
|
54848
54850
|
}
|
|
54849
54851
|
}
|
|
54850
54852
|
}, {
|
|
@@ -54951,14 +54953,17 @@ function () {
|
|
|
54951
54953
|
shadows = _Config$lights.shadows;
|
|
54952
54954
|
|
|
54953
54955
|
var _Config$screen3 = Config$1.screen(),
|
|
54954
|
-
alpha = _Config$screen3.alpha,
|
|
54956
|
+
_Config$screen3$alpha = _Config$screen3.alpha,
|
|
54957
|
+
alpha = _Config$screen3$alpha === void 0 ? true : _Config$screen3$alpha,
|
|
54958
|
+
_Config$screen3$antia = _Config$screen3.antialias,
|
|
54959
|
+
antialias = _Config$screen3$antia === void 0 ? true : _Config$screen3$antia,
|
|
54955
54960
|
w = _Config$screen3.w,
|
|
54956
54961
|
h = _Config$screen3.h;
|
|
54957
54962
|
|
|
54958
54963
|
var container = Config$1.container();
|
|
54959
54964
|
this.renderer = new WebGLRenderer({
|
|
54960
54965
|
alpha: alpha,
|
|
54961
|
-
antialias:
|
|
54966
|
+
antialias: antialias
|
|
54962
54967
|
});
|
|
54963
54968
|
|
|
54964
54969
|
if (shadows) {
|
|
@@ -54984,6 +54989,15 @@ function () {
|
|
|
54984
54989
|
this.renderer.toneMapping = toneMapping;
|
|
54985
54990
|
this.renderer.toneMappingExposure = toneMappingExposure;
|
|
54986
54991
|
}
|
|
54992
|
+
}, {
|
|
54993
|
+
key: "resize",
|
|
54994
|
+
value: function resize(width, height) {
|
|
54995
|
+
if (!width || !height) return;
|
|
54996
|
+
var ratio = width / height;
|
|
54997
|
+
this.camera.getBody().aspect = ratio;
|
|
54998
|
+
this.camera.getBody().updateProjectionMatrix();
|
|
54999
|
+
this.renderer.setSize(width, height);
|
|
55000
|
+
}
|
|
54987
55001
|
}, {
|
|
54988
55002
|
key: "setFog",
|
|
54989
55003
|
value: function setFog(color, density) {
|
|
@@ -56140,7 +56154,7 @@ function applyMiddleware() {
|
|
|
56140
56154
|
|
|
56141
56155
|
var thunk = createThunkMiddleware();
|
|
56142
56156
|
thunk.withExtraArgument = createThunkMiddleware;var name = "mage-engine";
|
|
56143
|
-
var version = "3.
|
|
56157
|
+
var version = "3.15.1";
|
|
56144
56158
|
var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
|
|
56145
56159
|
var main = "dist/mage.js";
|
|
56146
56160
|
var author = {
|
|
@@ -57505,7 +57519,7 @@ function isNodeJS() {
|
|
|
57505
57519
|
return createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg);
|
|
57506
57520
|
}
|
|
57507
57521
|
return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);
|
|
57508
|
-
}var WorkerFactory = createBase64WorkerFactory$2('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CgogICAgdmFyIFBIWVNJQ1NfRVZFTlRTID0gewogICAgICBESVNQQVRDSDogJ3BoeXNpY3M6ZGlzcGF0Y2gnLAogICAgICBURVJNSU5BVEU6ICdwaHlzaWNzOnRlcm1pbmF0ZScsCiAgICAgIExPQUQ6IHsKICAgICAgICBBTU1POiAncGh5c2ljczpsb2FkOmFtbW8nCiAgICAgIH0sCiAgICAgIFJFQURZOiAncGh5c2ljczpyZWFkeScsCiAgICAgIElOSVQ6ICdwaHlzaWNzOmluaXQnLAogICAgICBVUERBVEU6ICdwaHlzaWNzOnVwZGF0ZScsCiAgICAgIEFERDogewogICAgICAgIEJPWDogJ3BoeXNpY3M6YWRkOmJveCcsCiAgICAgICAgVkVISUNMRTogJ3BoeXNpY3M6YWRkOnZlaGljbGUnLAogICAgICAgIE1PREVMOiAncGh5c2ljczphZGQ6bW9kZWwnLAogICAgICAgIFBMQVlFUjogJ3BoeXNpY3M6YWRkOnBsYXllcicsCiAgICAgICAgU1BIRVJFOiAncGh5c2ljczphZGQ6c3BoZXJlJwogICAgICB9LAogICAgICBFTEVNRU5UOiB7CiAgICAgICAgRElTUE9TRTogJ3BoeXNpY3M6ZWxlbWVudDpkaXNwb3NlJywKICAgICAgICBDT0xMSVNJT046ICdwaHlzaWNzOmVsZW1lbnQ6Y29sbGlzaW9uJywKICAgICAgICBVUERBVEU6ICdwaHlzaWNzOmVsZW1lbnQ6dXBkYXRlJywKICAgICAgICBTRVQ6IHsKICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpwb3NpdGlvbicsCiAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpxdWF0ZXJuaW9uJywKICAgICAgICAgIExJTkVBUl9WRUxPQ0lUWTogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6bGluZWFyX3ZlbG9jaXR5JwogICAgICAgIH0sCiAgICAgICAgQVBQTFk6IHsKICAgICAgICAgIElNUFVMU0U6ICdwaHlzaWNzOmVsZW1lbnQ6YXBwbHk6aW1wdWxzZScKICAgICAgICB9CiAgICAgIH0sCiAgICAgIFZFSElDTEU6IHsKICAgICAgICBTRVQ6IHsKICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpwb3NpdGlvbicsCiAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpxdWF0ZXJuaW9uJwogICAgICAgIH0sCiAgICAgICAgUkVTRVQ6ICdwaHlzaWNzOnZlaGljbGU6cmVzZXQnLAogICAgICAgIFNQRUVEOiAncGh5c2ljczp2ZWhpY2xlOnNwZWVkJywKICAgICAgICBESVJFQ1RJT046ICdwaHlzaWNzOnZlaGljbGU6ZGlyZWN0aW9uJwogICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsKICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOwogICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsKICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7CiAgICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOwogICAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7CiAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKICAgIH0KCiAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgaW4gb2JqKSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7CiAgICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvYmpba2V5XSA9IHZhbHVlOwogICAgICB9CgogICAgICByZXR1cm4gb2JqOwogICAgfQoKICAgIGZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgewogICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7CgogICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgewogICAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOwogICAgICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsKICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOwogICAgICAgIH0pOwogICAgICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGtleXM7CiAgICB9CgogICAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307CgogICAgICAgIGlmIChpICUgMikgewogICAgICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIHZhciBEaXNwYXRjaGVyID0gZnVuY3Rpb24gRGlzcGF0Y2hlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERpc3BhdGNoZXIpOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kUGh5c2ljc1VwZGF0ZSIsIGZ1bmN0aW9uIChkdCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuVVBEQVRFLAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kUmVhZHlFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZCiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kVGVybWluYXRlRXZlbnQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5URVJNSU5BVEUKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRCb2R5VXBkYXRlIiwgZnVuY3Rpb24gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFLAogICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgIHBvc2l0aW9uOiB7CiAgICAgICAgICAgIHg6IHBvc2l0aW9uLngoKSwKICAgICAgICAgICAgeTogcG9zaXRpb24ueSgpLAogICAgICAgICAgICB6OiBwb3NpdGlvbi56KCkKICAgICAgICAgIH0sCiAgICAgICAgICBxdWF0ZXJuaW9uOiB7CiAgICAgICAgICAgIHg6IHJvdGF0aW9uLngoKSwKICAgICAgICAgICAgeTogcm90YXRpb24ueSgpLAogICAgICAgICAgICB6OiByb3RhdGlvbi56KCksCiAgICAgICAgICAgIHc6IHJvdGF0aW9uLncoKQogICAgICAgICAgfSwKICAgICAgICAgIGR0OiBkdAogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZERpc3BhdGNoRXZlbnQiLCBmdW5jdGlvbiAodXVpZCwgZXZlbnROYW1lLCBldmVudERhdGEpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkRJU1BBVENILAogICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAogICAgICAgICAgZXZlbnREYXRhOiBldmVudERhdGEKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGRpc3BhdGNoZXIkMSA9IG5ldyBEaXNwYXRjaGVyKCk7CgogICAgdmFyIGFwcGx5TWF0cml4NFRvVmVjdG9yMyA9IGZ1bmN0aW9uIGFwcGx5TWF0cml4NFRvVmVjdG9yMyhfcmVmKSB7CiAgICAgIHZhciBfcmVmJHggPSBfcmVmLngsCiAgICAgICAgICB4ID0gX3JlZiR4ID09PSB2b2lkIDAgPyAwIDogX3JlZiR4LAogICAgICAgICAgX3JlZiR5ID0gX3JlZi55LAogICAgICAgICAgeSA9IF9yZWYkeSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkeSwKICAgICAgICAgIF9yZWYkeiA9IF9yZWYueiwKICAgICAgICAgIHogPSBfcmVmJHogPT09IHZvaWQgMCA/IDAgOiBfcmVmJHo7CiAgICAgIHZhciBtYXRyaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICB2YXIgdyA9IDEgLyAobWF0cml4WzNdICogeCArIG1hdHJpeFs3XSAqIHkgKyBtYXRyaXhbMTFdICogeiArIG1hdHJpeFsxNV0pOwogICAgICByZXR1cm4gewogICAgICAgIHg6IChtYXRyaXhbMF0gKiB4ICsgbWF0cml4WzRdICogeSArIG1hdHJpeFs4XSAqIHogKyBtYXRyaXhbMTJdKSAqIHcsCiAgICAgICAgeTogKG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbNV0gKiB5ICsgbWF0cml4WzldICogeiArIG1hdHJpeFsxM10pICogdywKICAgICAgICB6OiAobWF0cml4WzJdICogeCArIG1hdHJpeFs2XSAqIHkgKyBtYXRyaXhbMTBdICogeiArIG1hdHJpeFsxNF0pICogdwogICAgICB9OwogICAgfTsKCiAgICB2YXIgY3JlYXRlUmlnaWRCb2R5ID0gZnVuY3Rpb24gY3JlYXRlUmlnaWRCb2R5KHNoYXBlLCBvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IG9wdGlvbnMucXVhdGVybmlvbiwKICAgICAgICAgIG1hc3MgPSBvcHRpb25zLm1hc3MsCiAgICAgICAgICBmcmljdGlvbiA9IG9wdGlvbnMuZnJpY3Rpb24sCiAgICAgICAgICBfb3B0aW9ucyRyZXN0aXR1dGlvbiA9IG9wdGlvbnMucmVzdGl0dXRpb24sCiAgICAgICAgICByZXN0aXR1dGlvbiA9IF9vcHRpb25zJHJlc3RpdHV0aW9uID09PSB2b2lkIDAgPyAuOSA6IF9vcHRpb25zJHJlc3RpdHV0aW9uLAogICAgICAgICAgX29wdGlvbnMkZGFtcGluZyA9IG9wdGlvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfb3B0aW9ucyRkYW1waW5nID09PSB2b2lkIDAgPyB7CiAgICAgICAgbGluZWFyOiAwLjIsCiAgICAgICAgYW5ndWxhcjogMC4yCiAgICAgIH0gOiBfb3B0aW9ucyRkYW1waW5nOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTsKICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTsKICAgICAgc2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciByYkluZm8gPSBuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIHNoYXBlLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7CgogICAgICBpZiAobWFzcyA+IDApIHsKICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTsKICAgICAgICBib2R5LnNldFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKTsKICAgICAgICBib2R5LnNldERhbXBpbmcoZGFtcGluZy5saW5lYXIsIGRhbXBpbmcuYW5ndWxhcik7CiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB9IC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZQoKCiAgICAgIGJvZHkudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgcmV0dXJuIGJvZHk7CiAgICB9OwogICAgdmFyIGFkZE1vZGVsID0gZnVuY3Rpb24gYWRkTW9kZWwob3B0aW9ucykgewogICAgICB2YXIgdXVpZCA9IG9wdGlvbnMudXVpZCwKICAgICAgICAgIHZlcnRpY2VzID0gb3B0aW9ucy52ZXJ0aWNlcywKICAgICAgICAgIG1hdHJpY2VzID0gb3B0aW9ucy5tYXRyaWNlcywKICAgICAgICAgIGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXMsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgX29wdGlvbnMkbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIG1hc3MgPSBfb3B0aW9ucyRtYXNzID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkbWFzcywKICAgICAgICAgIF9vcHRpb25zJGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX29wdGlvbnMkZnJpY3Rpb24gPT09IHZvaWQgMCA/IDIgOiBfb3B0aW9ucyRmcmljdGlvbjsKICAgICAgdmFyIHNjYWxlID0gREVGQVVMVF9TQ0FMRTsKICAgICAgdmFyIGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgYnRiID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGMgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTsKICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7CiAgICAgICAgdmFyIG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pOwoKICAgICAgICBpZiAoaW5kZXgpIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kZXgubGVuZ3RoOyBqICs9IDMpIHsKICAgICAgICAgICAgdmFyIGFpID0gaW5kZXhbal0gKiAzOwogICAgICAgICAgICB2YXIgYmkgPSBpbmRleFtqICsgMV0gKiAzOwogICAgICAgICAgICB2YXIgY2kgPSBpbmRleFtqICsgMl0gKiAzOwogICAgICAgICAgICB2YXIgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYWldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2FpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2JpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2JpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tiaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIHZhciB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tjaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tjaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbY2kgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7CiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTsKICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopOwogICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBfaiArPSA5KSB7CiAgICAgICAgICAgIHZhciBfdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAwXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgM10sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDRdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA1XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgdmFyIF92YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDZdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyA3XSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgOF0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZShfdmEueCwgX3ZhLnksIF92YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKF92Yi54LCBfdmIueSwgX3ZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUoX3ZjLngsIF92Yy55LCBfdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGxvY2FsU2NhbGUgPSBuZXcgQW1tby5idFZlY3RvcjMoc2NhbGUueCwgc2NhbGUueSwgc2NhbGUueik7CiAgICAgIHRyaU1lc2guc2V0U2NhbGluZyhsb2NhbFNjYWxlKTsKICAgICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpOwogICAgICB2YXIgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpOwogICAgICBjb2xsaXNpb25TaGFwZS5yZXNvdXJjZXMgPSBbdHJpTWVzaF07CiAgICAgIEFtbW8uZGVzdHJveShidGEpOwogICAgICBBbW1vLmRlc3Ryb3koYnRiKTsKICAgICAgQW1tby5kZXN0cm95KGJ0Yyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNvbGxpc2lvblNoYXBlLCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLk1FU0gsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBhZGRCb3ggPSBmdW5jdGlvbiBhZGRCb3goZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIGxlbmd0aCA9IGRhdGEubGVuZ3RoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgX2RhdGEkbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzID09PSB2b2lkIDAgPyAwIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24gPT09IHZvaWQgMCA/IDIgOiBfZGF0YSRmcmljdGlvbjsKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAwLjUsIGhlaWdodCAqIDAuNSwgbGVuZ3RoICogMC41KSk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLkJPWCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZFNwaGVyZSA9IGZ1bmN0aW9uIGFkZFNwaGVyZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcmFkaXVzID0gZGF0YS5yYWRpdXMsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgX2RhdGEkbWFzczIgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzczIgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzMiwKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uMiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uMiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uMjsKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5TUEhFUkUsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBzZXRMaW5lYXJWZWxvY2l0eSA9IGZ1bmN0aW9uIHNldExpbmVhclZlbG9jaXR5KGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBfZGF0YSR2ZWxvY2l0eSA9IGRhdGEudmVsb2NpdHksCiAgICAgICAgICB2ZWxvY2l0eSA9IF9kYXRhJHZlbG9jaXR5ID09PSB2b2lkIDAgPyBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSA6IF9kYXRhJHZlbG9jaXR5OwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudC5ib2R5OwoKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIGxpbmVhclZlbG9jaXR5ID0gbmV3IEFtbW8uYnRWZWN0b3IzKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9jaXR5LnopOwogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgc2V0UG9zaXRpb24gPSBmdW5jdGlvbiBzZXRQb3NpdGlvbihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uOwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50MiA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQyLmJvZHk7CgogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgIH07CiAgICB2YXIgYXBwbHlJbXB1c2UgPSBmdW5jdGlvbiBhcHBseUltcHVzZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgX2RhdGEkaW1wdWxzZSA9IGRhdGEuaW1wdWxzZSwKICAgICAgICAgIGltcHVsc2UgPSBfZGF0YSRpbXB1bHNlID09PSB2b2lkIDAgPyBERUZBVUxUX0lNUFVMU0UgOiBfZGF0YSRpbXB1bHNlOwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50MyA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQzLmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgaW1wdWxzZVZlY3RvciA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhpbXB1bHNlLngsIGltcHVsc2UueSwgaW1wdWxzZS56KTsKICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7CiAgICAgICAgQW1tby5kZXN0cm95KGltcHVsc2VWZWN0b3IpOwogICAgICB9CiAgICB9OwogICAgdmFyIGhhbmRsZVJpZ2lkYm9keVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVJpZ2lkYm9keVVwZGF0ZShfcmVmLCBkdCkgewogICAgICB2YXIgYm9keSA9IF9yZWYuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZFBsYXllciA9IGZ1bmN0aW9uIGFkZFBsYXllcihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbjsKICAgICAgdmFyIGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7IC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnMKCiAgICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuUExBWUVSLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlUGxheWVyVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUGxheWVyVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA6IF9yZWYkc3RhdGU7CiAgICAgIHZhciBtb3ZlbWVudCA9IHN0YXRlLm1vdmVtZW50LAogICAgICAgICAgZGlyZWN0aW9uID0gc3RhdGUuZGlyZWN0aW9uLAogICAgICAgICAgY2FtZXJhRGlyZWN0aW9uID0gc3RhdGUuY2FtZXJhRGlyZWN0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IHN0YXRlLnF1YXRlcm5pb24sCiAgICAgICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB2YXIgTUFYX1NQRUVEID0gMTsKICAgICAgdmFyIHdhbGtWZWxvY2l0eSA9IC4xOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICB2YXIgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTsKICAgICAgICB2YXIgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTsKICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpOwogICAgICAgIHZhciB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApOwogICAgICAgIHZhciB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDsKCiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7CiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTsKICAgICAgICB9CgogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgQ2xvY2sgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBDbG9jaygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xvY2spOwoKICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhDbG9jaywgW3sKICAgICAgICBrZXk6ICJnZXREZWx0YSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlbHRhKCkgewogICAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIGlmICh0aGlzLnRpbWVzdGFtcCkgewogICAgICAgICAgICB2YXIgZGVsdGEgPSB0aW1lIC0gdGhpcy50aW1lc3RhbXA7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBDbG9jazsKICAgIH0oKTsKCiAgICB2YXIgV29ybGQgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBXb3JsZCgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ybGQpOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImluaXQiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgdmFyIF9vcHRpb25zJGdyYXZpdHkgPSBvcHRpb25zLmdyYXZpdHksCiAgICAgICAgICAgICAgZ3Jhdml0eSA9IF9vcHRpb25zJGdyYXZpdHkgPT09IHZvaWQgMCA/IEdSQVZJVFkgOiBfb3B0aW9ucyRncmF2aXR5OwogICAgICAgICAgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgIF90aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIoX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBfdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpOwogICAgICAgICAgX3RoaXMuc29sdmVyID0gbmV3IEFtbW8uYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIoKTsKICAgICAgICAgIF90aGlzLmFtbW9Xb3JsZCA9IG5ldyBBbW1vLmJ0RGlzY3JldGVEeW5hbWljc1dvcmxkKF90aGlzLmRpc3BhdGNoZXIsIF90aGlzLmJyb2FkcGhhc2UsIF90aGlzLnNvbHZlciwgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CgogICAgICAgICAgX3RoaXMuYW1tb1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTsKCiAgICAgICAgICBfdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZpbHRlcihmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZDsKICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgZGVsZXRlIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGFzRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImlzSW5pdGlhbGlzZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuaW5pdGlhbGlzZWQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0QW1tb1dvcmxkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmFtbW9Xb3JsZDsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRSaWdpZEJvZHkiLCBmdW5jdGlvbiAoYm9keSkgewogICAgICAgICAgX3RoaXMuYW1tb1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRBY3Rpb24iLCBmdW5jdGlvbiAoYWN0aW9uKSB7CiAgICAgICAgICBfdGhpcy5hbW1vV29ybGQuYWRkQWN0aW9uKGFjdGlvbik7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3RlcFNpbXVsYXRpb24iLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgIF90aGlzLmFtbW9Xb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2ltdWxhdGUiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZHQgPSBfdGhpcy5jbG9jay5nZXREZWx0YSgpOwoKICAgICAgICAgIF90aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTsKCiAgICAgICAgICBPYmplY3Qua2V5cyhfdGhpcy5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICB2YXIgZWxlbWVudCA9IF90aGlzLmdldEVsZW1lbnQodXVpZCk7CgogICAgICAgICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLkJPWDoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuU1BIRVJFOgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5NRVNIOgogICAgICAgICAgICAgICAgICBoYW5kbGVSaWdpZGJvZHlVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlBMQVlFUjoKICAgICAgICAgICAgICAgICAgaGFuZGxlUGxheWVyVXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5WRUhJQ0xFOgogICAgICAgICAgICAgICAgICBoYW5kbGVWZWhpY2xlVXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBfdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7CgogICAgICAgICAgX3RoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7CgogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRQaHlzaWNzVXBkYXRlKGR0KTsKICAgICAgICAgIF90aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnNpbXVsYXRlLmJpbmQoX3RoaXMpKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJjYWxjdWxhdGVDb2xsaXNpb25zIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGFtbW9EaXNwYXRjaGVyID0gX3RoaXMuYW1tb1dvcmxkLmdldERpc3BhdGNoZXIoKTsKCiAgICAgICAgICB2YXIgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykgewogICAgICAgICAgICB2YXIgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7CiAgICAgICAgICAgIHZhciByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7IC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkcwoKICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY29udGFjdHMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykgewogICAgICAgICAgICAgIHZhciBjb250YWN0UG9pbnQgPSBjb250YWN0TWFuaWZvbGQuZ2V0Q29udGFjdFBvaW50KGopOwogICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbnRhY3RQb2ludC5nZXREaXN0YW5jZSgpOwogICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDAuMCkgY29udGludWU7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpOwogICAgICAgICAgICAgIGNvbnRhY3RzLnB1c2goewogICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAogICAgICAgICAgICAgICAgZWxlbWVudHM6IFt7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMC51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MwLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMS51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MxLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOyAvLyBBbW1vLmRlc3Ryb3kocmIwKTsKICAgICAgICAgICAgLy8gQW1tby5kZXN0cm95KHJiMSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2V0Qm9keSIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICBfdGhpcy5lbGVtZW50c1tkYXRhLnV1aWRdID0gZGF0YTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJ1cGRhdGVCb2R5U3RhdGUiLCBmdW5jdGlvbiAodXVpZCwgc3RhdGUpIHsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0gX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlLCB7fSwgc3RhdGUpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInRlcm1pbmF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5hbW1vV29ybGQpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLnNvbHZlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuZGlzcGF0Y2hlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7CiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFRlcm1pbmF0ZUV2ZW50KCk7CiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuZWxlbWVudHMgPSB7fTsKICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmJyb2FkcGhhc2UgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5hbW1vV29ybGQgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IG51bGw7CiAgICAgICAgdGhpcy5jbG9jayA9IG5ldyBDbG9jaygpOwogICAgICB9CgogICAgICBfY3JlYXRlQ2xhc3MoV29ybGQsIFt7CiAgICAgICAga2V5OiAiZGlzcG9zZUJvZHkiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlQm9keSh1dWlkKSB7CiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTsKICAgICAgICAgIHRoaXMuYW1tb1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpOwogICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHV1aWQpOwogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIFdvcmxkOwogICAgfSgpOwogICAgdmFyIHdvcmxkID0gbmV3IFdvcmxkKCk7CgogICAgdmFyIERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgPSAwLjI7CiAgICB2YXIgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7CiAgICB2YXIgREVGQVVMVF9NQVNTID0gODAwOwogICAgdmFyIGFkZFZlaGljbGUgPSBmdW5jdGlvbiBhZGRWZWhpY2xlKGRhdGEpIHsKICAgICAgdmFyIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2hlZWxzID0gZGF0YS53aGVlbHMsCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFTUyA6IF9kYXRhJG1hc3MsCiAgICAgICAgICBfZGF0YSR3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICB3aWR0aCA9IF9kYXRhJHdpZHRoID09PSB2b2lkIDAgPyAxLjggOiBfZGF0YSR3aWR0aCwKICAgICAgICAgIF9kYXRhJGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgaGVpZ2h0ID0gX2RhdGEkaGVpZ2h0ID09PSB2b2lkIDAgPyAuNiA6IF9kYXRhJGhlaWdodCwKICAgICAgICAgIF9kYXRhJGxlbmd0aCA9IGRhdGEubGVuZ3RoLAogICAgICAgICAgbGVuZ3RoID0gX2RhdGEkbGVuZ3RoID09PSB2b2lkIDAgPyA0IDogX2RhdGEkbGVuZ3RoLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gREVGQVVMVF9GUklDVElPTiA6IF9kYXRhJGZyaWN0aW9uLAogICAgICAgICAgX2RhdGEkcm9sbEluZmx1ZW5jZSA9IGRhdGEucm9sbEluZmx1ZW5jZSwKICAgICAgICAgIHJvbGxJbmZsdWVuY2UgPSBfZGF0YSRyb2xsSW5mbHVlbmNlID09PSB2b2lkIDAgPyBERUZBVUxUX1JPTExfSU5GTFVFTkNFIDogX2RhdGEkcm9sbEluZmx1ZW5jZSwKICAgICAgICAgIF9kYXRhJHdoZWVsc09wdGlvbnMgPSBkYXRhLndoZWVsc09wdGlvbnMsCiAgICAgICAgICB3aGVlbHNPcHRpb25zID0gX2RhdGEkd2hlZWxzT3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfZGF0YSR3aGVlbHNPcHRpb25zLAogICAgICAgICAgX2RhdGEkc3VzcGVuc2lvbnMgPSBkYXRhLnN1c3BlbnNpb25zLAogICAgICAgICAgc3VzcGVuc2lvbnMgPSBfZGF0YSRzdXNwZW5zaW9ucyA9PT0gdm9pZCAwID8ge30gOiBfZGF0YSRzdXNwZW5zaW9uczsKICAgICAgdmFyIF93aGVlbHNPcHRpb25zJGJhY2sgPSB3aGVlbHNPcHRpb25zLmJhY2ssCiAgICAgICAgICBiYWNrID0gX3doZWVsc09wdGlvbnMkYmFjayA9PT0gdm9pZCAwID8ge30gOiBfd2hlZWxzT3B0aW9ucyRiYWNrLAogICAgICAgICAgX3doZWVsc09wdGlvbnMkZnJvbnQgPSB3aGVlbHNPcHRpb25zLmZyb250LAogICAgICAgICAgZnJvbnQgPSBfd2hlZWxzT3B0aW9ucyRmcm9udCA9PT0gdm9pZCAwID8ge30gOiBfd2hlZWxzT3B0aW9ucyRmcm9udDsKICAgICAgdmFyIF9iYWNrJGF4aXNQb3NpdGlvbiA9IGJhY2suYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uQmFjayA9IF9iYWNrJGF4aXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gLTEgOiBfYmFjayRheGlzUG9zaXRpb24sCiAgICAgICAgICBfYmFjayRyYWRpdXMgPSBiYWNrLnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzQmFjayA9IF9iYWNrJHJhZGl1cyA9PT0gdm9pZCAwID8gLjQgOiBfYmFjayRyYWRpdXMsCiAgICAgICAgICBfYmFjayRoYWxmVHJhY2sgPSBiYWNrLmhhbGZUcmFjaywKICAgICAgICAgIHdoZWVsSGFsZlRyYWNrQmFjayA9IF9iYWNrJGhhbGZUcmFjayA9PT0gdm9pZCAwID8gMSA6IF9iYWNrJGhhbGZUcmFjaywKICAgICAgICAgIF9iYWNrJGF4aXNIZWlnaHQgPSBiYWNrLmF4aXNIZWlnaHQsCiAgICAgICAgICB3aGVlbEF4aXNIZWlnaHRCYWNrID0gX2JhY2skYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfYmFjayRheGlzSGVpZ2h0OwogICAgICB2YXIgX2Zyb250JGF4aXNQb3NpdGlvbiA9IGZyb250LmF4aXNQb3NpdGlvbiwKICAgICAgICAgIGF4aXNQb3NpdGlvbkZyb250ID0gX2Zyb250JGF4aXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gMS43IDogX2Zyb250JGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9mcm9udCRyYWRpdXMgPSBmcm9udC5yYWRpdXMsCiAgICAgICAgICB3aGVlbFJhZGl1c0Zyb250ID0gX2Zyb250JHJhZGl1cyA9PT0gdm9pZCAwID8gLjQgOiBfZnJvbnQkcmFkaXVzLAogICAgICAgICAgX2Zyb250JGhhbGZUcmFjayA9IGZyb250LmhhbGZUcmFjaywKICAgICAgICAgIHdoZWVsSGFsZlRyYWNrRnJvbnQgPSBfZnJvbnQkaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2Zyb250JGhhbGZUcmFjaywKICAgICAgICAgIF9mcm9udCRheGlzSGVpZ2h0ID0gZnJvbnQuYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEZyb250ID0gX2Zyb250JGF4aXNIZWlnaHQgPT09IHZvaWQgMCA/IC4zIDogX2Zyb250JGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfc3VzcGVuc2lvbnMkc3RpZmZuZXMgPSBzdXNwZW5zaW9ucy5zdGlmZm5lc3MsCiAgICAgICAgICBzdGlmZm5lc3MgPSBfc3VzcGVuc2lvbnMkc3RpZmZuZXMgPT09IHZvaWQgMCA/IDIwLjAgOiBfc3VzcGVuc2lvbnMkc3RpZmZuZXMsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkZGFtcGluZyA9IHN1c3BlbnNpb25zLmRhbXBpbmcsCiAgICAgICAgICBkYW1waW5nID0gX3N1c3BlbnNpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IDIuMyA6IF9zdXNwZW5zaW9ucyRkYW1waW5nLAogICAgICAgICAgX3N1c3BlbnNpb25zJGNvbXByZXNzID0gc3VzcGVuc2lvbnMuY29tcHJlc3Npb24sCiAgICAgICAgICBjb21wcmVzc2lvbiA9IF9zdXNwZW5zaW9ucyRjb21wcmVzcyA9PT0gdm9pZCAwID8gNC40IDogX3N1c3BlbnNpb25zJGNvbXByZXNzLAogICAgICAgICAgX3N1c3BlbnNpb25zJHJlc3RMZW5nID0gc3VzcGVuc2lvbnMucmVzdExlbmd0aCwKICAgICAgICAgIHJlc3RMZW5ndGggPSBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPT09IHZvaWQgMCA/IDAuNiA6IF9zdXNwZW5zaW9ucyRyZXN0TGVuZzsgLy8gQ2hhc3NpcwoKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBnZW9tZXRyeS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTsKICAgICAgY2hhc3Npcy5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoY2hhc3Npcyk7IC8vIFJheWNhc3QgVmVoaWNsZQoKICAgICAgdmFyIHR1bmluZyA9IG5ldyBBbW1vLmJ0VmVoaWNsZVR1bmluZygpOwogICAgICB2YXIgcmF5Q2FzdGVyID0gbmV3IEFtbW8uYnREZWZhdWx0VmVoaWNsZVJheWNhc3Rlcih3b3JsZC5nZXRBbW1vV29ybGQoKSk7CiAgICAgIHZhciB2ZWhpY2xlID0gbmV3IEFtbW8uYnRSYXljYXN0VmVoaWNsZSh0dW5pbmcsIGNoYXNzaXMsIHJheUNhc3Rlcik7CiAgICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTsKICAgICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpOwogICAgICB2YXIgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApOwogICAgICB2YXIgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApOwoKICAgICAgdmFyIGFkZFdoZWVsID0gZnVuY3Rpb24gYWRkV2hlZWwoaXNGcm9udCwgcG9zLCByYWRpdXMpIHsKICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChwb3MsIHdoZWVsRGlyZWN0aW9uQ1MwLCB3aGVlbEF4bGVDUywgcmVzdExlbmd0aCwgcmFkaXVzLCB0dW5pbmcsIGlzRnJvbnQpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24oY29tcHJlc3Npb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpOwogICAgICB9OwoKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHR5cGU6IFRZUEVTLlZFSElDTEUsCiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLAogICAgICAgIHdoZWVsczogd2hlZWxzLAogICAgICAgIG9wdGlvbnM6IGRhdGEsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfVkVISUNMRV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0VmVoaWNsZVBvc2l0aW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUXVhdGVybmlvbiA9IGZ1bmN0aW9uIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHJlc2V0VmVoaWNsZSA9IGZ1bmN0aW9uIHJlc2V0VmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVZlaGljbGVVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIHZlaGljbGUgPSBfcmVmLnZlaGljbGUsCiAgICAgICAgICB3aGVlbHMgPSBfcmVmLndoZWVscywKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9WRUhJQ0xFX1NUQVRFIDogX3JlZiRzdGF0ZSwKICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucywKICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgewogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9KTsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLkRJUkVDVElPTiwgewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0KTsKICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTsKICAgIH07CgogICAgdmFyIGhhbmRsZUxvYWRFdmVudCA9IGZ1bmN0aW9uIGhhbmRsZUxvYWRFdmVudChvcHRpb25zKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoQW1tbykgewogICAgICAgIHNlbGYuQW1tbyA9IEFtbW87CgogICAgICAgIG9ubWVzc2FnZSA9IGZ1bmN0aW9uIG9ubWVzc2FnZShfcmVmKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTsKCiAgICAgICAgICBzd2l0Y2ggKGRhdGEuZXZlbnQpIHsKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOgogICAgICAgICAgICAgIGFkZEJveChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRToKICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOgogICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDoKICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjoKICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWToKICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046CiAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOgogICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjoKICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDoKICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRToKICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6CiAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEudXVpZCwgZGF0YS5zdGF0ZSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuRElTUE9TRToKICAgICAgICAgICAgICB3b3JsZC5kaXNwb3NlQm9keShkYXRhLnV1aWQpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5URVJNSU5BVEU6CiAgICAgICAgICAgICAgd29ybGQudGVybWluYXRlKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgd29ybGQuaW5pdChvcHRpb25zKTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFJlYWR5RXZlbnQoKTsKICAgICAgICB3b3JsZC5zaW11bGF0ZSgpOwogICAgICB9OwogICAgfTsKCiAgICB2YXIgbG9hZEFtbW8gPSBmdW5jdGlvbiBsb2FkQW1tbyhvcHRpb25zKSB7CiAgICAgIHZhciBzY3JpcHRVcmwgPSBvcHRpb25zLmhvc3QgKyAnLycgKyAob3B0aW9ucy5wYXRoIHx8IExJQlJBUllfTkFNRSk7CiAgICAgIGltcG9ydFNjcmlwdHMoc2NyaXB0VXJsKTsKICAgICAgQW1tbygpLnRoZW4oaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpKTsKICAgIH07CgogICAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKF9yZWYyKSB7CiAgICAgIHZhciBkYXRhID0gX3JlZjIuZGF0YTsKCiAgICAgIHN3aXRjaCAoZGF0YS5ldmVudCkgewogICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuTE9BRC5BTU1POgogICAgICAgICAgbG9hZEFtbW8oZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfTsKCn0oKSk7Cgo=', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3MvbWVzc2FnZXMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvZWxlbWVudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3BsYXllci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvd29ybGQuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3ZlaGljbGVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwOyIsImV4cG9ydCBjb25zdCBQSFlTSUNTX0VWRU5UUyA9IHtcbiAgICBESVNQQVRDSDogJ3BoeXNpY3M6ZGlzcGF0Y2gnLFxuICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJyxcbiAgICBMT0FEOiB7XG4gICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycsXG4gICAgfSxcbiAgICBSRUFEWTogJ3BoeXNpY3M6cmVhZHknLFxuICAgIElOSVQ6ICdwaHlzaWNzOmluaXQnLFxuICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJyxcbiAgICBcbiAgICBBREQ6IHtcbiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JyxcbiAgICAgICAgVkVISUNMRTogJ3BoeXNpY3M6YWRkOnZlaGljbGUnLFxuICAgICAgICBNT0RFTDogJ3BoeXNpY3M6YWRkOm1vZGVsJyxcbiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJyxcbiAgICAgICAgU1BIRVJFOiAncGh5c2ljczphZGQ6c3BoZXJlJyxcbiAgICB9LFxuXG4gICAgRUxFTUVOVDoge1xuICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLFxuICAgICAgICBDT0xMSVNJT046ICdwaHlzaWNzOmVsZW1lbnQ6Y29sbGlzaW9uJyxcbiAgICAgICAgVVBEQVRFOiAncGh5c2ljczplbGVtZW50OnVwZGF0ZScsXG5cbiAgICAgICAgU0VUOiB7XG4gICAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLFxuICAgICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsXG4gICAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eSdcbiAgICAgICAgfSxcblxuICAgICAgICBBUFBMWToge1xuICAgICAgICAgICAgSU1QVUxTRTogJ3BoeXNpY3M6ZWxlbWVudDphcHBseTppbXB1bHNlJ1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIFZFSElDTEU6IHtcbiAgICAgICAgU0VUOiB7XG4gICAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLFxuICAgICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbidcbiAgICAgICAgfSxcbiAgICAgICAgUkVTRVQ6ICdwaHlzaWNzOnZlaGljbGU6cmVzZXQnLFxuICAgICAgICBcbiAgICAgICAgU1BFRUQ6ICdwaHlzaWNzOnZlaGljbGU6c3BlZWQnLFxuICAgICAgICBESVJFQ1RJT046ICdwaHlzaWNzOnZlaGljbGU6ZGlyZWN0aW9uJ1xuICAgIH1cbn07IiwiaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi8uLi9tZXNzYWdlcyc7XG5cbmV4cG9ydCBjbGFzcyBEaXNwYXRjaGVyIHtcblxuICAgIHNlbmRQaHlzaWNzVXBkYXRlID0gZHQgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogUEhZU0lDU19FVkVOVFMuVVBEQVRFLCBkdCB9KVxuICAgIHNlbmRSZWFkeUV2ZW50ID0gKCkgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkgfSk7XG4gICAgc2VuZFRlcm1pbmF0ZUV2ZW50ID0gKCkgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFIH0pO1xuXG4gICAgc2VuZEJvZHlVcGRhdGUgPSAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngoKSwgeTogcG9zaXRpb24ueSgpLCB6OiBwb3NpdGlvbi56KCkgfSxcbiAgICAgICAgcXVhdGVybmlvbjogeyB4OiByb3RhdGlvbi54KCksIHk6IHJvdGF0aW9uLnkoKSwgejogcm90YXRpb24ueigpLCB3OiByb3RhdGlvbi53KCkgfSxcbiAgICAgICAgZHRcbiAgICB9KTtcblxuICAgIHNlbmREaXNwYXRjaEV2ZW50ID0gKHV1aWQsIGV2ZW50TmFtZSwgZXZlbnREYXRhKSA9PiBwb3N0TWVzc2FnZSh7XG4gICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5ESVNQQVRDSCxcbiAgICAgICAgdXVpZCxcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudERhdGFcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEaXNwYXRjaGVyKCk7IiwiZXhwb3J0IGNvbnN0IGFwcGx5TWF0cml4NFRvVmVjdG9yMyA9ICh7IHggPSAwLCB5ID0gMCwgeiA9IDAgfSwgbWF0cml4ID0gW10pID0+IHtcbiAgICBjb25zdCB3ID0gMSAvICggbWF0cml4WyAzIF0gKiB4ICsgbWF0cml4WyA3IF0gKiB5ICsgbWF0cml4WyAxMSBdICogeiArIG1hdHJpeFsgMTUgXSApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogKCBtYXRyaXhbIDAgXSAqIHggKyBtYXRyaXhbIDQgXSAqIHkgKyBtYXRyaXhbIDggXSAqIHogKyBtYXRyaXhbIDEyIF0gKSAqIHcsXG4gICAgICAgIHk6ICggbWF0cml4WyAxIF0gKiB4ICsgbWF0cml4WyA1IF0gKiB5ICsgbWF0cml4WyA5IF0gKiB6ICsgbWF0cml4WyAxMyBdICkgKiB3LFxuICAgICAgICB6OiAoIG1hdHJpeFsgMiBdICogeCArIG1hdHJpeFsgNiBdICogeSArIG1hdHJpeFsgMTAgXSAqIHogKyBtYXRyaXhbIDE0IF0gKSAqIHcsXG4gICAgfVxufTsiLCJpbXBvcnQgZGlzcGF0Y2hlciBmcm9tICcuL2xpYi9kaXNwYXRjaGVyJztcbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcblxuaW1wb3J0IHtcbiAgICBhcHBseU1hdHJpeDRUb1ZlY3RvcjNcbn0gZnJvbSAnLi9saWIvbWF0aCc7XG5cbmltcG9ydCB7XG4gICAgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUsXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9TQ0FMRSxcbiAgICBESVNBQkxFX0RFQUNUSVZBVElPTixcbiAgICBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSxcbiAgICBERUZBVUxUX0lNUFVMU0Vcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJpZ2lkQm9keSA9IChzaGFwZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdXVpZCxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIG1hc3MsXG4gICAgICAgIGZyaWN0aW9uLFxuICAgICAgICByZXN0aXR1dGlvbiA9IC45LFxuICAgICAgICBkYW1waW5nID0geyBsaW5lYXI6IDAuMiwgYW5ndWxhcjogMC4yIH1cbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIHNoYXBlLmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuXG4gICAgY29uc3QgcmJJbmZvID0gbmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBzaGFwZSwgbG9jYWxJbmVydGlhKTtcbiAgICBjb25zdCBib2R5ID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkocmJJbmZvKTtcblxuICAgIFxuXG4gICAgaWYgKG1hc3MgPiAwKSB7XG4gICAgICAgIGJvZHkuc2V0RnJpY3Rpb24oZnJpY3Rpb24pO1xuICAgICAgICBib2R5LnNldFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKTtcbiAgICAgICAgYm9keS5zZXREYW1waW5nKGRhbXBpbmcubGluZWFyLCBkYW1waW5nLmFuZ3VsYXIpO1xuICAgICAgICBib2R5LnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgfVxuXG4gICAgLy8gc3RvcmluZyB1dWlkIGZvciBmdXR1cmUgcmVmZXJlbmNlXG4gICAgYm9keS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcblxuICAgIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgY29uc3QgYWRkTW9kZWwgPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdXVpZCxcbiAgICAgICAgdmVydGljZXMsXG4gICAgICAgIG1hdHJpY2VzLFxuICAgICAgICBpbmRleGVzLFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgbWFzcyA9IDAsXG4gICAgICAgIGZyaWN0aW9uID0gMlxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NhbGUgPSBERUZBVUxUX1NDQUxFO1xuXG4gICAgY29uc3QgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7XG4gICAgY29uc3QgYnRiID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7XG4gICAgY29uc3QgYnRjID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7XG4gICAgY29uc3QgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldO1xuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7XG5cbiAgICAgICAgaWYgKGluZGV4KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4Lmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgICBjb25zdCBhaSA9IGluZGV4W2pdICogMztcbiAgICAgICAgICAgIGNvbnN0IGJpID0gaW5kZXhbaiArIDFdICogMztcbiAgICAgICAgICAgIGNvbnN0IGNpID0gaW5kZXhbaiArIDJdICogMztcblxuICAgICAgICAgICAgY29uc3QgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2FpXSwgeTogY29tcG9uZW50c1thaSArIDFdLCB6OiBjb21wb25lbnRzW2FpICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgIGNvbnN0IHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tiaV0sIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwgejogY29tcG9uZW50c1tiaSArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbY2ldLCB5OiBjb21wb25lbnRzW2NpICsgMV0sIHo6IGNvbXBvbmVudHNbY2kgKyAyXSB9LCBtYXRyaXgpO1xuXG4gICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7XG4gICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7XG4gICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7XG4gICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29tcG9uZW50cy5sZW5ndGg7IGogKz0gOSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tqICsgMF0sIHk6IGNvbXBvbmVudHNbaiArIDFdLCB6OiBjb21wb25lbnRzW2ogKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tqICsgM10sIHk6IGNvbXBvbmVudHNbaiArIDRdLCB6OiBjb21wb25lbnRzW2ogKyA1XSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tqICsgNl0sIHk6IGNvbXBvbmVudHNbaiArIDddLCB6OiBjb21wb25lbnRzW2ogKyA4XSB9LCBtYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopO1xuICAgICAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTtcbiAgICAgICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7XG4gICAgICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbFNjYWxlID0gbmV3IEFtbW8uYnRWZWN0b3IzKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopO1xuICAgIHRyaU1lc2guc2V0U2NhbGluZyhsb2NhbFNjYWxlKTtcbiAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7XG5cbiAgICBjb25zdCBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgY29sbGlzaW9uU2hhcGUucmVzb3VyY2VzID0gW3RyaU1lc2hdO1xuXG4gICAgQW1tby5kZXN0cm95KGJ0YSk7XG4gICAgQW1tby5kZXN0cm95KGJ0Yik7XG4gICAgQW1tby5kZXN0cm95KGJ0Yyk7XG5cbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNvbGxpc2lvblNoYXBlLCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuTUVTSCwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufVxuXG5leHBvcnQgY29uc3QgYWRkQm94ID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHdpZHRoLCBsZW5ndGgsIGhlaWdodCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MgPSAwLCBmcmljdGlvbiA9IDIgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogMC41LCBoZWlnaHQgKiAwLjUsIGxlbmd0aCAqIDAuNSkpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLkJPWCwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNwaGVyZSA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcmFkaXVzLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcyA9IDAsIGZyaWN0aW9uID0gMiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLlNQSEVSRSwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldExpbmVhclZlbG9jaXR5ID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHZlbG9jaXR5ID0gREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgfSA9IGRhdGE7XG4gICAgY29uc3QgeyBib2R5IH0gPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGxpbmVhclZlbG9jaXR5ID0gbmV3IEFtbW8uYnRWZWN0b3IzKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9jaXR5LnopO1xuICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTtcbiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UG9zaXRpb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHBvc2l0aW9uIH0gPSBkYXRhO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcblxuICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbn1cblxuZXhwb3J0IGNvbnN0IGFwcGx5SW1wdXNlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBpbXB1bHNlID0gREVGQVVMVF9JTVBVTFNFIH0gPSBkYXRhO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopO1xuICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7XG4gICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVSaWdpZGJvZHlVcGRhdGUgPSAoeyBib2R5LCB1dWlkLCBzdGF0ZSA9IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0sIGR0KSA9PiB7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBsZXQgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICBsZXQgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7XG4gICAgfVxufSIsImltcG9ydCB7IGNyZWF0ZVJpZ2lkQm9keSB9IGZyb20gJy4vZWxlbWVudHMnO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuXG5pbXBvcnQge1xuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBhZGRQbGF5ZXIgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgd2lkdGgsIGhlaWdodCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgY2Fwc3VsZSA9IG5ldyBBbW1vLmJ0Q2Fwc3VsZVNoYXBlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICAvLyBkaXNhYmxpaW5nIHJvdGF0aW9uIGZvciBjb2xsaXNpb25zXG4gICAgYm9keS5zZXRBbmd1bGFyRmFjdG9yKDApO1xuXG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5QTEFZRVIsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQbGF5ZXJVcGRhdGUgPSAoeyBib2R5LCB1dWlkLCBzdGF0ZSA9IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0sIGR0KSA9PiB7XG4gICAgY29uc3QgeyBtb3ZlbWVudCwgZGlyZWN0aW9uLCBjYW1lcmFEaXJlY3Rpb24sIHF1YXRlcm5pb24sIHBvc2l0aW9uIH0gPSBzdGF0ZTtcblxuICAgIGNvbnN0IE1BWF9TUEVFRCA9IDE7XG4gICAgY29uc3Qgd2Fsa1ZlbG9jaXR5ID0gLjE7XG5cbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGNvbnN0IGxpbmVhclZlbG9jaXR5ID0gYm9keS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICBjb25zdCBzcGVlZCA9IGxpbmVhclZlbG9jaXR5Lmxlbmd0aCgpO1xuXG4gICAgICAgIGNvbnN0IGZvcndhcmREaXIgPSB0cmFuc2Zvcm0uZ2V0QmFzaXMoKS5nZXRSb3coMik7XG4gICAgICAgIGZvcndhcmREaXIubm9ybWFsaXplKCk7XG4gICAgICAgIGNvbnN0IHdhbGtEaXJlY3Rpb24gPSBuZXcgQW1tby5idFZlY3RvcjMoMC4wLCAwLjAsIDAuMCk7XG5cbiAgICAgICAgY29uc3Qgd2Fsa1NwZWVkID0gd2Fsa1ZlbG9jaXR5ICogZHQ7XG5cbiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCggd2Fsa0RpcmVjdGlvbi54KCkgKyBmb3J3YXJkRGlyLngoKSk7XG4gICAgICAgICAgICAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgKyBmb3J3YXJkRGlyLnkoKSk7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFooIHdhbGtEaXJlY3Rpb24ueigpICsgZm9yd2FyZERpci56KCkpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCggd2Fsa0RpcmVjdGlvbi54KCkgLSBmb3J3YXJkRGlyLngoKSk7XG4gICAgICAgICAgICAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgLSBmb3J3YXJkRGlyLnkoKSk7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFooIHdhbGtEaXJlY3Rpb24ueigpIC0gZm9yd2FyZERpci56KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb3ZlbWVudC5mb3J3YXJkICYmICFtb3ZlbWVudC5iYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICogMC4yKTtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFoobGluZWFyVmVsb2NpdHkueigpICogMC4yKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkge1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpO1xuXG4gICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBib2R5LnNldENlbnRlck9mTWFzc1RyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGxldCBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7XG4gICAgICAgIGxldCByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpO1xuICAgIH1cbn07IiwiaW1wb3J0IHtcbiAgICBHUkFWSVRZLFxuICAgIFRZUEVTXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IGhhbmRsZVJpZ2lkYm9keVVwZGF0ZSB9IGZyb20gJy4vZWxlbWVudHMnO1xuaW1wb3J0IHsgaGFuZGxlVmVoaWNsZVVwZGF0ZSB9IGZyb20gJy4vdmVoaWNsZXMnO1xuXG5pbXBvcnQgZGlzcGF0Y2hlciBmcm9tICcuL2xpYi9kaXNwYXRjaGVyJztcbmltcG9ydCB7IGhhbmRsZVBsYXllclVwZGF0ZSB9IGZyb20gJy4vcGxheWVyJztcbmltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuXG5jbGFzcyBDbG9jayB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsO1xuICAgIH1cblxuICAgIGdldERlbHRhKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMudGltZXN0YW1wKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRpbWUgLSB0aGlzLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlbHRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXb3JsZCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkID0gbmV3IEFtbW8uYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQodGhpcy5kaXNwYXRjaGVyLCB0aGlzLmJyb2FkcGhhc2UsIHRoaXMuc29sdmVyLCB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5zZXRHcmF2aXR5KG5ldyBBbW1vLmJ0VmVjdG9yMyhncmF2aXR5LngsIGdyYXZpdHkueSwgZ3Jhdml0eS56KSk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0QW1tb1dvcmxkID0gKCkgPT4gdGhpcy5hbW1vV29ybGQ7XG5cbiAgICBhZGRSaWdpZEJvZHkgPSBib2R5ID0+IHtcbiAgICAgICAgdGhpcy5hbW1vV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pO1xuICAgIH1cblxuICAgIHN0ZXBTaW11bGF0aW9uID0gZHQgPT4ge1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVSaWdpZGJvZHlVcGRhdGUoZWxlbWVudCwgZHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5QTEFZRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUGxheWVyVXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuVkVISUNMRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWZWhpY2xlVXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRQaHlzaWNzVXBkYXRlKGR0KTtcblxuICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc2ltdWxhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ29sbGlzaW9ucyA9ICgpID0+IHtcbiAgICAgICAgbGV0IGFtbW9EaXNwYXRjaGVyID0gdGhpcy5hbW1vV29ybGQuZ2V0RGlzcGF0Y2hlcigpO1xuICAgICAgICBsZXQgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykge1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7XG5cbiAgICAgICAgICAgIGxldCByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICAgICAgbGV0IHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpO1xuXG4gICAgICAgICAgICAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHNcbiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGNvbnRhY3RzID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3RQb2ludCA9IGNvbnRhY3RNYW5pZm9sZC5nZXRDb250YWN0UG9pbnQoaik7XG4gICAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gY29udGFjdFBvaW50LmdldERpc3RhbmNlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiggZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpO1xuXG4gICAgICAgICAgICAgICAgY29udGFjdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIwLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkwLngoKSwgeTogdmVsb2NpdHkwLnkoKSwgejogdmVsb2NpdHkwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMC54KCksIHk6IHdvcmxkUG9zMC55KCksIHo6IHdvcmxkUG9zMC56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczAueCgpLCB5OiBsb2NhbFBvczAueSgpLCB6OiBsb2NhbFBvczAueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIxLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkxLngoKSwgeTogdmVsb2NpdHkxLnkoKSwgejogdmVsb2NpdHkxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMS54KCksIHk6IHdvcmxkUG9zMS55KCksIHo6IHdvcmxkUG9zMS56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczEueCgpLCB5OiBsb2NhbFBvczEueSgpLCB6OiBsb2NhbFBvczEueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkNPTExJU0lPTiwgeyBjb250YWN0cyB9KTtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7IGNvbnRhY3RzIH0pO1xuXG4gICAgICAgICAgICAvLyBBbW1vLmRlc3Ryb3kocmIwKTtcbiAgICAgICAgICAgIC8vIEFtbW8uZGVzdHJveShyYjEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Qm9keSA9IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW2RhdGEudXVpZF0gPSBkYXRhO1xuICAgIH1cblxuICAgIHVwZGF0ZUJvZHlTdGF0ZSA9ICh1dWlkLCBzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZGlzcG9zZUJvZHkodXVpZCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5yZW1vdmVSaWdpZEJvZHkoZWxlbWVudC5ib2R5KTtcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHV1aWQpO1xuICAgIH1cblxuICAgIHRlcm1pbmF0ZSA9ICgpID0+IHtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuYW1tb1dvcmxkKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuc29sdmVyKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuZGlzcGF0Y2hlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZFRlcm1pbmF0ZUV2ZW50KCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdvcmxkKCk7IiwiaW1wb3J0IHtcbiAgICBESVNBQkxFX0RFQUNUSVZBVElPTixcbiAgICBUWVBFUyxcbiAgICBERUZBVUxUX1ZFSElDTEVfU1RBVEUsXG4gICAgQkFDS19MRUZULFxuICAgIEJBQ0tfUklHSFQsXG4gICAgRlJPTlRfTEVGVCxcbiAgICBGUk9OVF9SSUdIVCxcbiAgICBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UsXG4gICAgREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICAgIFBIWVNJQ1NfRVZFTlRTXG59IGZyb20gJy4uL21lc3NhZ2VzJztcblxuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5cbmNvbnN0IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgPSAwLjI7XG5jb25zdCBERUZBVUxUX0ZSSUNUSU9OID0gMTAwMDtcbmNvbnN0IERFRkFVTFRfTUFTUyA9IDgwMDtcblxuZXhwb3J0IGNvbnN0IGFkZFZlaGljbGUgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICB1dWlkLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG1hc3MgPSBERUZBVUxUX01BU1MsXG4gICAgICAgIHdpZHRoID0gMS44LFxuICAgICAgICBoZWlnaHQgPSAuNixcbiAgICAgICAgbGVuZ3RoID0gNCxcbiAgICAgICAgZnJpY3Rpb24gPSBERUZBVUxUX0ZSSUNUSU9OLFxuICAgICAgICByb2xsSW5mbHVlbmNlID0gREVGQVVMVF9ST0xMX0lORkxVRU5DRSxcbiAgICAgICAgd2hlZWxzT3B0aW9ucyA9IHt9LFxuICAgICAgICBzdXNwZW5zaW9ucyA9IHt9XG4gICAgfSA9IGRhdGE7XG5cbiAgICBjb25zdCB7IGJhY2sgPSB7fSwgZnJvbnQgPSB7fSB9ID0gd2hlZWxzT3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICAgIGF4aXNQb3NpdGlvbjogYXhpc1Bvc2l0aW9uQmFjayA9IC0xLFxuICAgICAgICByYWRpdXM6IHdoZWVsUmFkaXVzQmFjayA9IC40LFxuICAgICAgICBoYWxmVHJhY2s6IHdoZWVsSGFsZlRyYWNrQmFjayA9IDEsXG4gICAgICAgIGF4aXNIZWlnaHQ6IHdoZWVsQXhpc0hlaWdodEJhY2sgPSAuM1xuICAgIH0gPSBiYWNrO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBheGlzUG9zaXRpb246IGF4aXNQb3NpdGlvbkZyb250ID0gMS43LFxuICAgICAgICByYWRpdXM6IHdoZWVsUmFkaXVzRnJvbnQgPSAuNCxcbiAgICAgICAgaGFsZlRyYWNrOiB3aGVlbEhhbGZUcmFja0Zyb250ID0gMSxcbiAgICAgICAgYXhpc0hlaWdodDogd2hlZWxBeGlzSGVpZ2h0RnJvbnQgPSAuM1xuICAgIH0gPSBmcm9udDtcblxuICAgIGNvbnN0IHsgc3RpZmZuZXNzID0gMjAuMCwgZGFtcGluZyA9IDIuMywgY29tcHJlc3Npb24gPSA0LjQsIHJlc3RMZW5ndGggPSAwLjYgfSA9IHN1c3BlbnNpb25zO1xuXG5cbiAgICAvLyBDaGFzc2lzXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIC41LCBoZWlnaHQgKiAuNSwgbGVuZ3RoICogLjUpKTtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpO1xuICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTtcbiAgICBjb25zdCBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7XG4gICAgZ2VvbWV0cnkuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7XG4gICAgY29uc3QgY2hhc3NpcyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgZ2VvbWV0cnksIGxvY2FsSW5lcnRpYSkpO1xuICAgIGNoYXNzaXMuc2V0QWN0aXZhdGlvblN0YXRlKERJU0FCTEVfREVBQ1RJVkFUSU9OKTtcbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoY2hhc3Npcyk7XG5cblxuICAgIC8vIFJheWNhc3QgVmVoaWNsZVxuICAgIGNvbnN0IHR1bmluZyA9IG5ldyBBbW1vLmJ0VmVoaWNsZVR1bmluZygpO1xuICAgIGNvbnN0IHJheUNhc3RlciA9IG5ldyBBbW1vLmJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIod29ybGQuZ2V0QW1tb1dvcmxkKCkpO1xuICAgIGNvbnN0IHZlaGljbGUgPSBuZXcgQW1tby5idFJheWNhc3RWZWhpY2xlKHR1bmluZywgY2hhc3NpcywgcmF5Q2FzdGVyKTtcbiAgICB2ZWhpY2xlLnNldENvb3JkaW5hdGVTeXN0ZW0oMCwgMSwgMik7XG4gICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpO1xuXG4gICAgY29uc3Qgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApO1xuICAgIGNvbnN0IHdoZWVsQXhsZUNTID0gbmV3IEFtbW8uYnRWZWN0b3IzKC0xLCAwLCAwKTtcblxuICAgIGNvbnN0IGFkZFdoZWVsID0gKGlzRnJvbnQsIHBvcywgcmFkaXVzKSA9PiB7XG5cbiAgICAgICAgdmFyIHdoZWVsSW5mbyA9IHZlaGljbGUuYWRkV2hlZWwoXG4gICAgICAgICAgICBwb3MsXG4gICAgICAgICAgICB3aGVlbERpcmVjdGlvbkNTMCxcbiAgICAgICAgICAgIHdoZWVsQXhsZUNTLFxuICAgICAgICAgICAgcmVzdExlbmd0aCxcbiAgICAgICAgICAgIHJhZGl1cyxcbiAgICAgICAgICAgIHR1bmluZyxcbiAgICAgICAgICAgIGlzRnJvbnQpO1xuXG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbihkYW1waW5nKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbihjb21wcmVzc2lvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fcm9sbEluZmx1ZW5jZShyb2xsSW5mbHVlbmNlKTtcbiAgICB9XG5cbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7XG4gICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tCYWNrLCB3aGVlbEF4aXNIZWlnaHRCYWNrLCBheGlzUG9zaXRpb25CYWNrKSwgd2hlZWxSYWRpdXNCYWNrKTtcblxuICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7XG5cbiAgICB3b3JsZC5zZXRCb2R5KHtcbiAgICAgICAgdHlwZTogVFlQRVMuVkVISUNMRSxcbiAgICAgICAgdXVpZCxcbiAgICAgICAgdmVoaWNsZTogdmVoaWNsZSxcbiAgICAgICAgd2hlZWxzLFxuICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICBzdGF0ZTogREVGQVVMVF9WRUhJQ0xFX1NUQVRFXG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBzZXRWZWhpY2xlUG9zaXRpb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHBvc2l0aW9uIH0gPSBkYXRhO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkge1xuICAgICAgICBjb25zdCBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVRdWF0ZXJuaW9uID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBxdWF0ZXJuaW9uIH0gPSBkYXRhO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkge1xuICAgICAgICBjb25zdCBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0VmVoaWNsZSA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcXVhdGVybmlvbiwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG4gICAgICAgIFxuICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnogKSk7XG4gICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG5cbiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZVZlaGljbGVVcGRhdGUgPSAoeyB2ZWhpY2xlLCB3aGVlbHMsIHV1aWQsIHN0YXRlID0gREVGQVVMVF9WRUhJQ0xFX1NUQVRFLCBvcHRpb25zID0ge30gfSwgZHQpID0+IHtcbiAgICBjb25zdCBzcGVlZCA9IHZlaGljbGUuZ2V0Q3VycmVudFNwZWVkS21Ib3VyKCk7XG5cbiAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHV1aWQsIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU1BFRUQsIHsgc3BlZWQgfSk7XG5cbiAgICBsZXQgYnJlYWtpbmdGb3JjZSA9IDA7XG4gICAgbGV0IGVuZ2luZUZvcmNlID0gMDtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgc3RlZXJpbmdDbGFtcCA9IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgICAgIHN0ZWVyaW5nSW5jcmVtZW50ID0gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQsXG4gICAgICAgIG1heEVuZ2luZUZvcmNlID0gREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgICAgICBtYXhCcmVha2luZ0ZvcmNlID0gREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0VcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGlmIChzdGF0ZS5hY2NlbGVyYXRpb24pIHtcbiAgICAgICAgaWYgKHNwZWVkIDwgLTEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IG1heEVuZ2luZUZvcmNlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuYnJha2luZykge1xuICAgICAgICBpZiAoc3BlZWQgPiAxKVxuICAgICAgICAgICAgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7XG4gICAgICAgIGVsc2UgZW5naW5lRm9yY2UgPSAtbWF4RW5naW5lRm9yY2UgLyAyO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubGVmdCkge1xuICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgc3RlZXJpbmdDbGFtcClcbiAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcClcbiAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudClcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTtcbiAgICB2ZWhpY2xlLmFwcGx5RW5naW5lRm9yY2UoZW5naW5lRm9yY2UsIEJBQ0tfUklHSFQpO1xuXG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfUklHSFQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpO1xuXG4gICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfTEVGVCk7XG4gICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpO1xuXG4gICAgbGV0IHRtLCBwLCBxLCBpO1xuICAgIGNvbnN0IG4gPSB2ZWhpY2xlLmdldE51bVdoZWVscygpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgdmVoaWNsZS51cGRhdGVXaGVlbFRyYW5zZm9ybShpLCB0cnVlKTtcbiAgICAgICAgdG0gPSB2ZWhpY2xlLmdldFdoZWVsVHJhbnNmb3JtV1MoaSk7XG4gICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICAgICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgY29uc3Qgd2hlZWxVVUlEID0gd2hlZWxzW2ldO1xuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHdoZWVsVVVJRCwgcCwgcSwgZHQpO1xuICAgIH1cblxuICAgIHRtID0gdmVoaWNsZS5nZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0oKTtcbiAgICBwID0gdG0uZ2V0T3JpZ2luKCk7XG4gICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSB2ZWhpY2xlLmdldEZvcndhcmRWZWN0b3IoKTtcbiAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHV1aWQsIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuRElSRUNUSU9OLCB7XG4gICAgICAgIGRpcmVjdGlvbjoge1xuICAgICAgICAgICAgeDogZGlyZWN0aW9uLngoKSxcbiAgICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksXG4gICAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgcCwgcSwgZHQpO1xuICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZSh1dWlkLCBzdGF0ZSk7XG59IiwiaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSwgcmVzZXRWZWhpY2xlLCBzZXRWZWhpY2xlUG9zaXRpb24sIHNldFZlaGljbGVRdWF0ZXJuaW9uIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBhZGRCb3gsIGFkZE1vZGVsLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB7IGFkZFBsYXllciB9IGZyb20gJy4vcGxheWVyJztcblxuaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5pbXBvcnQgeyBQSFlTSUNTX0VWRU5UUyB9IGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaGFuZGxlTG9hZEV2ZW50ID0gb3B0aW9ucyA9PiBBbW1vID0+IHtcbiAgICBzZWxmLkFtbW8gPSBBbW1vO1xuXG4gICAgb25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgIHN3aXRjaChkYXRhLmV2ZW50KSB7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5CT1g6XG4gICAgICAgICAgICAgICAgYWRkQm94KGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuU1BIRVJFOlxuICAgICAgICAgICAgICAgIGFkZFNwaGVyZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlZFSElDTEU6XG4gICAgICAgICAgICAgICAgYWRkVmVoaWNsZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELk1PREVMOlxuICAgICAgICAgICAgICAgIGFkZE1vZGVsKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuUExBWUVSOlxuICAgICAgICAgICAgICAgIGFkZFBsYXllcihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuTElORUFSX1ZFTE9DSVRZOlxuICAgICAgICAgICAgICAgIHNldExpbmVhclZlbG9jaXR5KGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5QT1NJVElPTjpcbiAgICAgICAgICAgICAgICBzZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUE9TSVRJT046XG4gICAgICAgICAgICAgICAgc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5RVUFURVJOSU9OOlxuICAgICAgICAgICAgICAgIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlJFU0VUOlxuICAgICAgICAgICAgICAgIHJlc2V0VmVoaWNsZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5BUFBMWS5JTVBVTFNFOlxuICAgICAgICAgICAgICAgIGFwcGx5SW1wdXNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlVQREFURTpcbiAgICAgICAgICAgICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUoZGF0YS51dWlkLCBkYXRhLnN0YXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5ESVNQT1NFOlxuICAgICAgICAgICAgICAgIHdvcmxkLmRpc3Bvc2VCb2R5KGRhdGEudXVpZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURTpcbiAgICAgICAgICAgICAgICB3b3JsZC50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdvcmxkLmluaXQob3B0aW9ucyk7XG4gICAgZGlzcGF0Y2hlci5zZW5kUmVhZHlFdmVudCgpO1xuICAgIHdvcmxkLnNpbXVsYXRlKClcbn07XG5cbmNvbnN0IGxvYWRBbW1vID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBzY3JpcHRVcmwgPSBvcHRpb25zLmhvc3QgKyAnLycgKyAob3B0aW9ucy5wYXRoIHx8IExJQlJBUllfTkFNRSk7XG4gICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRVcmwpO1xuXG4gICAgQW1tbygpLnRoZW4oaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpKTtcbn07XG5cbm9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgIHN3aXRjaChkYXRhLmV2ZW50KSB7XG4gICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuTE9BRC5BTU1POlxuICAgICAgICAgICAgbG9hZEFtbW8oZGF0YSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn0iXSwibmFtZXMiOlsiTElCUkFSWV9OQU1FIiwiVFlQRVMiLCJCT1giLCJTUEhFUkUiLCJWRUhJQ0xFIiwiTUVTSCIsIlBMQVlFUiIsIkRFRkFVTFRfVkVISUNMRV9TVEFURSIsInZlaGljbGVTdGVlcmluZyIsImFjY2VsZXJhdGlvbiIsImJyZWFraW5nIiwicmlnaHQiLCJsZWZ0IiwiREVGQVVMVF9SSUdJREJPRFlfU1RBVEUiLCJ2ZWxvY2l0eSIsIngiLCJ5IiwieiIsIm1vdmVtZW50IiwiZm9yd2FyZCIsImJhY2t3YXJkcyIsImRpcmVjdGlvbiIsIkRFRkFVTFRfU0NBTEUiLCJERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSIsIkRFRkFVTFRfSU1QVUxTRSIsIkRJU0FCTEVfREVBQ1RJVkFUSU9OIiwiR1JBVklUWSIsIkZST05UX0xFRlQiLCJGUk9OVF9SSUdIVCIsIkJBQ0tfTEVGVCIsIkJBQ0tfUklHSFQiLCJERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCIsIkRFRkFVTFRfU1RFRVJJTkdfQ0xBTVAiLCJERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UiLCJERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRSIsIlBIWVNJQ1NfRVZFTlRTIiwiRElTUEFUQ0giLCJURVJNSU5BVEUiLCJMT0FEIiwiQU1NTyIsIlJFQURZIiwiSU5JVCIsIlVQREFURSIsIkFERCIsIk1PREVMIiwiRUxFTUVOVCIsIkRJU1BPU0UiLCJDT0xMSVNJT04iLCJTRVQiLCJQT1NJVElPTiIsIlFVQVRFUk5JT04iLCJMSU5FQVJfVkVMT0NJVFkiLCJBUFBMWSIsIklNUFVMU0UiLCJSRVNFVCIsIlNQRUVEIiwiRElSRUNUSU9OIiwiRGlzcGF0Y2hlciIsImR0IiwicG9zdE1lc3NhZ2UiLCJldmVudCIsInV1aWQiLCJwb3NpdGlvbiIsInJvdGF0aW9uIiwicXVhdGVybmlvbiIsInciLCJldmVudE5hbWUiLCJldmVudERhdGEiLCJhcHBseU1hdHJpeDRUb1ZlY3RvcjMiLCJtYXRyaXgiLCJjcmVhdGVSaWdpZEJvZHkiLCJzaGFwZSIsIm9wdGlvbnMiLCJtYXNzIiwiZnJpY3Rpb24iLCJyZXN0aXR1dGlvbiIsImRhbXBpbmciLCJsaW5lYXIiLCJhbmd1bGFyIiwidHJhbnNmb3JtIiwiQW1tbyIsImJ0VHJhbnNmb3JtIiwic2V0SWRlbnRpdHkiLCJzZXRPcmlnaW4iLCJidFZlY3RvcjMiLCJzZXRSb3RhdGlvbiIsImJ0UXVhdGVybmlvbiIsIm1vdGlvblN0YXRlIiwiYnREZWZhdWx0TW90aW9uU3RhdGUiLCJsb2NhbEluZXJ0aWEiLCJjYWxjdWxhdGVMb2NhbEluZXJ0aWEiLCJyYkluZm8iLCJidFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8iLCJib2R5IiwiYnRSaWdpZEJvZHkiLCJzZXRGcmljdGlvbiIsInNldFJlc3RpdHV0aW9uIiwic2V0RGFtcGluZyIsInNldEFjdGl2YXRpb25TdGF0ZSIsIndvcmxkIiwiYWRkUmlnaWRCb2R5IiwiYWRkTW9kZWwiLCJ2ZXJ0aWNlcyIsIm1hdHJpY2VzIiwiaW5kZXhlcyIsInNjYWxlIiwiYnRhIiwiYnRiIiwiYnRjIiwidHJpTWVzaCIsImJ0VHJpYW5nbGVNZXNoIiwiaSIsImxlbmd0aCIsImNvbXBvbmVudHMiLCJpbmRleCIsIkFycmF5IiwiZnJvbSIsImoiLCJhaSIsImJpIiwiY2kiLCJ2YSIsInZiIiwidmMiLCJzZXRWYWx1ZSIsImFkZFRyaWFuZ2xlIiwibG9jYWxTY2FsZSIsInNldFNjYWxpbmciLCJkZXN0cm95IiwiY29sbGlzaW9uU2hhcGUiLCJidEJ2aFRyaWFuZ2xlTWVzaFNoYXBlIiwicmVzb3VyY2VzIiwic2V0Qm9keSIsInR5cGUiLCJzdGF0ZSIsImFkZEJveCIsImRhdGEiLCJ3aWR0aCIsImhlaWdodCIsImdlb21ldHJ5IiwiYnRCb3hTaGFwZSIsImFkZFNwaGVyZSIsInJhZGl1cyIsImJ0U3BoZXJlU2hhcGUiLCJzZXRMaW5lYXJWZWxvY2l0eSIsImdldEVsZW1lbnQiLCJnZXRNb3Rpb25TdGF0ZSIsImxpbmVhclZlbG9jaXR5Iiwic2V0UG9zaXRpb24iLCJnZXRXb3JsZFRyYW5zZm9ybSIsInNldFdvcmxkVHJhbnNmb3JtIiwiYXBwbHlJbXB1c2UiLCJpbXB1bHNlIiwiaW1wdWxzZVZlY3RvciIsImFwcGx5Q2VudHJhbEltcHVsc2UiLCJoYW5kbGVSaWdpZGJvZHlVcGRhdGUiLCJvcmlnaW4iLCJnZXRPcmlnaW4iLCJnZXRSb3RhdGlvbiIsImRpc3BhdGNoZXIiLCJzZW5kQm9keVVwZGF0ZSIsImFkZFBsYXllciIsImNhcHN1bGUiLCJidENhcHN1bGVTaGFwZSIsInNldEFuZ3VsYXJGYWN0b3IiLCJoYW5kbGVQbGF5ZXJVcGRhdGUiLCJjYW1lcmFEaXJlY3Rpb24iLCJNQVhfU1BFRUQiLCJ3YWxrVmVsb2NpdHkiLCJnZXRMaW5lYXJWZWxvY2l0eSIsInNwZWVkIiwiZm9yd2FyZERpciIsImdldEJhc2lzIiwiZ2V0Um93Iiwibm9ybWFsaXplIiwid2Fsa0RpcmVjdGlvbiIsIndhbGtTcGVlZCIsInNldFgiLCJzZXRaIiwic2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtIiwiQ2xvY2siLCJ0aW1lc3RhbXAiLCJ0aW1lIiwiRGF0ZSIsIm5vdyIsImRlbHRhIiwiV29ybGQiLCJncmF2aXR5IiwiY29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24iLCJidENvbGxpc2lvbkRpc3BhdGNoZXIiLCJicm9hZHBoYXNlIiwiYnREYnZ0QnJvYWRwaGFzZSIsInNvbHZlciIsImJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyIiwiYW1tb1dvcmxkIiwiYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQiLCJzZXRHcmF2aXR5IiwiaW5pdGlhbGlzZWQiLCJoYXNFbGVtZW50IiwiZWxlbWVudHMiLCJkZWxldGVkIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImZvckVhY2giLCJpbmNsdWRlcyIsImFjdGlvbiIsImFkZEFjdGlvbiIsInN0ZXBTaW11bGF0aW9uIiwiY2xvY2siLCJnZXREZWx0YSIsImVsZW1lbnQiLCJoYW5kbGVWZWhpY2xlVXBkYXRlIiwiY2FsY3VsYXRlQ29sbGlzaW9ucyIsInJlbW92ZURlbGV0ZWRFbGVtZW50cyIsInNlbmRQaHlzaWNzVXBkYXRlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzaW11bGF0ZSIsImJpbmQiLCJhbW1vRGlzcGF0Y2hlciIsImdldERpc3BhdGNoZXIiLCJudW1NYW5pZm9sZHMiLCJnZXROdW1NYW5pZm9sZHMiLCJjb250YWN0TWFuaWZvbGQiLCJnZXRNYW5pZm9sZEJ5SW5kZXhJbnRlcm5hbCIsInJiMCIsImNhc3RPYmplY3QiLCJnZXRCb2R5MCIsInJiMSIsImdldEJvZHkxIiwibnVtQ29udGFjdHMiLCJnZXROdW1Db250YWN0cyIsImNvbnRhY3RzIiwiY29udGFjdFBvaW50IiwiZ2V0Q29udGFjdFBvaW50IiwiZGlzdGFuY2UiLCJnZXREaXN0YW5jZSIsInZlbG9jaXR5MCIsInZlbG9jaXR5MSIsIndvcmxkUG9zMCIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkEiLCJ3b3JsZFBvczEiLCJnZXRfbV9wb3NpdGlvbldvcmxkT25CIiwibG9jYWxQb3MwIiwiZ2V0X21fbG9jYWxQb2ludEEiLCJsb2NhbFBvczEiLCJnZXRfbV9sb2NhbFBvaW50QiIsInB1c2giLCJ3b3JsZFBvcyIsImxvY2FsUG9zIiwic2VuZERpc3BhdGNoRXZlbnQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInNlbmRUZXJtaW5hdGVFdmVudCIsInVuZGVmaW5lZCIsInJlbW92ZVJpZ2lkQm9keSIsInJlbW92ZUVsZW1lbnQiLCJERUZBVUxUX1JPTExfSU5GTFVFTkNFIiwiREVGQVVMVF9GUklDVElPTiIsIkRFRkFVTFRfTUFTUyIsImFkZFZlaGljbGUiLCJ3aGVlbHMiLCJyb2xsSW5mbHVlbmNlIiwid2hlZWxzT3B0aW9ucyIsInN1c3BlbnNpb25zIiwiYmFjayIsImZyb250IiwiYXhpc1Bvc2l0aW9uIiwiYXhpc1Bvc2l0aW9uQmFjayIsIndoZWVsUmFkaXVzQmFjayIsImhhbGZUcmFjayIsIndoZWVsSGFsZlRyYWNrQmFjayIsImF4aXNIZWlnaHQiLCJ3aGVlbEF4aXNIZWlnaHRCYWNrIiwiYXhpc1Bvc2l0aW9uRnJvbnQiLCJ3aGVlbFJhZGl1c0Zyb250Iiwid2hlZWxIYWxmVHJhY2tGcm9udCIsIndoZWVsQXhpc0hlaWdodEZyb250Iiwic3RpZmZuZXNzIiwiY29tcHJlc3Npb24iLCJyZXN0TGVuZ3RoIiwiY2hhc3NpcyIsInR1bmluZyIsImJ0VmVoaWNsZVR1bmluZyIsInJheUNhc3RlciIsImJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIiLCJnZXRBbW1vV29ybGQiLCJ2ZWhpY2xlIiwiYnRSYXljYXN0VmVoaWNsZSIsInNldENvb3JkaW5hdGVTeXN0ZW0iLCJ3aGVlbERpcmVjdGlvbkNTMCIsIndoZWVsQXhsZUNTIiwiYWRkV2hlZWwiLCJpc0Zyb250IiwicG9zIiwid2hlZWxJbmZvIiwic2V0X21fc3VzcGVuc2lvblN0aWZmbmVzcyIsInNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uIiwic2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uIiwic2V0X21fZnJpY3Rpb25TbGlwIiwic2V0X21fcm9sbEluZmx1ZW5jZSIsInNldFZlaGljbGVQb3NpdGlvbiIsImdldFJpZ2lkQm9keSIsInNldFZlaGljbGVRdWF0ZXJuaW9uIiwicmVzZXRWZWhpY2xlIiwiZ2V0Q3VycmVudFNwZWVkS21Ib3VyIiwiYnJlYWtpbmdGb3JjZSIsImVuZ2luZUZvcmNlIiwic3RlZXJpbmdDbGFtcCIsInN0ZWVyaW5nSW5jcmVtZW50IiwibWF4RW5naW5lRm9yY2UiLCJtYXhCcmVha2luZ0ZvcmNlIiwiYnJha2luZyIsImFwcGx5RW5naW5lRm9yY2UiLCJzZXRCcmFrZSIsInNldFN0ZWVyaW5nVmFsdWUiLCJ0bSIsInAiLCJxIiwibiIsImdldE51bVdoZWVscyIsInVwZGF0ZVdoZWVsVHJhbnNmb3JtIiwiZ2V0V2hlZWxUcmFuc2Zvcm1XUyIsIndoZWVsVVVJRCIsImdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSIsImdldEZvcndhcmRWZWN0b3IiLCJ1cGRhdGVCb2R5U3RhdGUiLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLFlBQVksR0FBRyxTQUFyQjtJQUVBLElBQU1DLEtBQUssR0FBRztJQUNqQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFk7SUFFakJDLEVBQUFBLE1BQU0sRUFBRSxRQUZTO0lBR2pCQyxFQUFBQSxPQUFPLEVBQUUsU0FIUTtJQUlqQkMsRUFBQUEsSUFBSSxFQUFFLE1BSlc7SUFLakJDLEVBQUFBLE1BQU0sRUFBRTtJQUxTLENBQWQ7SUFlQSxJQUFNQyxxQkFBcUIsR0FBRztJQUNqQ0MsRUFBQUEsZUFBZSxFQUFFLENBRGdCO0lBRWpDQyxFQUFBQSxZQUFZLEVBQUUsS0FGbUI7SUFHakNDLEVBQUFBLFFBQVEsRUFBRSxLQUh1QjtJQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLEtBSjBCO0lBS2pDQyxFQUFBQSxJQUFJLEVBQUU7SUFMMkIsQ0FBOUI7SUFRQSxJQUFNQyx1QkFBdUIsR0FBRztJQUNuQ0MsRUFBQUEsUUFB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', false);
|
|
57522
|
+
}var WorkerFactory = createBase64WorkerFactory$2('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIEFQUExZOiB7CiAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnCiAgICAgICAgfQogICAgICB9LAogICAgICBWRUhJQ0xFOiB7CiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbicKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczp2ZWhpY2xlOnJlc2V0JywKICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsCiAgICAgICAgRElSRUNUSU9OOiAncGh5c2ljczp2ZWhpY2xlOmRpcmVjdGlvbicKICAgICAgfSwKICAgICAgRUZGRUNUUzogewogICAgICAgIEVYUExPU0lPTjogJ3BoeXNpY3M6ZWZmZWN0czpleHBsb3Npb24nCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7CiAgICAgICAgfSk7CiAgICAgICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOwogICAgICB9CgogICAgICByZXR1cm4ga2V5czsKICAgIH0KCiAgICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHsKICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsKCiAgICAgICAgaWYgKGkgJSAyKSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5VUERBVEUsCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRSZWFkeUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRUZXJtaW5hdGVFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURQogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZEJvZHlVcGRhdGUiLCBmdW5jdGlvbiAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgcG9zaXRpb246IHsKICAgICAgICAgICAgeDogcG9zaXRpb24ueCgpLAogICAgICAgICAgICB5OiBwb3NpdGlvbi55KCksCiAgICAgICAgICAgIHo6IHBvc2l0aW9uLnooKQogICAgICAgICAgfSwKICAgICAgICAgIHF1YXRlcm5pb246IHsKICAgICAgICAgICAgeDogcm90YXRpb24ueCgpLAogICAgICAgICAgICB5OiByb3RhdGlvbi55KCksCiAgICAgICAgICAgIHo6IHJvdGF0aW9uLnooKSwKICAgICAgICAgICAgdzogcm90YXRpb24udygpCiAgICAgICAgICB9LAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kRGlzcGF0Y2hFdmVudCIsIGZ1bmN0aW9uICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCiAgICAgICAgICBldmVudERhdGE6IGV2ZW50RGF0YQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH07CiAgICB2YXIgZGlzcGF0Y2hlciQxID0gbmV3IERpc3BhdGNoZXIoKTsKCiAgICB2YXIgYXBwbHlNYXRyaXg0VG9WZWN0b3IzID0gZnVuY3Rpb24gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKF9yZWYpIHsKICAgICAgdmFyIF9yZWYkeCA9IF9yZWYueCwKICAgICAgICAgIHggPSBfcmVmJHggPT09IHZvaWQgMCA/IDAgOiBfcmVmJHgsCiAgICAgICAgICBfcmVmJHkgPSBfcmVmLnksCiAgICAgICAgICB5ID0gX3JlZiR5ID09PSB2b2lkIDAgPyAwIDogX3JlZiR5LAogICAgICAgICAgX3JlZiR6ID0gX3JlZi56LAogICAgICAgICAgeiA9IF9yZWYkeiA9PT0gdm9pZCAwID8gMCA6IF9yZWYkejsKICAgICAgdmFyIG1hdHJpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107CiAgICAgIHZhciB3ID0gMSAvIChtYXRyaXhbM10gKiB4ICsgbWF0cml4WzddICogeSArIG1hdHJpeFsxMV0gKiB6ICsgbWF0cml4WzE1XSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgeDogKG1hdHJpeFswXSAqIHggKyBtYXRyaXhbNF0gKiB5ICsgbWF0cml4WzhdICogeiArIG1hdHJpeFsxMl0pICogdywKICAgICAgICB5OiAobWF0cml4WzFdICogeCArIG1hdHJpeFs1XSAqIHkgKyBtYXRyaXhbOV0gKiB6ICsgbWF0cml4WzEzXSkgKiB3LAogICAgICAgIHo6IChtYXRyaXhbMl0gKiB4ICsgbWF0cml4WzZdICogeSArIG1hdHJpeFsxMF0gKiB6ICsgbWF0cml4WzE0XSkgKiB3CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBjcmVhdGVSaWdpZEJvZHkgPSBmdW5jdGlvbiBjcmVhdGVSaWdpZEJvZHkoc2hhcGUsIG9wdGlvbnMpIHsKICAgICAgdmFyIHV1aWQgPSBvcHRpb25zLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIF9vcHRpb25zJHJlc3RpdHV0aW9uID0gb3B0aW9ucy5yZXN0aXR1dGlvbiwKICAgICAgICAgIHJlc3RpdHV0aW9uID0gX29wdGlvbnMkcmVzdGl0dXRpb24gPT09IHZvaWQgMCA/IC45IDogX29wdGlvbnMkcmVzdGl0dXRpb24sCiAgICAgICAgICBfb3B0aW9ucyRkYW1waW5nID0gb3B0aW9ucy5kYW1waW5nLAogICAgICAgICAgZGFtcGluZyA9IF9vcHRpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IHsKICAgICAgICBsaW5lYXI6IDAuMiwKICAgICAgICBhbmd1bGFyOiAwLjIKICAgICAgfSA6IF9vcHRpb25zJGRhbXBpbmc7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciBib2R5ID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkocmJJbmZvKTsKCiAgICAgIGlmIChtYXNzID4gMCkgewogICAgICAgIGJvZHkuc2V0RnJpY3Rpb24oZnJpY3Rpb24pOwogICAgICAgIGJvZHkuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pOwogICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTsKICAgICAgICBib2R5LnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIH0gLy8gc3RvcmluZyB1dWlkIGZvciBmdXR1cmUgcmVmZXJlbmNlCgoKICAgICAgYm9keS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICByZXR1cm4gYm9keTsKICAgIH07CiAgICB2YXIgYWRkTW9kZWwgPSBmdW5jdGlvbiBhZGRNb2RlbChvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgdmVydGljZXMgPSBvcHRpb25zLnZlcnRpY2VzLAogICAgICAgICAgbWF0cmljZXMgPSBvcHRpb25zLm1hdHJpY2VzLAogICAgICAgICAgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcywKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBfb3B0aW9ucyRtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgbWFzcyA9IF9vcHRpb25zJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRtYXNzLAogICAgICAgICAgX29wdGlvbnMkZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfb3B0aW9ucyRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9vcHRpb25zJGZyaWN0aW9uOwogICAgICB2YXIgc2NhbGUgPSBERUZBVUxUX1NDQUxFOwogICAgICB2YXIgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldOwogICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDsKICAgICAgICB2YXIgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7CgogICAgICAgIGlmIChpbmRleCkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykgewogICAgICAgICAgICB2YXIgYWkgPSBpbmRleFtqXSAqIDM7CiAgICAgICAgICAgIHZhciBiaSA9IGluZGV4W2ogKyAxXSAqIDM7CiAgICAgICAgICAgIHZhciBjaSA9IGluZGV4W2ogKyAyXSAqIDM7CiAgICAgICAgICAgIHZhciB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1thaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1thaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYWkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYmldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2JpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2NpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2NpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tjaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgY29tcG9uZW50cy5sZW5ndGg7IF9qICs9IDkpIHsKICAgICAgICAgICAgdmFyIF92YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDBdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAzXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgNF0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDVdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgNl0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDddLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA4XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgYnRhLnNldFZhbHVlKF92YS54LCBfdmEueSwgX3ZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUoX3ZiLngsIF92Yi55LCBfdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZShfdmMueCwgX3ZjLnksIF92Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTsKICAgICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpOwogICAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7CiAgICAgIHZhciBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTsKICAgICAgQW1tby5kZXN0cm95KGJ0YSk7CiAgICAgIEFtbW8uZGVzdHJveShidGIpOwogICAgICBBbW1vLmRlc3Ryb3koYnRjKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuTUVTSCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZEJveCA9IGZ1bmN0aW9uIGFkZEJveChkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuQk9YLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkU3BoZXJlID0gZnVuY3Rpb24gYWRkU3BoZXJlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICByYWRpdXMgPSBkYXRhLnJhZGl1cywKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzMiA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzMiA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MyLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24yID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24yID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb24yOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlNQSEVSRSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIHNldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gc2V0TGluZWFyVmVsb2NpdHkoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIF9kYXRhJHZlbG9jaXR5ID0gZGF0YS52ZWxvY2l0eSwKICAgICAgICAgIHZlbG9jaXR5ID0gX2RhdGEkdmVsb2NpdHkgPT09IHZvaWQgMCA/IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIDogX2RhdGEkdmVsb2NpdHk7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7CiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIHNldFBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQyID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDIuYm9keTsKCiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgfTsKICAgIHZhciBhcHBseUltcHVzZSA9IGZ1bmN0aW9uIGFwcGx5SW1wdXNlKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJGltcHVsc2UgPSBfcmVmLmltcHVsc2UsCiAgICAgICAgICBpbXB1bHNlID0gX3JlZiRpbXB1bHNlID09PSB2b2lkIDAgPyBERUZBVUxUX0lNUFVMU0UgOiBfcmVmJGltcHVsc2U7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQzID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDMuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopOwogICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTsKICAgICAgICBBbW1vLmRlc3Ryb3koaW1wdWxzZVZlY3Rvcik7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlRWxlbWVudFVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZUVsZW1lbnRVcGRhdGUoX3JlZjIsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZjIuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmMi51dWlkLAogICAgICAgICAgX3JlZjIkc3RhdGUgPSBfcmVmMi5zdGF0ZTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZFBsYXllciA9IGZ1bmN0aW9uIGFkZFBsYXllcihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbjsKICAgICAgdmFyIGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7IC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnMKCiAgICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuUExBWUVSLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlUGxheWVyVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUGxheWVyVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA6IF9yZWYkc3RhdGU7CiAgICAgIHZhciBtb3ZlbWVudCA9IHN0YXRlLm1vdmVtZW50LAogICAgICAgICAgZGlyZWN0aW9uID0gc3RhdGUuZGlyZWN0aW9uLAogICAgICAgICAgY2FtZXJhRGlyZWN0aW9uID0gc3RhdGUuY2FtZXJhRGlyZWN0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IHN0YXRlLnF1YXRlcm5pb24sCiAgICAgICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB2YXIgTUFYX1NQRUVEID0gMTsKICAgICAgdmFyIHdhbGtWZWxvY2l0eSA9IC4xOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICB2YXIgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTsKICAgICAgICB2YXIgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTsKICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpOwogICAgICAgIHZhciB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApOwogICAgICAgIHZhciB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDsKCiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7CiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTsKICAgICAgICB9CgogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgQ2xvY2sgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBDbG9jaygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xvY2spOwoKICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhDbG9jaywgW3sKICAgICAgICBrZXk6ICJnZXREZWx0YSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlbHRhKCkgewogICAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIGlmICh0aGlzLnRpbWVzdGFtcCkgewogICAgICAgICAgICB2YXIgZGVsdGEgPSB0aW1lIC0gdGhpcy50aW1lc3RhbXA7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBDbG9jazsKICAgIH0oKTsKCiAgICB2YXIgV29ybGQgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBXb3JsZCgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ybGQpOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImluaXQiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgdmFyIF9vcHRpb25zJGdyYXZpdHkgPSBvcHRpb25zLmdyYXZpdHksCiAgICAgICAgICAgICAgZ3Jhdml0eSA9IF9vcHRpb25zJGdyYXZpdHkgPT09IHZvaWQgMCA/IEdSQVZJVFkgOiBfb3B0aW9ucyRncmF2aXR5OwogICAgICAgICAgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgIF90aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIoX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBfdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpOwogICAgICAgICAgX3RoaXMuc29sdmVyID0gbmV3IEFtbW8uYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIoKTsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZChfdGhpcy5kaXNwYXRjaGVyLCBfdGhpcy5icm9hZHBoYXNlLCBfdGhpcy5zb2x2ZXIsIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwoKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc2V0R3Jhdml0eShuZXcgQW1tby5idFZlY3RvcjMoZ3Jhdml0eS54LCBncmF2aXR5LnksIGdyYXZpdHkueikpOyAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9ucwoKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmdldEJyb2FkcGhhc2UoKS5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpLnNldEludGVybmFsR2hvc3RQYWlyQ2FsbGJhY2sobmV3IEFtbW8uYnRHaG9zdFBhaXJDYWxsYmFjaygpKTsKCiAgICAgICAgICBfdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZpbHRlcihmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZDsKICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgZGVsZXRlIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGFzRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImlzSW5pdGlhbGlzZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuaW5pdGlhbGlzZWQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0RHluYW1pY3NXb3JsZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5keW5hbWljc1dvcmxkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZFJpZ2lkQm9keSIsIGZ1bmN0aW9uIChib2R5KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRBY3Rpb24iLCBmdW5jdGlvbiAoYWN0aW9uKSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZENvbGxpc2lvbk9iamVjdCIsIGZ1bmN0aW9uIChjb2xsaXNpb25PYmplY3QpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3RlcFNpbXVsYXRpb24iLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNpbXVsYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGR0ID0gX3RoaXMuY2xvY2suZ2V0RGVsdGEoKTsKCiAgICAgICAgICBfdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7CgogICAgICAgICAgT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRToKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDoKICAgICAgICAgICAgICAgICAgaGFuZGxlRWxlbWVudFVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOgogICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIF90aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTsKCiAgICAgICAgICBfdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTsKCiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFBoeXNpY3NVcGRhdGUoZHQpOwogICAgICAgICAgX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2ltdWxhdGUuYmluZChfdGhpcykpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgYW1tb0Rpc3BhdGNoZXIgPSBfdGhpcy5keW5hbWljc1dvcmxkLmdldERpc3BhdGNoZXIoKTsKCiAgICAgICAgICB2YXIgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykgewogICAgICAgICAgICB2YXIgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7CiAgICAgICAgICAgIHZhciByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7IC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkcwoKICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY29udGFjdHMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykgewogICAgICAgICAgICAgIHZhciBjb250YWN0UG9pbnQgPSBjb250YWN0TWFuaWZvbGQuZ2V0Q29udGFjdFBvaW50KGopOwogICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbnRhY3RQb2ludC5nZXREaXN0YW5jZSgpOwogICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDAuMCkgY29udGludWU7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpOwogICAgICAgICAgICAgIGNvbnRhY3RzLnB1c2goewogICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAogICAgICAgICAgICAgICAgZWxlbWVudHM6IFt7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMC51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MwLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMS51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MxLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZEVsZW1lbnQiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgX3RoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidXBkYXRlQm9keVN0YXRlIiwgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0gX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlLCB7fSwgc3RhdGUpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInRlcm1pbmF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5keW5hbWljc1dvcmxkKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5zb2x2ZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmRpc3BhdGNoZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpOwogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRUZXJtaW5hdGVFdmVudCgpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307CiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuc29sdmVyID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gbnVsbDsKICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JsZCwgW3sKICAgICAgICBrZXk6ICJkaXNwb3NlQm9keSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3Bvc2VCb2R5KF9yZWYyKSB7CiAgICAgICAgICB2YXIgdXVpZCA9IF9yZWYyLnV1aWQ7CiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTsKICAgICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5yZW1vdmVSaWdpZEJvZHkoZWxlbWVudC5ib2R5KTsKICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh1dWlkKTsKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRWxlbWVudERpc3Bvc2VkKHsKICAgICAgICAgICAgdXVpZDogdXVpZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ybGQ7CiAgICB9KCk7CiAgICB2YXIgd29ybGQgPSBuZXcgV29ybGQoKTsKCiAgICB2YXIgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjsKICAgIHZhciBERUZBVUxUX0ZSSUNUSU9OID0gMTAwMDsKICAgIHZhciBERUZBVUxUX01BU1MgPSA4MDA7CiAgICB2YXIgYWRkVmVoaWNsZSA9IGZ1bmN0aW9uIGFkZFZlaGljbGUoZGF0YSkgewogICAgICB2YXIgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aGVlbHMgPSBkYXRhLndoZWVscywKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVNTIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIHdpZHRoID0gX2RhdGEkd2lkdGggPT09IHZvaWQgMCA/IDEuOCA6IF9kYXRhJHdpZHRoLAogICAgICAgICAgX2RhdGEkaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBoZWlnaHQgPSBfZGF0YSRoZWlnaHQgPT09IHZvaWQgMCA/IC42IDogX2RhdGEkaGVpZ2h0LAogICAgICAgICAgX2RhdGEkbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBsZW5ndGggPSBfZGF0YSRsZW5ndGggPT09IHZvaWQgMCA/IDQgOiBfZGF0YSRsZW5ndGgsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyBERUZBVUxUX0ZSSUNUSU9OIDogX2RhdGEkZnJpY3Rpb24sCiAgICAgICAgICBfZGF0YSRyb2xsSW5mbHVlbmNlID0gZGF0YS5yb2xsSW5mbHVlbmNlLAogICAgICAgICAgcm9sbEluZmx1ZW5jZSA9IF9kYXRhJHJvbGxJbmZsdWVuY2UgPT09IHZvaWQgMCA/IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgOiBfZGF0YSRyb2xsSW5mbHVlbmNlLAogICAgICAgICAgX2RhdGEkd2hlZWxzT3B0aW9ucyA9IGRhdGEud2hlZWxzT3B0aW9ucywKICAgICAgICAgIHdoZWVsc09wdGlvbnMgPSBfZGF0YSR3aGVlbHNPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHdoZWVsc09wdGlvbnMsCiAgICAgICAgICBfZGF0YSRzdXNwZW5zaW9ucyA9IGRhdGEuc3VzcGVuc2lvbnMsCiAgICAgICAgICBzdXNwZW5zaW9ucyA9IF9kYXRhJHN1c3BlbnNpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHN1c3BlbnNpb25zOwogICAgICB2YXIgX3doZWVsc09wdGlvbnMkYmFjayA9IHdoZWVsc09wdGlvbnMuYmFjaywKICAgICAgICAgIGJhY2sgPSBfd2hlZWxzT3B0aW9ucyRiYWNrID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGJhY2ssCiAgICAgICAgICBfd2hlZWxzT3B0aW9ucyRmcm9udCA9IHdoZWVsc09wdGlvbnMuZnJvbnQsCiAgICAgICAgICBmcm9udCA9IF93aGVlbHNPcHRpb25zJGZyb250ID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGZyb250OwogICAgICB2YXIgX2JhY2skYXhpc1Bvc2l0aW9uID0gYmFjay5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25CYWNrID0gX2JhY2skYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAtMSA6IF9iYWNrJGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9iYWNrJHJhZGl1cyA9IGJhY2sucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNCYWNrID0gX2JhY2skcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9iYWNrJHJhZGl1cywKICAgICAgICAgIF9iYWNrJGhhbGZUcmFjayA9IGJhY2suaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tCYWNrID0gX2JhY2skaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2JhY2skaGFsZlRyYWNrLAogICAgICAgICAgX2JhY2skYXhpc0hlaWdodCA9IGJhY2suYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEJhY2sgPSBfYmFjayRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9iYWNrJGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfZnJvbnQkYXhpc1Bvc2l0aW9uID0gZnJvbnQuYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uRnJvbnQgPSBfZnJvbnQkYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAxLjcgOiBfZnJvbnQkYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2Zyb250JHJhZGl1cyA9IGZyb250LnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzRnJvbnQgPSBfZnJvbnQkcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9mcm9udCRyYWRpdXMsCiAgICAgICAgICBfZnJvbnQkaGFsZlRyYWNrID0gZnJvbnQuaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tGcm9udCA9IF9mcm9udCRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfZnJvbnQkaGFsZlRyYWNrLAogICAgICAgICAgX2Zyb250JGF4aXNIZWlnaHQgPSBmcm9udC5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0RnJvbnQgPSBfZnJvbnQkYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfZnJvbnQkYXhpc0hlaWdodDsKICAgICAgdmFyIF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9IHN1c3BlbnNpb25zLnN0aWZmbmVzcywKICAgICAgICAgIHN0aWZmbmVzcyA9IF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9PT0gdm9pZCAwID8gMjAuMCA6IF9zdXNwZW5zaW9ucyRzdGlmZm5lcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRkYW1waW5nID0gc3VzcGVuc2lvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfc3VzcGVuc2lvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gMi4zIDogX3N1c3BlbnNpb25zJGRhbXBpbmcsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPSBzdXNwZW5zaW9ucy5jb21wcmVzc2lvbiwKICAgICAgICAgIGNvbXByZXNzaW9uID0gX3N1c3BlbnNpb25zJGNvbXByZXNzID09PSB2b2lkIDAgPyA0LjQgOiBfc3VzcGVuc2lvbnMkY29tcHJlc3MsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPSBzdXNwZW5zaW9ucy5yZXN0TGVuZ3RoLAogICAgICAgICAgcmVzdExlbmd0aCA9IF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9PT0gdm9pZCAwID8gMC42IDogX3N1c3BlbnNpb25zJHJlc3RMZW5nOyAvLyBDaGFzc2lzCgogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIC41LCBoZWlnaHQgKiAuNSwgbGVuZ3RoICogLjUpKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgY2hhc3NpcyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgZ2VvbWV0cnksIGxvY2FsSW5lcnRpYSkpOwogICAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTsgLy8gUmF5Y2FzdCBWZWhpY2xlCgogICAgICB2YXIgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7CiAgICAgIHZhciByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7CiAgICAgIHZhciB2ZWhpY2xlID0gbmV3IEFtbW8uYnRSYXljYXN0VmVoaWNsZSh0dW5pbmcsIGNoYXNzaXMsIHJheUNhc3Rlcik7CiAgICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTsKICAgICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpOwogICAgICB2YXIgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApOwogICAgICB2YXIgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApOwoKICAgICAgdmFyIGFkZFdoZWVsID0gZnVuY3Rpb24gYWRkV2hlZWwoaXNGcm9udCwgcG9zLCByYWRpdXMpIHsKICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChwb3MsIHdoZWVsRGlyZWN0aW9uQ1MwLCB3aGVlbEF4bGVDUywgcmVzdExlbmd0aCwgcmFkaXVzLCB0dW5pbmcsIGlzRnJvbnQpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24oY29tcHJlc3Npb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpOwogICAgICB9OwoKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHR5cGU6IFRZUEVTLlZFSElDTEUsCiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLAogICAgICAgIHdoZWVsczogd2hlZWxzLAogICAgICAgIG9wdGlvbnM6IGRhdGEsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfVkVISUNMRV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0VmVoaWNsZVBvc2l0aW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUXVhdGVybmlvbiA9IGZ1bmN0aW9uIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHJlc2V0VmVoaWNsZSA9IGZ1bmN0aW9uIHJlc2V0VmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVZlaGljbGVVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIHZlaGljbGUgPSBfcmVmLnZlaGljbGUsCiAgICAgICAgICB3aGVlbHMgPSBfcmVmLndoZWVscywKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9WRUhJQ0xFX1NUQVRFIDogX3JlZiRzdGF0ZSwKICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucywKICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgewogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9KTsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLkRJUkVDVElPTiwgewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0KTsKICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTsKICAgIH07CgogICAgdmFyIGNyZWF0ZUdob3N0Q29sbGlkZXIgPSBmdW5jdGlvbiBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgcG9zaXRpb24pIHsKICAgICAgdmFyIGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBnaG9zdENvbGxpZGVyLnNldENvbGxpc2lvblNoYXBlKG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKSk7CiAgICAgIGdob3N0Q29sbGlkZXIuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4ocG9zaXRpb24pOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTsKICAgICAgZ2hvc3RDb2xsaWRlci5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICByZXR1cm4gewogICAgICAgIGdob3N0Q29sbGlkZXI6IGdob3N0Q29sbGlkZXIsCiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0KICAgICAgfTsKICAgIH07CiAgICB2YXIgZm9yRWFjaEdob3N0Q29sbGlzaW9uID0gZnVuY3Rpb24gZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIpIHsKICAgICAgdmFyIGZvckVhY2hDYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKCkge307CiAgICAgIHZhciBjb2xsaXNpb25zID0gZ2hvc3RDb2xsaWRlci5nZXROdW1PdmVybGFwcGluZ09iamVjdHMoKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGlzaW9uczsgaSsrKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IEFtbW8uY2FzdE9iamVjdChnaG9zdENvbGxpZGVyLmdldE92ZXJsYXBwaW5nT2JqZWN0KGkpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBvYmplY3QuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvblBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pIHsKICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247CgogICAgICBpZiAoIWV4cGxvc2lvblBvc2l0aW9uKSB7CiAgICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICB9CgogICAgICByZXR1cm4gZXhwbG9zaW9uUG9zaXRpb247CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvbkltcHVsc2UgPSBmdW5jdGlvbiBnZXRFeHBsb3Npb25JbXB1bHNlKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpIHsKICAgICAgdmFyIGRpc3RhbmNlID0gcG9zaXRpb24ub3Bfc3ViKGV4cGxvc2lvblBvc2l0aW9uKTsKICAgICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7CiAgICAgIHZhciBpbXB1bHNlID0gZGlzdGFuY2Uub3BfbXVsKHN0cmVuZ3RoKTsKICAgICAgaW1wdWxzZS5zZXRZKGltcHVsc2UueSgpICsgc3RyZW5ndGgpOwogICAgICByZXR1cm4gaW1wdWxzZTsKICAgIH07CiAgICB2YXIgY3JlYXRlRXhwbG9zaW9uID0gZnVuY3Rpb24gY3JlYXRlRXhwbG9zaW9uKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sCiAgICAgICAgICBfcmVmJHJhZGl1cyA9IF9yZWYucmFkaXVzLAogICAgICAgICAgcmFkaXVzID0gX3JlZiRyYWRpdXMgPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TSVpFUy5TTUFMTCA6IF9yZWYkcmFkaXVzLAogICAgICAgICAgX3JlZiRzdHJlbmd0aCA9IF9yZWYuc3RyZW5ndGgsCiAgICAgICAgICBzdHJlbmd0aCA9IF9yZWYkc3RyZW5ndGggPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TVFJFTkdUSFMuTUVESVVNIDogX3JlZiRzdHJlbmd0aDsKCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pOwoKICAgICAgICB2YXIgX2NyZWF0ZUdob3N0Q29sbGlkZXIgPSBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgZXhwbG9zaW9uUG9zaXRpb24pLAogICAgICAgICAgICBnaG9zdENvbGxpZGVyID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIuZ2hvc3RDb2xsaWRlciwKICAgICAgICAgICAgdHJhbnNmb3JtID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIudHJhbnNmb3JtOwoKICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIGZ1bmN0aW9uIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgewogICAgICAgICAgdmFyIG9yaWdpbiA9IG9iamVjdFRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICAgIG9iamVjdC5hY3RpdmF0ZSh0cnVlKTsKICAgICAgICAgIG9iamVjdC5hcHBseUNlbnRyYWxJbXB1bHNlKGdldEV4cGxvc2lvbkltcHVsc2Uob3JpZ2luLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpKTsKICAgICAgICB9KTsKICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpOwogICAgICAgIEFtbW8uZGVzdHJveShnaG9zdENvbGxpZGVyKTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICB9CiAgICB9OwoKICAgIHZhciBoYW5kbGVMb2FkRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykgewogICAgICByZXR1cm4gZnVuY3Rpb24gKEFtbW8pIHsKICAgICAgICBzZWxmLkFtbW8gPSBBbW1vOwoKICAgICAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZikgewogICAgICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELkJPWDoKICAgICAgICAgICAgICBhZGRCb3goZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5TUEhFUkU6CiAgICAgICAgICAgICAgYWRkU3BoZXJlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuVkVISUNMRToKICAgICAgICAgICAgICBhZGRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuTU9ERUw6CiAgICAgICAgICAgICAgYWRkTW9kZWwoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5QTEFZRVI6CiAgICAgICAgICAgICAgYWRkUGxheWVyKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5MSU5FQVJfVkVMT0NJVFk6CiAgICAgICAgICAgICAgc2V0TGluZWFyVmVsb2NpdHkoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULlBPU0lUSU9OOgogICAgICAgICAgICAgIHNldFBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5QT1NJVElPTjoKICAgICAgICAgICAgICBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlFVQVRFUk5JT046CiAgICAgICAgICAgICAgc2V0VmVoaWNsZVF1YXRlcm5pb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuUkVTRVQ6CiAgICAgICAgICAgICAgcmVzZXRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkFQUExZLklNUFVMU0U6CiAgICAgICAgICAgICAgYXBwbHlJbXB1c2UoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFOgogICAgICAgICAgICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5ESVNQT1NFOgogICAgICAgICAgICAgIHdvcmxkLmRpc3Bvc2VCb2R5KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FRkZFQ1RTLkVYUExPU0lPTjoKICAgICAgICAgICAgICBjcmVhdGVFeHBsb3Npb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURToKICAgICAgICAgICAgICB3b3JsZC50ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB3b3JsZC5pbml0KG9wdGlvbnMpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kUmVhZHlFdmVudCgpOwogICAgICAgIHdvcmxkLnNpbXVsYXRlKCk7CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBsb2FkQW1tbyA9IGZ1bmN0aW9uIGxvYWRBbW1vKG9wdGlvbnMpIHsKICAgICAgdmFyIHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTsKICAgICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRVcmwpOwogICAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpOwogICAgfTsKCiAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZjIpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhOwoKICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86CiAgICAgICAgICBsb2FkQW1tbyhkYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9OwoKfSgpKTsKCg==', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3MvbWVzc2FnZXMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvZWxlbWVudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3BsYXllci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvd29ybGQuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3ZlaGljbGVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9lZmZlY3RzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRVhQTE9TSU9OX1NJWkVTID0ge1xuICAgIFNNQUxMOiA0LFxuICAgIE1FRElVTTogNixcbiAgICBMQVJHRTogOCxcbiAgICBNQVNTSVZFOiAxMlxufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPU0lPTl9TVFJFTkdUSFMgPSB7XG4gICAgVkVSWV9XRUFLOiAyLFxuICAgIFdFQUs6IDQsXG4gICAgTUVESVVNOiA4LFxuICAgIExBUkdFOiAxNixcbiAgICBNQVNTSVZFOiAzMixcbiAgICBPS19OTzogNjRcbn07IiwiZXhwb3J0IGNvbnN0IFBIWVNJQ1NfRVZFTlRTID0ge1xuICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsXG4gICAgVEVSTUlOQVRFOiAncGh5c2ljczp0ZXJtaW5hdGUnLFxuICAgIExPQUQ6IHtcbiAgICAgICAgQU1NTzogJ3BoeXNpY3M6bG9hZDphbW1vJyxcbiAgICB9LFxuICAgIFJFQURZOiAncGh5c2ljczpyZWFkeScsXG4gICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsXG4gICAgVVBEQVRFOiAncGh5c2ljczp1cGRhdGUnLFxuICAgIFxuICAgIEFERDoge1xuICAgICAgICBCT1g6ICdwaHlzaWNzOmFkZDpib3gnLFxuICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsXG4gICAgICAgIE1PREVMOiAncGh5c2ljczphZGQ6bW9kZWwnLFxuICAgICAgICBQTEFZRVI6ICdwaHlzaWNzOmFkZDpwbGF5ZXInLFxuICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnLFxuICAgIH0sXG5cbiAgICBFTEVNRU5UOiB7XG4gICAgICAgIERJU1BPU0U6ICdwaHlzaWNzOmVsZW1lbnQ6ZGlzcG9zZScsXG4gICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLFxuICAgICAgICBVUERBVEU6ICdwaHlzaWNzOmVsZW1lbnQ6dXBkYXRlJyxcbiAgICAgICAgQ1JFQVRFRDogJ3BoeXNpY3M6ZWxlbWVudDpjcmVhdGVkJyxcblxuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpxdWF0ZXJuaW9uJyxcbiAgICAgICAgICAgIExJTkVBUl9WRUxPQ0lUWTogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6bGluZWFyX3ZlbG9jaXR5J1xuICAgICAgICB9LFxuXG4gICAgICAgIEFQUExZOiB7XG4gICAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVkVISUNMRToge1xuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpxdWF0ZXJuaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBSRVNFVDogJ3BoeXNpY3M6dmVoaWNsZTpyZXNldCcsXG4gICAgICAgIFxuICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsXG4gICAgICAgIERJUkVDVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpkaXJlY3Rpb24nXG4gICAgfSxcblxuICAgIEVGRkVDVFM6IHtcbiAgICAgICAgRVhQTE9TSU9OOiAncGh5c2ljczplZmZlY3RzOmV4cGxvc2lvbidcbiAgICB9XG59OyIsImltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xuXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hlciB7XG5cbiAgICBzZW5kUGh5c2ljc1VwZGF0ZSA9IGR0ID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlVQREFURSwgZHQgfSlcbiAgICBzZW5kUmVhZHlFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZIH0pO1xuICAgIHNlbmRUZXJtaW5hdGVFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURSB9KTtcblxuICAgIHNlbmRCb2R5VXBkYXRlID0gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpID0+IHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFLFxuICAgICAgICB1dWlkLFxuICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54KCksIHk6IHBvc2l0aW9uLnkoKSwgejogcG9zaXRpb24ueigpIH0sXG4gICAgICAgIHF1YXRlcm5pb246IHsgeDogcm90YXRpb24ueCgpLCB5OiByb3RhdGlvbi55KCksIHo6IHJvdGF0aW9uLnooKSwgdzogcm90YXRpb24udygpIH0sXG4gICAgICAgIGR0XG4gICAgfSk7XG5cbiAgICBzZW5kRGlzcGF0Y2hFdmVudCA9ICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnREYXRhXG4gICAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGlzcGF0Y2hlcigpOyIsImV4cG9ydCBjb25zdCBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSAoeyB4ID0gMCwgeSA9IDAsIHogPSAwIH0sIG1hdHJpeCA9IFtdKSA9PiB7XG4gICAgY29uc3QgdyA9IDEgLyAoIG1hdHJpeFsgMyBdICogeCArIG1hdHJpeFsgNyBdICogeSArIG1hdHJpeFsgMTEgXSAqIHogKyBtYXRyaXhbIDE1IF0gKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICggbWF0cml4WyAwIF0gKiB4ICsgbWF0cml4WyA0IF0gKiB5ICsgbWF0cml4WyA4IF0gKiB6ICsgbWF0cml4WyAxMiBdICkgKiB3LFxuICAgICAgICB5OiAoIG1hdHJpeFsgMSBdICogeCArIG1hdHJpeFsgNSBdICogeSArIG1hdHJpeFsgOSBdICogeiArIG1hdHJpeFsgMTMgXSApICogdyxcbiAgICAgICAgejogKCBtYXRyaXhbIDIgXSAqIHggKyBtYXRyaXhbIDYgXSAqIHkgKyBtYXRyaXhbIDEwIF0gKiB6ICsgbWF0cml4WyAxNCBdICkgKiB3LFxuICAgIH1cbn07IiwiaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlNYXRyaXg0VG9WZWN0b3IzXG59IGZyb20gJy4vbGliL21hdGgnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFLFxuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfU0NBTEUsXG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFksXG4gICAgREVGQVVMVF9JTVBVTFNFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSaWdpZEJvZHkgPSAoc2hhcGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzLFxuICAgICAgICBmcmljdGlvbixcbiAgICAgICAgcmVzdGl0dXRpb24gPSAuOSxcbiAgICAgICAgZGFtcGluZyA9IHsgbGluZWFyOiAwLjIsIGFuZ3VsYXI6IDAuMiB9XG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcblxuICAgIGNvbnN0IHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7XG4gICAgY29uc3QgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7XG5cbiAgICBcblxuICAgIGlmIChtYXNzID4gMCkge1xuICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTtcbiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7XG4gICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTtcbiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIH1cblxuICAgIC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZVxuICAgIGJvZHkudXVpZCA9IHV1aWQ7XG5cbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7XG5cbiAgICByZXR1cm4gYm9keTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE1vZGVsID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHZlcnRpY2VzLFxuICAgICAgICBtYXRyaWNlcyxcbiAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIG1hc3MgPSAwLFxuICAgICAgICBmcmljdGlvbiA9IDJcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHNjYWxlID0gREVGQVVMVF9TQ0FMRTtcblxuICAgIGNvbnN0IGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pO1xuXG4gICAgICAgIGlmIChpbmRleCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgICAgY29uc3QgYWkgPSBpbmRleFtqXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBiaSA9IGluZGV4W2ogKyAxXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBjaSA9IGluZGV4W2ogKyAyXSAqIDM7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1thaV0sIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwgejogY29tcG9uZW50c1thaSArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbYmldLCB5OiBjb21wb25lbnRzW2JpICsgMV0sIHo6IGNvbXBvbmVudHNbYmkgKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2NpXSwgeTogY29tcG9uZW50c1tjaSArIDFdLCB6OiBjb21wb25lbnRzW2NpICsgMl0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopO1xuICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopO1xuICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBqICs9IDkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDBdLCB5OiBjb21wb25lbnRzW2ogKyAxXSwgejogY29tcG9uZW50c1tqICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDNdLCB5OiBjb21wb25lbnRzW2ogKyA0XSwgejogY29tcG9uZW50c1tqICsgNV0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDZdLCB5OiBjb21wb25lbnRzW2ogKyA3XSwgejogY29tcG9uZW50c1tqICsgOF0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTtcbiAgICAgICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7XG4gICAgICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTtcbiAgICB0cmlNZXNoLnNldFNjYWxpbmcobG9jYWxTY2FsZSk7XG4gICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpO1xuXG4gICAgY29uc3QgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpO1xuICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTtcblxuICAgIEFtbW8uZGVzdHJveShidGEpO1xuICAgIEFtbW8uZGVzdHJveShidGIpO1xuICAgIEFtbW8uZGVzdHJveShidGMpO1xuXG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjb2xsaXNpb25TaGFwZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLk1FU0gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZEJveCA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB3aWR0aCwgbGVuZ3RoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzID0gMCwgZnJpY3Rpb24gPSAyIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5CT1gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTcGhlcmUgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHJhZGl1cywgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MgPSAwLCBmcmljdGlvbiA9IDIgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5TUEhFUkUsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRMaW5lYXJWZWxvY2l0eSA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB2ZWxvY2l0eSA9IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIH0gPSBkYXRhO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyh2ZWxvY2l0eS54LCB2ZWxvY2l0eS55LCB2ZWxvY2l0eS56KTtcbiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7XG4gICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldFBvc2l0aW9uID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnogKSk7XG5cbiAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG59XG5cbmV4cG9ydCBjb25zdCBhcHBseUltcHVzZSA9ICh7IHV1aWQsIGltcHVsc2UgPSBERUZBVUxUX0lNUFVMU0UgfSkgPT4ge1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopO1xuICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7XG4gICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVFbGVtZW50VXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgbGV0IG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBjcmVhdGVSaWdpZEJvZHkgfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcblxuaW1wb3J0IHtcbiAgICBUWVBFUyxcbiAgICBERUZBVUxUX1JJR0lEQk9EWV9TVEFURVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgYWRkUGxheWVyID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHdpZHRoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNhcHN1bGUsIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgLy8gZGlzYWJsaWluZyByb3RhdGlvbiBmb3IgY29sbGlzaW9uc1xuICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTtcblxuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuUExBWUVSLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlUGxheWVyVXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHsgbW92ZW1lbnQsIGRpcmVjdGlvbiwgY2FtZXJhRGlyZWN0aW9uLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gc3RhdGU7XG5cbiAgICBjb25zdCBNQVhfU1BFRUQgPSAxO1xuICAgIGNvbnN0IHdhbGtWZWxvY2l0eSA9IC4xO1xuXG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgY29uc3Qgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTtcblxuICAgICAgICBjb25zdCBmb3J3YXJkRGlyID0gdHJhbnNmb3JtLmdldEJhc2lzKCkuZ2V0Um93KDIpO1xuICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpO1xuICAgICAgICBjb25zdCB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApO1xuXG4gICAgICAgIGNvbnN0IHdhbGtTcGVlZCA9IHdhbGtWZWxvY2l0eSAqIGR0O1xuXG4gICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpICsgZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpIC0gZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpO1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTtcblxuICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgYm9keS5zZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICBsZXQgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTtcbiAgICB9XG59OyIsImltcG9ydCB7XG4gICAgR1JBVklUWSxcbiAgICBUWVBFU1xufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBoYW5kbGVFbGVtZW50VXBkYXRlIH0gZnJvbSAnLi9lbGVtZW50cyc7XG5pbXBvcnQgeyBoYW5kbGVWZWhpY2xlVXBkYXRlIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBoYW5kbGVQbGF5ZXJVcGRhdGUgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNsYXNzIENsb2NrIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RGVsdGEoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVsdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdvcmxkIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNvbHZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IG5ldyBBbW1vLmJ0RGlzY3JldGVEeW5hbWljc1dvcmxkKHRoaXMuZGlzcGF0Y2hlciwgdGhpcy5icm9hZHBoYXNlLCB0aGlzLnNvbHZlciwgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTtcblxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9uc1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGRcbiAgICAgICAgICAgIC5nZXRCcm9hZHBoYXNlKClcbiAgICAgICAgICAgIC5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpXG4gICAgICAgICAgICAuc2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayhuZXcgQW1tby5idEdob3N0UGFpckNhbGxiYWNrKCkpXG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0RHluYW1pY3NXb3JsZCA9ICgpID0+IHRoaXMuZHluYW1pY3NXb3JsZDtcblxuICAgIGFkZFJpZ2lkQm9keSA9IGJvZHkgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTtcbiAgICB9XG5cbiAgICBhZGRDb2xsaXNpb25PYmplY3QgPSBjb2xsaXNpb25PYmplY3QgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgc3RlcFNpbXVsYXRpb24gPSBkdCA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVFbGVtZW50VXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVBsYXllclVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmVoaWNsZVVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kUGh5c2ljc1VwZGF0ZShkdCk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNpbXVsYXRlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNvbGxpc2lvbnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCBhbW1vRGlzcGF0Y2hlciA9IHRoaXMuZHluYW1pY3NXb3JsZC5nZXREaXNwYXRjaGVyKCk7XG4gICAgICAgIGxldCBudW1NYW5pZm9sZHMgPSBhbW1vRGlzcGF0Y2hlci5nZXROdW1NYW5pZm9sZHMoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU1hbmlmb2xkczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBjb250YWN0TWFuaWZvbGQgPSBhbW1vRGlzcGF0Y2hlci5nZXRNYW5pZm9sZEJ5SW5kZXhJbnRlcm5hbChpKTtcblxuICAgICAgICAgICAgbGV0IHJiMCA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTAoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBsZXQgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkc1xuICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db250YWN0czsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTtcblxuICAgICAgICAgICAgICAgIGlmKCBkaXN0YW5jZSA+IDAuMCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmVsb2NpdHkwID0gcmIwLmdldExpbmVhclZlbG9jaXR5KCk7XG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MSA9IHJiMS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQigpO1xuICAgICAgICAgICAgICAgIGxldCBsb2NhbFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEEoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MxID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRCKCk7XG5cbiAgICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTAueCgpLCB5OiB2ZWxvY2l0eTAueSgpLCB6OiB2ZWxvY2l0eTAueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MwLngoKSwgeTogd29ybGRQb3MwLnkoKSwgejogd29ybGRQb3MwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMC54KCksIHk6IGxvY2FsUG9zMC55KCksIHo6IGxvY2FsUG9zMC56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTEueCgpLCB5OiB2ZWxvY2l0eTEueSgpLCB6OiB2ZWxvY2l0eTEueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MxLngoKSwgeTogd29ybGRQb3MxLnkoKSwgejogd29ybGRQb3MxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMS54KCksIHk6IGxvY2FsUG9zMS55KCksIHo6IGxvY2FsUG9zMS56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudChyYjEudXVpZCwgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5DT0xMSVNJT04sIHsgY29udGFjdHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRFbGVtZW50ID0gZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7XG4gICAgfVxuXG4gICAgdXBkYXRlQm9keVN0YXRlID0gKHsgdXVpZCwgc3RhdGUgfSkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZGlzcG9zZUJvZHkoeyB1dWlkIH0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kRWxlbWVudERpc3Bvc2VkKHsgdXVpZCB9KTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmR5bmFtaWNzV29ybGQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5zb2x2ZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kVGVybWluYXRlRXZlbnQoKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBQSFlTSUNTX0VWRU5UU1xufSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yO1xuY29uc3QgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7XG5jb25zdCBERUZBVUxUX01BU1MgPSA4MDA7XG5cbmV4cG9ydCBjb25zdCBhZGRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgdXVpZCxcbiAgICAgICAgd2hlZWxzLFxuICAgICAgICBtYXNzID0gREVGQVVMVF9NQVNTLFxuICAgICAgICB3aWR0aCA9IDEuOCxcbiAgICAgICAgaGVpZ2h0ID0gLjYsXG4gICAgICAgIGxlbmd0aCA9IDQsXG4gICAgICAgIGZyaWN0aW9uID0gREVGQVVMVF9GUklDVElPTixcbiAgICAgICAgcm9sbEluZmx1ZW5jZSA9IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UsXG4gICAgICAgIHdoZWVsc09wdGlvbnMgPSB7fSxcbiAgICAgICAgc3VzcGVuc2lvbnMgPSB7fVxuICAgIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgeyBiYWNrID0ge30sIGZyb250ID0ge30gfSA9IHdoZWVsc09wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgICBheGlzUG9zaXRpb246IGF4aXNQb3NpdGlvbkJhY2sgPSAtMSxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0JhY2sgPSAuNCxcbiAgICAgICAgaGFsZlRyYWNrOiB3aGVlbEhhbGZUcmFja0JhY2sgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRCYWNrID0gLjNcbiAgICB9ID0gYmFjaztcblxuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25Gcm9udCA9IDEuNyxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0Zyb250ID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tGcm9udCA9IDEsXG4gICAgICAgIGF4aXNIZWlnaHQ6IHdoZWVsQXhpc0hlaWdodEZyb250ID0gLjNcbiAgICB9ID0gZnJvbnQ7XG5cbiAgICBjb25zdCB7IHN0aWZmbmVzcyA9IDIwLjAsIGRhbXBpbmcgPSAyLjMsIGNvbXByZXNzaW9uID0gNC40LCByZXN0TGVuZ3RoID0gMC42IH0gPSBzdXNwZW5zaW9ucztcblxuXG4gICAgLy8gQ2hhc3Npc1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuICAgIGNvbnN0IGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTtcbiAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpO1xuXG5cbiAgICAvLyBSYXljYXN0IFZlaGljbGVcbiAgICBjb25zdCB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTtcbiAgICBjb25zdCByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLnNldEJvZHkoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VmVoaWNsZVF1YXRlcm5pb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHF1YXRlcm5pb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9ICh7IHZlaGljbGUsIHdoZWVscywgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1ZFSElDTEVfU1RBVEUsIG9wdGlvbnMgPSB7fSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHNwZWVkID0gdmVoaWNsZS5nZXRDdXJyZW50U3BlZWRLbUhvdXIoKTtcblxuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgeyBzcGVlZCB9KTtcblxuICAgIGxldCBicmVha2luZ0ZvcmNlID0gMDtcbiAgICBsZXQgZW5naW5lRm9yY2UgPSAwO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBzdGVlcmluZ0NsYW1wID0gREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCxcbiAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikge1xuICAgICAgICBpZiAoc3BlZWQgPCAtMSlcbiAgICAgICAgICAgIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO1xuICAgICAgICBlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5icmFraW5nKSB7XG4gICAgICAgIGlmIChzcGVlZCA+IDEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5sZWZ0KSB7XG4gICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0ZS5yaWdodCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7XG5cbiAgICBsZXQgdG0sIHAsIHEsIGk7XG4gICAgY29uc3QgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpO1xuICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTtcbiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpO1xuICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBjb25zdCB3aGVlbFVVSUQgPSB3aGVlbHNbaV07XG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7XG4gICAgfVxuXG4gICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpO1xuICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpO1xuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5ESVJFQ1RJT04sIHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLFxuICAgICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSxcbiAgICAgICAgICAgIHo6IGRpcmVjdGlvbi56KClcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBwLCBxLCBkdCk7XG4gICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTtcbn0iLCJpbXBvcnQgeyBFWFBMT1NJT05fU0laRVMsIEVYUExPU0lPTl9TVFJFTkdUSFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgd29ybGQgZnJvbSBcIi4vd29ybGRcIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdob3N0Q29sbGlkZXIgPSAocmFkaXVzLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTtcbiAgICBnaG9zdENvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKHBvc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgIHJldHVybiB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hHaG9zdENvbGxpc2lvbiA9IChnaG9zdENvbGxpZGVyLCBmb3JFYWNoQ2FsbGJhY2sgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb2xsaXNpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpO1xuXG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEV4cGxvc2lvblBvc2l0aW9uID0gKHV1aWQsIHBvc2l0aW9uKSA9PiB7XG4gICAgbGV0IGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgaWYgKCFleHBsb3Npb25Qb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBsb3Npb25JbXB1bHNlID0gKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHBvc2l0aW9uLm9wX3N1YihleHBsb3Npb25Qb3NpdGlvbik7XG4gICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7XG4gICAgY29uc3QgaW1wdWxzZSA9IGRpc3RhbmNlLm9wX211bChzdHJlbmd0aCk7XG5cbiAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7XG5cbiAgICByZXR1cm4gaW1wdWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGxvc2lvbiA9ICh7XG4gICAgdXVpZCxcbiAgICBwb3NpdGlvbixcbiAgICByYWRpdXMgPSBFWFBMT1NJT05fU0laRVMuU01BTEwsXG4gICAgc3RyZW5ndGggPSBFWFBMT1NJT05fU1RSRU5HVEhTLk1FRElVTVxufSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9ID0gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIGV4cGxvc2lvblBvc2l0aW9uKTtcblxuICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7XG5cbiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpO1xuICAgICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3koZ2hvc3RDb2xsaWRlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG59IiwiaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSwgcmVzZXRWZWhpY2xlLCBzZXRWZWhpY2xlUG9zaXRpb24sIHNldFZlaGljbGVRdWF0ZXJuaW9uIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBhZGRCb3gsIGFkZE1vZGVsLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUV4cGxvc2lvbiB9IGZyb20gJy4vZWZmZWN0cyc7XG5pbXBvcnQgeyBhZGRQbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGhhbmRsZUxvYWRFdmVudCA9IG9wdGlvbnMgPT4gQW1tbyA9PiB7XG4gICAgc2VsZi5BbW1vID0gQW1tbztcblxuICAgIG9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOlxuICAgICAgICAgICAgICAgIGFkZEJveChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRTpcbiAgICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOlxuICAgICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDpcbiAgICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjpcbiAgICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWTpcbiAgICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046XG4gICAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOlxuICAgICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjpcbiAgICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDpcbiAgICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRTpcbiAgICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6XG4gICAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkRJU1BPU0U6XG4gICAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVGRkVDVFMuRVhQTE9TSU9OOlxuICAgICAgICAgICAgICAgIGNyZWF0ZUV4cGxvc2lvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFOlxuICAgICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd29ybGQuaW5pdChvcHRpb25zKTtcbiAgICBkaXNwYXRjaGVyLnNlbmRSZWFkeUV2ZW50KCk7XG4gICAgd29ybGQuc2ltdWxhdGUoKVxufTtcblxuY29uc3QgbG9hZEFtbW8gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTtcbiAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7XG5cbiAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpO1xufTtcblxub25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86XG4gICAgICAgICAgICBsb2FkQW1tbyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJMSUJSQVJZX05BTUUiLCJUWVBFUyIsIkJPWCIsIlNQSEVSRSIsIlZFSElDTEUiLCJNRVNIIiwiUExBWUVSIiwiREVGQVVMVF9WRUhJQ0xFX1NUQVRFIiwidmVoaWNsZVN0ZWVyaW5nIiwiYWNjZWxlcmF0aW9uIiwiYnJlYWtpbmciLCJyaWdodCIsImxlZnQiLCJERUZBVUxUX1JJR0lEQk9EWV9TVEFURSIsInZlbG9jaXR5IiwieCIsInkiLCJ6IiwibW92ZW1lbnQiLCJmb3J3YXJkIiwiYmFja3dhcmRzIiwiZGlyZWN0aW9uIiwiREVGQVVMVF9TQ0FMRSIsIkRFRkFVTFRfTElORUFSX1ZFTE9DSVRZIiwiREVGQVVMVF9JTVBVTFNFIiwiRElTQUJMRV9ERUFDVElWQVRJT04iLCJHUkFWSVRZIiwiRlJPTlRfTEVGVCIsIkZST05UX1JJR0hUIiwiQkFDS19MRUZUIiwiQkFDS19SSUdIVCIsIkRFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIiwiREVGQVVMVF9TVEVFUklOR19DTEFNUCIsIkRFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSIsIkRFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIiwiRVhQTE9TSU9OX1NJWkVTIiwiU01BTEwiLCJNRURJVU0iLCJMQVJHRSIsIk1BU1NJVkUiLCJFWFBMT1NJT05fU1RSRU5HVEhTIiwiVkVSWV9XRUFLIiwiV0VBSyIsIk9LX05PIiwiUEhZU0lDU19FVkVOVFMiLCJESVNQQVRDSCIsIlRFUk1JTkFURSIsIkxPQUQiLCJBTU1PIiwiUkVBRFkiLCJJTklUIiwiVVBEQVRFIiwiQUREIiwiTU9ERUwiLCJFTEVNRU5UIiwiRElTUE9TRSIsIkNPTExJU0lPTiIsIkNSRUFURUQiLCJTRVQiLCJQT1NJVElPTiIsIlFVQVRFUk5JT04iLCJMSU5FQVJfVkVMT0NJVFkiLCJBUFBMWSIsIklNUFVMU0UiLCJSRVNFVCIsIlNQRUVEIiwiRElSRUNUSU9OIiwiRUZGRUNUUyIsIkVYUExPU0lPTiIsIkRpc3BhdGNoZXIiLCJkdCIsInBvc3RNZXNzYWdlIiwiZXZlbnQiLCJ1dWlkIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInF1YXRlcm5pb24iLCJ3IiwiZXZlbnROYW1lIiwiZXZlbnREYXRhIiwiYXBwbHlNYXRyaXg0VG9WZWN0b3IzIiwibWF0cml4IiwiY3JlYXRlUmlnaWRCb2R5Iiwic2hhcGUiLCJvcHRpb25zIiwibWFzcyIsImZyaWN0aW9uIiwicmVzdGl0dXRpb24iLCJkYW1waW5nIiwibGluZWFyIiwiYW5ndWxhciIsInRyYW5zZm9ybSIsIkFtbW8iLCJidFRyYW5zZm9ybSIsInNldElkZW50aXR5Iiwic2V0T3JpZ2luIiwiYnRWZWN0b3IzIiwic2V0Um90YXRpb24iLCJidFF1YXRlcm5pb24iLCJtb3Rpb25TdGF0ZSIsImJ0RGVmYXVsdE1vdGlvblN0YXRlIiwibG9jYWxJbmVydGlhIiwiY2FsY3VsYXRlTG9jYWxJbmVydGlhIiwicmJJbmZvIiwiYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvIiwiYm9keSIsImJ0UmlnaWRCb2R5Iiwic2V0RnJpY3Rpb24iLCJzZXRSZXN0aXR1dGlvbiIsInNldERhbXBpbmciLCJzZXRBY3RpdmF0aW9uU3RhdGUiLCJ3b3JsZCIsImFkZFJpZ2lkQm9keSIsImFkZE1vZGVsIiwidmVydGljZXMiLCJtYXRyaWNlcyIsImluZGV4ZXMiLCJzY2FsZSIsImJ0YSIsImJ0YiIsImJ0YyIsInRyaU1lc2giLCJidFRyaWFuZ2xlTWVzaCIsImkiLCJsZW5ndGgiLCJjb21wb25lbnRzIiwiaW5kZXgiLCJBcnJheSIsImZyb20iLCJqIiwiYWkiLCJiaSIsImNpIiwidmEiLCJ2YiIsInZjIiwic2V0VmFsdWUiLCJhZGRUcmlhbmdsZSIsImxvY2FsU2NhbGUiLCJzZXRTY2FsaW5nIiwiZGVzdHJveSIsImNvbGxpc2lvblNoYXBlIiwiYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSIsInJlc291cmNlcyIsInNldEJvZHkiLCJ0eXBlIiwic3RhdGUiLCJhZGRCb3giLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJnZW9tZXRyeSIsImJ0Qm94U2hhcGUiLCJhZGRTcGhlcmUiLCJyYWRpdXMiLCJidFNwaGVyZVNoYXBlIiwic2V0TGluZWFyVmVsb2NpdHkiLCJnZXRFbGVtZW50IiwiZ2V0TW90aW9uU3RhdGUiLCJsaW5lYXJWZWxvY2l0eSIsInNldFBvc2l0aW9uIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJzZXRXb3JsZFRyYW5zZm9ybSIsImFwcGx5SW1wdXNlIiwiaW1wdWxzZSIsImltcHVsc2VWZWN0b3IiLCJhcHBseUNlbnRyYWxJbXB1bHNlIiwiaGFuZGxlRWxlbWVudFVwZGF0ZSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0iLCJDbG9jayIsInRpbWVzdGFtcCIsInRpbWUiLCJEYXRlIiwibm93IiwiZGVsdGEiLCJXb3JsZCIsImdyYXZpdHkiLCJjb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0Q29sbGlzaW9uRGlzcGF0Y2hlciIsImJyb2FkcGhhc2UiLCJidERidnRCcm9hZHBoYXNlIiwic29sdmVyIiwiYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIiLCJkeW5hbWljc1dvcmxkIiwiYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQiLCJzZXRHcmF2aXR5IiwiZ2V0QnJvYWRwaGFzZSIsImdldE92ZXJsYXBwaW5nUGFpckNhY2hlIiwic2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayIsImJ0R2hvc3RQYWlyQ2FsbGJhY2siLCJpbml0aWFsaXNlZCIsImhhc0VsZW1lbnQiLCJlbGVtZW50cyIsImRlbGV0ZWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwiYWN0aW9uIiwiYWRkQWN0aW9uIiwiY29sbGlzaW9uT2JqZWN0IiwiYWRkQ29sbGlzaW9uT2JqZWN0Iiwic3RlcFNpbXVsYXRpb24iLCJjbG9jayIsImdldERlbHRhIiwiZWxlbWVudCIsImhhbmRsZVZlaGljbGVVcGRhdGUiLCJjYWxjdWxhdGVDb2xsaXNpb25zIiwicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwic2VuZFBoeXNpY3NVcGRhdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNpbXVsYXRlIiwiYmluZCIsImFtbW9EaXNwYXRjaGVyIiwiZ2V0RGlzcGF0Y2hlciIsIm51bU1hbmlmb2xkcyIsImdldE51bU1hbmlmb2xkcyIsImNvbnRhY3RNYW5pZm9sZCIsImdldE1hbmlmb2xkQnlJbmRleEludGVybmFsIiwicmIwIiwiY2FzdE9iamVjdCIsImdldEJvZHkwIiwicmIxIiwiZ2V0Qm9keTEiLCJudW1Db250YWN0cyIsImdldE51bUNvbnRhY3RzIiwiY29udGFjdHMiLCJjb250YWN0UG9pbnQiLCJnZXRDb250YWN0UG9pbnQiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlIiwidmVsb2NpdHkwIiwidmVsb2NpdHkxIiwid29ybGRQb3MwIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSIsIndvcmxkUG9zMSIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkIiLCJsb2NhbFBvczAiLCJnZXRfbV9sb2NhbFBvaW50QSIsImxvY2FsUG9zMSIsImdldF9tX2xvY2FsUG9pbnRCIiwicHVzaCIsIndvcmxkUG9zIiwibG9jYWxQb3MiLCJzZW5kRGlzcGF0Y2hFdmVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwic2VuZFRlcm1pbmF0ZUV2ZW50IiwidW5kZWZpbmVkIiwicmVtb3ZlUmlnaWRCb2R5IiwicmVtb3ZlRWxlbWVudCIsInNlbmRFbGVtZW50RGlzcG9zZWQiLCJERUZBVUxUX1JPTExfSU5GTFVFTkNFIiwiREVGQVVMVF9GUklDVElPTiIsIkRFRkFVTFRfTUFTUyIsImFkZFZlaGljbGUiLCJ3aGVlbHMiLCJyb2xsSW5mbHVlbmNlIiwid2hlZWxzT3B0aW9ucyIsInN1c3BlbnNpb25zIiwiYmFjayIsImZyb250IiwiYXhpc1Bvc2l0aW9uIiwiYXhpc1Bvc2l0aW9uQmFjayIsIndoZWVsUmFkaXVzQmFjayIsImhhbGZUcmFjayIsIndoZWVsSGFsZlRyYWNrQmFjayIsImF4aXNIZWlnaHQiLCJ3aGVlbEF4aXNIZWlnaHRCYWNrIiwiYXhpc1Bvc2l0aW9uRnJvbnQiLCJ3aGVlbFJhZGl1c0Zyb250Iiwid2hlZWxIYWxmVHJhY2tGcm9udCIsIndoZWVsQXhpc0hlaWdodEZyb250Iiwic3RpZmZuZXNzIiwiY29tcHJlc3Npb24iLCJyZXN0TGVuZ3RoIiwiY2hhc3NpcyIsInR1bmluZyIsImJ0VmVoaWNsZVR1bmluZyIsInJheUNhc3RlciIsImJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIiLCJnZXREeW5hbWljc1dvcmxkIiwidmVoaWNsZSIsImJ0UmF5Y2FzdFZlaGljbGUiLCJzZXRDb29yZGluYXRlU3lzdGVtIiwid2hlZWxEaXJlY3Rpb25DUzAiLCJ3aGVlbEF4bGVDUyIsImFkZFdoZWVsIiwiaXNGcm9udCIsInBvcyIsIndoZWVsSW5mbyIsInNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3MiLCJzZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbiIsInNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbiIsInNldF9tX2ZyaWN0aW9uU2xpcCIsInNldF9tX3JvbGxJbmZsdWVuY2UiLCJzZXRWZWhpY2xlUG9zaXRpb24iLCJnZXRSaWdpZEJvZHkiLCJzZXRWZWhpY2xlUXVhdGVybmlvbiIsInJlc2V0VmVoaWNsZSIsImdldEN1cnJlbnRTcGVlZEttSG91ciIsImJyZWFraW5nRm9yY2UiLCJlbmdpbmVGb3JjZSIsInN0ZWVyaW5nQ2xhbXAiLCJzdGVlcmluZ0luY3JlbWVudCIsIm1heEVuZ2luZUZvcmNlIiwibWF4QnJlYWtpbmdGb3JjZSIsImJyYWtpbmciLCJhcHBseUVuZ2luZUZvcmNlIiwic2V0QnJha2UiLCJzZXRTdGVlcmluZ1ZhbHVlIiwidG0iLCJwIiwicSIsIm4iLCJnZXROdW1XaGVlbHMiLCJ1cGRhdGVXaGVlbFRyYW5zZm9ybSIsImdldFdoZWVsVHJhbnNmb3JtV1MiLCJ3aGVlbFVVSUQiLCJnZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0iLCJnZXRGb3J3YXJkVmVjdG9yIiwidXBkYXRlQm9keVN0YXRlIiwiY3JlYXRlR2hvc3RDb2xsaWRlciIsImdob3N0Q29sbGlkZXIiLCJidEdob3N0T2JqZWN0Iiwic2V0Q29sbGlzaW9uU2hhcGUiLCJmb3JFYWNoR2hvc3RDb2xsaXNpb24iLCJmb3JFYWNoQ2FsbGJhY2siLCJjb2xsaXNpb25zIiwiZ2V0TnVtT3ZlcmxhcHBpbmdPYmplY3RzIiwib2JqZWN0IiwiZ2V0T3ZlcmxhcHBpbmdPYmplY3QiLCJnZXRFeHBsb3Npb25Qb3NpdGlvbiIsImV4cGxvc2lvblBvc2l0aW9uIiwiZ2V0RXhwbG9zaW9uSW1wdWxzZSIsInN0cmVuZ3RoIiwib3Bfc3ViIiwib3BfbXVsIiwic2V0WSIsImNyZWF0ZUV4cGxvc2lvbiIsIm9iamVjdFRyYW5zZm9ybSIsImFjdGl2YXRlIiwicmVtb3ZlQ29sbGlzaW9uT2JqZWN0IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLFlBQVksR0FBRyxTQUFyQjtJQUVBLElBQU1DLEtBQUssR0FBRztJQUNqQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFk7SUFFakJDLEVBQUFBLE1BQU0sRUFBRSxRQUZTO0lBR2pCQyxFQUFBQSxPQUFPLEVBQUUsU0FIUTtJQUlqQkMsRUFBQUEsSUFBSSxFQUFFLE1BSlc7SUFLakJDLEVBQUFBLE1BQU0sRUFBRTtJQUxTLENBQWQ7SUFlQSxJQUFNQyxxQkFBcUIsR0FBRztJQUNqQ0MsRUFBQUEsZUFBZSxFQUFFLENBRGdCO0lBRWpDQyxFQUFBQSxZQUFZLEVBQUUsS0FGbUI7SUFHakNDLEVBQUFBLFFBQVEsRUFBRSxLQUh1QjtJQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLEtBSjBCO0lBS2pDQyxFQUFBQSxJQUFJLEVBQUU7SUFMMkIsQ0FBOUI7SUFRQSxJQUFNQyx1QkFBdUIsR0FBRztJQUNuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQUVDLElBQUFBLENBQUMsRUFBRSxDQUFMO0lBQVFDLElBQUFBLENBQUMsRUFBRSxDQUFYO0lBQWNDLElBQUFBLENBQUMsRUFBRTtJQUFqQixHQUR5QjtJQUVuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQ05DLElBQUFBLE9BQU8sRUFBRSxLQURIO0lBRU5DLElBQUFBLFNBQVMsRUFBRSxLQUZMO0lBR05SLElBQUFBLElBQUksRUFBRSxLQUhBO0lBSU5ELElBQUFBLEtBQUssRUFB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', false);
|
|
57509
57523
|
/* eslint-enable */var PHYSICS_EVENTS = {
|
|
57510
57524
|
DISPATCH: 'physics:dispatch',
|
|
57511
57525
|
TERMINATE: 'physics:terminate',
|
|
@@ -57526,6 +57540,7 @@ function isNodeJS() {
|
|
|
57526
57540
|
DISPOSE: 'physics:element:dispose',
|
|
57527
57541
|
COLLISION: 'physics:element:collision',
|
|
57528
57542
|
UPDATE: 'physics:element:update',
|
|
57543
|
+
CREATED: 'physics:element:created',
|
|
57529
57544
|
SET: {
|
|
57530
57545
|
POSITION: 'physics:element:set:position',
|
|
57531
57546
|
QUATERNION: 'physics:element:set:quaternion',
|
|
@@ -57543,6 +57558,9 @@ function isNodeJS() {
|
|
|
57543
57558
|
RESET: 'physics:vehicle:reset',
|
|
57544
57559
|
SPEED: 'physics:vehicle:speed',
|
|
57545
57560
|
DIRECTION: 'physics:vehicle:direction'
|
|
57561
|
+
},
|
|
57562
|
+
EFFECTS: {
|
|
57563
|
+
EXPLOSION: 'physics:effects:explosion'
|
|
57546
57564
|
}
|
|
57547
57565
|
};var PI = Math.PI;
|
|
57548
57566
|
var PI_2 = PI / 2;
|
|
@@ -57742,7 +57760,21 @@ var BACK_RIGHT = 3;
|
|
|
57742
57760
|
var DEFAULT_STEERING_INCREMENT = .04;
|
|
57743
57761
|
var DEFAULT_STEERING_CLAMP = .5;
|
|
57744
57762
|
var DEFAULT_MAX_ENGINE_FORCE = 2000;
|
|
57745
|
-
var DEFAULT_MAX_BREAKING_FORCE = 100;
|
|
57763
|
+
var DEFAULT_MAX_BREAKING_FORCE = 100;
|
|
57764
|
+
var EXPLOSION_SIZES = {
|
|
57765
|
+
SMALL: 4,
|
|
57766
|
+
MEDIUM: 6,
|
|
57767
|
+
LARGE: 8,
|
|
57768
|
+
MASSIVE: 12
|
|
57769
|
+
};
|
|
57770
|
+
var EXPLOSION_STRENGTHS = {
|
|
57771
|
+
VERY_WEAK: 2,
|
|
57772
|
+
WEAK: 4,
|
|
57773
|
+
MEDIUM: 8,
|
|
57774
|
+
LARGE: 16,
|
|
57775
|
+
MASSIVE: 32,
|
|
57776
|
+
OK_NO: 64
|
|
57777
|
+
};var constants$1=/*#__PURE__*/Object.freeze({__proto__:null,LIBRARY_NAME: LIBRARY_NAME,TYPES: TYPES,COLLIDER_TYPES: COLLIDER_TYPES,DEFAULT_VEHICLE_STATE: DEFAULT_VEHICLE_STATE,DEFAULT_RIGIDBODY_STATE: DEFAULT_RIGIDBODY_STATE,DEFAULT_SCALE: DEFAULT_SCALE,DEFAULT_QUATERNION: DEFAULT_QUATERNION,DEFAULT_POSITION: DEFAULT_POSITION,DEFAULT_LINEAR_VELOCITY: DEFAULT_LINEAR_VELOCITY,DEFAULT_IMPULSE: DEFAULT_IMPULSE,DISABLE_DEACTIVATION: DISABLE_DEACTIVATION,GRAVITY: GRAVITY,FRONT_LEFT: FRONT_LEFT,FRONT_RIGHT: FRONT_RIGHT,BACK_LEFT: BACK_LEFT,BACK_RIGHT: BACK_RIGHT,DEFAULT_STEERING_INCREMENT: DEFAULT_STEERING_INCREMENT,DEFAULT_STEERING_CLAMP: DEFAULT_STEERING_CLAMP,DEFAULT_MAX_ENGINE_FORCE: DEFAULT_MAX_ENGINE_FORCE,DEFAULT_MAX_BREAKING_FORCE: DEFAULT_MAX_BREAKING_FORCE,EXPLOSION_SIZES: EXPLOSION_SIZES,EXPLOSION_STRENGTHS: EXPLOSION_STRENGTHS});var DEFAULT_DESCRIPTION = {
|
|
57746
57778
|
mass: 1,
|
|
57747
57779
|
friction: 1,
|
|
57748
57780
|
quaternion: DEFAULT_QUATERNION,
|
|
@@ -58077,6 +58109,30 @@ function (_EventDispatcher) {
|
|
|
58077
58109
|
}
|
|
58078
58110
|
});
|
|
58079
58111
|
|
|
58112
|
+
_defineProperty(_assertThisInitialized(_this), "disposeElement", function (element) {
|
|
58113
|
+
if (Config$1.physics().enabled) {
|
|
58114
|
+
var uuid = element.uuid();
|
|
58115
|
+
|
|
58116
|
+
_this.worker.postMessage({
|
|
58117
|
+
event: PHYSICS_EVENTS.ELEMENT.DISPOSE,
|
|
58118
|
+
uuid: uuid
|
|
58119
|
+
});
|
|
58120
|
+
}
|
|
58121
|
+
});
|
|
58122
|
+
|
|
58123
|
+
_defineProperty(_assertThisInitialized(_this), "explosion", function (element, strength, radius) {
|
|
58124
|
+
if (Config$1.physics().enabled) {
|
|
58125
|
+
var uuid = element.uuid();
|
|
58126
|
+
|
|
58127
|
+
_this.worker.postMessage({
|
|
58128
|
+
event: PHYSICS_EVENTS.EFFECTS.EXPLOSION,
|
|
58129
|
+
uuid: uuid,
|
|
58130
|
+
strength: strength,
|
|
58131
|
+
radius: radius
|
|
58132
|
+
});
|
|
58133
|
+
}
|
|
58134
|
+
});
|
|
58135
|
+
|
|
58080
58136
|
_this.elements = [];
|
|
58081
58137
|
return _this;
|
|
58082
58138
|
}
|
|
@@ -58413,6 +58469,10 @@ var VOLUME = 2;
|
|
|
58413
58469
|
var AUDIO_EVENTS = {
|
|
58414
58470
|
ENDED: 'ended'
|
|
58415
58471
|
};
|
|
58472
|
+
var AUDIO_RAMPS = {
|
|
58473
|
+
LINEAR: 'LINEAR',
|
|
58474
|
+
EXPONENTIAL: 'EXPONENTIAL'
|
|
58475
|
+
};
|
|
58416
58476
|
var Audio$1 =
|
|
58417
58477
|
/*#__PURE__*/
|
|
58418
58478
|
function () {
|
|
@@ -58471,14 +58531,17 @@ function () {
|
|
|
58471
58531
|
|
|
58472
58532
|
this.masterVolumeNode = null;
|
|
58473
58533
|
this.context = null;
|
|
58474
|
-
this.numSound = 0;
|
|
58475
|
-
this.soundLoaded = 0;
|
|
58476
58534
|
this.sounds = [];
|
|
58477
58535
|
this.map = {};
|
|
58478
58536
|
this.currentLevel = ROOT;
|
|
58479
58537
|
}
|
|
58480
58538
|
|
|
58481
58539
|
_createClass(Audio, [{
|
|
58540
|
+
key: "reset",
|
|
58541
|
+
value: function reset() {
|
|
58542
|
+
this.sounds = [];
|
|
58543
|
+
}
|
|
58544
|
+
}, {
|
|
58482
58545
|
key: "hasContext",
|
|
58483
58546
|
value: function hasContext() {
|
|
58484
58547
|
return !!this.context;
|
|
@@ -58572,6 +58635,16 @@ function () {
|
|
|
58572
58635
|
m.elements[13] = my;
|
|
58573
58636
|
m.elements[14] = mz;
|
|
58574
58637
|
}
|
|
58638
|
+
}, {
|
|
58639
|
+
key: "dispose",
|
|
58640
|
+
value: function dispose() {
|
|
58641
|
+
for (var index in this.sounds) {
|
|
58642
|
+
var sound = this.sounds[index];
|
|
58643
|
+
sound.dispose();
|
|
58644
|
+
}
|
|
58645
|
+
|
|
58646
|
+
this.reset();
|
|
58647
|
+
}
|
|
58575
58648
|
}, {
|
|
58576
58649
|
key: "update",
|
|
58577
58650
|
value: function update(dt) {
|
|
@@ -58653,6 +58726,12 @@ function () {
|
|
|
58653
58726
|
this.connect();
|
|
58654
58727
|
}
|
|
58655
58728
|
}
|
|
58729
|
+
}, {
|
|
58730
|
+
key: "dispose",
|
|
58731
|
+
value: function dispose() {
|
|
58732
|
+
this.stop();
|
|
58733
|
+
this.disconnect();
|
|
58734
|
+
}
|
|
58656
58735
|
}, {
|
|
58657
58736
|
key: "getVolume",
|
|
58658
58737
|
value: function getVolume() {
|
|
@@ -58685,11 +58764,18 @@ function () {
|
|
|
58685
58764
|
key: "play",
|
|
58686
58765
|
value: function play() {
|
|
58687
58766
|
var volume = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getVolume();
|
|
58767
|
+
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1;
|
|
58768
|
+
var ramp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AUDIO_RAMPS.LINEAR;
|
|
58688
58769
|
if (this.playing) return;
|
|
58689
58770
|
this.setVolume(0);
|
|
58690
58771
|
this.source.start();
|
|
58691
58772
|
this.playing = true;
|
|
58692
|
-
|
|
58773
|
+
|
|
58774
|
+
if (ramp === AUDIO_RAMPS.LINEAR) {
|
|
58775
|
+
this.volumeNode.gain.linearRampToValueAtTime(volume, Audio$2.context.currentTime + delay);
|
|
58776
|
+
} else {
|
|
58777
|
+
this.volumeNode.gain.exponentialRampToValueAtTime(volume, Audio$2.context.currentTime + delay);
|
|
58778
|
+
}
|
|
58693
58779
|
}
|
|
58694
58780
|
}, {
|
|
58695
58781
|
key: "onSoundEnded",
|
|
@@ -58701,10 +58787,18 @@ function () {
|
|
|
58701
58787
|
value: function stop() {
|
|
58702
58788
|
var _this = this;
|
|
58703
58789
|
|
|
58704
|
-
|
|
58790
|
+
var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.1;
|
|
58791
|
+
var ramp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AUDIO_RAMPS.LINEAR;
|
|
58792
|
+
|
|
58793
|
+
if (ramp === AUDIO_RAMPS.LINEAR) {
|
|
58794
|
+
this.volumeNode.gain.linearRampToValueAtTime(0, Audio$2.context.currentTime + delay);
|
|
58795
|
+
} else {
|
|
58796
|
+
this.volumeNode.gain.exponentialRampToValueAtTime(0, Audio$2.context.currentTime + delay);
|
|
58797
|
+
}
|
|
58798
|
+
|
|
58705
58799
|
setTimeout(function () {
|
|
58706
58800
|
_this.source.stop();
|
|
58707
|
-
},
|
|
58801
|
+
}, delay);
|
|
58708
58802
|
}
|
|
58709
58803
|
}, {
|
|
58710
58804
|
key: "detune",
|
|
@@ -72939,7 +73033,7 @@ function (_EventDispatcher) {
|
|
|
72939
73033
|
_this.offset = new Vector3$1(); // so camera.up is the orbit axis
|
|
72940
73034
|
|
|
72941
73035
|
_this.quat = new Quaternion().setFromUnitVectors(_this.object.up, new Vector3$1(0, 1, 0));
|
|
72942
|
-
_this.quatInverse = _this.quat.clone().
|
|
73036
|
+
_this.quatInverse = _this.quat.clone().invert();
|
|
72943
73037
|
_this.lastPosition = new Vector3$1();
|
|
72944
73038
|
_this.lastQuaternion = new Quaternion();
|
|
72945
73039
|
return _this;
|
|
@@ -73115,7 +73209,7 @@ function (_Object3D) {
|
|
|
73115
73209
|
|
|
73116
73210
|
_this.tempVector.set(1e-10, 1e-10, 1e-10).add(_this.worldPositionStart).sub(_this.worldPosition).multiplyScalar(-1);
|
|
73117
73211
|
|
|
73118
|
-
_this.tempVector.applyQuaternion(_this.worldQuaternionStart.clone().
|
|
73212
|
+
_this.tempVector.applyQuaternion(_this.worldQuaternionStart.clone().invert());
|
|
73119
73213
|
|
|
73120
73214
|
handle.scale.copy(_this.tempVector);
|
|
73121
73215
|
handle.visible = _this.dragging;
|
|
@@ -73228,7 +73322,7 @@ function (_Object3D) {
|
|
|
73228
73322
|
// Align handles to current local or world rotation
|
|
73229
73323
|
_this.tempQuaternion2.copy(quaternion);
|
|
73230
73324
|
|
|
73231
|
-
_this.alignVector.copy(_this.eye).applyQuaternion(_this.tempQuaternion.copy(quaternion).
|
|
73325
|
+
_this.alignVector.copy(_this.eye).applyQuaternion(_this.tempQuaternion.copy(quaternion).invert());
|
|
73232
73326
|
|
|
73233
73327
|
if (handle.name.search("E") !== -1) {
|
|
73234
73328
|
handle.quaternion.setFromRotationMatrix(_this.lookAtMatrix.lookAt(_this.eye, _this.zeroVector, _this.unitY));
|
|
@@ -73762,7 +73856,7 @@ function (_Object3D) {
|
|
|
73762
73856
|
_this.pointStart.copy(planeIntersect.point).sub(_this.worldPositionStart);
|
|
73763
73857
|
|
|
73764
73858
|
if (space === 'local') {
|
|
73765
|
-
_this.pointStart.applyQuaternion(_this.worldQuaternionStart.clone().
|
|
73859
|
+
_this.pointStart.applyQuaternion(_this.worldQuaternionStart.clone().invert());
|
|
73766
73860
|
}
|
|
73767
73861
|
}
|
|
73768
73862
|
|
|
@@ -73794,7 +73888,7 @@ function (_Object3D) {
|
|
|
73794
73888
|
|
|
73795
73889
|
_this.pointEnd.copy(planeIntersect.point).sub(_this.worldPositionStart);
|
|
73796
73890
|
|
|
73797
|
-
if (space === 'local') _this.pointEnd.applyQuaternion(_this.worldQuaternionStart.clone().
|
|
73891
|
+
if (space === 'local') _this.pointEnd.applyQuaternion(_this.worldQuaternionStart.clone().invert());
|
|
73798
73892
|
|
|
73799
73893
|
if (mode === 'translate') {
|
|
73800
73894
|
if (axis.search('X') === -1) {
|
|
@@ -73820,7 +73914,7 @@ function (_Object3D) {
|
|
|
73820
73914
|
|
|
73821
73915
|
if (_this.translationSnap) {
|
|
73822
73916
|
if (space === 'local') {
|
|
73823
|
-
object.position.applyQuaternion(_this._tempQuaternion.copy(_this._quaternionStart).
|
|
73917
|
+
object.position.applyQuaternion(_this._tempQuaternion.copy(_this._quaternionStart).invert());
|
|
73824
73918
|
|
|
73825
73919
|
if (axis.search('X') !== -1) {
|
|
73826
73920
|
object.position.x = Math.round(object.position.x / _this.translationSnap) * _this.translationSnap;
|
|
@@ -73957,7 +74051,7 @@ function (_Object3D) {
|
|
|
73957
74051
|
|
|
73958
74052
|
_this.pointEnd.copy(planeIntersect.point).sub(_this.worldPositionStart);
|
|
73959
74053
|
|
|
73960
|
-
if (space === 'local') _this.pointEnd.applyQuaternion(_this.worldQuaternionStart.clone().
|
|
74054
|
+
if (space === 'local') _this.pointEnd.applyQuaternion(_this.worldQuaternionStart.clone().invert());
|
|
73961
74055
|
|
|
73962
74056
|
if (mode === 'translate') {
|
|
73963
74057
|
if (axis.search('X') === -1) {
|
|
@@ -73983,7 +74077,7 @@ function (_Object3D) {
|
|
|
73983
74077
|
|
|
73984
74078
|
if (_this.translationSnap) {
|
|
73985
74079
|
if (space === 'local') {
|
|
73986
|
-
object.position.applyQuaternion(_this._tempQuaternion.copy(_this._quaternionStart).
|
|
74080
|
+
object.position.applyQuaternion(_this._tempQuaternion.copy(_this._quaternionStart).invert());
|
|
73987
74081
|
|
|
73988
74082
|
if (axis.search('X') !== -1) {
|
|
73989
74083
|
object.position.x = Math.round(object.position.x / _this.translationSnap) * _this.translationSnap;
|
|
@@ -75619,6 +75713,7 @@ function (_EventDispatcher) {
|
|
|
75619
75713
|
_this.disableInput();
|
|
75620
75714
|
|
|
75621
75715
|
Physics$1.dispose();
|
|
75716
|
+
Audio$2.dispose();
|
|
75622
75717
|
Particles$1.dispose();
|
|
75623
75718
|
PostProcessing$1.dispose();
|
|
75624
75719
|
Universe$1.bigfreeze();
|
|
@@ -81237,8 +81332,11 @@ var dispatchLocationPathChange = function dispatchLocationPathChange(path) {
|
|
|
81237
81332
|
var mount$2 = function mount() {
|
|
81238
81333
|
var _Config$ui = Config$1.ui(),
|
|
81239
81334
|
_Config$ui$root = _Config$ui.root,
|
|
81240
|
-
root = _Config$ui$root === void 0 ? BaseUI : _Config$ui$root
|
|
81335
|
+
root = _Config$ui$root === void 0 ? BaseUI : _Config$ui$root,
|
|
81336
|
+
_Config$ui$enabled = _Config$ui.enabled,
|
|
81337
|
+
enabled = _Config$ui$enabled === void 0 ? true : _Config$ui$enabled;
|
|
81241
81338
|
|
|
81339
|
+
if (!enabled) return;
|
|
81242
81340
|
var store = getStore();
|
|
81243
81341
|
var uiElement = createElement(root, createProps());
|
|
81244
81342
|
|
|
@@ -81252,8 +81350,13 @@ var mount$2 = function mount() {
|
|
|
81252
81350
|
}
|
|
81253
81351
|
};
|
|
81254
81352
|
var unmount$2 = function unmount() {
|
|
81255
|
-
|
|
81353
|
+
var _Config$ui2 = Config$1.ui(),
|
|
81354
|
+
_Config$ui2$enabled = _Config$ui2.enabled,
|
|
81355
|
+
enabled = _Config$ui2$enabled === void 0 ? true : _Config$ui2$enabled;
|
|
81356
|
+
|
|
81357
|
+
if (!enabled) return; // Rendering null will trigger unmount lifecycle hooks for whole vDOM tree and remove global event listeners.
|
|
81256
81358
|
// https://github.com/infernojs/inferno#tear-down
|
|
81359
|
+
|
|
81257
81360
|
render(null, document.querySelector(ROOT_ID));
|
|
81258
81361
|
};var hasLocation = function hasLocation() {
|
|
81259
81362
|
return window && window.location;
|
|
@@ -83220,4 +83323,4 @@ var Shaders$1 = new Shaders();var Shader$1 = function Shader(name, attributes, u
|
|
|
83220
83323
|
this.instance = this.shader.instance;
|
|
83221
83324
|
}
|
|
83222
83325
|
};// import Assets from './core/Assets';
|
|
83223
|
-
window.THREE = THREE$1;export{LightAmbient as AmbientLight,Atmosphere,Audio$2 as Audio,BUILTIN,BackgroundSound,BaseScript,Box,Camera$1 as Camera,Color$1 as Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_TYPES,Element,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight$1 as HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line$1 as Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PARTICLES,constants$1 as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter as ParticlEmitter,Particles$1 as Particles,index as Partykals,Physics$1 as Physics,Plane$1 as Plane,PointLight$1 as PointLight,PostProcessing$1 as PostProcessing,Provider,Router$1 as Router,Scene$2 as Scene,Scripts$1 as Scripts,Shader$1 as Shader,Skybox,Sound,Sphere$1 as Sphere,SpotLight$1 as SpotLight,Sprite$1 as Sprite,Stats$1 as Stats,SunLight,THREE$1 as THREE,Universe$1 as Universe,Vector3$1 as Vector3,author$1 as author,connect,constants,functions,math,utils as physicsUtils,index$1 as store,strings,uuid$1 as uuid,workers};
|
|
83326
|
+
window.THREE = THREE$1;export{AUDIO_RAMPS,LightAmbient as AmbientLight,Atmosphere,Audio$2 as Audio,BUILTIN,BackgroundSound,BaseScript,Box,Camera$1 as Camera,Color$1 as Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_TYPES,Element,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight$1 as HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line$1 as Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PARTICLES,constants$1 as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter as ParticlEmitter,Particles$1 as Particles,index as Partykals,Physics$1 as Physics,Plane$1 as Plane,PointLight$1 as PointLight,PostProcessing$1 as PostProcessing,Provider,Router$1 as Router,Scene$2 as Scene,Scripts$1 as Scripts,Shader$1 as Shader,Skybox,Sound,Sphere$1 as Sphere,SpotLight$1 as SpotLight,Sprite$1 as Sprite,Stats$1 as Stats,SunLight,THREE$1 as THREE,Universe$1 as Universe,Vector3$1 as Vector3,author$1 as author,connect,constants,functions,math,utils as physicsUtils,index$1 as store,strings,uuid$1 as uuid,workers};
|