@appium/base-driver 8.1.2 → 8.2.3
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/basedriver/capabilities.js +3 -1
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/driver.js +8 -10
- package/build/lib/basedriver/helpers.js +140 -82
- package/build/lib/express/express-logging.js +2 -2
- package/build/lib/index.js +126 -0
- package/build/lib/jsonwp-proxy/protocol-converter.js +2 -5
- package/build/lib/jsonwp-proxy/proxy.js +2 -5
- package/build/lib/protocol/errors.js +4 -2
- package/build/lib/protocol/helpers.js +3 -20
- package/build/lib/protocol/index.js +13 -1
- package/build/lib/protocol/protocol.js +26 -25
- package/build/lib/protocol/routes.js +1 -10
- package/build/test/basedriver/capability-specs.js +10 -10
- package/build/test/basedriver/commands/event-specs.js +10 -10
- package/build/test/basedriver/driver-e2e-specs.js +3 -3
- package/build/test/basedriver/driver-e2e-tests.js +6 -223
- package/build/test/basedriver/driver-specs.js +3 -3
- package/build/test/basedriver/driver-tests.js +6 -6
- package/build/test/basedriver/helpers-specs.js +5 -1
- package/build/test/basedriver/timeout-specs.js +7 -7
- package/build/test/basedriver/websockets-e2e-specs.js +5 -5
- package/build/test/express/server-e2e-specs.js +156 -0
- package/build/test/express/server-specs.js +151 -0
- package/build/test/express/static-specs.js +23 -0
- package/build/test/helpers.js +57 -0
- package/build/test/jsonwp-proxy/mock-request.js +93 -0
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +61 -0
- package/build/test/jsonwp-proxy/proxy-specs.js +294 -0
- package/build/test/jsonwp-proxy/url-specs.js +167 -0
- package/build/test/jsonwp-status/status-specs.js +36 -0
- package/build/test/protocol/errors-specs.js +388 -0
- package/build/test/protocol/fake-driver.js +168 -0
- package/build/test/protocol/helpers.js +27 -0
- package/build/test/protocol/protocol-e2e-specs.js +1182 -0
- package/build/test/protocol/routes-specs.js +82 -0
- package/build/test/protocol/validator-specs.js +151 -0
- package/index.d.ts +5 -3
- package/index.js +1 -62
- package/lib/basedriver/capabilities.js +3 -0
- package/lib/basedriver/commands/index.js +0 -2
- package/lib/basedriver/driver.js +6 -26
- package/lib/basedriver/helpers.js +202 -85
- package/lib/express/express-logging.js +1 -1
- package/lib/index.js +64 -0
- package/lib/jsonwp-proxy/protocol-converter.js +1 -5
- package/lib/jsonwp-proxy/proxy.js +1 -3
- package/lib/protocol/errors.js +1 -1
- package/lib/protocol/helpers.js +5 -25
- package/lib/protocol/index.js +3 -1
- package/lib/protocol/protocol.js +26 -31
- package/lib/protocol/routes.js +0 -3
- package/package.json +8 -16
- package/test/basedriver/capability-specs.js +1 -1
- package/test/basedriver/commands/event-specs.js +1 -1
- package/test/basedriver/driver-e2e-specs.js +1 -1
- package/test/basedriver/driver-e2e-tests.js +1 -179
- package/test/basedriver/driver-specs.js +1 -1
- package/test/basedriver/driver-tests.js +3 -3
- package/test/basedriver/helpers-specs.js +4 -0
- package/test/basedriver/timeout-specs.js +1 -1
- package/test/basedriver/websockets-e2e-specs.js +1 -1
- package/build/index.js +0 -120
- package/build/lib/basedriver/commands/execute-child.js +0 -137
- package/build/lib/basedriver/commands/execute.js +0 -119
- package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
- package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
- package/lib/basedriver/commands/execute-child.js +0 -132
- package/lib/basedriver/commands/execute.js +0 -126
|
@@ -6,11 +6,11 @@ require("source-map-support/register");
|
|
|
6
6
|
|
|
7
7
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _lib = require("../../../lib");
|
|
10
10
|
|
|
11
11
|
describe('logging custom events', function () {
|
|
12
12
|
it('should allow logging of events', async function () {
|
|
13
|
-
const d = new
|
|
13
|
+
const d = new _lib.BaseDriver();
|
|
14
14
|
|
|
15
15
|
d._eventHistory.should.eql({
|
|
16
16
|
commands: []
|
|
@@ -21,7 +21,7 @@ describe('logging custom events', function () {
|
|
|
21
21
|
_lodash.default.keys(d._eventHistory).should.eql(['commands', 'myorg:myevent']);
|
|
22
22
|
});
|
|
23
23
|
it('should get all events including custom ones', async function () {
|
|
24
|
-
const d = new
|
|
24
|
+
const d = new _lib.BaseDriver();
|
|
25
25
|
|
|
26
26
|
d._eventHistory.should.eql({
|
|
27
27
|
commands: []
|
|
@@ -36,7 +36,7 @@ describe('logging custom events', function () {
|
|
|
36
36
|
});
|
|
37
37
|
describe('#getLogEvents', function () {
|
|
38
38
|
it('should allow to get all events', async function () {
|
|
39
|
-
const d = new
|
|
39
|
+
const d = new _lib.BaseDriver();
|
|
40
40
|
|
|
41
41
|
d._eventHistory.should.eql({
|
|
42
42
|
commands: []
|
|
@@ -49,7 +49,7 @@ describe('#getLogEvents', function () {
|
|
|
49
49
|
});
|
|
50
50
|
});
|
|
51
51
|
it('should filter with testCommand', async function () {
|
|
52
|
-
const d = new
|
|
52
|
+
const d = new _lib.BaseDriver();
|
|
53
53
|
|
|
54
54
|
d._eventHistory.should.eql({
|
|
55
55
|
commands: []
|
|
@@ -61,7 +61,7 @@ describe('#getLogEvents', function () {
|
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
it('should not filter with wrong but can be a part of the event name', async function () {
|
|
64
|
-
const d = new
|
|
64
|
+
const d = new _lib.BaseDriver();
|
|
65
65
|
|
|
66
66
|
d._eventHistory.should.eql({
|
|
67
67
|
commands: []
|
|
@@ -71,7 +71,7 @@ describe('#getLogEvents', function () {
|
|
|
71
71
|
await d.getLogEvents('testCommandDummy').should.eql({});
|
|
72
72
|
});
|
|
73
73
|
it('should filter with multiple event keys', async function () {
|
|
74
|
-
const d = new
|
|
74
|
+
const d = new _lib.BaseDriver();
|
|
75
75
|
|
|
76
76
|
d._eventHistory.should.eql({
|
|
77
77
|
commands: []
|
|
@@ -85,7 +85,7 @@ describe('#getLogEvents', function () {
|
|
|
85
85
|
});
|
|
86
86
|
});
|
|
87
87
|
it('should filter with custom events', async function () {
|
|
88
|
-
const d = new
|
|
88
|
+
const d = new _lib.BaseDriver();
|
|
89
89
|
|
|
90
90
|
d._eventHistory.should.eql({
|
|
91
91
|
commands: []
|
|
@@ -97,7 +97,7 @@ describe('#getLogEvents', function () {
|
|
|
97
97
|
});
|
|
98
98
|
});
|
|
99
99
|
it('should not filter with no existed event name', async function () {
|
|
100
|
-
const d = new
|
|
100
|
+
const d = new _lib.BaseDriver();
|
|
101
101
|
|
|
102
102
|
d._eventHistory.should.eql({
|
|
103
103
|
commands: []
|
|
@@ -109,4 +109,4 @@ describe('#getLogEvents', function () {
|
|
|
109
109
|
});require('source-map-support').install();
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9jb21tYW5kcy9ldmVudC1zcGVjcy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiZCIsIkJhc2VEcml2ZXIiLCJfZXZlbnRIaXN0b3J5Iiwic2hvdWxkIiwiZXFsIiwiY29tbWFuZHMiLCJsb2dDdXN0b21FdmVudCIsIl8iLCJrZXlzIiwibG9nRXZlbnQiLCJldmVudHMiLCJnZXRMb2dFdmVudHMiLCJ0ZXN0Q29tbWFuZCIsInRlc3RDb21tYW5kMiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBSUFBLFFBQVEsQ0FBQyx1QkFBRCxFQUEwQixZQUFZO0FBQzVDQyxFQUFBQSxFQUFFLENBQUMsZ0NBQUQsRUFBbUMsa0JBQWtCO0FBQ3JELFVBQU1DLENBQUMsR0FBRyxJQUFJQyxlQUFKLEVBQVY7O0FBQ0FELElBQUFBLENBQUMsQ0FBQ0UsYUFBRixDQUFnQkMsTUFBaEIsQ0FBdUJDLEdBQXZCLENBQTJCO0FBQUNDLE1BQUFBLFFBQVEsRUFBRTtBQUFYLEtBQTNCOztBQUNBLFVBQU1MLENBQUMsQ0FBQ00sY0FBRixDQUFpQixPQUFqQixFQUEwQixTQUExQixDQUFOOztBQUNBQyxvQkFBRUMsSUFBRixDQUFPUixDQUFDLENBQUNFLGFBQVQsRUFBd0JDLE1BQXhCLENBQStCQyxHQUEvQixDQUFtQyxDQUFDLFVBQUQsRUFBYSxlQUFiLENBQW5DO0FBQ0QsR0FMQyxDQUFGO0FBTUFMLEVBQUFBLEVBQUUsQ0FBQyw2Q0FBRCxFQUFnRCxrQkFBa0I7QUFDbEUsVUFBTUMsQ0FBQyxHQUFHLElBQUlDLGVBQUosRUFBVjs7QUFDQUQsSUFBQUEsQ0FBQyxDQUFDRSxhQUFGLENBQWdCQyxNQUFoQixDQUF1QkMsR0FBdkIsQ0FBMkI7QUFBQ0MsTUFBQUEsUUFBUSxFQUFFO0FBQVgsS0FBM0I7O0FBQ0FMLElBQUFBLENBQUMsQ0FBQ1MsUUFBRixDQUFXLGFBQVg7QUFDQSxVQUFNVCxDQUFDLENBQUNNLGNBQUYsQ0FBaUIsT0FB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UixNQUFoQyxDQUF1Q0MsR0FBdkMsQ0FBMkMsRUFBM0MsQ0FBTjtBQUNELEdBTEMsQ0FBRjtBQU1ELENBbkRPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cblxuXG5kZXNjcmliZSgnbG9nZ2luZyBjdXN0b20gZXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGFsbG93IGxvZ2dpbmcgb2YgZXZlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBhd2FpdCBkLmxvZ0N1c3RvbUV2ZW50KCdteW9yZycsICdteWV2ZW50Jyk7XG4gICAgXy5rZXlzKGQuX2V2ZW50SGlzdG9yeSkuc2hvdWxkLmVxbChbJ2NvbW1hbmRzJywgJ215b3JnOm15ZXZlbnQnXSk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIGdldCBhbGwgZXZlbnRzIGluY2x1ZGluZyBjdXN0b20gb25lcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgZC5sb2dFdmVudCgnYXBwaXVtRXZlbnQnKTtcbiAgICBhd2FpdCBkLmxvZ0N1c3RvbUV2ZW50KCdteW9yZycsICdteWV2ZW50Jyk7XG4gICAgY29uc3QgZXZlbnRzID0gYXdhaXQgZC5nZXRMb2dFdmVudHMoKTtcbiAgICBfLmtleXMoZXZlbnRzKS5zaG91bGQuZXFsKFsnY29tbWFuZHMnLCAnYXBwaXVtRXZlbnQnLCAnbXlvcmc6bXlldmVudCddKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJyNnZXRMb2dFdmVudHMnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgYWxsb3cgdG8gZ2V0IGFsbCBldmVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeS50ZXN0Q29tbWFuZCA9IFsnMScsICcyJywgJzMnXTtcbiAgICBhd2FpdCBkLmdldExvZ0V2ZW50cygpLnNob3VsZC5lcWwoe1xuICAgICAgY29tbWFuZHM6IFtdLCB0ZXN0Q29tbWFuZDogWycxJywgJzInLCAnMyddXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmlsdGVyIHdpdGggdGVzdENvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeS50ZXN0Q29tbWFuZCA9IFsnMScsICcyJywgJzMnXTtcbiAgICBhd2FpdCBkLmdldExvZ0V2ZW50cygndGVzdENvbW1hbmQnKS5zaG91bGQuZXFsKHtcbiAgICAgIHRlc3RDb21tYW5kOiBbJzEnLCAnMicsICczJ11cbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgZmlsdGVyIHdpdGggd3JvbmcgYnV0IGNhbiBiZSBhIHBhcnQgb2YgdGhlIGV2ZW50IG5hbWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeS50ZXN0Q29tbWFuZCA9IFsnMScsICcyJywgJzMnXTtcbiAgICBhd2FpdCBkLmdldExvZ0V2ZW50cygndGVzdENvbW1hbmREdW1teScpLnNob3VsZC5lcWwoe30pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZpbHRlciB3aXRoIG11bHRpcGxlIGV2ZW50IGtleXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeS50ZXN0Q29tbWFuZCA9IFsnMScsICcyJywgJzMnXTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQyID0gWyc0JywgJzUnXTtcbiAgICBhd2FpdCBkLmdldExvZ0V2ZW50cyhbJ3Rlc3RDb21tYW5kJywgJ3Rlc3RDb21tYW5kMiddKS5zaG91bGQuZXFsKHtcbiAgICAgIHRlc3RDb21tYW5kOiBbJzEnLCAnMicsICczJ10sIHRlc3RDb21tYW5kMjogWyc0JywgJzUnXVxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZpbHRlciB3aXRoIGN1c3RvbSBldmVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeVsnY3VzdG9tOmFwcGl1bUV2ZW50J10gPSBbJzEnLCAnMicsICczJ107XG4gICAgYXdhaXQgZC5nZXRMb2dFdmVudHMoWydjdXN0b206YXBwaXVtRXZlbnQnXSkuc2hvdWxkLmVxbCh7XG4gICAgICAnY3VzdG9tOmFwcGl1bUV2ZW50JzogWycxJywgJzInLCAnMyddXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGZpbHRlciB3aXRoIG5vIGV4aXN0ZWQgZXZlbnQgbmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnRlc3RDb21tYW5kID0gWycxJywgJzInLCAnMyddO1xuICAgIGF3YWl0IGQuZ2V0TG9nRXZlbnRzKFsnbm9FdmVudE5hbWUnXSkuc2hvdWxkLmVxbCh7fSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvYmFzZWRyaXZlci9jb21tYW5kcy9ldmVudC1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLiJ9
|
|
@@ -4,14 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
|
|
5
5
|
require("source-map-support/register");
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _lib = _interopRequireDefault(require("../../lib"));
|
|
8
8
|
|
|
9
9
|
var _driverE2eTests = _interopRequireDefault(require("./driver-e2e-tests"));
|
|
10
10
|
|
|
11
|
-
(0, _driverE2eTests.default)(
|
|
11
|
+
(0, _driverE2eTests.default)(_lib.default, {
|
|
12
12
|
platformName: 'iOS',
|
|
13
13
|
'appium:deviceName': 'Delorean'
|
|
14
14
|
});require('source-map-support').install();
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9kcml2ZXItZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbIkJhc2VEcml2ZXIiLCJwbGF0Zm9ybU5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBLDZCQUFtQkEsWUFBbkIsRUFBK0I7QUFDN0JDLEVBQUFBLFlBQVksRUFBRSxLQURlO0FBRTdCLHVCQUFxQjtBQUZRLENBQS9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCBCYXNlRHJpdmVyIGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgYmFzZURyaXZlckUyRVRlc3RzIGZyb20gJy4vZHJpdmVyLWUyZS10ZXN0cyc7XG5iYXNlRHJpdmVyRTJFVGVzdHMoQmFzZURyaXZlciwge1xuICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nXG59KTtcbiJdLCJmaWxlIjoidGVzdC9iYXNlZHJpdmVyL2RyaXZlci1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -11,9 +11,7 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
var _constants = require("../../lib/constants");
|
|
14
|
+
var _lib = require("../../lib");
|
|
17
15
|
|
|
18
16
|
var _axios = _interopRequireDefault(require("axios"));
|
|
19
17
|
|
|
@@ -50,8 +48,8 @@ function baseDriverE2ETests(DriverClass, defaultCaps = {}) {
|
|
|
50
48
|
port,
|
|
51
49
|
address
|
|
52
50
|
});
|
|
53
|
-
baseServer = await (0,
|
|
54
|
-
routeConfiguringFunction: (0,
|
|
51
|
+
baseServer = await (0, _lib.server)({
|
|
52
|
+
routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(d),
|
|
55
53
|
port,
|
|
56
54
|
hostname: _helpers.TEST_HOST
|
|
57
55
|
});
|
|
@@ -324,7 +322,7 @@ function baseDriverE2ETests(DriverClass, defaultCaps = {}) {
|
|
|
324
322
|
});
|
|
325
323
|
describe('settings api', function () {
|
|
326
324
|
before(function () {
|
|
327
|
-
d.settings = new
|
|
325
|
+
d.settings = new _lib.DeviceSettings({
|
|
328
326
|
ignoreUnimportantViews: false
|
|
329
327
|
});
|
|
330
328
|
});
|
|
@@ -390,223 +388,8 @@ function baseDriverE2ETests(DriverClass, defaultCaps = {}) {
|
|
|
390
388
|
await endSession(session.sessionId);
|
|
391
389
|
});
|
|
392
390
|
});
|
|
393
|
-
describe('execute driver script', function () {
|
|
394
|
-
let originalFindElement, sessionId;
|
|
395
|
-
before(function () {
|
|
396
|
-
d.allowInsecure = ['execute_driver_script'];
|
|
397
|
-
originalFindElement = d.findElement;
|
|
398
|
-
|
|
399
|
-
d.findElement = function (strategy, selector) {
|
|
400
|
-
if (strategy === 'accessibility id' && selector === 'amazing') {
|
|
401
|
-
return {
|
|
402
|
-
[_constants.W3C_ELEMENT_KEY]: 'element-id-1'
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
throw new _2.errors.NoSuchElementError('not found');
|
|
407
|
-
}.bind(d);
|
|
408
|
-
});
|
|
409
|
-
beforeEach(async function () {
|
|
410
|
-
({
|
|
411
|
-
sessionId
|
|
412
|
-
} = await startSession(defaultCaps));
|
|
413
|
-
});
|
|
414
|
-
after(function () {
|
|
415
|
-
d.findElement = originalFindElement;
|
|
416
|
-
});
|
|
417
|
-
afterEach(async function () {
|
|
418
|
-
await endSession(sessionId);
|
|
419
|
-
});
|
|
420
|
-
it('should not work unless the allowInsecure feature flag is set', async function () {
|
|
421
|
-
d._allowInsecure = d.allowInsecure;
|
|
422
|
-
|
|
423
|
-
try {
|
|
424
|
-
d.allowInsecure = [];
|
|
425
|
-
const script = `return 'foo'`;
|
|
426
|
-
await (0, _axios.default)({
|
|
427
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
428
|
-
method: POST,
|
|
429
|
-
data: {
|
|
430
|
-
script,
|
|
431
|
-
type: 'wd'
|
|
432
|
-
}
|
|
433
|
-
}).should.eventually.be.rejected;
|
|
434
|
-
await endSession(sessionId);
|
|
435
|
-
} finally {
|
|
436
|
-
d.allowInsecure = d._allowInsecure;
|
|
437
|
-
}
|
|
438
|
-
});
|
|
439
|
-
it('should execute a webdriverio script in the context of session', async function () {
|
|
440
|
-
const script = `
|
|
441
|
-
const timeouts = await driver.getTimeouts();
|
|
442
|
-
const status = await driver.status();
|
|
443
|
-
return [timeouts, status];
|
|
444
|
-
`;
|
|
445
|
-
const {
|
|
446
|
-
value
|
|
447
|
-
} = (await (0, _axios.default)({
|
|
448
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
449
|
-
method: POST,
|
|
450
|
-
data: {
|
|
451
|
-
script,
|
|
452
|
-
type: 'webdriverio'
|
|
453
|
-
}
|
|
454
|
-
})).data;
|
|
455
|
-
const expectedTimeouts = {
|
|
456
|
-
command: 250,
|
|
457
|
-
implicit: 0
|
|
458
|
-
};
|
|
459
|
-
const expectedStatus = {};
|
|
460
|
-
value.result.should.eql([expectedTimeouts, expectedStatus]);
|
|
461
|
-
});
|
|
462
|
-
it('should fail with any script type other than webdriverio currently', async function () {
|
|
463
|
-
const script = `return 'foo'`;
|
|
464
|
-
await (0, _axios.default)({
|
|
465
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
466
|
-
method: POST,
|
|
467
|
-
data: {
|
|
468
|
-
script,
|
|
469
|
-
type: 'wd'
|
|
470
|
-
}
|
|
471
|
-
}).should.eventually.be.rejected;
|
|
472
|
-
});
|
|
473
|
-
it('should execute a webdriverio script that returns elements correctly', async function () {
|
|
474
|
-
const script = `
|
|
475
|
-
return await driver.$("~amazing");
|
|
476
|
-
`;
|
|
477
|
-
const {
|
|
478
|
-
value
|
|
479
|
-
} = (await (0, _axios.default)({
|
|
480
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
481
|
-
method: POST,
|
|
482
|
-
data: {
|
|
483
|
-
script
|
|
484
|
-
}
|
|
485
|
-
})).data;
|
|
486
|
-
value.result.should.eql({
|
|
487
|
-
[_constants.W3C_ELEMENT_KEY]: 'element-id-1',
|
|
488
|
-
[_constants.MJSONWP_ELEMENT_KEY]: 'element-id-1'
|
|
489
|
-
});
|
|
490
|
-
});
|
|
491
|
-
it('should execute a webdriverio script that returns elements in deep structure', async function () {
|
|
492
|
-
const script = `
|
|
493
|
-
const el = await driver.$("~amazing");
|
|
494
|
-
return {element: el, elements: [el, el]};
|
|
495
|
-
`;
|
|
496
|
-
const {
|
|
497
|
-
value
|
|
498
|
-
} = (await (0, _axios.default)({
|
|
499
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
500
|
-
method: POST,
|
|
501
|
-
data: {
|
|
502
|
-
script
|
|
503
|
-
}
|
|
504
|
-
})).data;
|
|
505
|
-
const elObj = {
|
|
506
|
-
[_constants.W3C_ELEMENT_KEY]: 'element-id-1',
|
|
507
|
-
[_constants.MJSONWP_ELEMENT_KEY]: 'element-id-1'
|
|
508
|
-
};
|
|
509
|
-
value.result.should.eql({
|
|
510
|
-
element: elObj,
|
|
511
|
-
elements: [elObj, elObj]
|
|
512
|
-
});
|
|
513
|
-
});
|
|
514
|
-
it('should store and return logs to the user', async function () {
|
|
515
|
-
const script = `
|
|
516
|
-
console.log("foo");
|
|
517
|
-
console.log("foo2");
|
|
518
|
-
console.warn("bar");
|
|
519
|
-
console.error("baz");
|
|
520
|
-
return null;
|
|
521
|
-
`;
|
|
522
|
-
const {
|
|
523
|
-
value
|
|
524
|
-
} = (await (0, _axios.default)({
|
|
525
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
526
|
-
method: POST,
|
|
527
|
-
data: {
|
|
528
|
-
script
|
|
529
|
-
}
|
|
530
|
-
})).data;
|
|
531
|
-
value.logs.should.eql({
|
|
532
|
-
log: ['foo', 'foo2'],
|
|
533
|
-
warn: ['bar'],
|
|
534
|
-
error: ['baz']
|
|
535
|
-
});
|
|
536
|
-
});
|
|
537
|
-
it('should have appium specific commands available', async function () {
|
|
538
|
-
const script = `
|
|
539
|
-
return typeof driver.lock;
|
|
540
|
-
`;
|
|
541
|
-
const {
|
|
542
|
-
value
|
|
543
|
-
} = (await (0, _axios.default)({
|
|
544
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
545
|
-
method: POST,
|
|
546
|
-
data: {
|
|
547
|
-
script
|
|
548
|
-
}
|
|
549
|
-
})).data;
|
|
550
|
-
value.result.should.eql('function');
|
|
551
|
-
});
|
|
552
|
-
it('should correctly handle errors that happen in a webdriverio script', async function () {
|
|
553
|
-
const script = `
|
|
554
|
-
return await driver.$("~notfound");
|
|
555
|
-
`;
|
|
556
|
-
const {
|
|
557
|
-
data
|
|
558
|
-
} = await (0, _axios.default)({
|
|
559
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
560
|
-
method: POST,
|
|
561
|
-
validateStatus: null,
|
|
562
|
-
data: {
|
|
563
|
-
script
|
|
564
|
-
}
|
|
565
|
-
});
|
|
566
|
-
data.value.result.error.error.should.equal('no such element');
|
|
567
|
-
data.value.result.error.message.should.equal('not found');
|
|
568
|
-
data.value.result.error.stacktrace.should.includes('NoSuchElementError:');
|
|
569
|
-
data.value.result.selector.should.equal('~notfound');
|
|
570
|
-
data.value.result.sessionId.should.equal(sessionId);
|
|
571
|
-
});
|
|
572
|
-
it('should correctly handle errors that happen when a script cannot be compiled', async function () {
|
|
573
|
-
const script = `
|
|
574
|
-
return {;
|
|
575
|
-
`;
|
|
576
|
-
const {
|
|
577
|
-
data
|
|
578
|
-
} = await (0, _axios.default)({
|
|
579
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
580
|
-
method: POST,
|
|
581
|
-
validateStatus: null,
|
|
582
|
-
data: {
|
|
583
|
-
script
|
|
584
|
-
}
|
|
585
|
-
});
|
|
586
|
-
data.value.should.have.property('message');
|
|
587
|
-
data.value.message.should.match(/An unknown server-side error occurred while processing the command. Original error: Could not execute driver script. Original error was: Error: Unexpected token '?;'?/);
|
|
588
|
-
});
|
|
589
|
-
it('should be able to set a timeout on a driver script', async function () {
|
|
590
|
-
const script = `
|
|
591
|
-
await Promise.delay(1000);
|
|
592
|
-
return true;
|
|
593
|
-
`;
|
|
594
|
-
const {
|
|
595
|
-
value
|
|
596
|
-
} = (await (0, _axios.default)({
|
|
597
|
-
url: createAppiumTestURL(sessionId, 'appium/execute_driver'),
|
|
598
|
-
method: POST,
|
|
599
|
-
validateStatus: null,
|
|
600
|
-
data: {
|
|
601
|
-
script,
|
|
602
|
-
timeout: 50
|
|
603
|
-
}
|
|
604
|
-
})).data;
|
|
605
|
-
value.message.should.match(/.+50.+timeout.+/);
|
|
606
|
-
});
|
|
607
|
-
});
|
|
608
391
|
|
|
609
|
-
if (DriverClass ===
|
|
392
|
+
if (DriverClass === _lib.BaseDriver) {
|
|
610
393
|
describe('special appium:options capability', function () {
|
|
611
394
|
it('should be able to start a session with caps held in appium:options', async function () {
|
|
612
395
|
const ret = await startSession({
|
|
@@ -629,4 +412,4 @@ var _default = baseDriverE2ETests;
|
|
|
629
412
|
exports.default = _default;require('source-map-support').install();
|
|
630
413
|
|
|
631
414
|
|
|
632
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9kcml2ZXItZTJlLXRlc3RzLmpzIl0sIm5hbWVzIjpbIlBPU1QiLCJERUxFVEUiLCJNRVRIT0RTIiwiYmFzZURyaXZlckUyRVRlc3RzIiwiRHJpdmVyQ2xhc3MiLCJkZWZhdWx0Q2FwcyIsImFkZHJlc3MiLCJURVNUX0hPU1QiLCJwb3J0IiwiY2xhc3NOYW1lIiwibmFtZSIsImRlc2NyaWJlIiwiYmFzZVNlcnZlciIsImQiLCJuZXdTZXNzaW9uVVJMIiwiY3JlYXRlQXBwaXVtVGVzdFVSTCIsImNyZWF0ZVNlc3Npb25VUkwiLCJiZWZvcmUiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJob3N0bmFtZSIsIl8iLCJhZnRlciIsImNsb3NlIiwic3RhcnRTZXNzaW9uIiwiY2FwcyIsInVybCIsIm1ldGhvZCIsImRhdGEiLCJjYXBhYmlsaXRpZXMiLCJhbHdheXNNYXRjaCIsImZpcnN0TWF0Y2giLCJ2YWx1ZSIsImVuZFNlc3Npb24iLCJpZCIsInZhbGlkYXRlU3RhdHVzIiwiZ2V0U2Vzc2lvbiIsIml0Iiwic2Vzc2lvbklkcyIsInRpbWVzIiwic2Vzc2lvbklkIiwiaGVhZGVycyIsInNpbXBsZSIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwicHVzaCIsInVuaXEiLCJsZW5ndGgiLCJzaG91bGQiLCJlcXVhbCIsInN0YXR1cyIsInJlcXMiLCJCIiwiYWxsIiwibWFwIiwieCIsImV4aXN0IiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInNraXAiLCJvcmlnaW5hbEZpbmRFbGVtZW50Iiwib3JpZ2luYWxGaW5kRWxlbWVudHMiLCJzdGFydFRpbWVvdXRTZXNzaW9uIiwidGltZW91dCIsImNsb25lRGVlcCIsImZpbmRFbGVtZW50IiwiYmluZCIsImZpbmRFbGVtZW50cyIsImRlbGF5IiwibmV3U2Vzc2lvbiIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJiZSIsImFib3ZlIiwic2Vzc2lvblVSTCIsInVzaW5nIiwiZXJyb3IiLCJyZXNwIiwic3RhcnQiLCJEYXRlIiwibm93IiwiZXFsIiwibm90Iiwibm9Db21tYW5kVGltZXIiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsImdldFNldHRpbmdzIiwiZmFsc2UiLCJ1cGRhdGUiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiX29sZEdldFN0YXR1cyIsImdldFN0YXR1cyIsInJlcVByb21pc2UiLCJzaHV0ZG93bkV2ZW50UHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwibWVzc2FnZSIsImNvbnRhaW4iLCJzZXNzaW9uIiwicmVzIiwiZXZlbnRzIiwiT2JqZWN0IiwiYXNzaWduIiwibmV3U2Vzc2lvblJlcXVlc3RlZCIsIm5ld1Nlc3Npb25TdGFydGVkIiwiYSIsImFsbG93SW5zZWN1cmUiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwiVzNDX0VMRU1FTlRfS0VZIiwiZXJyb3JzIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiYmVmb3JlRWFjaCIsImFmdGVyRWFjaCIsIl9hbGxvd0luc2VjdXJlIiwic2NyaXB0IiwidHlwZSIsInJlamVjdGVkIiwiZXhwZWN0ZWRUaW1lb3V0cyIsImNvbW1hbmQiLCJpbXBsaWNpdCIsImV4cGVjdGVkU3RhdHVzIiwicmVzdWx0IiwiTUpTT05XUF9FTEVNRU5UX0tFWSIsImVsT2JqIiwiZWxlbWVudCIsImVsZW1lbnRzIiwibG9ncyIsImxvZyIsIndhcm4iLCJzdGFja3RyYWNlIiwiaW5jbHVkZXMiLCJoYXZlIiwicHJvcGVydHkiLCJtYXRjaCIsIkJhc2VEcml2ZXIiLCJyZXQiLCJQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAiLCJwbGF0Zm9ybVZlcnNpb24iLCJvcHRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztB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T0FoSSxVQUFBQSxDQUFDLENBQUNpSSxJQUFGLENBQU9ELGVBQVAsQ0FBdUIvRixNQUF2QixDQUE4QmdDLEdBQTlCLENBQWtDLE1BQWxDO0FBQ0FqRSxVQUFBQSxDQUFDLENBQUNpSSxJQUFGLENBQU90RixVQUFQLENBQWtCVixNQUFsQixDQUF5QmdDLEdBQXpCLENBQTZCLFdBQTdCO0FBQ0EsZ0JBQU05QyxVQUFVLENBQUMyRyxHQUFHLENBQUNwRyxTQUFMLENBQWhCO0FBQ0QsU0FYQyxDQUFGO0FBWUQsT0FiTyxDQUFSO0FBY0Q7QUFDRixHQXZnQk8sQ0FBUjtBQXdnQkQ7O2VBRWNwQyxrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBzZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgRGV2aWNlU2V0dGluZ3MsIGVycm9ycyB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7XG4gIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWVxufSBmcm9tICcuLi8uLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1RFU1RfSE9TVCwgZ2V0VGVzdFBvcnQsIGNyZWF0ZUFwcGl1bVVSTCwgTUVUSE9EU30gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAgfSBmcm9tICcuLi8uLi9saWIvYmFzZWRyaXZlci9jYXBhYmlsaXRpZXMnO1xuY29uc3Qge1BPU1QsIERFTEVURX0gPSBNRVRIT0RTO1xuXG5mdW5jdGlvbiBiYXNlRHJpdmVyRTJFVGVzdHMgKERyaXZlckNsYXNzLCBkZWZhdWx0Q2FwcyA9IHt9KSB7XG4gIGxldCBhZGRyZXNzID0gZGVmYXVsdENhcHNbJ2FwcGl1bTphZGRyZXNzJ10gPz8gVEVTVF9IT1NUO1xuICBsZXQgcG9ydCA9IGRlZmF1bHRDYXBzWydhcHBpdW06cG9ydCddO1xuICBjb25zdCBjbGFzc05hbWUgPSBEcml2ZXJDbGFzcy5uYW1lIHx8ICcodW5rbm93biBkcml2ZXIpJztcblxuICBkZXNjcmliZShgQmFzZURyaXZlciBFMkUgKGFzICR7Y2xhc3NOYW1lfSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJhc2VTZXJ2ZXIsIGQ7XG4gICAgLyoqXG4gICAgICAgKiBUaGlzIFVSTCBjcmVhdGVzIGEgbmV3IHNlc3Npb25cbiAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgKiovXG4gICAgbGV0IG5ld1Nlc3Npb25VUkw7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgVVJMIHdpdGggYmFzZSBob3N0L3BvcnQuIFN1cHBseSBgc2Vzc2lvbmAgYW5kIGBwYXRobmFtZWBcbiAgICAgKiBAdHlwZSB7Xy5DdXJyaWVkRnVuY3Rpb24yPHN0cmluZyxzdHJpbmcsc3RyaW5nPn1cbiAgICAgKi9cbiAgICBsZXQgY3JlYXRlQXBwaXVtVGVzdFVSTDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBVUkwgd2l0aCB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCBhbmQgYSBibGFuayBwYXRobmFtZTtcbiAgICAgKiBlLmcuLCBgaHR0cDovL2Zvby5iYXI6MTIzL3Nlc3Npb24vPHNlc3Npb24taWQ+YFxuICAgICAqICBAdHlwZSB7Xy5DdXJyaWVkRnVuY3Rpb24xPHN0cmluZyxzdHJpbmc+fVxuICAgICAqL1xuICAgIGxldCBjcmVhdGVTZXNzaW9uVVJMO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBvcnQgPSBwb3J0ID8/IGF3YWl0IGdldFRlc3RQb3J0KCk7XG4gICAgICBkZWZhdWx0Q2FwcyA9IHsuLi5kZWZhdWx0Q2FwcywgJ2FwcGl1bTpwb3J0JzogcG9ydH07XG4gICAgICBkID0gbmV3IERyaXZlckNsYXNzKHtwb3J0LCBhZGRyZXNzfSk7XG4gICAgICBiYXNlU2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24oZCksXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGhvc3RuYW1lOiBURVNUX0hPU1RcbiAgICAgIH0pO1xuICAgICAgY3JlYXRlQXBwaXVtVGVzdFVSTCA9IGNyZWF0ZUFwcGl1bVVSTChhZGRyZXNzLCBwb3J0KTtcbiAgICAgIG5ld1Nlc3Npb25VUkwgPSBjcmVhdGVBcHBpdW1UZXN0VVJMKCcnLCAnc2Vzc2lvbicpO1xuICAgICAgY3JlYXRlU2Vzc2lvblVSTCA9IGNyZWF0ZUFwcGl1bVRlc3RVUkwoXywgJycpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZVNlcnZlci5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXNzaW9uIChjYXBzKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgdXJsOiBuZXdTZXNzaW9uVVJMLFxuICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgIGRhdGE6IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogY2FwcywgZmlyc3RNYXRjaDogW3t9XX19LFxuICAgICAgfSkpLmRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5kU2Vzc2lvbiAoaWQpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGNyZWF0ZVNlc3Npb25VUkwoaWQpLFxuICAgICAgICBtZXRob2Q6IERFTEVURSxcbiAgICAgICAgdmFsaWRhdGVTdGF0dXM6IG51bGwsXG4gICAgICB9KSkuZGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRTZXNzaW9uIChpZCkge1xuICAgICAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogY3JlYXRlU2Vzc2lvblVSTChpZCksXG4gICAgICB9KSkuZGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnc2Vzc2lvbiBoYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGlkZW1wb3RlbmN5IHdoaWxlIGNyZWF0aW5nIHNlc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzZXNzaW9uSWRzID0gW107XG4gICAgICAgIGxldCB0aW1lcyA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjb25zdCB7c2Vzc2lvbklkfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgICAgICB1cmw6IG5ld1Nlc3Npb25VUkwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdYLUlkZW1wb3RlbmN5LUtleSc6ICcxMjM0NTYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICAgIGRhdGE6IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogZGVmYXVsdENhcHMsIGZpcnN0TWF0Y2g6IFt7fV19fSxcbiAgICAgICAgICAgIHNpbXBsZTogZmFsc2UsXG4gICAgICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgICAgICAgIH0pKS5kYXRhLnZhbHVlO1xuXG4gICAgICAgICAgc2Vzc2lvbklkcy5wdXNoKHNlc3Npb25JZCk7XG4gICAgICAgICAgdGltZXMrKztcbiAgICAgICAgfSB3aGlsZSAodGltZXMgPCAyKTtcbiAgICAgICAgXy51bmlxKHNlc3Npb25JZHMpLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgICAgY29uc3Qge3N0YXR1cywgZGF0YX0gPSBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVTZXNzaW9uVVJMKHNlc3Npb25JZHNbMF0pLFxuICAgICAgICAgIG1ldGhvZDogREVMRVRFLFxuICAgICAgICB9KTtcbiAgICAgICAgc3RhdHVzLnNob3VsZC5lcXVhbCgyMDApO1xuICAgICAgICBzaG91bGQuZXF1YWwoZGF0YS52YWx1ZSwgbnVsbCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgaWRlbXBvdGVuY3kgd2hpbGUgY3JlYXRpbmcgcGFyYWxsZWwgc2Vzc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlcXMgPSBbXTtcbiAgICAgICAgbGV0IHRpbWVzID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHJlcXMucHVzaChheGlvcyh7XG4gICAgICAgICAgICB1cmw6IG5ld1Nlc3Npb25VUkwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdYLUlkZW1wb3RlbmN5LUtleSc6ICcxMjM0NScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgICAgZGF0YToge2NhcGFiaWxpdGllczoge2Fsd2F5c01hdGNoOiBkZWZhdWx0Q2FwcywgZmlyc3RNYXRjaDogW3t9XX19LFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICB0aW1lcysrO1xuICAgICAgICB9IHdoaWxlICh0aW1lcyA8IDIpO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWRzID0gKGF3YWl0IEIuYWxsKHJlcXMpKS5tYXAoKHgpID0+IHguZGF0YS52YWx1ZS5zZXNzaW9uSWQpO1xuICAgICAgICBfLnVuaXEoc2Vzc2lvbklkcykubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcblxuICAgICAgICBjb25zdCB7c3RhdHVzLCBkYXRhfSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZVNlc3Npb25VUkwoc2Vzc2lvbklkc1swXSksXG4gICAgICAgICAgbWV0aG9kOiBERUxFVEUsXG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0dXMuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChkYXRhLnZhbHVlLCBudWxsKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBzZXNzaW9uIGFuZCByZXRyaWV2ZSBhIHNlc3Npb24gaWQsIHRoZW4gZGVsZXRlIGl0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQge3N0YXR1cywgZGF0YX0gPSBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBuZXdTZXNzaW9uVVJMLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICBkYXRhOiB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IGRlZmF1bHRDYXBzLCBmaXJzdE1hdGNoOiBbe31dfX0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YXR1cy5zaG91bGQuZXF1YWwoMjAwKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGRhdGEudmFsdWUuc2Vzc2lvbklkKTtcbiAgICAgICAgZGF0YS52YWx1ZS5jYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lLnNob3VsZC5lcXVhbChkZWZhdWx0Q2Fwcy5wbGF0Zm9ybU5hbWUpO1xuICAgICAgICBkYXRhLnZhbHVlLmNhcGFiaWxpdGllcy5kZXZpY2VOYW1lLnNob3VsZC5lcXVhbChkZWZhdWx0Q2Fwc1snYXBwaXVtOmRldmljZU5hbWUnXSk7XG5cbiAgICAgICAgKHtzdGF0dXMsIGRhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlU2Vzc2lvblVSTChkLnNlc3Npb25JZCksXG4gICAgICAgICAgbWV0aG9kOiBERUxFVEUsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzdGF0dXMuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChkYXRhLnZhbHVlLCBudWxsKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGQuc2Vzc2lvbklkLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQuc2tpcCgnc2hvdWxkIHRocm93IE5ZSSBmb3IgY29tbWFuZHMgbm90IGltcGxlbWVudGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbW1hbmQgdGltZW91dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaW5kRWxlbWVudCwgb3JpZ2luYWxGaW5kRWxlbWVudHM7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VGltZW91dFNlc3Npb24gKHRpbWVvdXQpIHtcbiAgICAgICAgY29uc3QgY2FwcyA9IF8uY2xvbmVEZWVwKGRlZmF1bHRDYXBzKTtcbiAgICAgICAgY2Fwc1snYXBwaXVtOm5ld0NvbW1hbmRUaW1lb3V0J10gPSB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gYXdhaXQgc3RhcnRTZXNzaW9uKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBvcmlnaW5hbEZpbmRFbGVtZW50ID0gZC5maW5kRWxlbWVudDtcbiAgICAgICAgZC5maW5kRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gJ2Zvbyc7XG4gICAgICAgIH0uYmluZChkKTtcblxuICAgICAgICBvcmlnaW5hbEZpbmRFbGVtZW50cyA9IGQuZmluZEVsZW1lbnRzO1xuICAgICAgICBkLmZpbmRFbGVtZW50cyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KDIwMCk7XG4gICAgICAgICAgcmV0dXJuIFsnZm9vJ107XG4gICAgICAgIH0uYmluZChkKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQuZmluZEVsZW1lbnQgPSBvcmlnaW5hbEZpbmRFbGVtZW50O1xuICAgICAgICBkLmZpbmRFbGVtZW50cyA9IG9yaWdpbmFsRmluZEVsZW1lbnRzO1xuICAgICAgfSk7XG5cblxuICAgICAgaXQoJ3Nob3VsZCBzZXQgYSBkZWZhdWx0IGNvbW1hbmRUaW1lb3V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbmV3U2Vzc2lvbiA9IGF3YWl0IHN0YXJ0VGltZW91dFNlc3Npb24oKTtcbiAgICAgICAgZC5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5iZS5hYm92ZSgwKTtcbiAgICAgICAgYXdhaXQgZW5kU2Vzc2lvbihuZXdTZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aW1lb3V0IG9uIGNvbW1hbmRzIHVzaW5nIGNvbW1hbmRUaW1lb3V0IGNhcCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG5ld1Nlc3Npb24gPSBhd2FpdCBzdGFydFRpbWVvdXRTZXNzaW9uKDAuMjUpO1xuICAgICAgICAvLyBYWFg6IHJhY2UgY29uZGl0aW9uOiB3ZSBtdXN0IGJ1aWxkIHRoaXMgVVJMIGJlZm9yZSAuLi5zb21ldGhpbmcgaGFwcGVucy4uLlxuICAgICAgICAvLyB3aGljaCBjYXVzZXMgYGQuc2Vzc2lvbklkYCB0byBiZSBtaXNzaW5nXG4gICAgICAgIGxldCBzZXNzaW9uVVJMID0gY3JlYXRlU2Vzc2lvblVSTChkLnNlc3Npb25JZCk7XG4gICAgICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUFwcGl1bVRlc3RVUkwoZC5zZXNzaW9uSWQsICdlbGVtZW50JyksXG4gICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgIGRhdGE6IHt1c2luZzogJ25hbWUnLCB2YWx1ZTogJ2Zvbyd9LFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgQi5kZWxheSg0MDApO1xuICAgICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBzZXNzaW9uVVJMLFxuICAgICAgICAgIHZhbGlkYXRlU3RhdHVzOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGRhdGEudmFsdWUuZXJyb3IsICdpbnZhbGlkIHNlc3Npb24gaWQnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGQuc2Vzc2lvbklkLCBudWxsKTtcbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGVuZFNlc3Npb24obmV3U2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmVzcC5lcnJvciwgJ2ludmFsaWQgc2Vzc2lvbiBpZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHRpbWVvdXQgd2l0aCBjb21tYW5kVGltZW91dCBvZiBmYWxzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG5ld1Nlc3Npb24gPSBhd2FpdCBzdGFydFRpbWVvdXRTZXNzaW9uKDAuMSk7XG4gICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChkLnNlc3Npb25JZCwgJ2VsZW1lbnRzJyksXG4gICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgIGRhdGE6IHt1c2luZzogJ25hbWUnLCB2YWx1ZTogJ2Zvbyd9LFxuICAgICAgICB9KSkuZGF0YTtcbiAgICAgICAgKERhdGUubm93KCkgLSBzdGFydCkuc2hvdWxkLmJlLmFib3ZlKDE1MCk7XG4gICAgICAgIHZhbHVlLnNob3VsZC5lcWwoWydmb28nXSk7XG4gICAgICAgIGF3YWl0IGVuZFNlc3Npb24obmV3U2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHRpbWVvdXQgd2l0aCBjb21tYW5kVGltZW91dCBvZiAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBkLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSAyO1xuICAgICAgICBsZXQgbmV3U2Vzc2lvbiA9IGF3YWl0IHN0YXJ0VGltZW91dFNlc3Npb24oMCk7XG5cbiAgICAgICAgYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChkLnNlc3Npb25JZCwgJ2VsZW1lbnQnKSxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgZGF0YToge3VzaW5nOiAnbmFtZScsIHZhbHVlOiAnZm9vJ30sXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDQwMCk7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlU2Vzc2lvblVSTChkLnNlc3Npb25JZCksXG4gICAgICAgIH0pKS5kYXRhO1xuICAgICAgICB2YWx1ZS5wbGF0Zm9ybU5hbWUuc2hvdWxkLmVxdWFsKGRlZmF1bHRDYXBzLnBsYXRmb3JtTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBlbmRTZXNzaW9uKG5ld1Nlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3AsIG51bGwpO1xuXG4gICAgICAgIGQubmV3Q29tbWFuZFRpbWVvdXRNcyA9IDYwICogMTAwMDtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCB0aW1lb3V0IGlmIGl0cyBqdXN0IHRoZSBjb21tYW5kIHRha2luZyBhd2hpbGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBuZXdTZXNzaW9uID0gYXdhaXQgc3RhcnRUaW1lb3V0U2Vzc2lvbigwLjI1KTtcbiAgICAgICAgLy8gWFhYOiByYWNlIGNvbmRpdGlvbjogd2UgbXVzdCBidWlsZCB0aGlzIFVSTCBiZWZvcmUgLi4uc29tZXRoaW5nIGhhcHBlbnMuLi5cbiAgICAgICAgLy8gd2hpY2ggY2F1c2VzIGBkLnNlc3Npb25JZGAgdG8gYmUgbWlzc2luZ1xuICAgICAgICBsZXQgc2Vzc2lvblVSTCA9IGNyZWF0ZVNlc3Npb25VUkwoZC5zZXNzaW9uSWQpO1xuICAgICAgICBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKGQuc2Vzc2lvbklkLCAnZWxlbWVudCcpLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICBkYXRhOiB7dXNpbmc6ICduYW1lJywgdmFsdWU6ICdmb28nfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoNDAwKTtcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBzZXNzaW9uVVJMLFxuICAgICAgICAgIHZhbGlkYXRlU3RhdHVzOiBudWxsLFxuICAgICAgICB9KSkuZGF0YTtcbiAgICAgICAgdmFsdWUuZXJyb3Iuc2hvdWxkLmVxdWFsKCdpbnZhbGlkIHNlc3Npb24gaWQnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGQuc2Vzc2lvbklkLCBudWxsKTtcbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGVuZFNlc3Npb24obmV3U2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICByZXNwLmVycm9yLnNob3VsZC5lcXVhbCgnaW52YWxpZCBzZXNzaW9uIGlkJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgaGF2ZSBhIHRpbWVyIHJ1bm5pbmcgYmVmb3JlIG9yIGFmdGVyIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2hvdWxkLm5vdC5leGlzdChkLm5vQ29tbWFuZFRpbWVyKTtcbiAgICAgICAgbGV0IG5ld1Nlc3Npb24gPSBhd2FpdCBzdGFydFRpbWVvdXRTZXNzaW9uKDAuMjUpO1xuICAgICAgICBuZXdTZXNzaW9uLnNlc3Npb25JZC5zaG91bGQuZXF1YWwoZC5zZXNzaW9uSWQpO1xuICAgICAgICBzaG91bGQuZXhpc3QoZC5ub0NvbW1hbmRUaW1lcik7XG4gICAgICAgIGF3YWl0IGVuZFNlc3Npb24obmV3U2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICBzaG91bGQubm90LmV4aXN0KGQubm9Db21tYW5kVGltZXIpO1xuICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXR0aW5ncyBhcGknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZX0pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHNldHRpbmdzIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5zZXR0aW5ncy5nZXRTZXR0aW5ncygpLmlnbm9yZVVuaW1wb3J0YW50Vmlld3Muc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gdXBkYXRlU2V0dGluZ3MgbWV0aG9kIGlzIG5vdCBkZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdHJ1ZX0pLnNob3VsZC5ldmVudHVhbGx5XG4gICAgICAgICAgICAgICAgLmJlLnJlamVjdGVkV2l0aCgnb25TZXR0aW5nc1VwZGF0ZScpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIHVwZGF0ZSBvYmplY3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuc2V0dGluZ3MudXBkYXRlKCdpbnZhbGlkIGpzb24nKS5zaG91bGQuZXZlbnR1YWxseVxuICAgICAgICAgICAgICAgIC5iZS5yZWplY3RlZFdpdGgoJ0pTT04nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VuZXhwZWN0ZWQgZXhpdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIGN1cnJlbnQgY29tbWFuZCB3aGVuIHRoZSBkcml2ZXIgY3Jhc2hlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5fb2xkR2V0U3RhdHVzID0gZC5nZXRTdGF0dXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZC5nZXRTdGF0dXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhd2FpdCBCLmRlbGF5KDUwMDApO1xuICAgICAgICAgIH0uYmluZChkKTtcbiAgICAgICAgICBjb25zdCByZXFQcm9taXNlID0gYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKCcnLCAnc3RhdHVzJyksXG4gICAgICAgICAgICB2YWxpZGF0ZVN0YXR1czogbnVsbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWVzdCBnZXRzIHRvIHRoZSBzZXJ2ZXIgYmVmb3JlIG91ciBzaHV0ZG93blxuICAgICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwKTtcbiAgICAgICAgICBjb25zdCBzaHV0ZG93bkV2ZW50UHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgICAgIGQub25VbmV4cGVjdGVkU2h1dGRvd24ocmVzb2x2ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ0NyYXNoeXRpbWVzJykpO1xuICAgICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgcmVxUHJvbWlzZSkuZGF0YTtcbiAgICAgICAgICB2YWx1ZS5tZXNzYWdlLnNob3VsZC5jb250YWluKCdDcmFzaHl0aW1lcycpO1xuICAgICAgICAgIGF3YWl0IHNodXRkb3duRXZlbnRQcm9taXNlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGQuZ2V0U3RhdHVzID0gZC5fb2xkR2V0U3RhdHVzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdldmVudCB0aW1pbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWRkIHRpbWluZ3MgaWYgbm90IHVzaW5nIG9wdC1pbiBjYXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzdGFydFNlc3Npb24oZGVmYXVsdENhcHMpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRTZXNzaW9uKHNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgc2hvdWxkLm5vdC5leGlzdChyZXMuZXZlbnRzKTtcbiAgICAgICAgYXdhaXQgZW5kU2Vzc2lvbihzZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWRkIHN0YXJ0IHNlc3Npb24gdGltaW5ncycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY2FwcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7J2FwcGl1bTpldmVudFRpbWluZ3MnOiB0cnVlfSk7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzdGFydFNlc3Npb24oY2Fwcyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCBnZXRTZXNzaW9uKHNlc3Npb24uc2Vzc2lvbklkKSk7XG4gICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ldmVudHMubmV3U2Vzc2lvblJlcXVlc3RlZCk7XG4gICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzLm5ld1Nlc3Npb25TdGFydGVkKTtcbiAgICAgICAgcmVzLmV2ZW50cy5uZXdTZXNzaW9uUmVxdWVzdGVkWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgcmVzLmV2ZW50cy5uZXdTZXNzaW9uU3RhcnRlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIGF3YWl0IGVuZFNlc3Npb24oc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXhlY3V0ZSBkcml2ZXIgc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbW9jayBzb21lIG1ldGhvZHMgb24gQmFzZURyaXZlciB0aGF0IGFyZW4ndCBub3JtYWxseSB0aGVyZSBleGNlcHQgaW5cbiAgICAgIC8vIGEgZnVsbHkgYmxvd24gZHJpdmVyXG4gICAgICBsZXQgb3JpZ2luYWxGaW5kRWxlbWVudCwgc2Vzc2lvbklkO1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5hbGxvd0luc2VjdXJlID0gWydleGVjdXRlX2RyaXZlcl9zY3JpcHQnXTtcbiAgICAgICAgb3JpZ2luYWxGaW5kRWxlbWVudCA9IGQuZmluZEVsZW1lbnQ7XG4gICAgICAgIGQuZmluZEVsZW1lbnQgPSAoZnVuY3Rpb24gKHN0cmF0ZWd5LCBzZWxlY3Rvcikge1xuICAgICAgICAgIGlmIChzdHJhdGVneSA9PT0gJ2FjY2Vzc2liaWxpdHkgaWQnICYmIHNlbGVjdG9yID09PSAnYW1hemluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7W1czQ19FTEVNRU5UX0tFWV06ICdlbGVtZW50LWlkLTEnfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcignbm90IGZvdW5kJyk7XG4gICAgICAgIH0pLmJpbmQoZCk7XG4gICAgICB9KTtcblxuICAgICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICh7c2Vzc2lvbklkfSA9IGF3YWl0IHN0YXJ0U2Vzc2lvbihkZWZhdWx0Q2FwcykpO1xuICAgICAgfSk7XG5cbiAgICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5maW5kRWxlbWVudCA9IG9yaWdpbmFsRmluZEVsZW1lbnQ7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZW5kU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHdvcmsgdW5sZXNzIHRoZSBhbGxvd0luc2VjdXJlIGZlYXR1cmUgZmxhZyBpcyBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQuX2FsbG93SW5zZWN1cmUgPSBkLmFsbG93SW5zZWN1cmU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZC5hbGxvd0luc2VjdXJlID0gW107XG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYHJldHVybiAnZm9vJ2A7XG4gICAgICAgICAgYXdhaXQgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKHNlc3Npb25JZCwgJ2FwcGl1bS9leGVjdXRlX2RyaXZlcicpLFxuICAgICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgICAgZGF0YToge3NjcmlwdCwgdHlwZTogJ3dkJ30sXG4gICAgICAgICAgfSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICAgICAgYXdhaXQgZW5kU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IGQuX2FsbG93SW5zZWN1cmU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgYSB3ZWJkcml2ZXJpbyBzY3JpcHQgaW4gdGhlIGNvbnRleHQgb2Ygc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gYFxuICAgICAgICAgIGNvbnN0IHRpbWVvdXRzID0gYXdhaXQgZHJpdmVyLmdldFRpbWVvdXRzKCk7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZHJpdmVyLnN0YXR1cygpO1xuICAgICAgICAgIHJldHVybiBbdGltZW91dHMsIHN0YXR1c107XG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChzZXNzaW9uSWQsICdhcHBpdW0vZXhlY3V0ZV9kcml2ZXInKSxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgZGF0YToge3NjcmlwdCwgdHlwZTogJ3dlYmRyaXZlcmlvJ30sXG4gICAgICAgIH0pKS5kYXRhO1xuICAgICAgICBjb25zdCBleHBlY3RlZFRpbWVvdXRzID0ge2NvbW1hbmQ6IDI1MCwgaW1wbGljaXQ6IDB9O1xuICAgICAgICBjb25zdCBleHBlY3RlZFN0YXR1cyA9IHt9O1xuICAgICAgICB2YWx1ZS5yZXN1bHQuc2hvdWxkLmVxbChbZXhwZWN0ZWRUaW1lb3V0cywgZXhwZWN0ZWRTdGF0dXNdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBhbnkgc2NyaXB0IHR5cGUgb3RoZXIgdGhhbiB3ZWJkcml2ZXJpbyBjdXJyZW50bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGByZXR1cm4gJ2ZvbydgO1xuICAgICAgICBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKHNlc3Npb25JZCwgJ2FwcGl1bS9leGVjdXRlX2RyaXZlcicpLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICBkYXRhOiB7c2NyaXB0LCB0eXBlOiAnd2QnfSxcbiAgICAgICAgfSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBleGVjdXRlIGEgd2ViZHJpdmVyaW8gc2NyaXB0IHRoYXQgcmV0dXJucyBlbGVtZW50cyBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGBcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZHJpdmVyLiQoXCJ+YW1hemluZ1wiKTtcbiAgICAgICAgYDtcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKHNlc3Npb25JZCwgJ2FwcGl1bS9leGVjdXRlX2RyaXZlcicpLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICBkYXRhOiB7c2NyaXB0fSxcbiAgICAgICAgfSkpLmRhdGE7XG4gICAgICAgIHZhbHVlLnJlc3VsdC5zaG91bGQuZXFsKHtcbiAgICAgICAgICBbVzNDX0VMRU1FTlRfS0VZXTogJ2VsZW1lbnQtaWQtMScsXG4gICAgICAgICAgW01KU09OV1BfRUxFTUVOVF9LRVldOiAnZWxlbWVudC1pZC0xJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgYSB3ZWJkcml2ZXJpbyBzY3JpcHQgdGhhdCByZXR1cm5zIGVsZW1lbnRzIGluIGRlZXAgc3RydWN0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSBgXG4gICAgICAgICAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuJChcIn5hbWF6aW5nXCIpO1xuICAgICAgICAgIHJldHVybiB7ZWxlbWVudDogZWwsIGVsZW1lbnRzOiBbZWwsIGVsXX07XG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChzZXNzaW9uSWQsICdhcHBpdW0vZXhlY3V0ZV9kcml2ZXInKSxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgZGF0YToge3NjcmlwdH0sXG4gICAgICAgIH0pKS5kYXRhO1xuICAgICAgICBjb25zdCBlbE9iaiA9IHtcbiAgICAgICAgICBbVzNDX0VMRU1FTlRfS0VZXTogJ2VsZW1lbnQtaWQtMScsXG4gICAgICAgICAgW01KU09OV1BfRUxFTUVOVF9LRVldOiAnZWxlbWVudC1pZC0xJ1xuICAgICAgICB9O1xuICAgICAgICB2YWx1ZS5yZXN1bHQuc2hvdWxkLmVxbCh7ZWxlbWVudDogZWxPYmosIGVsZW1lbnRzOiBbZWxPYmosIGVsT2JqXX0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3RvcmUgYW5kIHJldHVybiBsb2dzIHRvIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSBgXG4gICAgICAgICAgY29uc29sZS5sb2coXCJmb29cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJmb28yXCIpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcImJhclwiKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiYmF6XCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBgO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUFwcGl1bVRlc3RVUkwoc2Vzc2lvbklkLCAnYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyksXG4gICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgIGRhdGE6IHtzY3JpcHR9LFxuICAgICAgICB9KSkuZGF0YTtcbiAgICAgICAgdmFsdWUubG9ncy5zaG91bGQuZXFsKHtsb2c6IFsnZm9vJywgJ2ZvbzInXSwgd2FybjogWydiYXInXSwgZXJyb3I6IFsnYmF6J119KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhdmUgYXBwaXVtIHNwZWNpZmljIGNvbW1hbmRzIGF2YWlsYWJsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gYFxuICAgICAgICAgIHJldHVybiB0eXBlb2YgZHJpdmVyLmxvY2s7XG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChzZXNzaW9uSWQsICdhcHBpdW0vZXhlY3V0ZV9kcml2ZXInKSxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgZGF0YToge3NjcmlwdH0sXG4gICAgICAgIH0pKS5kYXRhO1xuICAgICAgICB2YWx1ZS5yZXN1bHQuc2hvdWxkLmVxbCgnZnVuY3Rpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBoYW5kbGUgZXJyb3JzIHRoYXQgaGFwcGVuIGluIGEgd2ViZHJpdmVyaW8gc2NyaXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSBgXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRyaXZlci4kKFwifm5vdGZvdW5kXCIpO1xuICAgICAgICBgO1xuICAgICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKHNlc3Npb25JZCwgJ2FwcGl1bS9leGVjdXRlX2RyaXZlcicpLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXR1czogbnVsbCxcbiAgICAgICAgICBkYXRhOiB7c2NyaXB0fSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGEudmFsdWUucmVzdWx0LmVycm9yLmVycm9yLnNob3VsZC5lcXVhbCgnbm8gc3VjaCBlbGVtZW50Jyk7XG4gICAgICAgIGRhdGEudmFsdWUucmVzdWx0LmVycm9yLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdub3QgZm91bmQnKTtcbiAgICAgICAgZGF0YS52YWx1ZS5yZXN1bHQuZXJyb3Iuc3RhY2t0cmFjZS5zaG91bGQuaW5jbHVkZXMoJ05vU3VjaEVsZW1lbnRFcnJvcjonKTtcbiAgICAgICAgZGF0YS52YWx1ZS5yZXN1bHQuc2VsZWN0b3Iuc2hvdWxkLmVxdWFsKCd+bm90Zm91bmQnKTtcbiAgICAgICAgZGF0YS52YWx1ZS5yZXN1bHQuc2Vzc2lvbklkLnNob3VsZC5lcXVhbChzZXNzaW9uSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGhhbmRsZSBlcnJvcnMgdGhhdCBoYXBwZW4gd2hlbiBhIHNjcmlwdCBjYW5ub3QgYmUgY29tcGlsZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGBcbiAgICAgICAgICByZXR1cm4geztcbiAgICAgICAgYDtcbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChzZXNzaW9uSWQsICdhcHBpdW0vZXhlY3V0ZV9kcml2ZXInKSxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgdmFsaWRhdGVTdGF0dXM6IG51bGwsXG4gICAgICAgICAgZGF0YToge3NjcmlwdH0sXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRhLnZhbHVlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtZXNzYWdlJyk7XG4gICAgICAgIGRhdGEudmFsdWUubWVzc2FnZS5zaG91bGQubWF0Y2goL0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4gT3JpZ2luYWwgZXJyb3I6IENvdWxkIG5vdCBleGVjdXRlIGRyaXZlciBzY3JpcHQuIE9yaWdpbmFsIGVycm9yIHdhczogRXJyb3I6IFVuZXhwZWN0ZWQgdG9rZW4gJz87Jz8vKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gc2V0IGEgdGltZW91dCBvbiBhIGRyaXZlciBzY3JpcHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGBcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmRlbGF5KDEwMDApO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBgO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUFwcGl1bVRlc3RVUkwoc2Vzc2lvbklkLCAnYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyksXG4gICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgIHZhbGlkYXRlU3RhdHVzOiBudWxsLFxuICAgICAgICAgIGRhdGE6IHtzY3JpcHQsIHRpbWVvdXQ6IDUwfSxcbiAgICAgICAgfSkpLmRhdGE7XG4gICAgICAgIHZhbHVlLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC8uKzUwLit0aW1lb3V0LisvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKERyaXZlckNsYXNzID09PSBCYXNlRHJpdmVyKSB7XG4gICAgICAvLyBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gYmFzZWRyaXZlciwgbm90IG90aGVyIGRyaXZlcnMgd2hpY2ggYWxzbyB1c2UgdGhlc2UgdGVzdHMsIHNpbmNlIHdlXG4gICAgICAvLyBkb24ndCB3YW50IHRoZW0gdG8gdHJ5IGFuZCBzdGFydCBzZXNzaW9ucyB3aXRoIHRoZXNlIHJhbmRvbSBjYXBhYmlsaXRpZXMgdGhhdCBhcmVcbiAgICAgIC8vIG5lY2Vzc2FyeSB0byB0ZXN0IHRoZSBhcHBpdW0gb3B0aW9ucyBsb2dpY1xuICAgICAgZGVzY3JpYmUoJ3NwZWNpYWwgYXBwaXVtOm9wdGlvbnMgY2FwYWJpbGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIHN0YXJ0IGEgc2Vzc2lvbiB3aXRoIGNhcHMgaGVsZCBpbiBhcHBpdW06b3B0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBzdGFydFNlc3Npb24oe1xuICAgICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAgIFtQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVBdOiB7XG4gICAgICAgICAgICAgIHBsYXRmb3JtVmVyc2lvbjogJzExLjQnLFxuICAgICAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnaVBob25lIDExJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkLm9wdHMucGxhdGZvcm1WZXJzaW9uLnNob3VsZC5lcWwoJzExLjQnKTtcbiAgICAgICAgICBkLm9wdHMuZGV2aWNlTmFtZS5zaG91bGQuZXFsKCdpUGhvbmUgMTEnKTtcbiAgICAgICAgICBhd2FpdCBlbmRTZXNzaW9uKHJldC5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VEcml2ZXJFMkVUZXN0cztcbiJdLCJmaWxlIjoidGVzdC9iYXNlZHJpdmVyL2RyaXZlci1lMmUtdGVzdHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
415
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9kcml2ZXItZTJlLXRlc3RzLmpzIl0sIm5hbWVzIjpbIlBPU1QiLCJERUxFVEUiLCJNRVRIT0RTIiwiYmFzZURyaXZlckUyRVRlc3RzIiwiRHJpdmVyQ2xhc3MiLCJkZWZhdWx0Q2FwcyIsImFkZHJlc3MiLCJURVNUX0hPU1QiLCJwb3J0IiwiY2xhc3NOYW1lIiwibmFtZSIsImRlc2NyaWJlIiwiYmFzZVNlcnZlciIsImQiLCJuZXdTZXNzaW9uVVJMIiwiY3JlYXRlQXBwaXVtVGVzdFVSTCIsImNyZWF0ZVNlc3Npb25VUkwiLCJiZWZvcmUiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJob3N0bmFtZSIsIl8iLCJhZnRlciIsImNsb3NlIiwic3RhcnRTZXNzaW9uIiwiY2FwcyIsInVybCIsIm1ldGhvZCIsImRhdGEiLCJjYXBhYmlsaXRpZXMiLCJhbHdheXNNYXRjaCIsImZpcnN0TWF0Y2giLCJ2YWx1ZSIsImVuZFNlc3Npb24iLCJpZCIsInZhbGlkYXRlU3RhdHVzIiwiZ2V0U2Vzc2lvbiIsIml0Iiwic2Vzc2lvbklkcyIsInRpbWVzIiwic2Vzc2lvbklkIiwiaGVhZGVycyIsInNpbXBsZSIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwicHVzaCIsInVuaXEiLCJsZW5ndGgiLCJzaG91bGQiLCJlcXVhbCIsInN0YXR1cyIsInJlcXMiLCJCIiwiYWxsIiwibWFwIiwieCIsImV4aXN0IiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInNraXAiLCJvcmlnaW5hbEZpbmRFbGVtZW50Iiwib3JpZ2luYWxGaW5kRWxlbWVudHMiLCJzdGFydFRpbWVvdXRTZXNzaW9uIiwidGltZW91dCIsImNsb25lRGVlcCIsImZpbmRFbGVtZW50IiwiYmluZCIsImZpbmRFbGVtZW50cyIsImRlbGF5IiwibmV3U2Vzc2lvbiIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJiZSIsImFib3ZlIiwic2Vzc2lvblVSTCIsInVzaW5nIiwiZXJyb3IiLCJyZXNwIiwic3RhcnQiLCJEYXRlIiwibm93IiwiZXFsIiwibm90Iiwibm9Db21tYW5kVGltZXIiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsImdldFNldHRpbmdzIiwiZmFsc2UiLCJ1cGRhdGUiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiX29sZEdldFN0YXR1cyIsImdldFN0YXR1cyIsInJlcVByb21pc2UiLCJzaHV0ZG93bkV2ZW50UHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwibWVzc2FnZSIsImNvbnRhaW4iLCJzZXNzaW9uIiwicmVzIiwiZXZlbnRzIiwiT2JqZWN0IiwiYXNzaWduIiwibmV3U2Vzc2lvblJlcXVlc3RlZCIsIm5ld1Nlc3Npb25TdGFydGVkIiwiYSIsIkJhc2VEcml2ZXIiLCJyZXQiLCJQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAiLCJwbGF0Zm9ybVZlcnNpb24iLCJvcHRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBLE1BQU07QUFBQ0EsRUFBQUEsSUFBRDtBQUFPQyxFQUFBQTtBQUFQLElBQWlCQyxnQkFBdkI7O0FBRUEsU0FBU0Msa0JBQVQsQ0FBNkJDLFdBQTdCLEVBQTBDQyxXQUFXLEdBQUcsRUFBeEQsRUFBNEQ7QUFBQTs7QUFDMUQsTUFBSUMsT0FBTywyQkFBR0QsV0FBVyxDQUFDLGdCQUFELENBQWQsdUVBQW9DRSxrQkFBL0M7QUFDQSxNQUFJQyxJQUFJLEdBQUdILFdBQVcsQ0FBQyxhQUFELENBQXRCO0FBQ0EsUUFBTUksU0FBUyxHQUFHTCxXQUFXLENBQUNNLElBQVosSUFBb0Isa0JBQXRDO0FBRUFDLEVBQUFBLFFBQVEsQ0FBRSxzQkFBcUJGLFNBQVUsR0FBakMsRUFBcUMsWUFBWTtBQUN2RCxR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dUUsa0JBQWtCO0FBQ3pGLGdCQUFNMEUsR0FBRyxHQUFHLE1BQU12RixZQUFZLENBQUM7QUFDN0JnQyxZQUFBQSxZQUFZLEVBQUUsS0FEZTtBQUU3QixhQUFDd0Qsc0NBQUQsR0FBNEI7QUFDMUJDLGNBQUFBLGVBQWUsRUFBRSxNQURTO0FBRTFCLG1DQUFxQjtBQUZLO0FBRkMsV0FBRCxDQUE5QjtBQU9BbkcsVUFBQUEsQ0FBQyxDQUFDb0csSUFBRixDQUFPRCxlQUFQLENBQXVCbEUsTUFBdkIsQ0FBOEJnQyxHQUE5QixDQUFrQyxNQUFsQztBQUNBakUsVUFBQUEsQ0FBQyxDQUFDb0csSUFBRixDQUFPekQsVUFBUCxDQUFrQlYsTUFBbEIsQ0FBeUJnQyxHQUF6QixDQUE2QixXQUE3QjtBQUNBLGdCQUFNOUMsVUFBVSxDQUFDOEUsR0FBRyxDQUFDdkUsU0FBTCxDQUFoQjtBQUNELFNBWEMsQ0FBRjtBQVlELE9BYk8sQ0FBUjtBQWNEO0FBQ0YsR0F4Vk8sQ0FBUjtBQXlWRDs7ZUFFY3BDLGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIHNlcnZlciwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtURVNUX0hPU1QsIGdldFRlc3RQb3J0LCBjcmVhdGVBcHBpdW1VUkwsIE1FVEhPRFN9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgUFJFRklYRURfQVBQSVVNX09QVFNfQ0FQIH0gZnJvbSAnLi4vLi4vbGliL2Jhc2Vkcml2ZXIvY2FwYWJpbGl0aWVzJztcbmNvbnN0IHtQT1NULCBERUxFVEV9ID0gTUVUSE9EUztcblxuZnVuY3Rpb24gYmFzZURyaXZlckUyRVRlc3RzIChEcml2ZXJDbGFzcywgZGVmYXVsdENhcHMgPSB7fSkge1xuICBsZXQgYWRkcmVzcyA9IGRlZmF1bHRDYXBzWydhcHBpdW06YWRkcmVzcyddID8/IFRFU1RfSE9TVDtcbiAgbGV0IHBvcnQgPSBkZWZhdWx0Q2Fwc1snYXBwaXVtOnBvcnQnXTtcbiAgY29uc3QgY2xhc3NOYW1lID0gRHJpdmVyQ2xhc3MubmFtZSB8fCAnKHVua25vd24gZHJpdmVyKSc7XG5cbiAgZGVzY3JpYmUoYEJhc2VEcml2ZXIgRTJFIChhcyAke2NsYXNzTmFtZX0pYCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCBiYXNlU2VydmVyLCBkO1xuICAgIC8qKlxuICAgICAgICogVGhpcyBVUkwgY3JlYXRlcyBhIG5ldyBzZXNzaW9uXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICoqL1xuICAgIGxldCBuZXdTZXNzaW9uVVJMO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFVSTCB3aXRoIGJhc2UgaG9zdC9wb3J0LiBTdXBwbHkgYHNlc3Npb25gIGFuZCBgcGF0aG5hbWVgXG4gICAgICogQHR5cGUge18uQ3VycmllZEZ1bmN0aW9uMjxzdHJpbmcsc3RyaW5nLHN0cmluZz59XG4gICAgICovXG4gICAgbGV0IGNyZWF0ZUFwcGl1bVRlc3RVUkw7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgVVJMIHdpdGggdGhlIGdpdmVuIHNlc3Npb24gSUQgYW5kIGEgYmxhbmsgcGF0aG5hbWU7XG4gICAgICogZS5nLiwgYGh0dHA6Ly9mb28uYmFyOjEyMy9zZXNzaW9uLzxzZXNzaW9uLWlkPmBcbiAgICAgKiAgQHR5cGUge18uQ3VycmllZEZ1bmN0aW9uMTxzdHJpbmcsc3RyaW5nPn1cbiAgICAgKi9cbiAgICBsZXQgY3JlYXRlU2Vzc2lvblVSTDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwb3J0ID0gcG9ydCA/PyBhd2FpdCBnZXRUZXN0UG9ydCgpO1xuICAgICAgZGVmYXVsdENhcHMgPSB7Li4uZGVmYXVsdENhcHMsICdhcHBpdW06cG9ydCc6IHBvcnR9O1xuICAgICAgZCA9IG5ldyBEcml2ZXJDbGFzcyh7cG9ydCwgYWRkcmVzc30pO1xuICAgICAgYmFzZVNlcnZlciA9IGF3YWl0IHNlcnZlcih7XG4gICAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGQpLFxuICAgICAgICBwb3J0LFxuICAgICAgICBob3N0bmFtZTogVEVTVF9IT1NUXG4gICAgICB9KTtcbiAgICAgIGNyZWF0ZUFwcGl1bVRlc3RVUkwgPSBjcmVhdGVBcHBpdW1VUkwoYWRkcmVzcywgcG9ydCk7XG4gICAgICBuZXdTZXNzaW9uVVJMID0gY3JlYXRlQXBwaXVtVGVzdFVSTCgnJywgJ3Nlc3Npb24nKTtcbiAgICAgIGNyZWF0ZVNlc3Npb25VUkwgPSBjcmVhdGVBcHBpdW1UZXN0VVJMKF8sICcnKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2VTZXJ2ZXIuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgICAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogbmV3U2Vzc2lvblVSTCxcbiAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICBkYXRhOiB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IGNhcHMsIGZpcnN0TWF0Y2g6IFt7fV19fSxcbiAgICAgIH0pKS5kYXRhLnZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGVuZFNlc3Npb24gKGlkKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgdXJsOiBjcmVhdGVTZXNzaW9uVVJMKGlkKSxcbiAgICAgICAgbWV0aG9kOiBERUxFVEUsXG4gICAgICAgIHZhbGlkYXRlU3RhdHVzOiBudWxsLFxuICAgICAgfSkpLmRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0U2Vzc2lvbiAoaWQpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGNyZWF0ZVNlc3Npb25VUkwoaWQpLFxuICAgICAgfSkpLmRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJ3Nlc3Npb24gaGFuZGxpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBpZGVtcG90ZW5jeSB3aGlsZSBjcmVhdGluZyBzZXNzaW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkcyA9IFtdO1xuICAgICAgICBsZXQgdGltZXMgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgY29uc3Qge3Nlc3Npb25JZH0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBuZXdTZXNzaW9uVVJMLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnWC1JZGVtcG90ZW5jeS1LZXknOiAnMTIzNDU2JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgICBkYXRhOiB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IGRlZmF1bHRDYXBzLCBmaXJzdE1hdGNoOiBbe31dfX0sXG4gICAgICAgICAgICBzaW1wbGU6IGZhbHNlLFxuICAgICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICAgICAgICB9KSkuZGF0YS52YWx1ZTtcblxuICAgICAgICAgIHNlc3Npb25JZHMucHVzaChzZXNzaW9uSWQpO1xuICAgICAgICAgIHRpbWVzKys7XG4gICAgICAgIH0gd2hpbGUgKHRpbWVzIDwgMik7XG4gICAgICAgIF8udW5pcShzZXNzaW9uSWRzKS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgICAgIGNvbnN0IHtzdGF0dXMsIGRhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlU2Vzc2lvblVSTChzZXNzaW9uSWRzWzBdKSxcbiAgICAgICAgICBtZXRob2Q6IERFTEVURSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXR1cy5zaG91bGQuZXF1YWwoMjAwKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGRhdGEudmFsdWUsIG51bGwpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGlkZW1wb3RlbmN5IHdoaWxlIGNyZWF0aW5nIHBhcmFsbGVsIHNlc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXFzID0gW107XG4gICAgICAgIGxldCB0aW1lcyA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZXFzLnB1c2goYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBuZXdTZXNzaW9uVVJMLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnWC1JZGVtcG90ZW5jeS1LZXknOiAnMTIzNDUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICAgIGRhdGE6IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogZGVmYXVsdENhcHMsIGZpcnN0TWF0Y2g6IFt7fV19fSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGltZXMrKztcbiAgICAgICAgfSB3aGlsZSAodGltZXMgPCAyKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkcyA9IChhd2FpdCBCLmFsbChyZXFzKSkubWFwKCh4KSA9PiB4LmRhdGEudmFsdWUuc2Vzc2lvbklkKTtcbiAgICAgICAgXy51bmlxKHNlc3Npb25JZHMpLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgICAgY29uc3Qge3N0YXR1cywgZGF0YX0gPSBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVTZXNzaW9uVVJMKHNlc3Npb25JZHNbMF0pLFxuICAgICAgICAgIG1ldGhvZDogREVMRVRFLFxuICAgICAgICB9KTtcbiAgICAgICAgc3RhdHVzLnNob3VsZC5lcXVhbCgyMDApO1xuICAgICAgICBzaG91bGQuZXF1YWwoZGF0YS52YWx1ZSwgbnVsbCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgc2Vzc2lvbiBhbmQgcmV0cmlldmUgYSBzZXNzaW9uIGlkLCB0aGVuIGRlbGV0ZSBpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHtzdGF0dXMsIGRhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogbmV3U2Vzc2lvblVSTCxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgZGF0YToge2NhcGFiaWxpdGllczoge2Fsd2F5c01hdGNoOiBkZWZhdWx0Q2FwcywgZmlyc3RNYXRjaDogW3t9XX19LFxuICAgICAgICB9KTtcblxuICAgICAgICBzdGF0dXMuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICAgIHNob3VsZC5leGlzdChkYXRhLnZhbHVlLnNlc3Npb25JZCk7XG4gICAgICAgIGRhdGEudmFsdWUuY2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZS5zaG91bGQuZXF1YWwoZGVmYXVsdENhcHMucGxhdGZvcm1OYW1lKTtcbiAgICAgICAgZGF0YS52YWx1ZS5jYXBhYmlsaXRpZXMuZGV2aWNlTmFtZS5zaG91bGQuZXF1YWwoZGVmYXVsdENhcHNbJ2FwcGl1bTpkZXZpY2VOYW1lJ10pO1xuXG4gICAgICAgICh7c3RhdHVzLCBkYXRhfSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZVNlc3Npb25VUkwoZC5zZXNzaW9uSWQpLFxuICAgICAgICAgIG1ldGhvZDogREVMRVRFLFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgc3RhdHVzLnNob3VsZC5lcXVhbCgyMDApO1xuICAgICAgICBzaG91bGQuZXF1YWwoZGF0YS52YWx1ZSwgbnVsbCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChkLnNlc3Npb25JZCwgbnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0LnNraXAoJ3Nob3VsZCB0aHJvdyBOWUkgZm9yIGNvbW1hbmRzIG5vdCBpbXBsZW1lbnRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb21tYW5kIHRpbWVvdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmluZEVsZW1lbnQsIG9yaWdpbmFsRmluZEVsZW1lbnRzO1xuXG4gICAgICBhc3luYyBmdW5jdGlvbiBzdGFydFRpbWVvdXRTZXNzaW9uICh0aW1lb3V0KSB7XG4gICAgICAgIGNvbnN0IGNhcHMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2Fwcyk7XG4gICAgICAgIGNhcHNbJ2FwcGl1bTpuZXdDb21tYW5kVGltZW91dCddID0gdGltZW91dDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHN0YXJ0U2Vzc2lvbihjYXBzKTtcbiAgICAgIH1cblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb3JpZ2luYWxGaW5kRWxlbWVudCA9IGQuZmluZEVsZW1lbnQ7XG4gICAgICAgIGQuZmluZEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuICdmb28nO1xuICAgICAgICB9LmJpbmQoZCk7XG5cbiAgICAgICAgb3JpZ2luYWxGaW5kRWxlbWVudHMgPSBkLmZpbmRFbGVtZW50cztcbiAgICAgICAgZC5maW5kRWxlbWVudHMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgQi5kZWxheSgyMDApO1xuICAgICAgICAgIHJldHVybiBbJ2ZvbyddO1xuICAgICAgICB9LmJpbmQoZCk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBkLmZpbmRFbGVtZW50ID0gb3JpZ2luYWxGaW5kRWxlbWVudDtcbiAgICAgICAgZC5maW5kRWxlbWVudHMgPSBvcmlnaW5hbEZpbmRFbGVtZW50cztcbiAgICAgIH0pO1xuXG5cbiAgICAgIGl0KCdzaG91bGQgc2V0IGEgZGVmYXVsdCBjb21tYW5kVGltZW91dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG5ld1Nlc3Npb24gPSBhd2FpdCBzdGFydFRpbWVvdXRTZXNzaW9uKCk7XG4gICAgICAgIGQubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuYmUuYWJvdmUoMCk7XG4gICAgICAgIGF3YWl0IGVuZFNlc3Npb24obmV3U2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGltZW91dCBvbiBjb21tYW5kcyB1c2luZyBjb21tYW5kVGltZW91dCBjYXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBuZXdTZXNzaW9uID0gYXdhaXQgc3RhcnRUaW1lb3V0U2Vzc2lvbigwLjI1KTtcbiAgICAgICAgLy8gWFhYOiByYWNlIGNvbmRpdGlvbjogd2UgbXVzdCBidWlsZCB0aGlzIFVSTCBiZWZvcmUgLi4uc29tZXRoaW5nIGhhcHBlbnMuLi5cbiAgICAgICAgLy8gd2hpY2ggY2F1c2VzIGBkLnNlc3Npb25JZGAgdG8gYmUgbWlzc2luZ1xuICAgICAgICBsZXQgc2Vzc2lvblVSTCA9IGNyZWF0ZVNlc3Npb25VUkwoZC5zZXNzaW9uSWQpO1xuICAgICAgICBhd2FpdCBheGlvcyh7XG4gICAgICAgICAgdXJsOiBjcmVhdGVBcHBpdW1UZXN0VVJMKGQuc2Vzc2lvbklkLCAnZWxlbWVudCcpLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICBkYXRhOiB7dXNpbmc6ICduYW1lJywgdmFsdWU6ICdmb28nfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoNDAwKTtcbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogc2Vzc2lvblVSTCxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXR1czogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChkYXRhLnZhbHVlLmVycm9yLCAnaW52YWxpZCBzZXNzaW9uIGlkJyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChkLnNlc3Npb25JZCwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBlbmRTZXNzaW9uKG5ld1Nlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3AuZXJyb3IsICdpbnZhbGlkIHNlc3Npb24gaWQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCB0aW1lb3V0IHdpdGggY29tbWFuZFRpbWVvdXQgb2YgZmFsc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBuZXdTZXNzaW9uID0gYXdhaXQgc3RhcnRUaW1lb3V0U2Vzc2lvbigwLjEpO1xuICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUFwcGl1bVRlc3RVUkwoZC5zZXNzaW9uSWQsICdlbGVtZW50cycpLFxuICAgICAgICAgIG1ldGhvZDogUE9TVCxcbiAgICAgICAgICBkYXRhOiB7dXNpbmc6ICduYW1lJywgdmFsdWU6ICdmb28nfSxcbiAgICAgICAgfSkpLmRhdGE7XG4gICAgICAgIChEYXRlLm5vdygpIC0gc3RhcnQpLnNob3VsZC5iZS5hYm92ZSgxNTApO1xuICAgICAgICB2YWx1ZS5zaG91bGQuZXFsKFsnZm9vJ10pO1xuICAgICAgICBhd2FpdCBlbmRTZXNzaW9uKG5ld1Nlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCB0aW1lb3V0IHdpdGggY29tbWFuZFRpbWVvdXQgb2YgMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5uZXdDb21tYW5kVGltZW91dE1zID0gMjtcbiAgICAgICAgbGV0IG5ld1Nlc3Npb24gPSBhd2FpdCBzdGFydFRpbWVvdXRTZXNzaW9uKDApO1xuXG4gICAgICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUFwcGl1bVRlc3RVUkwoZC5zZXNzaW9uSWQsICdlbGVtZW50JyksXG4gICAgICAgICAgbWV0aG9kOiBQT1NULFxuICAgICAgICAgIGRhdGE6IHt1c2luZzogJ25hbWUnLCB2YWx1ZTogJ2Zvbyd9LFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgQi5kZWxheSg0MDApO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZVNlc3Npb25VUkwoZC5zZXNzaW9uSWQpLFxuICAgICAgICB9KSkuZGF0YTtcbiAgICAgICAgdmFsdWUucGxhdGZvcm1OYW1lLnNob3VsZC5lcXVhbChkZWZhdWx0Q2Fwcy5wbGF0Zm9ybU5hbWUpO1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgZW5kU2Vzc2lvbihuZXdTZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXNwLCBudWxsKTtcblxuICAgICAgICBkLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSA2MCAqIDEwMDA7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgdGltZW91dCBpZiBpdHMganVzdCB0aGUgY29tbWFuZCB0YWtpbmcgYXdoaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbmV3U2Vzc2lvbiA9IGF3YWl0IHN0YXJ0VGltZW91dFNlc3Npb24oMC4yNSk7XG4gICAgICAgIC8vIFhYWDogcmFjZSBjb25kaXRpb246IHdlIG11c3QgYnVpbGQgdGhpcyBVUkwgYmVmb3JlIC4uLnNvbWV0aGluZyBoYXBwZW5zLi4uXG4gICAgICAgIC8vIHdoaWNoIGNhdXNlcyBgZC5zZXNzaW9uSWRgIHRvIGJlIG1pc3NpbmdcbiAgICAgICAgbGV0IHNlc3Npb25VUkwgPSBjcmVhdGVTZXNzaW9uVVJMKGQuc2Vzc2lvbklkKTtcbiAgICAgICAgYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTChkLnNlc3Npb25JZCwgJ2VsZW1lbnQnKSxcbiAgICAgICAgICBtZXRob2Q6IFBPU1QsXG4gICAgICAgICAgZGF0YToge3VzaW5nOiAnbmFtZScsIHZhbHVlOiAnZm9vJ30sXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDQwMCk7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybDogc2Vzc2lvblVSTCxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXR1czogbnVsbCxcbiAgICAgICAgfSkpLmRhdGE7XG4gICAgICAgIHZhbHVlLmVycm9yLnNob3VsZC5lcXVhbCgnaW52YWxpZCBzZXNzaW9uIGlkJyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChkLnNlc3Npb25JZCwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBlbmRTZXNzaW9uKG5ld1Nlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgcmVzcC5lcnJvci5zaG91bGQuZXF1YWwoJ2ludmFsaWQgc2Vzc2lvbiBpZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IGhhdmUgYSB0aW1lciBydW5uaW5nIGJlZm9yZSBvciBhZnRlciBhIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5ub3QuZXhpc3QoZC5ub0NvbW1hbmRUaW1lcik7XG4gICAgICAgIGxldCBuZXdTZXNzaW9uID0gYXdhaXQgc3RhcnRUaW1lb3V0U2Vzc2lvbigwLjI1KTtcbiAgICAgICAgbmV3U2Vzc2lvbi5zZXNzaW9uSWQuc2hvdWxkLmVxdWFsKGQuc2Vzc2lvbklkKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGQubm9Db21tYW5kVGltZXIpO1xuICAgICAgICBhd2FpdCBlbmRTZXNzaW9uKG5ld1Nlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgc2hvdWxkLm5vdC5leGlzdChkLm5vQ29tbWFuZFRpbWVyKTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0dGluZ3MgYXBpJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2V9KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGdldCBzZXR0aW5ncyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKS5pZ25vcmVVbmltcG9ydGFudFZpZXdzLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHVwZGF0ZVNldHRpbmdzIG1ldGhvZCBpcyBub3QgZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5zZXR0aW5ncy51cGRhdGUoe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IHRydWV9KS5zaG91bGQuZXZlbnR1YWxseVxuICAgICAgICAgICAgICAgIC5iZS5yZWplY3RlZFdpdGgoJ29uU2V0dGluZ3NVcGRhdGUnKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCB1cGRhdGUgb2JqZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLnNldHRpbmdzLnVwZGF0ZSgnaW52YWxpZCBqc29uJykuc2hvdWxkLmV2ZW50dWFsbHlcbiAgICAgICAgICAgICAgICAuYmUucmVqZWN0ZWRXaXRoKCdKU09OJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd1bmV4cGVjdGVkIGV4aXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYSBjdXJyZW50IGNvbW1hbmQgd2hlbiB0aGUgZHJpdmVyIGNyYXNoZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQuX29sZEdldFN0YXR1cyA9IGQuZ2V0U3RhdHVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGQuZ2V0U3RhdHVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXdhaXQgQi5kZWxheSg1MDAwKTtcbiAgICAgICAgICB9LmJpbmQoZCk7XG4gICAgICAgICAgY29uc3QgcmVxUHJvbWlzZSA9IGF4aW9zKHtcbiAgICAgICAgICAgIHVybDogY3JlYXRlQXBwaXVtVGVzdFVSTCgnJywgJ3N0YXR1cycpLFxuICAgICAgICAgICAgdmFsaWRhdGVTdGF0dXM6IG51bGwsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVlc3QgZ2V0cyB0byB0aGUgc2VydmVyIGJlZm9yZSBvdXIgc2h1dGRvd25cbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMCk7XG4gICAgICAgICAgY29uc3Qgc2h1dGRvd25FdmVudFByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ29uVW5leHBlY3RlZFNodXRkb3duIGV2ZW50IGlzIGV4cGVjdGVkIHRvIGJlIGZpcmVkIHdpdGhpbiA1IHNlY29uZHMgdGltZW91dCcpKSwgNTAwMCk7XG4gICAgICAgICAgICBkLm9uVW5leHBlY3RlZFNodXRkb3duKHJlc29sdmUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGQuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24obmV3IEVycm9yKCdDcmFzaHl0aW1lcycpKTtcbiAgICAgICAgICBjb25zdCB7dmFsdWV9ID0gKGF3YWl0IHJlcVByb21pc2UpLmRhdGE7XG4gICAgICAgICAgdmFsdWUubWVzc2FnZS5zaG91bGQuY29udGFpbignQ3Jhc2h5dGltZXMnKTtcbiAgICAgICAgICBhd2FpdCBzaHV0ZG93bkV2ZW50UHJvbWlzZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBkLmdldFN0YXR1cyA9IGQuX29sZEdldFN0YXR1cztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXZlbnQgdGltaW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFkZCB0aW1pbmdzIGlmIG5vdCB1c2luZyBvcHQtaW4gY2FwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgc3RhcnRTZXNzaW9uKGRlZmF1bHRDYXBzKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0U2Vzc2lvbihzZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVzLmV2ZW50cyk7XG4gICAgICAgIGF3YWl0IGVuZFNlc3Npb24oc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFkZCBzdGFydCBzZXNzaW9uIHRpbWluZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q2FwcywgeydhcHBpdW06ZXZlbnRUaW1pbmdzJzogdHJ1ZX0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgc3RhcnRTZXNzaW9uKGNhcHMpO1xuICAgICAgICBjb25zdCByZXMgPSAoYXdhaXQgZ2V0U2Vzc2lvbihzZXNzaW9uLnNlc3Npb25JZCkpO1xuICAgICAgICBzaG91bGQuZXhpc3QocmVzLmV2ZW50cyk7XG4gICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzLm5ld1Nlc3Npb25SZXF1ZXN0ZWQpO1xuICAgICAgICBzaG91bGQuZXhpc3QocmVzLmV2ZW50cy5uZXdTZXNzaW9uU3RhcnRlZCk7XG4gICAgICAgIHJlcy5ldmVudHMubmV3U2Vzc2lvblJlcXVlc3RlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIHJlcy5ldmVudHMubmV3U2Vzc2lvblN0YXJ0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICBhd2FpdCBlbmRTZXNzaW9uKHNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKERyaXZlckNsYXNzID09PSBCYXNlRHJpdmVyKSB7XG4gICAgICAvLyBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gYmFzZWRyaXZlciwgbm90IG90aGVyIGRyaXZlcnMgd2hpY2ggYWxzbyB1c2UgdGhlc2UgdGVzdHMsIHNpbmNlIHdlXG4gICAgICAvLyBkb24ndCB3YW50IHRoZW0gdG8gdHJ5IGFuZCBzdGFydCBzZXNzaW9ucyB3aXRoIHRoZXNlIHJhbmRvbSBjYXBhYmlsaXRpZXMgdGhhdCBhcmVcbiAgICAgIC8vIG5lY2Vzc2FyeSB0byB0ZXN0IHRoZSBhcHBpdW0gb3B0aW9ucyBsb2dpY1xuICAgICAgZGVzY3JpYmUoJ3NwZWNpYWwgYXBwaXVtOm9wdGlvbnMgY2FwYWJpbGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIHN0YXJ0IGEgc2Vzc2lvbiB3aXRoIGNhcHMgaGVsZCBpbiBhcHBpdW06b3B0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBzdGFydFNlc3Npb24oe1xuICAgICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAgIFtQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVBdOiB7XG4gICAgICAgICAgICAgIHBsYXRmb3JtVmVyc2lvbjogJzExLjQnLFxuICAgICAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnaVBob25lIDExJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkLm9wdHMucGxhdGZvcm1WZXJzaW9uLnNob3VsZC5lcWwoJzExLjQnKTtcbiAgICAgICAgICBkLm9wdHMuZGV2aWNlTmFtZS5zaG91bGQuZXFsKCdpUGhvbmUgMTEnKTtcbiAgICAgICAgICBhd2FpdCBlbmRTZXNzaW9uKHJldC5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VEcml2ZXJFMkVUZXN0cztcbiJdLCJmaWxlIjoidGVzdC9iYXNlZHJpdmVyL2RyaXZlci1lMmUtdGVzdHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -4,14 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
|
|
5
5
|
require("source-map-support/register");
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _lib = _interopRequireDefault(require("../../lib"));
|
|
8
8
|
|
|
9
9
|
var _driverTests = _interopRequireDefault(require("./driver-tests"));
|
|
10
10
|
|
|
11
|
-
(0, _driverTests.default)(
|
|
11
|
+
(0, _driverTests.default)(_lib.default, {
|
|
12
12
|
platformName: 'iOS',
|
|
13
13
|
'appium:deviceName': 'Delorean'
|
|
14
14
|
});require('source-map-support').install();
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9kcml2ZXItc3BlY3MuanMiXSwibmFtZXMiOlsiQmFzZURyaXZlciIsInBsYXRmb3JtTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0EsMEJBQW9CQSxZQUFwQixFQUFnQztBQUM5QkMsRUFBQUEsWUFBWSxFQUFFLEtBRGdCO0FBRTlCLHVCQUFxQjtBQUZTLENBQWhDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCBCYXNlRHJpdmVyIGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgYmFzZURyaXZlclVuaXRUZXN0cyBmcm9tICcuL2RyaXZlci10ZXN0cyc7XG5iYXNlRHJpdmVyVW5pdFRlc3RzKEJhc2VEcml2ZXIsIHtcbiAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0RlbG9yZWFuJ1xufSk7XG4iXSwiZmlsZSI6InRlc3QvYmFzZWRyaXZlci9kcml2ZXItc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|