@appium/driver-test-support 0.2.0 → 0.2.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/build/lib/e2e-suite.d.ts +261 -11
- package/build/lib/e2e-suite.d.ts.map +1 -1
- package/build/lib/e2e-suite.js +4 -5
- package/build/lib/e2e-suite.js.map +1 -0
- package/build/lib/helpers.js +3 -3
- package/build/lib/helpers.js.map +1 -0
- package/build/lib/index.d.ts +53 -3
- package/build/lib/index.d.ts.map +1 -1
- package/build/lib/index.js +19 -12
- package/build/lib/index.js.map +1 -0
- package/build/lib/unit-suite.d.ts +114 -6
- package/build/lib/unit-suite.d.ts.map +1 -1
- package/build/lib/unit-suite.js +3 -3
- package/build/lib/unit-suite.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/e2e-suite.js +13 -7
- package/lib/index.js +8 -3
- package/lib/unit-suite.js +8 -3
- package/package.json +5 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["TEST_HOST","testPort","getTestPort","force","port","getPort","createAppiumURL","curry","address","session","pathname","test","path","URL","href"],"sources":["../../lib/helpers.js"],"sourcesContent":["import getPort from 'get-port';\nimport {curry} from 'lodash';\n\n/**\n * Default test host\n */\nconst TEST_HOST = '127.0.0.1';\n\nlet testPort;\n\n/**\n * Returns a free port; one per process\n * @param {boolean} [force] - If true, do not reuse the port (if it already exists)\n * @returns {Promise<number>} a free port\n */\nasync function getTestPort(force = false) {\n if (force || !testPort) {\n let port = await getPort();\n if (!testPort) {\n testPort = port;\n }\n return port;\n }\n return testPort;\n}\n\n/**\n * Build an Appium URL from components.\n *\n * **All** parameters are required. Provide an empty string (`''`) if you don't need one.\n * To rearrange arguments (if needed), use the placeholder from Lodash (`_`).\n *\n */\nconst createAppiumURL = curry(\n /**\n * @param {string} address - Base address (w/ optional protocol)\n * @param {string|number} port - Port number\n * @param {string?} session - Session ID\n * @param {string} pathname - Extra path\n * @returns {string} New URL\n * @example\n *\n * import _ from 'lodash';\n *\n * // http://127.0.0.1:31337/session\n * createAppiumURL('127.0.0.1', 31337, '', 'session')\n *\n * // http://127.0.0.1:31337/session/asdfgjkl\n * const createSessionURL = createAppiumURL('127.0.0.1', 31337, _, 'session')\n * createSessionURL('asdfgjkl')\n *\n * // http://127.0.0.1:31337/session/asdfgjkl/appium/execute\n * const createURLWithPath = createAppiumURL('127.0.0.1', 31337, 'asdfgjkl');\n * createURLWithPath('appium/execute')\n */\n (address, port, session, pathname) => {\n if (!/^https?:\\/\\//.test(address)) {\n address = `http://${address}`;\n }\n let path = session ? `session/${session}` : '';\n if (pathname) {\n path = `${path}/${pathname}`;\n }\n return new URL(path, `${address}:${port}`).href;\n }\n);\n\nexport {TEST_HOST, getTestPort, createAppiumURL};\n"],"mappings":";;;;;;;;;;AAAA;;AACA;;;;AAKA,MAAMA,SAAS,GAAG,WAAlB;;AAEA,IAAIC,QAAJ;;AAOA,eAAeC,WAAf,CAA2BC,KAAK,GAAG,KAAnC,EAA0C;EACxC,IAAIA,KAAK,IAAI,CAACF,QAAd,EAAwB;IACtB,IAAIG,IAAI,GAAG,MAAM,IAAAC,gBAAA,GAAjB;;IACA,IAAI,CAACJ,QAAL,EAAe;MACbA,QAAQ,GAAGG,IAAX;IACD;;IACD,OAAOA,IAAP;EACD;;EACD,OAAOH,QAAP;AACD;;AASD,MAAMK,eAAe,GAAG,IAAAC,aAAA,EAsBtB,CAACC,OAAD,EAAUJ,IAAV,EAAgBK,OAAhB,EAAyBC,QAAzB,KAAsC;EACpC,IAAI,CAAC,eAAeC,IAAf,CAAoBH,OAApB,CAAL,EAAmC;IACjCA,OAAO,GAAI,UAASA,OAAQ,EAA5B;EACD;;EACD,IAAII,IAAI,GAAGH,OAAO,GAAI,WAAUA,OAAQ,EAAtB,GAA0B,EAA5C;;EACA,IAAIC,QAAJ,EAAc;IACZE,IAAI,GAAI,GAAEA,IAAK,IAAGF,QAAS,EAA3B;EACD;;EACD,OAAO,IAAIG,GAAJ,CAAQD,IAAR,EAAe,GAAEJ,OAAQ,IAAGJ,IAAK,EAAjC,EAAoCU,IAA3C;AACD,CA/BqB,CAAxB"}
|
package/build/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,57 @@
|
|
|
1
|
-
export * from "./e2e-suite";
|
|
2
1
|
export * from "./unit-suite";
|
|
3
2
|
export * from "./helpers";
|
|
4
3
|
export type DriverClass = import('@appium/types').DriverClass;
|
|
5
|
-
export type
|
|
6
|
-
export type
|
|
4
|
+
export type BaseNSCapabilities = import('@appium/types').BaseNSCapabilities;
|
|
5
|
+
export type W3CCapabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
|
|
6
|
+
readonly platformName: {
|
|
7
|
+
readonly presence: true;
|
|
8
|
+
readonly isString: true;
|
|
9
|
+
};
|
|
10
|
+
readonly app: {
|
|
11
|
+
readonly isString: true;
|
|
12
|
+
};
|
|
13
|
+
readonly deviceName: {
|
|
14
|
+
readonly isString: true;
|
|
15
|
+
};
|
|
16
|
+
readonly platformVersion: {
|
|
17
|
+
readonly isString: true;
|
|
18
|
+
};
|
|
19
|
+
readonly newCommandTimeout: {
|
|
20
|
+
readonly isNumber: true;
|
|
21
|
+
};
|
|
22
|
+
readonly automationName: {
|
|
23
|
+
readonly isString: true;
|
|
24
|
+
};
|
|
25
|
+
readonly autoLaunch: {
|
|
26
|
+
readonly isBoolean: true;
|
|
27
|
+
};
|
|
28
|
+
readonly udid: {
|
|
29
|
+
readonly isString: true;
|
|
30
|
+
};
|
|
31
|
+
readonly orientation: {
|
|
32
|
+
readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
|
|
33
|
+
};
|
|
34
|
+
readonly autoWebview: {
|
|
35
|
+
readonly isBoolean: true;
|
|
36
|
+
};
|
|
37
|
+
readonly noReset: {
|
|
38
|
+
readonly isBoolean: true;
|
|
39
|
+
};
|
|
40
|
+
readonly fullReset: {
|
|
41
|
+
readonly isBoolean: true;
|
|
42
|
+
};
|
|
43
|
+
readonly language: {
|
|
44
|
+
readonly isString: true;
|
|
45
|
+
};
|
|
46
|
+
readonly locale: {
|
|
47
|
+
readonly isString: true;
|
|
48
|
+
};
|
|
49
|
+
readonly eventTimings: {
|
|
50
|
+
readonly isBoolean: true;
|
|
51
|
+
};
|
|
52
|
+
readonly printPageSourceOnFindFailure: {
|
|
53
|
+
readonly isBoolean: true;
|
|
54
|
+
};
|
|
55
|
+
}, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').W3CCapabilities<C, Extra>;
|
|
56
|
+
export { createSessionHelpers, driverE2ETestSuite } from "./e2e-suite";
|
|
7
57
|
//# sourceMappingURL=index.d.ts.map
|
package/build/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":";;0BAKa,OAAO,eAAe,EAAE,WAAW;iCACnC,OAAO,eAAe,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAM1C,OAAO,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC"}
|
package/build/lib/index.js
CHANGED
|
@@ -3,26 +3,32 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
createSessionHelpers: true,
|
|
8
|
+
driverE2ETestSuite: true
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "createSessionHelpers", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _e2eSuite.createSessionHelpers;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(exports, "driverE2ETestSuite", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _e2eSuite.driverE2ETestSuite;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
6
22
|
|
|
7
23
|
require("source-map-support/register");
|
|
8
24
|
|
|
9
25
|
var _e2eSuite = require("./e2e-suite");
|
|
10
26
|
|
|
11
|
-
Object.keys(_e2eSuite).forEach(function (key) {
|
|
12
|
-
if (key === "default" || key === "__esModule") return;
|
|
13
|
-
if (key in exports && exports[key] === _e2eSuite[key]) return;
|
|
14
|
-
Object.defineProperty(exports, key, {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: function () {
|
|
17
|
-
return _e2eSuite[key];
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
27
|
var _unitSuite = require("./unit-suite");
|
|
23
28
|
|
|
24
29
|
Object.keys(_unitSuite).forEach(function (key) {
|
|
25
30
|
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
26
32
|
if (key in exports && exports[key] === _unitSuite[key]) return;
|
|
27
33
|
Object.defineProperty(exports, key, {
|
|
28
34
|
enumerable: true,
|
|
@@ -36,6 +42,7 @@ var _helpers = require("./helpers");
|
|
|
36
42
|
|
|
37
43
|
Object.keys(_helpers).forEach(function (key) {
|
|
38
44
|
if (key === "default" || key === "__esModule") return;
|
|
45
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
39
46
|
if (key in exports && exports[key] === _helpers[key]) return;
|
|
40
47
|
Object.defineProperty(exports, key, {
|
|
41
48
|
enumerable: true,
|
|
@@ -44,4 +51,4 @@ Object.keys(_helpers).forEach(function (key) {
|
|
|
44
51
|
}
|
|
45
52
|
});
|
|
46
53
|
});
|
|
47
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vbGliL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7Y3JlYXRlU2Vzc2lvbkhlbHBlcnMsIGRyaXZlckUyRVRlc3RTdWl0ZX0gZnJvbSAnLi9lMmUtc3VpdGUnO1xuZXhwb3J0ICogZnJvbSAnLi91bml0LXN1aXRlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycyc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkJhc2VOU0NhcGFiaWxpdGllc30gQmFzZU5TQ2FwYWJpbGl0aWVzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSBbQz1pbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5CYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNdXG4gKiBAdGVtcGxhdGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlN0cmluZ1JlY29yZHx2b2lkfSBbRXh0cmE9dm9pZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXM8QywgRXh0cmE+fSBXM0NDYXBhYmlsaXRpZXNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0lBQUE7SUFBQTtNQUFBO0lBQUE7RUFBQTtBQUFBOztBQUNBOztBQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7SUFBQTtJQUFBO01BQUE7SUFBQTtFQUFBO0FBQUEifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../lib/index.js"],"sourcesContent":["export {createSessionHelpers, driverE2ETestSuite} from './e2e-suite';\nexport * from './unit-suite';\nexport * from './helpers';\n\n/**\n * @typedef {import('@appium/types').DriverClass} DriverClass\n * @typedef {import('@appium/types').BaseNSCapabilities} BaseNSCapabilities\n */\n\n/**\n * @template {import('@appium/types').Constraints} [C=import('@appium/types').BaseDriverCapConstraints]\n * @template {import('@appium/types').StringRecord|void} [Extra=void]\n * @typedef {import('@appium/types').W3CCapabilities<C, Extra>} W3CCapabilities\n */\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
|
@@ -1,12 +1,120 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Creates unit test suites for a driver.
|
|
3
3
|
* @param {DriverClass} DriverClass
|
|
4
|
-
* @param {
|
|
4
|
+
* @param {Partial<BaseNSCapabilities>} [defaultCaps]
|
|
5
5
|
*/
|
|
6
|
-
export function driverUnitTestSuite(DriverClass: DriverClass, defaultCaps?: Partial<import("@
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
export function driverUnitTestSuite(DriverClass: DriverClass, defaultCaps?: Partial<import("@appium/types").CapsToNSCaps<import("@appium/types").ConstraintsToCaps<{
|
|
7
|
+
readonly platformName: {
|
|
8
|
+
readonly presence: true;
|
|
9
|
+
readonly isString: true;
|
|
10
|
+
};
|
|
11
|
+
readonly app: {
|
|
12
|
+
readonly isString: true;
|
|
13
|
+
};
|
|
14
|
+
readonly deviceName: {
|
|
15
|
+
readonly isString: true;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Creates unit test suites for a driver.
|
|
19
|
+
* @param {DriverClass} DriverClass
|
|
20
|
+
* @param {Partial<BaseNSCapabilities>} [defaultCaps]
|
|
21
|
+
*/
|
|
22
|
+
readonly platformVersion: {
|
|
23
|
+
readonly isString: true;
|
|
24
|
+
};
|
|
25
|
+
readonly newCommandTimeout: {
|
|
26
|
+
readonly isNumber: true;
|
|
27
|
+
};
|
|
28
|
+
readonly automationName: {
|
|
29
|
+
readonly isString: true;
|
|
30
|
+
};
|
|
31
|
+
readonly autoLaunch: {
|
|
32
|
+
readonly isBoolean: true;
|
|
33
|
+
};
|
|
34
|
+
readonly udid: {
|
|
35
|
+
readonly isString: true;
|
|
36
|
+
};
|
|
37
|
+
readonly orientation: {
|
|
38
|
+
readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
|
|
39
|
+
};
|
|
40
|
+
readonly autoWebview: {
|
|
41
|
+
readonly isBoolean: true; /** @type {import('sinon').SinonSandbox} */
|
|
42
|
+
};
|
|
43
|
+
readonly noReset: {
|
|
44
|
+
readonly isBoolean: true;
|
|
45
|
+
};
|
|
46
|
+
readonly fullReset: {
|
|
47
|
+
readonly isBoolean: true;
|
|
48
|
+
};
|
|
49
|
+
readonly language: {
|
|
50
|
+
readonly isString: true;
|
|
51
|
+
};
|
|
52
|
+
readonly locale: {
|
|
53
|
+
readonly isString: true;
|
|
54
|
+
};
|
|
55
|
+
readonly eventTimings: {
|
|
56
|
+
readonly isBoolean: true;
|
|
57
|
+
};
|
|
58
|
+
readonly printPageSourceOnFindFailure: {
|
|
59
|
+
readonly isBoolean: true;
|
|
60
|
+
};
|
|
61
|
+
}>, "appium">> | undefined): void;
|
|
9
62
|
export type DriverClass = import('@appium/types').DriverClass;
|
|
10
|
-
export type
|
|
11
|
-
export type
|
|
63
|
+
export type BaseNSCapabilities = import('@appium/types').BaseNSCapabilities;
|
|
64
|
+
export type W3CCapabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
|
|
65
|
+
readonly platformName: {
|
|
66
|
+
readonly presence: true;
|
|
67
|
+
readonly isString: true;
|
|
68
|
+
};
|
|
69
|
+
readonly app: {
|
|
70
|
+
readonly isString: true;
|
|
71
|
+
};
|
|
72
|
+
readonly deviceName: {
|
|
73
|
+
readonly isString: true;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Creates unit test suites for a driver.
|
|
77
|
+
* @param {DriverClass} DriverClass
|
|
78
|
+
* @param {Partial<BaseNSCapabilities>} [defaultCaps]
|
|
79
|
+
*/
|
|
80
|
+
readonly platformVersion: {
|
|
81
|
+
readonly isString: true;
|
|
82
|
+
};
|
|
83
|
+
readonly newCommandTimeout: {
|
|
84
|
+
readonly isNumber: true;
|
|
85
|
+
};
|
|
86
|
+
readonly automationName: {
|
|
87
|
+
readonly isString: true;
|
|
88
|
+
};
|
|
89
|
+
readonly autoLaunch: {
|
|
90
|
+
readonly isBoolean: true;
|
|
91
|
+
};
|
|
92
|
+
readonly udid: {
|
|
93
|
+
readonly isString: true;
|
|
94
|
+
};
|
|
95
|
+
readonly orientation: {
|
|
96
|
+
readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
|
|
97
|
+
};
|
|
98
|
+
readonly autoWebview: {
|
|
99
|
+
readonly isBoolean: true; /** @type {import('sinon').SinonSandbox} */
|
|
100
|
+
};
|
|
101
|
+
readonly noReset: {
|
|
102
|
+
readonly isBoolean: true;
|
|
103
|
+
};
|
|
104
|
+
readonly fullReset: {
|
|
105
|
+
readonly isBoolean: true;
|
|
106
|
+
};
|
|
107
|
+
readonly language: {
|
|
108
|
+
readonly isString: true;
|
|
109
|
+
};
|
|
110
|
+
readonly locale: {
|
|
111
|
+
readonly isString: true;
|
|
112
|
+
};
|
|
113
|
+
readonly eventTimings: {
|
|
114
|
+
readonly isBoolean: true;
|
|
115
|
+
};
|
|
116
|
+
readonly printPageSourceOnFindFailure: {
|
|
117
|
+
readonly isBoolean: true;
|
|
118
|
+
};
|
|
119
|
+
}, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').W3CCapabilities<C, Extra>;
|
|
12
120
|
//# sourceMappingURL=unit-suite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-suite.d.ts","sourceRoot":"","sources":["../../lib/unit-suite.js"],"names":[],"mappings":"AAYA;;;;GAIG;AAEH,iDAJW,WAAW
|
|
1
|
+
{"version":3,"file":"unit-suite.d.ts","sourceRoot":"","sources":["../../lib/unit-suite.js"],"names":[],"mappings":"AAYA;;;;GAIG;AAEH,iDAJW,WAAW;;;;;;;;;;;IAFtB;;;;OAIG;;;;;;;;;;;;;;;;;;;;kCAWC,2CAA2C;;;;;;;;;;;;;;;;;;;;kCAslB9C;0BAGY,OAAO,eAAe,EAAE,WAAW;iCACnC,OAAO,eAAe,EAAE,kBAAkB;;;;;;;;;;;;IAzmBvD;;;;OAIG;;;;;;;;;;;;;;;;;;;;kCAWC,2CAA2C;;;;;;;;;;;;;;;;;;;;uEAgmBlC,OAAO,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC"}
|
package/build/lib/unit-suite.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -17,6 +15,8 @@ var _sinon = require("sinon");
|
|
|
17
15
|
|
|
18
16
|
var _chai = _interopRequireDefault(require("chai"));
|
|
19
17
|
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
20
|
const should = _chai.default.should();
|
|
21
21
|
|
|
22
22
|
const {
|
|
@@ -548,4 +548,4 @@ function driverUnitTestSuite(DriverClass, defaultCaps = {}) {
|
|
|
548
548
|
});
|
|
549
549
|
});
|
|
550
550
|
}
|
|
551
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzaG91bGQiLCJjaGFpIiwiZXhwZWN0IiwiZHJpdmVyVW5pdFRlc3RTdWl0ZSIsIkRyaXZlckNsYXNzIiwiZGVmYXVsdENhcHMiLCJjbGFzc05hbWUiLCJuYW1lIiwiZGVzY3JpYmUiLCJkIiwidzNjQ2FwcyIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwiY3JlYXRlU2FuZGJveCIsImFsd2F5c01hdGNoIiwicGxhdGZvcm1OYW1lIiwiZmlyc3RNYXRjaCIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJiYXNlVmVyc2lvbiIsImV4aXN0IiwicHJldmlvdXNQcmVmaXgiLCJsb2ciLCJwcmVmaXgiLCJjcmVhdGVTZXNzaW9uIiwibm90IiwidG8iLCJlcWwiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzZXNzSWQiLCJiZSIsImEiLCJsZW5ndGgiLCJhYm92ZSIsIl8iLCJjbG9uZURlZXAiLCJyZWplY3RlZFdpdGgiLCJzZXNzaW9uSWQxIiwiZXF1YWwiLCJzZXNzaW9uSWQiLCJzZXNzaW9uSWQyIiwiY2FwcyIsImdldFNlc3Npb24iLCJzZXNzaW9ucyIsImdldFNlc3Npb25zIiwiaW5jbHVkZSIsImlkIiwiY2FwYWJpbGl0aWVzIiwiZGV2aWNlTmFtZSIsInN0dWIiLCJjYWxsc0Zha2UiLCJCIiwiZGVsYXkiLCJjbWRQcm9taXNlIiwiZXhlY3V0ZUNvbW1hbmQiLCJwIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJFcnJvciIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjYWxsIiwicHJvdG9jb2wiLCJjbG9uZSIsImRyaXZlckZvclNlc3Npb24iLCJ3YWl0TXMiLCJEYXRlIiwibm93IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm51bUNtZHMiLCJjbWRzIiwiaSIsInB1c2giLCJyZXN1bHRzIiwiYWxsIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJ2YWx1ZSIsInJlYXNvbiIsIm1lc3NhZ2UiLCJjb250YWluIiwiYmVmb3JlIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsInRpbWVvdXRzIiwiaW1wbGljaXRXYWl0TXMiLCJ1bmRlZmluZWQiLCJnZXRUaW1lb3V0cyIsImV2ZW50dWFsbHkiLCJoYXZlIiwicHJvcGVydHkiLCJkZWVwIiwiaW1wbGljaXQiLCJjb21tYW5kIiwibmV3Q2FwcyIsInByb3h5QWN0aXZlIiwiYW4iLCJpbnN0YW5jZW9mIiwiRnVuY3Rpb24iLCJmYWxzZSIsInRocm93IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJBcnJheSIsImNhblByb3h5IiwiYXZvaWRTdHViIiwicmV0dXJucyIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJ0cnVlIiwiYmVmb3JlU3RhcnRUaW1lIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJuZXdTZXNzaW9uUmVxdWVzdGVkIiwibmV3U2Vzc2lvblN0YXJ0ZWQiLCJjbWQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwibG9nRXZlbnQiLCJmb28iLCJiYXIiLCJyZXMiLCJldmVudHMiLCJzZXQiLCJyZXNldCIsImFsbG93SW5zZWN1cmUiLCJpc0ZlYXR1cmVFbmFibGVkIiwiZGVueUluc2VjdXJlIiwicmVsYXhlZFNlY3VyaXR5RW5hYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91bml0LXN1aXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge2NyZWF0ZVNhbmRib3h9IGZyb20gJ3Npbm9uJztcblxuaW1wb3J0IGNoYWkgZnJvbSAnY2hhaSc7XG5cbmNvbnN0IHNob3VsZCA9IGNoYWkuc2hvdWxkKCk7XG5jb25zdCB7ZXhwZWN0fSA9IGNoYWk7XG5cbi8vIHdyYXAgdGhlc2UgdGVzdHMgaW4gYSBmdW5jdGlvbiBzbyB3ZSBjYW4gZXhwb3J0IHRoZSB0ZXN0cyBhbmQgcmUtdXNlIHRoZW1cbi8vIGZvciBhY3R1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9uc1xuXG4vKipcbiAqIENyZWF0ZXMgdW5pdCB0ZXN0IHN1aXRlcyBmb3IgYSBkcml2ZXIuXG4gKiBAcGFyYW0ge0RyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHBhcmFtIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9IFtkZWZhdWx0Q2Fwc11cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZHJpdmVyVW5pdFRlc3RTdWl0ZShEcml2ZXJDbGFzcywgZGVmYXVsdENhcHMgPSB7fSkge1xuICAvLyB0byBkaXNwbGF5IHRoZSBkcml2ZXIgdW5kZXIgdGVzdCBpbiByZXBvcnRcbiAgY29uc3QgY2xhc3NOYW1lID0gRHJpdmVyQ2xhc3MubmFtZSA/PyAnKHVua25vd24gZHJpdmVyKSc7XG5cbiAgZGVzY3JpYmUoYEJhc2VEcml2ZXIgdW5pdCBzdWl0ZSAoYXMgJHtjbGFzc05hbWV9KWAsIGZ1bmN0aW9uICgpIHtcbiAgICAvKiogQHR5cGUge0luc3RhbmNlVHlwZTx0eXBlb2YgRHJpdmVyQ2xhc3M+fSAqL1xuICAgIGxldCBkO1xuICAgIC8qKiBAdHlwZSB7VzNDQ2FwYWJpbGl0aWVzfSAqL1xuICAgIGxldCB3M2NDYXBzO1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzaW5vbicpLlNpbm9uU2FuZGJveH0gKi9cbiAgICBsZXQgc2FuZGJveDtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goKTtcbiAgICAgIGQgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIHczY0NhcHMgPSB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENhcHMsXG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3N0YXRpYyBwcm9wZXJ0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc2NyaWJlKCdiYXNlVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBEcml2ZXJDbGFzcy5iYXNlVmVyc2lvbi5zaG91bGQuZXhpc3Q7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nIHByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2V0dXAgbG9nIHByZWZpeCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ByZWZpeCA9IGQubG9nLnByZWZpeDtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHtcbiAgICAgICAgICBhbHdheXNNYXRjaDogey4uLmRlZmF1bHRDYXBzLCBwbGF0Zm9ybU5hbWU6ICdGYWtlJywgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCd9LFxuICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV4cGVjdChwcmV2aW91c1ByZWZpeCkubm90LnRvLmVxbChkLmxvZy5wcmVmaXgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgICAgIGV4cGVjdChwcmV2aW91c1ByZWZpeCkudG8uZXFsKGQubG9nLnByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RhdHVzIG9iamVjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzdGF0dXMgPSBhd2FpdCBkLmdldFN0YXR1cygpO1xuICAgICAgc3RhdHVzLnNob3VsZC5lcWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzZXNzaW9uSWQgZnJvbSBjcmVhdGVTZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHczY0NhcHMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlc3NJZCk7XG4gICAgICBzZXNzSWQuc2hvdWxkLmJlLmEoJ3N0cmluZycpO1xuICAgICAgc2Vzc0lkLmxlbmd0aC5zaG91bGQuYmUuYWJvdmUoNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHN0YXJ0IHR3byBzZXNzaW9ucyB3aXRob3V0IGNsb3NpbmcgdGhlIGZpcnN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnc2Vzc2lvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSBhIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2Vzc2lvbklkMSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbChkLnNlc3Npb25JZCwgbnVsbCk7XG4gICAgICBsZXQgc2Vzc2lvbklkMiA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBzZXNzaW9uSWQxLnNob3VsZC5ub3QuZXFsKHNlc3Npb25JZDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgdGhlIGN1cnJlbnQgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBbLCBjYXBzXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih3M2NDYXBzKTtcbiAgICAgIGNhcHMuc2hvdWxkLmVxdWFsKGF3YWl0IGQuZ2V0U2Vzc2lvbigpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHNlc3Npb25zIGlmIG5vIHNlc3Npb24gZXhpc3RzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuICAgICAgc2Vzc2lvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHNlc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FwcyA9IF8uY2xvbmVEZWVwKHczY0NhcHMpO1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKGNhcHMpO1xuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuXG4gICAgICBzZXNzaW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2Vzc2lvbnNbMF0uc2hvdWxkLmluY2x1ZGUoe1xuICAgICAgICBpZDogZC5zZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICAgIHNlc3Npb25zWzBdLmNhcGFiaWxpdGllcy5zaG91bGQuaW5jbHVkZSh7XG4gICAgICAgIGRldmljZU5hbWU6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmdWxmaWxsIGFuIHVuZXhwZWN0ZWQgZHJpdmVyIHF1aXQgcHJvbWlzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIHNhbmRib3guc3R1YihkLCAnZ2V0U3RhdHVzJykuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgICAgcmV0dXJuICdnb29kIHN0YXR1cyc7XG4gICAgICB9KTtcbiAgICAgIGxldCBjbWRQcm9taXNlID0gZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDEwKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdvblVuZXhwZWN0ZWRTaHV0ZG93biBldmVudCBpcyBleHBlY3RlZCB0byBiZSBmaXJlZCB3aXRoaW4gNSBzZWNvbmRzIHRpbWVvdXQnXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgICBkLm9uVW5leHBlY3RlZFNodXRkb3duKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgICBkLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKG5ldyBFcnJvcignV2UgY3Jhc2hlZCcpKTtcbiAgICAgIGF3YWl0IGNtZFByb21pc2Uuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvV2UgY3Jhc2hlZC8pO1xuICAgICAgYXdhaXQgcDtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGNvbW1hbmRzIGluIG1pZGRsZSBvZiB1bmV4cGVjdGVkIHNodXRkb3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbWFrZSBhIGNvbW1hbmQgdGhhdCB3aWxsIHdhaXQgYSBiaXQgc28gd2UgY2FuIGNyYXNoIHdoaWxlIGl0J3MgcnVubmluZ1xuICAgICAgc2FuZGJveC5zdHViKGQsICdkZWxldGVTZXNzaW9uJykuY2FsbHNGYWtlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBEcml2ZXJDbGFzcy5wcm90b3R5cGUuZGVsZXRlU2Vzc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgfSk7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24odzNjQ2Fwcyk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0J1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDUwMDBcbiAgICAgICAgKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbicpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NodXQgZG93bi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBuZXcgY29tbWFuZHMgYWZ0ZXIgZG9uZSBzaHV0dGluZyBkb3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbWFrZSBhIGNvbW1hbmQgdGhhdCB3aWxsIHdhaXQgYSBiaXQgc28gd2UgY2FuIGNyYXNoIHdoaWxlIGl0J3MgcnVubmluZ1xuICAgICAgc2FuZGJveC5zdHViKGQsICdkZWxldGVTZXNzaW9uJykuY2FsbHNGYWtlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBEcml2ZXJDbGFzcy5wcm90b3R5cGUuZGVsZXRlU2Vzc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0J1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDUwMDBcbiAgICAgICAgKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuXG4gICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdnZXRTZXNzaW9uJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc2h1dCBkb3duLyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG5cbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCBfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBXM0MgYW5kIEpTT05XUCBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCBXM0MgKGxlYXZlIGZpcnN0IDIgYXJncyBudWxsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBKU09OV1AgYXJncylcbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENhcHMsXG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGQucHJvdG9jb2wpLnRvLmVxdWFsKCdXM0MnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm90b2NvbCBkZXRlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHVzZSBXM0MgaWYgb25seSBXM0MgY2FwcyBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih7XG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IF8uY2xvbmUoZGVmYXVsdENhcHMpLFxuICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QoZC5wcm90b2NvbCkudG8uZXF1YWwoJ1czQycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgYSBtZXRob2QgdG8gZ2V0IGRyaXZlciBmb3IgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHczY0NhcHMpO1xuICAgICAgZXhwZWN0KGQuZHJpdmVyRm9yU2Vzc2lvbihzZXNzSWQpKS50by5lcWwoZCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29tbWFuZCBxdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPERyaXZlckNsYXNzPn0gKi9cbiAgICAgIGxldCBkO1xuICAgICAgbGV0IHdhaXRNcyA9IDEwO1xuXG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgICBzYW5kYm94LnN0dWIoZCwgJ2dldFN0YXR1cycpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2FuZGJveC5zdHViKGQsICdnZXRTZXNzaW9ucycpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlwYXNzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcXVldWUgY29tbWFuZHMgYW5kLmV4ZWN1dGVDb21tYW5kL3Jlc3BvbmQgaW4gdGhlIG9yZGVyIHJlY2VpdmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzdWx0c1tpXSA8PSByZXN1bHRzW2kgLSAxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGVycm9ycyBjb3JyZWN0bHkgd2hlbiBxdWV1aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbnMnKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gLyoqIEB0eXBlIHtQcm9taXNlRnVsZmlsbGVkUmVzdWx0PGFueT5bXX0gKi8gKFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL25vLW5hdGl2ZVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjbWRzKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldLnZhbHVlIDw9IHJlc3VsdHNbaSAtIDFdLnZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKiBAdHlwZSB7UHJvbWlzZVJlamVjdGVkUmVzdWx0fSAqLyAoXG4gICAgICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLyAocmVzdWx0c1s1XSlcbiAgICAgICAgKS5yZWFzb24ubWVzc2FnZS5zaG91bGQuY29udGFpbignbXVsdGlwYXNzJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSA3OyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0udmFsdWUgPD0gcmVzdWx0c1tpIC0gMV0udmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR290IHJlc3VsdCBvdXQgb2Ygb3JkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCBjYXJlIGlmIHF1ZXVlIGVtcHRpZXMgZm9yIGEgYml0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0cyA9IGF3YWl0IEIuYWxsKGNtZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldIDw9IHJlc3VsdHNbaSAtIDFdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0aW1lb3V0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih3M2NDYXBzKTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ2NvbW1hbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhpc3QgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLm5ld0NvbW1hbmRUaW1lb3V0TXMuc2hvdWxkLmVxdWFsKDYwMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgYmUgc2V0dGFibGUgdGhyb3VnaCBgdGltZW91dHNgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IGQudGltZW91dHMoJ2NvbW1hbmQnLCAyMCk7XG4gICAgICAgICAgZC5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnaW1wbGljaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IGV4aXN0IGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIGJlIHNldHRhYmxlIHRocm91Z2ggYHRpbWVvdXRzYCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKCdpbXBsaWNpdCcsIDIwKTtcbiAgICAgICAgICBkLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGltZW91dHMgKFczQyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHczY0NhcHMpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBnZXQgdGltZW91dHMgdGhhdCB3ZSBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDEwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuaGF2ZS5wcm9wZXJ0eSgnaW1wbGljaXQnLCAxMDAwKTtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnY29tbWFuZCcsIDIwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDEwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDMwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDMwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXNldCBjb21wYXRpYmlsaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYm90aCBmdWxsUmVzZXQgYW5kIG5vUmVzZXQgdG8gYmUgdHJ1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbmV3Q2FwcyA9IHtcbiAgICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgICAgLi4uZGVmYXVsdENhcHMsXG4gICAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICAgICAgJ2FwcGl1bTpmdWxsUmVzZXQnOiB0cnVlLFxuICAgICAgICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihuZXdDYXBzKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub1Jlc2V0LitmdWxsUmVzZXQvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5aW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNlc3NJZDtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBbc2Vzc0lkXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih3M2NDYXBzKTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJyNwcm94eUFjdGl2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLnByb3h5QWN0aXZlLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQucHJveHlBY3RpdmUoc2Vzc0lkKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gc2Vzc2lvbklkIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLnByb3h5QWN0aXZlKCdhYWEnKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCcjZ2V0UHJveHlBdm9pZExpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5nZXRQcm94eUF2b2lkTGlzdC5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmdldFByb3h5QXZvaWRMaXN0KHNlc3NJZCkuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHNlc3Npb25JZCBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5nZXRQcm94eUF2b2lkTGlzdCgnYWFhJyk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnI2NhblByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYSAjY2FuUHJveHkgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuY2FuUHJveHkuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRnVuY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBib29sZWFuIGZyb20gI2NhblByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuY2FuUHJveHkoc2Vzc0lkKS5zaG91bGQuYmUuYSgnYm9vbGVhbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHNlc3Npb25JZCBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5jYW5Qcm94eSgpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJyNwcm94eVJvdXRlSXNBdm9pZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGZvcm0gb2YgYXZvaWRhbmNlIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL1xcL2Zvby9dLCBbJ0dFVCddXSk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbXG4gICAgICAgICAgICBbJ1BPU1QnLCAvXFwvZm9vL10sXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBbJ0dFVCcsIC9eZm9vLywgJ2JhciddLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBiYWQgaHR0cCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbXG4gICAgICAgICAgICBbJ1BPU1QnLCAvXmZvby9dLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgWydCQVpFVEUnLCAvXmJhci9dLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tcmVnZXggcm91dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbXG4gICAgICAgICAgICBbJ1BPU1QnLCAvXmZvby9dLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgWydHRVQnLCAnL2JhciddLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciByb3V0ZXMgaW4gdGhlIGF2b2lkIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCdmb28nLCAnUE9TVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBzdHJpcCBhd2F5IGFueSB3ZC9odWIgcHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZCgnZm9vJywgJ1BPU1QnLCAnL2Zvby9iYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciByb3V0ZXMgbm90IGluIHRoZSBhdm9pZCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZCgnZm9vJywgJ0dFVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoJ2ZvbycsICdQT1NUJywgJy9ib28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXZlbnQgdGltaW5nIGZyYW1ld29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBiZWZvcmVTdGFydFRpbWU7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZC5zaG91bGRWYWxpZGF0ZUNhcHMgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBhbHdheXNNYXRjaDogey4uLmRlZmF1bHRDYXBzfSxcbiAgICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJyNldmVudEhpc3RvcnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBhbiBldmVudEhpc3RvcnkgcHJvcGVydHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KGQuZXZlbnRIaXN0b3J5KTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QoZC5ldmVudEhpc3RvcnkuY29tbWFuZHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYSBzZXNzaW9uIHN0YXJ0IHRpbWluZyBhZnRlciBzZXNzaW9uIHN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCB7bmV3U2Vzc2lvblJlcXVlc3RlZCwgbmV3U2Vzc2lvblN0YXJ0ZWR9ID0gZC5ldmVudEhpc3Rvcnk7XG4gICAgICAgICAgbmV3U2Vzc2lvblJlcXVlc3RlZC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgICAgbmV3U2Vzc2lvblN0YXJ0ZWQuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICAgIG5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIG5ld1Nlc3Npb25TdGFydGVkWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICAobmV3U2Vzc2lvblJlcXVlc3RlZFswXSA+PSBiZWZvcmVTdGFydFRpbWUpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICAgIChuZXdTZXNzaW9uU3RhcnRlZFswXSA+PSBuZXdTZXNzaW9uUmVxdWVzdGVkWzBdKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGEgY29tbWFuZHMgbGlzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnLCBbXSk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kc1sxXS5jbWQuc2hvdWxkLmVxdWFsKCdnZXRTdGF0dXMnKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kc1sxXS5zdGFydFRpbWUuc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzWzFdLmVuZFRpbWUuc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJyNsb2dFdmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBsb2dnaW5nIGFyYml0cmFyeSBldmVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5sb2dFdmVudCgnZm9vJyk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuZm9vWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICAoZC5ldmVudEhpc3RvcnkuZm9vWzBdID49IGJlZm9yZVN0YXJ0VGltZSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyByZXNlcnZlZCBvciBvZGRseSBmb3JtZWQgZXZlbnQgbmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIGQubG9nRXZlbnQoJ2NvbW1hbmRzJyk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGQubG9nRXZlbnQoMSk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGQubG9nRXZlbnQoe30pO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBsb2dnaW5nIHRoZSBzYW1lIGV2ZW50IG11bHRpcGxlIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkLmxvZ0V2ZW50KCdiYXInKTtcbiAgICAgICAgZC5sb2dFdmVudCgnYmFyJyk7XG4gICAgICAgIGQuZXZlbnRIaXN0b3J5LmJhci5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICAgIGQuZXZlbnRIaXN0b3J5LmJhclsxXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIChkLmV2ZW50SGlzdG9yeS5iYXJbMV0gPj0gZC5ldmVudEhpc3RvcnkuYmFyWzBdKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ2dldFNlc3Npb24gZGVjb3JhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBkZWNvcmF0ZSBnZXRTZXNzaW9uIHJlc3BvbnNlIGlmIG9wdC1pbiBjYXAgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbigpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVzLmV2ZW50cyk7XG5cbiAgICAgICAgICBfLnNldChkLCAnY2Fwcy5ldmVudFRpbWluZ3MnLCB0cnVlKTtcbiAgICAgICAgICByZXMgPSBhd2FpdCBkLmdldFNlc3Npb24oKTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QocmVzLmV2ZW50cyk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ldmVudHM/Lm5ld1Nlc3Npb25SZXF1ZXN0ZWQpO1xuICAgICAgICAgIGV4cGVjdChyZXMuZXZlbnRzPy5uZXdTZXNzaW9uUmVxdWVzdGVkWzBdKS50by5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnLnJlc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZXNldCBhcyBXM0MgaWYgdGhlIG9yaWdpbmFsIHNlc3Npb24gd2FzIFczQycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY2FwcyA9IHtcbiAgICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgICAgJ2FwcGl1bTphcHAnOiAnRmFrZScsXG4gICAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRmFrZScsXG4gICAgICAgICAgICAnYXBwaXVtOmF1dG9tYXRpb25OYW1lJzogJ0Zha2UnLFxuICAgICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgICAuLi5kZWZhdWx0Q2FwcyxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKGNhcHMpO1xuICAgICAgICBleHBlY3QoZC5wcm90b2NvbCkudG8uZXF1YWwoJ1czQycpO1xuICAgICAgICBhd2FpdCBkLnJlc2V0KCk7XG4gICAgICAgIGV4cGVjdChkLnByb3RvY29sKS50by5lcXVhbCgnVzNDJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJy5pc0ZlYXR1cmVFbmFibGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBkO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBkID0gbmV3IERyaXZlckNsYXNzKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNheSBhIGZlYXR1cmUgaXMgZW5hYmxlZCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JheicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2F5IGEgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBpZiBpdCBpcyBub3QgZW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFtdO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZWZlciBkZW55SW5zZWN1cmUgdG8gYWxsb3dJbnNlY3VyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5kZW55SW5zZWN1cmUgPSBbJ2ZvbyddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGdsb2JhbCBzZXR0aW5nIGZvciBpbnNlY3VyaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcblxuICAgIGl0KCdnbG9iYWwgc2V0dGluZyBzaG91bGQgYmUgb3ZlcnJpZGVhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gWydmb28nLCAnYmFyJ107XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2ZvbycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtVzNDQ2FwYWJpbGl0aWVzfSBBcHBpdW1XM0NDYXBhYmlsaXRpZXNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUVBLE1BQU1BLE1BQU0sR0FBR0MsYUFBQSxDQUFLRCxNQUFMLEVBQWY7O0FBQ0EsTUFBTTtFQUFDRTtBQUFELElBQVdELGFBQWpCOztBQVdPLFNBQVNFLG1CQUFULENBQTZCQyxXQUE3QixFQUEwQ0MsV0FBVyxHQUFHLEVBQXhELEVBQTREO0VBRWpFLE1BQU1DLFNBQVMsR0FBR0YsV0FBVyxDQUFDRyxJQUFaLElBQW9CLGtCQUF0QztFQUVBQyxRQUFRLENBQUUsNkJBQTRCRixTQUFVLEdBQXhDLEVBQTRDLFlBQVk7SUFFOUQsSUFBSUcsQ0FBSjtJQUVBLElBQUlDLE9BQUo7SUFFQSxJQUFJQyxPQUFKO0lBRUFDLFVBQVUsQ0FBQyxZQUFZO01BQ3JCRCxPQUFPLEdBQUcsSUFBQUUsb0JBQUEsR0FBVjtNQUNBSixDQUFDLEdBQUcsSUFBSUwsV0FBSixFQUFKO01BQ0FNLE9BQU8sR0FBRztRQUNSSSxXQUFXLEVBQUUsRUFDWCxHQUFHVCxXQURRO1VBRVhVLFlBQVksRUFBRSxNQUZIO1VBR1gscUJBQXFCO1FBSFYsQ0FETDtRQU1SQyxVQUFVLEVBQUUsQ0FBQyxFQUFEO01BTkosQ0FBVjtJQVFELENBWFMsQ0FBVjtJQVlBQyxTQUFTLENBQUMsa0JBQWtCO01BQzFCTixPQUFPLENBQUNPLE9BQVI7TUFDQSxNQUFNVCxDQUFDLENBQUNVLGFBQUYsRUFBTjtJQUNELENBSFEsQ0FBVDtJQUtBWCxRQUFRLENBQUMsaUJBQUQsRUFBb0IsWUFB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
|
|
551
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzaG91bGQiLCJjaGFpIiwiZXhwZWN0IiwiZHJpdmVyVW5pdFRlc3RTdWl0ZSIsIkRyaXZlckNsYXNzIiwiZGVmYXVsdENhcHMiLCJjbGFzc05hbWUiLCJuYW1lIiwiZGVzY3JpYmUiLCJkIiwidzNjQ2FwcyIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwiY3JlYXRlU2FuZGJveCIsImFsd2F5c01hdGNoIiwicGxhdGZvcm1OYW1lIiwiZmlyc3RNYXRjaCIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJiYXNlVmVyc2lvbiIsImV4aXN0IiwicHJldmlvdXNQcmVmaXgiLCJsb2ciLCJwcmVmaXgiLCJjcmVhdGVTZXNzaW9uIiwibm90IiwidG8iLCJlcWwiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzZXNzSWQiLCJiZSIsImEiLCJsZW5ndGgiLCJhYm92ZSIsIl8iLCJjbG9uZURlZXAiLCJyZWplY3RlZFdpdGgiLCJzZXNzaW9uSWQxIiwiZXF1YWwiLCJzZXNzaW9uSWQiLCJzZXNzaW9uSWQyIiwiY2FwcyIsImdldFNlc3Npb24iLCJzZXNzaW9ucyIsImdldFNlc3Npb25zIiwiaW5jbHVkZSIsImlkIiwiY2FwYWJpbGl0aWVzIiwiZGV2aWNlTmFtZSIsInN0dWIiLCJjYWxsc0Zha2UiLCJCIiwiZGVsYXkiLCJjbWRQcm9taXNlIiwiZXhlY3V0ZUNvbW1hbmQiLCJwIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJFcnJvciIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjYWxsIiwicHJvdG9jb2wiLCJjbG9uZSIsImRyaXZlckZvclNlc3Npb24iLCJ3YWl0TXMiLCJEYXRlIiwibm93IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm51bUNtZHMiLCJjbWRzIiwiaSIsInB1c2giLCJyZXN1bHRzIiwiYWxsIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJ2YWx1ZSIsInJlYXNvbiIsIm1lc3NhZ2UiLCJjb250YWluIiwiYmVmb3JlIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsInRpbWVvdXRzIiwiaW1wbGljaXRXYWl0TXMiLCJ1bmRlZmluZWQiLCJnZXRUaW1lb3V0cyIsImV2ZW50dWFsbHkiLCJoYXZlIiwicHJvcGVydHkiLCJkZWVwIiwiaW1wbGljaXQiLCJjb21tYW5kIiwibmV3Q2FwcyIsInByb3h5QWN0aXZlIiwiYW4iLCJpbnN0YW5jZW9mIiwiRnVuY3Rpb24iLCJmYWxzZSIsInRocm93IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJBcnJheSIsImNhblByb3h5IiwiYXZvaWRTdHViIiwicmV0dXJucyIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJ0cnVlIiwiYmVmb3JlU3RhcnRUaW1lIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJuZXdTZXNzaW9uUmVxdWVzdGVkIiwibmV3U2Vzc2lvblN0YXJ0ZWQiLCJjbWQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwibG9nRXZlbnQiLCJmb28iLCJiYXIiLCJyZXMiLCJldmVudHMiLCJzZXQiLCJyZXNldCIsImFsbG93SW5zZWN1cmUiLCJpc0ZlYXR1cmVFbmFibGVkIiwiZGVueUluc2VjdXJlIiwicmVsYXhlZFNlY3VyaXR5RW5hYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91bml0LXN1aXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge2NyZWF0ZVNhbmRib3h9IGZyb20gJ3Npbm9uJztcblxuaW1wb3J0IGNoYWkgZnJvbSAnY2hhaSc7XG5cbmNvbnN0IHNob3VsZCA9IGNoYWkuc2hvdWxkKCk7XG5jb25zdCB7ZXhwZWN0fSA9IGNoYWk7XG5cbi8vIHdyYXAgdGhlc2UgdGVzdHMgaW4gYSBmdW5jdGlvbiBzbyB3ZSBjYW4gZXhwb3J0IHRoZSB0ZXN0cyBhbmQgcmUtdXNlIHRoZW1cbi8vIGZvciBhY3R1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9uc1xuXG4vKipcbiAqIENyZWF0ZXMgdW5pdCB0ZXN0IHN1aXRlcyBmb3IgYSBkcml2ZXIuXG4gKiBAcGFyYW0ge0RyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHBhcmFtIHtQYXJ0aWFsPEJhc2VOU0NhcGFiaWxpdGllcz59IFtkZWZhdWx0Q2Fwc11cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZHJpdmVyVW5pdFRlc3RTdWl0ZShEcml2ZXJDbGFzcywgZGVmYXVsdENhcHMgPSB7fSkge1xuICAvLyB0byBkaXNwbGF5IHRoZSBkcml2ZXIgdW5kZXIgdGVzdCBpbiByZXBvcnRcbiAgY29uc3QgY2xhc3NOYW1lID0gRHJpdmVyQ2xhc3MubmFtZSA/PyAnKHVua25vd24gZHJpdmVyKSc7XG5cbiAgZGVzY3JpYmUoYEJhc2VEcml2ZXIgdW5pdCBzdWl0ZSAoYXMgJHtjbGFzc05hbWV9KWAsIGZ1bmN0aW9uICgpIHtcbiAgICAvKiogQHR5cGUge0luc3RhbmNlVHlwZTx0eXBlb2YgRHJpdmVyQ2xhc3M+fSAqL1xuICAgIGxldCBkO1xuICAgIC8qKiBAdHlwZSB7VzNDQ2FwYWJpbGl0aWVzfSAqL1xuICAgIGxldCB3M2NDYXBzO1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzaW5vbicpLlNpbm9uU2FuZGJveH0gKi9cbiAgICBsZXQgc2FuZGJveDtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goKTtcbiAgICAgIGQgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIHczY0NhcHMgPSB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENhcHMsXG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3N0YXRpYyBwcm9wZXJ0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc2NyaWJlKCdiYXNlVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBEcml2ZXJDbGFzcy5iYXNlVmVyc2lvbi5zaG91bGQuZXhpc3Q7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nIHByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2V0dXAgbG9nIHByZWZpeCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ByZWZpeCA9IGQubG9nLnByZWZpeDtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHtcbiAgICAgICAgICBhbHdheXNNYXRjaDogey4uLmRlZmF1bHRDYXBzLCBwbGF0Zm9ybU5hbWU6ICdGYWtlJywgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCd9LFxuICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV4cGVjdChwcmV2aW91c1ByZWZpeCkubm90LnRvLmVxbChkLmxvZy5wcmVmaXgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgICAgIGV4cGVjdChwcmV2aW91c1ByZWZpeCkudG8uZXFsKGQubG9nLnByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RhdHVzIG9iamVjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzdGF0dXMgPSBhd2FpdCBkLmdldFN0YXR1cygpO1xuICAgICAgc3RhdHVzLnNob3VsZC5lcWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzZXNzaW9uSWQgZnJvbSBjcmVhdGVTZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHczY0NhcHMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlc3NJZCk7XG4gICAgICBzZXNzSWQuc2hvdWxkLmJlLmEoJ3N0cmluZycpO1xuICAgICAgc2Vzc0lkLmxlbmd0aC5zaG91bGQuYmUuYWJvdmUoNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHN0YXJ0IHR3byBzZXNzaW9ucyB3aXRob3V0IGNsb3NpbmcgdGhlIGZpcnN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnc2Vzc2lvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSBhIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2Vzc2lvbklkMSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbChkLnNlc3Npb25JZCwgbnVsbCk7XG4gICAgICBsZXQgc2Vzc2lvbklkMiA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBzZXNzaW9uSWQxLnNob3VsZC5ub3QuZXFsKHNlc3Npb25JZDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgdGhlIGN1cnJlbnQgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBbLCBjYXBzXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih3M2NDYXBzKTtcbiAgICAgIGNhcHMuc2hvdWxkLmVxdWFsKGF3YWl0IGQuZ2V0U2Vzc2lvbigpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHNlc3Npb25zIGlmIG5vIHNlc3Npb24gZXhpc3RzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuICAgICAgc2Vzc2lvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHNlc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FwcyA9IF8uY2xvbmVEZWVwKHczY0NhcHMpO1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKGNhcHMpO1xuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuXG4gICAgICBzZXNzaW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2Vzc2lvbnNbMF0uc2hvdWxkLmluY2x1ZGUoe1xuICAgICAgICBpZDogZC5zZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICAgIHNlc3Npb25zWzBdLmNhcGFiaWxpdGllcy5zaG91bGQuaW5jbHVkZSh7XG4gICAgICAgIGRldmljZU5hbWU6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmdWxmaWxsIGFuIHVuZXhwZWN0ZWQgZHJpdmVyIHF1aXQgcHJvbWlzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIHNhbmRib3guc3R1YihkLCAnZ2V0U3RhdHVzJykuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgICAgcmV0dXJuICdnb29kIHN0YXR1cyc7XG4gICAgICB9KTtcbiAgICAgIGxldCBjbWRQcm9taXNlID0gZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDEwKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdvblVuZXhwZWN0ZWRTaHV0ZG93biBldmVudCBpcyBleHBlY3RlZCB0byBiZSBmaXJlZCB3aXRoaW4gNSBzZWNvbmRzIHRpbWVvdXQnXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgICBkLm9uVW5leHBlY3RlZFNodXRkb3duKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgICBkLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKG5ldyBFcnJvcignV2UgY3Jhc2hlZCcpKTtcbiAgICAgIGF3YWl0IGNtZFByb21pc2Uuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvV2UgY3Jhc2hlZC8pO1xuICAgICAgYXdhaXQgcDtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGNvbW1hbmRzIGluIG1pZGRsZSBvZiB1bmV4cGVjdGVkIHNodXRkb3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbWFrZSBhIGNvbW1hbmQgdGhhdCB3aWxsIHdhaXQgYSBiaXQgc28gd2UgY2FuIGNyYXNoIHdoaWxlIGl0J3MgcnVubmluZ1xuICAgICAgc2FuZGJveC5zdHViKGQsICdkZWxldGVTZXNzaW9uJykuY2FsbHNGYWtlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBEcml2ZXJDbGFzcy5wcm90b3R5cGUuZGVsZXRlU2Vzc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgfSk7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24odzNjQ2Fwcyk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0J1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDUwMDBcbiAgICAgICAgKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbicpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NodXQgZG93bi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBuZXcgY29tbWFuZHMgYWZ0ZXIgZG9uZSBzaHV0dGluZyBkb3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbWFrZSBhIGNvbW1hbmQgdGhhdCB3aWxsIHdhaXQgYSBiaXQgc28gd2UgY2FuIGNyYXNoIHdoaWxlIGl0J3MgcnVubmluZ1xuICAgICAgc2FuZGJveC5zdHViKGQsICdkZWxldGVTZXNzaW9uJykuY2FsbHNGYWtlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBEcml2ZXJDbGFzcy5wcm90b3R5cGUuZGVsZXRlU2Vzc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0J1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDUwMDBcbiAgICAgICAgKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuXG4gICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdnZXRTZXNzaW9uJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc2h1dCBkb3duLyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG5cbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCBfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBXM0MgYW5kIEpTT05XUCBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCBXM0MgKGxlYXZlIGZpcnN0IDIgYXJncyBudWxsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBKU09OV1AgYXJncylcbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENhcHMsXG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGQucHJvdG9jb2wpLnRvLmVxdWFsKCdXM0MnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm90b2NvbCBkZXRlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHVzZSBXM0MgaWYgb25seSBXM0MgY2FwcyBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih7XG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IF8uY2xvbmUoZGVmYXVsdENhcHMpLFxuICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QoZC5wcm90b2NvbCkudG8uZXF1YWwoJ1czQycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgYSBtZXRob2QgdG8gZ2V0IGRyaXZlciBmb3IgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHczY0NhcHMpO1xuICAgICAgZXhwZWN0KGQuZHJpdmVyRm9yU2Vzc2lvbihzZXNzSWQpKS50by5lcWwoZCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29tbWFuZCBxdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPERyaXZlckNsYXNzPn0gKi9cbiAgICAgIGxldCBkO1xuICAgICAgbGV0IHdhaXRNcyA9IDEwO1xuXG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgICBzYW5kYm94LnN0dWIoZCwgJ2dldFN0YXR1cycpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2FuZGJveC5zdHViKGQsICdnZXRTZXNzaW9ucycpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlwYXNzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcXVldWUgY29tbWFuZHMgYW5kLmV4ZWN1dGVDb21tYW5kL3Jlc3BvbmQgaW4gdGhlIG9yZGVyIHJlY2VpdmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzdWx0c1tpXSA8PSByZXN1bHRzW2kgLSAxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGVycm9ycyBjb3JyZWN0bHkgd2hlbiBxdWV1aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbnMnKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gLyoqIEB0eXBlIHtQcm9taXNlRnVsZmlsbGVkUmVzdWx0PGFueT5bXX0gKi8gKFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL25vLW5hdGl2ZVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjbWRzKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldLnZhbHVlIDw9IHJlc3VsdHNbaSAtIDFdLnZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKiBAdHlwZSB7UHJvbWlzZVJlamVjdGVkUmVzdWx0fSAqLyAoXG4gICAgICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLyAocmVzdWx0c1s1XSlcbiAgICAgICAgKS5yZWFzb24ubWVzc2FnZS5zaG91bGQuY29udGFpbignbXVsdGlwYXNzJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSA3OyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0udmFsdWUgPD0gcmVzdWx0c1tpIC0gMV0udmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR290IHJlc3VsdCBvdXQgb2Ygb3JkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCBjYXJlIGlmIHF1ZXVlIGVtcHRpZXMgZm9yIGEgYml0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0cyA9IGF3YWl0IEIuYWxsKGNtZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldIDw9IHJlc3VsdHNbaSAtIDFdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0aW1lb3V0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih3M2NDYXBzKTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ2NvbW1hbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhpc3QgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLm5ld0NvbW1hbmRUaW1lb3V0TXMuc2hvdWxkLmVxdWFsKDYwMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgYmUgc2V0dGFibGUgdGhyb3VnaCBgdGltZW91dHNgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IGQudGltZW91dHMoJ2NvbW1hbmQnLCAyMCk7XG4gICAgICAgICAgZC5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnaW1wbGljaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IGV4aXN0IGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIGJlIHNldHRhYmxlIHRocm91Z2ggYHRpbWVvdXRzYCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKCdpbXBsaWNpdCcsIDIwKTtcbiAgICAgICAgICBkLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGltZW91dHMgKFczQyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHczY0NhcHMpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBnZXQgdGltZW91dHMgdGhhdCB3ZSBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDEwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuaGF2ZS5wcm9wZXJ0eSgnaW1wbGljaXQnLCAxMDAwKTtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnY29tbWFuZCcsIDIwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDEwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDMwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDMwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXNldCBjb21wYXRpYmlsaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYm90aCBmdWxsUmVzZXQgYW5kIG5vUmVzZXQgdG8gYmUgdHJ1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbmV3Q2FwcyA9IHtcbiAgICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgICAgLi4uZGVmYXVsdENhcHMsXG4gICAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICAgICAgJ2FwcGl1bTpmdWxsUmVzZXQnOiB0cnVlLFxuICAgICAgICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihuZXdDYXBzKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub1Jlc2V0LitmdWxsUmVzZXQvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5aW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNlc3NJZDtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBbc2Vzc0lkXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbih3M2NDYXBzKTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJyNwcm94eUFjdGl2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLnByb3h5QWN0aXZlLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQucHJveHlBY3RpdmUoc2Vzc0lkKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gc2Vzc2lvbklkIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLnByb3h5QWN0aXZlKCdhYWEnKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCcjZ2V0UHJveHlBdm9pZExpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5nZXRQcm94eUF2b2lkTGlzdC5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmdldFByb3h5QXZvaWRMaXN0KHNlc3NJZCkuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHNlc3Npb25JZCBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5nZXRQcm94eUF2b2lkTGlzdCgnYWFhJyk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnI2NhblByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYSAjY2FuUHJveHkgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuY2FuUHJveHkuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRnVuY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBib29sZWFuIGZyb20gI2NhblByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuY2FuUHJveHkoc2Vzc0lkKS5zaG91bGQuYmUuYSgnYm9vbGVhbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHNlc3Npb25JZCBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5jYW5Qcm94eSgpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJyNwcm94eVJvdXRlSXNBdm9pZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGZvcm0gb2YgYXZvaWRhbmNlIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL1xcL2Zvby9dLCBbJ0dFVCddXSk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbXG4gICAgICAgICAgICBbJ1BPU1QnLCAvXFwvZm9vL10sXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBbJ0dFVCcsIC9eZm9vLywgJ2JhciddLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBiYWQgaHR0cCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbXG4gICAgICAgICAgICBbJ1BPU1QnLCAvXmZvby9dLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgWydCQVpFVEUnLCAvXmJhci9dLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tcmVnZXggcm91dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbXG4gICAgICAgICAgICBbJ1BPU1QnLCAvXmZvby9dLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgWydHRVQnLCAnL2JhciddLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciByb3V0ZXMgaW4gdGhlIGF2b2lkIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCdmb28nLCAnUE9TVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBzdHJpcCBhd2F5IGFueSB3ZC9odWIgcHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZCgnZm9vJywgJ1BPU1QnLCAnL2Zvby9iYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciByb3V0ZXMgbm90IGluIHRoZSBhdm9pZCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZCgnZm9vJywgJ0dFVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQoJ2ZvbycsICdQT1NUJywgJy9ib28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXZlbnQgdGltaW5nIGZyYW1ld29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBiZWZvcmVTdGFydFRpbWU7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZC5zaG91bGRWYWxpZGF0ZUNhcHMgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBhbHdheXNNYXRjaDogey4uLmRlZmF1bHRDYXBzfSxcbiAgICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJyNldmVudEhpc3RvcnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBhbiBldmVudEhpc3RvcnkgcHJvcGVydHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KGQuZXZlbnRIaXN0b3J5KTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QoZC5ldmVudEhpc3RvcnkuY29tbWFuZHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYSBzZXNzaW9uIHN0YXJ0IHRpbWluZyBhZnRlciBzZXNzaW9uIHN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCB7bmV3U2Vzc2lvblJlcXVlc3RlZCwgbmV3U2Vzc2lvblN0YXJ0ZWR9ID0gZC5ldmVudEhpc3Rvcnk7XG4gICAgICAgICAgbmV3U2Vzc2lvblJlcXVlc3RlZC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgICAgbmV3U2Vzc2lvblN0YXJ0ZWQuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICAgIG5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIG5ld1Nlc3Npb25TdGFydGVkWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICAobmV3U2Vzc2lvblJlcXVlc3RlZFswXSA+PSBiZWZvcmVTdGFydFRpbWUpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICAgIChuZXdTZXNzaW9uU3RhcnRlZFswXSA+PSBuZXdTZXNzaW9uUmVxdWVzdGVkWzBdKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGEgY29tbWFuZHMgbGlzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnLCBbXSk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kc1sxXS5jbWQuc2hvdWxkLmVxdWFsKCdnZXRTdGF0dXMnKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kc1sxXS5zdGFydFRpbWUuc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzWzFdLmVuZFRpbWUuc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJyNsb2dFdmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBsb2dnaW5nIGFyYml0cmFyeSBldmVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5sb2dFdmVudCgnZm9vJyk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuZm9vWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICAoZC5ldmVudEhpc3RvcnkuZm9vWzBdID49IGJlZm9yZVN0YXJ0VGltZSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyByZXNlcnZlZCBvciBvZGRseSBmb3JtZWQgZXZlbnQgbmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIGQubG9nRXZlbnQoJ2NvbW1hbmRzJyk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGQubG9nRXZlbnQoMSk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGQubG9nRXZlbnQoe30pO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBsb2dnaW5nIHRoZSBzYW1lIGV2ZW50IG11bHRpcGxlIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkLmxvZ0V2ZW50KCdiYXInKTtcbiAgICAgICAgZC5sb2dFdmVudCgnYmFyJyk7XG4gICAgICAgIGQuZXZlbnRIaXN0b3J5LmJhci5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICAgIGQuZXZlbnRIaXN0b3J5LmJhclsxXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIChkLmV2ZW50SGlzdG9yeS5iYXJbMV0gPj0gZC5ldmVudEhpc3RvcnkuYmFyWzBdKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ2dldFNlc3Npb24gZGVjb3JhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBkZWNvcmF0ZSBnZXRTZXNzaW9uIHJlc3BvbnNlIGlmIG9wdC1pbiBjYXAgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbigpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVzLmV2ZW50cyk7XG5cbiAgICAgICAgICBfLnNldChkLCAnY2Fwcy5ldmVudFRpbWluZ3MnLCB0cnVlKTtcbiAgICAgICAgICByZXMgPSBhd2FpdCBkLmdldFNlc3Npb24oKTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QocmVzLmV2ZW50cyk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ldmVudHM/Lm5ld1Nlc3Npb25SZXF1ZXN0ZWQpO1xuICAgICAgICAgIGV4cGVjdChyZXMuZXZlbnRzPy5uZXdTZXNzaW9uUmVxdWVzdGVkWzBdKS50by5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnLnJlc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZXNldCBhcyBXM0MgaWYgdGhlIG9yaWdpbmFsIHNlc3Npb24gd2FzIFczQycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY2FwcyA9IHtcbiAgICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgICAgJ2FwcGl1bTphcHAnOiAnRmFrZScsXG4gICAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRmFrZScsXG4gICAgICAgICAgICAnYXBwaXVtOmF1dG9tYXRpb25OYW1lJzogJ0Zha2UnLFxuICAgICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgICAuLi5kZWZhdWx0Q2FwcyxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKGNhcHMpO1xuICAgICAgICBleHBlY3QoZC5wcm90b2NvbCkudG8uZXF1YWwoJ1czQycpO1xuICAgICAgICBhd2FpdCBkLnJlc2V0KCk7XG4gICAgICAgIGV4cGVjdChkLnByb3RvY29sKS50by5lcXVhbCgnVzNDJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJy5pc0ZlYXR1cmVFbmFibGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBkO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBkID0gbmV3IERyaXZlckNsYXNzKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNheSBhIGZlYXR1cmUgaXMgZW5hYmxlZCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JheicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2F5IGEgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBpZiBpdCBpcyBub3QgZW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFtdO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZWZlciBkZW55SW5zZWN1cmUgdG8gYWxsb3dJbnNlY3VyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5kZW55SW5zZWN1cmUgPSBbJ2ZvbyddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGdsb2JhbCBzZXR0aW5nIGZvciBpbnNlY3VyaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcblxuICAgIGl0KCdnbG9iYWwgc2V0dGluZyBzaG91bGQgYmUgb3ZlcnJpZGVhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gWydmb28nLCAnYmFyJ107XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2ZvbycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkJhc2VOU0NhcGFiaWxpdGllc30gQmFzZU5TQ2FwYWJpbGl0aWVzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSBbQz1pbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5CYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNdXG4gKiBAdGVtcGxhdGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlN0cmluZ1JlY29yZHx2b2lkfSBbRXh0cmE9dm9pZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXM8QywgRXh0cmE+fSBXM0NDYXBhYmlsaXRpZXNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7OztBQUVBLE1BQU1BLE1BQU0sR0FBR0MsYUFBQSxDQUFLRCxNQUFMLEVBQWY7O0FBQ0EsTUFBTTtFQUFDRTtBQUFELElBQVdELGFBQWpCOztBQVdPLFNBQVNFLG1CQUFULENBQTZCQyxXQUE3QixFQUEwQ0MsV0FBVyxHQUFHLEVBQXhELEVBQTREO0VBRWpFLE1BQU1DLFNBQVMsR0FBR0YsV0FBVyxDQUFDRyxJQUFaLElBQW9CLGtCQUF0QztFQUVBQyxRQUFRLENBQUUsNkJBQTRCRixTQUFVLEdBQXhDLEVBQTRDLFlBQVk7SUFFOUQsSUFBSUcsQ0FBSjtJQUVBLElBQUlDLE9BQUo7SUFFQSxJQUFJQyxPQUFKO0lBRUFDLFVBQVUsQ0FBQyxZQUFZO01BQ3JCRCxPQUFPLEdBQUcsSUFBQUUsb0JBQUEsR0FBVjtNQUNBSixDQUFDLEdBQUcsSUFBSUwsV0FBSixFQUFKO01BQ0FNLE9BQU8sR0FBRztRQUNSSSxXQUFXLEVBQUUsRUFDWCxHQUFHVCxXQURRO1VBRVhVLFlBQVksRUFBRSxNQUZI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
|