botframework-directlinejs 0.15.5 → 0.15.6-master.970a2b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist/directline.js +1 -1
- package/dist/directline.js.LICENSE.txt +2 -0
- package/dist/stats.json +10684 -9915
- package/lib/createDeferred.js +1 -3
- package/lib/dedupeFilenames.js +3 -9
- package/lib/directLine.js +53 -134
- package/lib/directLine.mock.js +23 -74
- package/lib/directLineStreaming.js +36 -195
- package/lib/parseFilename.js +4 -8
- package/lib/streaming/NetworkInformation.d.js +1 -1
- package/lib/streaming/WebSocketClientWithNetworkInformation.js +9 -40
- package/package.json +3 -3
package/lib/directLine.mock.js
CHANGED
|
@@ -1,33 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.mockServices = exports.mockWebSocket = exports.mockAjax = exports.injectNewToken = exports.injectClose = exports.mockServer = exports.mockActivity = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _rxjs = require("rxjs");
|
|
17
|
-
|
|
18
12
|
var _url = require("url");
|
|
19
|
-
|
|
20
13
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
21
|
-
|
|
22
14
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
-
|
|
24
15
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
25
|
-
|
|
26
16
|
// MOCK helpers
|
|
17
|
+
|
|
27
18
|
var notImplemented = function notImplemented() {
|
|
28
19
|
throw new Error('not implemented');
|
|
29
|
-
};
|
|
20
|
+
};
|
|
30
21
|
|
|
22
|
+
// MOCK Activity
|
|
31
23
|
|
|
32
24
|
var mockActivity = function mockActivity(text) {
|
|
33
25
|
return {
|
|
@@ -37,12 +29,11 @@ var mockActivity = function mockActivity(text) {
|
|
|
37
29
|
},
|
|
38
30
|
text: text
|
|
39
31
|
};
|
|
40
|
-
};
|
|
41
|
-
|
|
32
|
+
};
|
|
42
33
|
|
|
34
|
+
// MOCK DirectLine Server (shared state used by Observable.ajax and WebSocket mocks)
|
|
43
35
|
exports.mockActivity = mockActivity;
|
|
44
36
|
var tokenPrefix = 'token';
|
|
45
|
-
|
|
46
37
|
var mockServer = function mockServer(scheduler) {
|
|
47
38
|
return {
|
|
48
39
|
scheduler: scheduler,
|
|
@@ -54,66 +45,52 @@ var mockServer = function mockServer(scheduler) {
|
|
|
54
45
|
}
|
|
55
46
|
};
|
|
56
47
|
};
|
|
57
|
-
|
|
58
48
|
exports.mockServer = mockServer;
|
|
59
|
-
|
|
60
49
|
var tokenResponse = function tokenResponse(server, request) {
|
|
61
50
|
var headers = request.headers;
|
|
62
51
|
var authorization = headers['Authorization'];
|
|
63
|
-
|
|
64
52
|
if (authorization === "Bearer ".concat(server.conversation.token)) {
|
|
65
53
|
return null;
|
|
66
54
|
}
|
|
67
|
-
|
|
68
55
|
var response = {
|
|
69
56
|
status: 403
|
|
70
57
|
};
|
|
71
58
|
return response;
|
|
72
59
|
};
|
|
73
|
-
|
|
74
60
|
var injectClose = function injectClose(server) {
|
|
75
61
|
return server.conversation.sockets.forEach(function (s) {
|
|
76
62
|
return s.onclose(new CloseEvent('close'));
|
|
77
63
|
});
|
|
78
64
|
};
|
|
79
|
-
|
|
80
65
|
exports.injectClose = injectClose;
|
|
81
|
-
|
|
82
66
|
var injectNewToken = function injectNewToken(server) {
|
|
83
67
|
var conversation = server.conversation;
|
|
84
68
|
var suffix = Number.parseInt(conversation.token.substring(tokenPrefix.length), 10) + 1;
|
|
85
69
|
conversation.token = tokenPrefix + suffix;
|
|
86
70
|
};
|
|
87
|
-
|
|
88
71
|
exports.injectNewToken = injectNewToken;
|
|
89
72
|
var keyWatermark = 'watermark';
|
|
90
|
-
|
|
91
73
|
// MOCK Observable.ajax (uses shared state in Server)
|
|
74
|
+
|
|
92
75
|
var mockAjax = function mockAjax(server, customAjax) {
|
|
93
76
|
var uriBase = new _url.URL('https://directline.botframework.com/v3/directline/');
|
|
94
|
-
|
|
95
77
|
var createStreamUrl = function createStreamUrl(watermark) {
|
|
96
78
|
var uri = new _url.URL('conversations/stream', uriBase);
|
|
97
|
-
|
|
98
79
|
if (watermark > 0) {
|
|
99
80
|
var params = new _url.URLSearchParams();
|
|
100
81
|
params.append(keyWatermark, watermark.toString(10));
|
|
101
82
|
uri.search = params.toString();
|
|
102
83
|
}
|
|
103
|
-
|
|
104
84
|
return uri.toString();
|
|
105
85
|
};
|
|
106
|
-
|
|
107
86
|
var jax = customAjax || function (urlOrRequest) {
|
|
108
87
|
if (typeof urlOrRequest === 'string') {
|
|
109
88
|
throw new Error();
|
|
110
89
|
}
|
|
111
|
-
|
|
112
90
|
var uri = new _url.URL(urlOrRequest.url);
|
|
113
91
|
var pathname = uri.pathname,
|
|
114
|
-
|
|
92
|
+
searchParams = uri.searchParams;
|
|
115
93
|
var parts = pathname.split('/');
|
|
116
|
-
|
|
117
94
|
if (parts[3] === 'tokens' && parts[4] === 'refresh') {
|
|
118
95
|
var response = {
|
|
119
96
|
response: {
|
|
@@ -122,11 +99,9 @@ var mockAjax = function mockAjax(server, customAjax) {
|
|
|
122
99
|
};
|
|
123
100
|
return response;
|
|
124
101
|
}
|
|
125
|
-
|
|
126
102
|
if (parts[3] !== 'conversations') {
|
|
127
103
|
throw new Error();
|
|
128
104
|
}
|
|
129
|
-
|
|
130
105
|
if (parts.length === 4) {
|
|
131
106
|
var conversation = {
|
|
132
107
|
conversationId: server.conversation.conversationId,
|
|
@@ -138,38 +113,29 @@ var mockAjax = function mockAjax(server, customAjax) {
|
|
|
138
113
|
};
|
|
139
114
|
return _response;
|
|
140
115
|
}
|
|
141
|
-
|
|
142
116
|
if (parts[4] !== server.conversation.conversationId) {
|
|
143
117
|
throw new Error();
|
|
144
118
|
}
|
|
145
|
-
|
|
146
119
|
if (parts[5] === 'activities') {
|
|
147
120
|
var responseToken = tokenResponse(server, urlOrRequest);
|
|
148
|
-
|
|
149
121
|
if (responseToken !== null) {
|
|
150
122
|
return responseToken;
|
|
151
123
|
}
|
|
152
|
-
|
|
153
124
|
var activity = urlOrRequest.body;
|
|
154
|
-
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
var _start = _after - 1;
|
|
158
|
-
|
|
125
|
+
var after = server.conversation.history.push(activity);
|
|
126
|
+
var start = after - 1;
|
|
159
127
|
var _iterator = _createForOfIteratorHelper(server.conversation.sockets),
|
|
160
|
-
|
|
161
|
-
|
|
128
|
+
_step;
|
|
162
129
|
try {
|
|
163
130
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
164
131
|
var socket = _step.value;
|
|
165
|
-
socket.play(
|
|
132
|
+
socket.play(start, after);
|
|
166
133
|
}
|
|
167
134
|
} catch (err) {
|
|
168
135
|
_iterator.e(err);
|
|
169
136
|
} finally {
|
|
170
137
|
_iterator.f();
|
|
171
138
|
}
|
|
172
|
-
|
|
173
139
|
var _response2 = {
|
|
174
140
|
response: {
|
|
175
141
|
id: 'messageId'
|
|
@@ -178,29 +144,23 @@ var mockAjax = function mockAjax(server, customAjax) {
|
|
|
178
144
|
return _response2;
|
|
179
145
|
} else if (parts.length === 5) {
|
|
180
146
|
var _responseToken = tokenResponse(server, urlOrRequest);
|
|
181
|
-
|
|
182
147
|
if (_responseToken !== null) {
|
|
183
148
|
return _responseToken;
|
|
184
149
|
}
|
|
185
|
-
|
|
186
150
|
var watermark = searchParams.get('watermark');
|
|
187
|
-
|
|
188
|
-
var _start2 = Number.parseInt(watermark, 10);
|
|
189
|
-
|
|
151
|
+
var _start = Number.parseInt(watermark, 10);
|
|
190
152
|
var _conversation = {
|
|
191
153
|
conversationId: server.conversation.conversationId,
|
|
192
154
|
token: server.conversation.token,
|
|
193
|
-
streamUrl: createStreamUrl(
|
|
155
|
+
streamUrl: createStreamUrl(_start)
|
|
194
156
|
};
|
|
195
157
|
var _response3 = {
|
|
196
158
|
response: _conversation
|
|
197
159
|
};
|
|
198
160
|
return _response3;
|
|
199
161
|
}
|
|
200
|
-
|
|
201
162
|
throw new Error();
|
|
202
163
|
};
|
|
203
|
-
|
|
204
164
|
var method = function method(urlOrRequest) {
|
|
205
165
|
return new _rxjs.Observable(function (subscriber) {
|
|
206
166
|
try {
|
|
@@ -211,7 +171,6 @@ var mockAjax = function mockAjax(server, customAjax) {
|
|
|
211
171
|
}
|
|
212
172
|
});
|
|
213
173
|
};
|
|
214
|
-
|
|
215
174
|
var properties = {
|
|
216
175
|
get: function get(url, headers) {
|
|
217
176
|
return notImplemented();
|
|
@@ -233,18 +192,15 @@ var mockAjax = function mockAjax(server, customAjax) {
|
|
|
233
192
|
}
|
|
234
193
|
};
|
|
235
194
|
return Object.assign(method, properties);
|
|
236
|
-
};
|
|
237
|
-
|
|
195
|
+
};
|
|
238
196
|
|
|
197
|
+
// MOCK WebSocket (uses shared state in Server)
|
|
239
198
|
exports.mockAjax = mockAjax;
|
|
240
|
-
|
|
241
199
|
var mockWebSocket = function mockWebSocket(server) {
|
|
242
|
-
var _class
|
|
243
|
-
|
|
244
|
-
return _temp = _class = /*#__PURE__*/function () {
|
|
200
|
+
var _class;
|
|
201
|
+
return _class = /*#__PURE__*/function () {
|
|
245
202
|
function MockWebSocket(url, protocols) {
|
|
246
203
|
var _this = this;
|
|
247
|
-
|
|
248
204
|
(0, _classCallCheck2["default"])(this, MockWebSocket);
|
|
249
205
|
(0, _defineProperty2["default"])(this, "binaryType", 'arraybuffer');
|
|
250
206
|
(0, _defineProperty2["default"])(this, "bufferedAmount", 0);
|
|
@@ -259,21 +215,16 @@ var mockWebSocket = function mockWebSocket(server) {
|
|
|
259
215
|
server.scheduler.schedule(function () {
|
|
260
216
|
_this.readyState = WebSocket.CONNECTING;
|
|
261
217
|
server.conversation.sockets.add(_this);
|
|
262
|
-
|
|
263
218
|
_this.onopen(new Event('open'));
|
|
264
|
-
|
|
265
219
|
_this.readyState = WebSocket.OPEN;
|
|
266
220
|
var uri = new _url.URL(url);
|
|
267
221
|
var watermark = uri.searchParams.get(keyWatermark);
|
|
268
|
-
|
|
269
222
|
if (watermark !== null) {
|
|
270
|
-
var
|
|
271
|
-
|
|
272
|
-
_this.play(_start3, server.conversation.history.length);
|
|
223
|
+
var start = Number.parseInt(watermark, 10);
|
|
224
|
+
_this.play(start, server.conversation.history.length);
|
|
273
225
|
}
|
|
274
226
|
});
|
|
275
227
|
}
|
|
276
|
-
|
|
277
228
|
(0, _createClass2["default"])(MockWebSocket, [{
|
|
278
229
|
key: "play",
|
|
279
230
|
value: function play(start, after) {
|
|
@@ -317,12 +268,11 @@ var mockWebSocket = function mockWebSocket(server) {
|
|
|
317
268
|
}
|
|
318
269
|
}]);
|
|
319
270
|
return MockWebSocket;
|
|
320
|
-
}(), (0, _defineProperty2["default"])(_class, "CLOSED", WebSocket.CLOSED), (0, _defineProperty2["default"])(_class, "CLOSING", WebSocket.CLOSING), (0, _defineProperty2["default"])(_class, "CONNECTING", WebSocket.CONNECTING), (0, _defineProperty2["default"])(_class, "OPEN", WebSocket.OPEN),
|
|
321
|
-
};
|
|
322
|
-
|
|
271
|
+
}(), (0, _defineProperty2["default"])(_class, "CLOSED", WebSocket.CLOSED), (0, _defineProperty2["default"])(_class, "CLOSING", WebSocket.CLOSING), (0, _defineProperty2["default"])(_class, "CONNECTING", WebSocket.CONNECTING), (0, _defineProperty2["default"])(_class, "OPEN", WebSocket.OPEN), _class;
|
|
272
|
+
};
|
|
323
273
|
|
|
274
|
+
// MOCK services (top-level aggregation of all mocks)
|
|
324
275
|
exports.mockWebSocket = mockWebSocket;
|
|
325
|
-
|
|
326
276
|
var mockServices = function mockServices(server, scheduler) {
|
|
327
277
|
return {
|
|
328
278
|
scheduler: scheduler,
|
|
@@ -333,6 +283,5 @@ var mockServices = function mockServices(server, scheduler) {
|
|
|
333
283
|
}
|
|
334
284
|
};
|
|
335
285
|
};
|
|
336
|
-
|
|
337
286
|
exports.mockServices = mockServices;
|
|
338
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RMaW5lLm1vY2sudHMiXSwibmFtZXMiOlsibm90SW1wbGVtZW50ZWQiLCJFcnJvciIsIm1vY2tBY3Rpdml0eSIsInRleHQiLCJ0eXBlIiwiZnJvbSIsImlkIiwidG9rZW5QcmVmaXgiLCJtb2NrU2VydmVyIiwic2NoZWR1bGVyIiwiY29udmVyc2F0aW9uIiwic29ja2V0cyIsIlNldCIsImNvbnZlcnNhdGlvbklkIiwiaGlzdG9yeSIsInRva2VuIiwidG9rZW5SZXNwb25zZSIsInNlcnZlciIsInJlcXVlc3QiLCJoZWFkZXJzIiwiYXV0aG9yaXphdGlvbiIsInJlc3BvbnNlIiwic3RhdHVzIiwiaW5qZWN0Q2xvc2UiLCJmb3JFYWNoIiwicyIsIm9uY2xvc2UiLCJDbG9zZUV2ZW50IiwiaW5qZWN0TmV3VG9rZW4iLCJzdWZmaXgiLCJOdW1iZXIiLCJwYXJzZUludCIsInN1YnN0cmluZyIsImxlbmd0aCIsImtleVdhdGVybWFyayIsIm1vY2tBamF4IiwiY3VzdG9tQWpheCIsInVyaUJhc2UiLCJVUkwiLCJjcmVhdGVTdHJlYW1VcmwiLCJ3YXRlcm1hcmsiLCJ1cmkiLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcHBlbmQiLCJ0b1N0cmluZyIsInNlYXJjaCIsImpheCIsInVybE9yUmVxdWVzdCIsInVybCIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwicGFydHMiLCJzcGxpdCIsInN0cmVhbVVybCIsInJlc3BvbnNlVG9rZW4iLCJhY3Rpdml0eSIsImJvZHkiLCJhZnRlciIsInB1c2giLCJzdGFydCIsInNvY2tldCIsInBsYXkiLCJnZXQiLCJtZXRob2QiLCJPYnNlcnZhYmxlIiwic3Vic2NyaWJlciIsIm5leHQiLCJjb21wbGV0ZSIsImVycm9yIiwicHJvcGVydGllcyIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImdldEpTT04iLCJPYmplY3QiLCJhc3NpZ24iLCJtb2NrV2ViU29ja2V0IiwicHJvdG9jb2xzIiwiV2ViU29ja2V0IiwiQ0xPU0VEIiwiQ0xPU0lORyIsIkNPTk5FQ1RJTkciLCJPUEVOIiwic2NoZWR1bGUiLCJyZWFkeVN0YXRlIiwiYWRkIiwib25vcGVuIiwiRXZlbnQiLCJhY3Rpdml0aWVzIiwic2xpY2UiLCJhY3Rpdml0eUdyb3VwIiwibWVzc2FnZSIsIk1lc3NhZ2VFdmVudCIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5Iiwib25tZXNzYWdlIiwiY29kZSIsInJlYXNvbiIsIm1vY2tTZXJ2aWNlcyIsImFqYXgiLCJyYW5kb20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUVBOzs7Ozs7OztBQUVBO0FBRUEsSUFBTUEsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixHQUFhO0FBQUUsUUFBTSxJQUFJQyxLQUFKLENBQVUsaUJBQVYsQ0FBTjtBQUFvQyxDQUExRSxDLENBRUE7OztBQUVPLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNDLElBQUQ7QUFBQSxTQUE4QztBQUFFQyxJQUFBQSxJQUFJLEVBQUUsU0FBUjtBQUFtQkMsSUFBQUEsSUFBSSxFQUFFO0FBQUVDLE1BQUFBLEVBQUUsRUFBRTtBQUFOLEtBQXpCO0FBQTJDSCxJQUFBQSxJQUFJLEVBQUpBO0FBQTNDLEdBQTlDO0FBQUEsQ0FBckIsQyxDQUVQOzs7O0FBb0JBLElBQU1JLFdBQVcsR0FBRyxPQUFwQjs7QUFFTyxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDQyxTQUFEO0FBQUEsU0FBdUM7QUFDL0RBLElBQUFBLFNBQVMsRUFBVEEsU0FEK0Q7QUFFL0RDLElBQUFBLFlBQVksRUFBRTtBQUNaQyxNQUFBQSxPQUFPLEVBQUUsSUFBSUMsR0FBSixFQURHO0FBRVpDLE1BQUFBLGNBQWMsRUFBRSxpQkFGSjtBQUdaQyxNQUFBQSxPQUFPLEVBQUUsRUFIRztBQUlaQyxNQUFBQSxLQUFLLEVBQUVSLFdBQVcsR0FBRztBQUpUO0FBRmlELEdBQXZDO0FBQUEsQ0FBbkI7Ozs7QUFVUCxJQUFNUyxhQUFhLEdBQUcsU0FBaEJBLGFB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aEI7QUFBQTtBQUFBLGFBNER6QiwrQkFBc0I7QUFBRSxjQUFNLElBQUlBLEtBQUosRUFBTjtBQUFvQjtBQTVEbkI7QUFBQTtBQUFBLGFBNkR6Qix5QkFBeUI7QUFBRSxjQUFNLElBQUlBLEtBQUosRUFBTjtBQUFvQjtBQTdEdEI7QUFBQTtBQUFBLDBEQStEVDhFLFNBQVMsQ0FBQ0MsTUEvREQsdURBZ0VSRCxTQUFTLENBQUNFLE9BaEVGLDBEQWlFTEYsU0FBUyxDQUFDRyxVQWpFTCxvREFrRVhILFNBQVMsQ0FBQ0ksSUFsRUM7QUFBQSxDQUF0QixDLENBcUVQOzs7OztBQUVPLElBQU1pQixZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDbkYsTUFBRCxFQUFpQlIsU0FBakI7QUFBQSxTQUEwRTtBQUNwR0EsSUFBQUEsU0FBUyxFQUFUQSxTQURvRztBQUVwR3NFLElBQUFBLFNBQVMsRUFBRUYsYUFBYSxDQUFDNUQsTUFBRCxDQUY0RTtBQUdwR29GLElBQUFBLElBQUksRUFBRWxFLFFBQVEsQ0FBQ2xCLE1BQUQsQ0FIc0Y7QUFJcEdxRixJQUFBQSxNQUFNLEVBQUU7QUFBQSxhQUFNLENBQU47QUFBQTtBQUo0RixHQUExRTtBQUFBLENBQXJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgRGlyZWN0TGluZUV4cG9ydCBmcm9tIFwiLi9kaXJlY3RMaW5lXCI7XG5pbXBvcnQgeyBUZXN0U2NoZWR1bGVyLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEFqYXhDcmVhdGlvbk1ldGhvZCwgQWpheFJlcXVlc3QsIEFqYXhSZXNwb25zZSB9IGZyb20gXCJyeGpzL29ic2VydmFibGUvZG9tL0FqYXhPYnNlcnZhYmxlXCI7XG5pbXBvcnQgeyBVUkwsIFVSTFNlYXJjaFBhcmFtcyB9IGZyb20gJ3VybCc7XG5cbi8vIE1PQ0sgaGVscGVyc1xuXG5jb25zdCBub3RJbXBsZW1lbnRlZCA9ICgpOiBuZXZlciA9PiB7IHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJykgfTtcblxuLy8gTU9DSyBBY3Rpdml0eVxuXG5leHBvcnQgY29uc3QgbW9ja0FjdGl2aXR5ID0gKHRleHQ6IHN0cmluZyk6IERpcmVjdExpbmVFeHBvcnQuQWN0aXZpdHkgPT4gKHsgdHlwZTogJ21lc3NhZ2UnLCBmcm9tOiB7IGlkOiAnc2VuZGVyJyB9LCB0ZXh0IH0pO1xuXG4vLyBNT0NLIERpcmVjdExpbmUgU2VydmVyIChzaGFyZWQgc3RhdGUgdXNlZCBieSBPYnNlcnZhYmxlLmFqYXggYW5kIFdlYlNvY2tldCBtb2NrcylcblxuaW50ZXJmYWNlIEFjdGl2aXR5U29ja2V0IHtcbiAgcGxheTogKHN0YXJ0OiBudW1iZXIsIGFmdGVyOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFNvY2tldCA9IFdlYlNvY2tldCAmIEFjdGl2aXR5U29ja2V0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbiB7XG4gIHNvY2tldHM6IFNldDxTb2NrZXQ+O1xuICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICBoaXN0b3J5OiBBcnJheTxEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5PjtcbiAgdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXIge1xuICBzY2hlZHVsZXI6IFRlc3RTY2hlZHVsZXI7XG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xufVxuXG5jb25zdCB0b2tlblByZWZpeCA9ICd0b2tlbic7XG5cbmV4cG9ydCBjb25zdCBtb2NrU2VydmVyID0gKHNjaGVkdWxlcjogVGVzdFNjaGVkdWxlcik6IFNlcnZlciA9PiAoe1xuICBzY2hlZHVsZXIsXG4gIGNvbnZlcnNhdGlvbjoge1xuICAgIHNvY2tldHM6IG5ldyBTZXQ8U29ja2V0PigpLFxuICAgIGNvbnZlcnNhdGlvbklkOiAnT25lQ29udmVyc2F0aW9uJyxcbiAgICBoaXN0b3J5OiBbXSxcbiAgICB0b2tlbjogdG9rZW5QcmVmaXggKyAnMScsXG4gIH1cbn0pO1xuXG5jb25zdCB0b2tlblJlc3BvbnNlID0gKHNlcnZlcjogU2VydmVyLCByZXF1ZXN0OiBBamF4UmVxdWVzdCk6IEFqYXhSZXNwb25zZSB8IG51bGwgPT4ge1xuICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlcXVlc3Q7XG4gIGNvbnN0IGF1dGhvcml6YXRpb24gPSBoZWFkZXJzWydBdXRob3JpemF0aW9uJ107XG4gIGlmIChhdXRob3JpemF0aW9uID09PSBgQmVhcmVyICR7c2VydmVyLmNvbnZlcnNhdGlvbi50b2tlbn1gKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgIHN0YXR1czogNDAzLFxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdENsb3NlID0gKHNlcnZlcjogU2VydmVyKTogdm9pZCA9PlxuICBzZXJ2ZXIuY29udmVyc2F0aW9uLnNvY2tldHMuZm9yRWFjaChzID0+IHMub25jbG9zZShuZXcgQ2xvc2VFdmVudCgnY2xvc2UnKSkpO1xuXG5leHBvcnQgY29uc3QgaW5qZWN0TmV3VG9rZW4gPSAoc2VydmVyOiBTZXJ2ZXIpOiB2b2lkID0+IHtcbiAgY29uc3QgeyBjb252ZXJzYXRpb24gfSA9IHNlcnZlcjtcbiAgY29uc3Qgc3VmZml4ID0gTnVtYmVyLnBhcnNlSW50KGNvbnZlcnNhdGlvbi50b2tlbi5zdWJzdHJpbmcodG9rZW5QcmVmaXgubGVuZ3RoKSwgMTApICsgMVxuICBjb252ZXJzYXRpb24udG9rZW4gPSB0b2tlblByZWZpeCArIHN1ZmZpeDtcbn1cblxuY29uc3Qga2V5V2F0ZXJtYXJrID0gJ3dhdGVybWFyayc7XG5cbnR5cGUgYWpheFR5cGUgPSAodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCkgPT4gQWpheFJlc3BvbnNlO1xuXG4vLyBNT0NLIE9ic2VydmFibGUuYWpheCAodXNlcyBzaGFyZWQgc3RhdGUgaW4gU2VydmVyKVxuXG5leHBvcnQgY29uc3QgbW9ja0FqYXggPSAoc2VydmVyOiBTZXJ2ZXIsIGN1c3RvbUFqYXg/OiBhamF4VHlwZSk6IEFqYXhDcmVhdGlvbk1ldGhvZCA9PiB7XG5cbiAgY29uc3QgdXJpQmFzZSA9IG5ldyBVUkwoJ2h0dHBzOi8vZGlyZWN0bGluZS5ib3RmcmFtZXdvcmsuY29tL3YzL2RpcmVjdGxpbmUvJyk7XG4gIGNvbnN0IGNyZWF0ZVN0cmVhbVVybCA9ICh3YXRlcm1hcms6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCgnY29udmVyc2F0aW9ucy9zdHJlYW0nLCB1cmlCYXNlKTtcbiAgICBpZiAod2F0ZXJtYXJrID4gMCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcGFyYW1zLmFwcGVuZChrZXlXYXRlcm1hcmssIHdhdGVybWFyay50b1N0cmluZygxMCkpO1xuICAgICAgdXJpLnNlYXJjaCA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IGpheCA9IGN1c3RvbUFqYXggfHwgKCh1cmxPclJlcXVlc3Q6IHN0cmluZyB8IEFqYXhSZXF1ZXN0KTogQWpheFJlc3BvbnNlID0+IHtcbiAgICBpZiAodHlwZW9mIHVybE9yUmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodXJsT3JSZXF1ZXN0LnVybCk7XG5cbiAgICBjb25zdCB7IHBhdGhuYW1lLCBzZWFyY2hQYXJhbXMgfSA9IHVyaTtcblxuICAgIGNvbnN0IHBhcnRzID0gcGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIGlmIChwYXJ0c1szXSA9PT0gJ3Rva2VucycgJiYgcGFydHNbNF0gPT09ICdyZWZyZXNoJykge1xuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogeyB0b2tlbjogc2VydmVyLmNvbnZlcnNhdGlvbi50b2tlbiB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgQWpheFJlc3BvbnNlO1xuICAgIH1cblxuICAgIGlmIChwYXJ0c1szXSAhPT0gJ2NvbnZlcnNhdGlvbnMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSA0KSB7XG4gICAgICBjb25zdCBjb252ZXJzYXRpb246IERpcmVjdExpbmVFeHBvcnQuQ29udmVyc2F0aW9uID0ge1xuICAgICAgICBjb252ZXJzYXRpb25JZDogc2VydmVyLmNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgdG9rZW46IHNlcnZlci5jb252ZXJzYXRpb24udG9rZW4sXG4gICAgICAgIHN0cmVhbVVybDogY3JlYXRlU3RyZWFtVXJsKDApLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICAgICAgcmVzcG9uc2U6IGNvbnZlcnNhdGlvbixcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbNF0gIT09IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cblxuICAgIGlmIChwYXJ0c1s1XSA9PT0gJ2FjdGl2aXRpZXMnKSB7XG4gICAgICBjb25zdCByZXNwb25zZVRva2VuID0gdG9rZW5SZXNwb25zZShzZXJ2ZXIsIHVybE9yUmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2VUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VUb2tlbjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aXZpdHk6IERpcmVjdExpbmVFeHBvcnQuQWN0aXZpdHkgPSB1cmxPclJlcXVlc3QuYm9keTtcblxuICAgICAgY29uc3QgYWZ0ZXIgPSBzZXJ2ZXIuY29udmVyc2F0aW9uLmhpc3RvcnkucHVzaChhY3Rpdml0eSk7XG4gICAgICBjb25zdCBzdGFydCA9IGFmdGVyIC0gMTtcblxuICAgICAgZm9yIChjb25zdCBzb2NrZXQgb2Ygc2VydmVyLmNvbnZlcnNhdGlvbi5zb2NrZXRzKSB7XG4gICAgICAgIHNvY2tldC5wbGF5KHN0YXJ0LCBhZnRlcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBQYXJ0aWFsPEFqYXhSZXNwb25zZT4gPSB7XG4gICAgICAgIHJlc3BvbnNlOiB7IGlkOiAnbWVzc2FnZUlkJyB9LFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgQWpheFJlc3BvbnNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT09IDUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVG9rZW4gPSB0b2tlblJlc3BvbnNlKHNlcnZlciwgdXJsT3JSZXF1ZXN0KTtcbiAgICAgIGlmIChyZXNwb25zZVRva2VuICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVRva2VuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXRlcm1hcmsgPSBzZWFyY2hQYXJhbXMuZ2V0KCd3YXRlcm1hcmsnKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHdhdGVybWFyaywgMTApO1xuXG4gICAgICBjb25zdCBjb252ZXJzYXRpb246IERpcmVjdExpbmVFeHBvcnQuQ29udmVyc2F0aW9uID0ge1xuICAgICAgICBjb252ZXJzYXRpb25JZDogc2VydmVyLmNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgdG9rZW46IHNlcnZlci5jb252ZXJzYXRpb24udG9rZW4sXG4gICAgICAgIHN0cmVhbVVybDogY3JlYXRlU3RyZWFtVXJsKHN0YXJ0KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBQYXJ0aWFsPEFqYXhSZXNwb25zZT4gPSB7XG4gICAgICAgIHJlc3BvbnNlOiBjb252ZXJzYXRpb24sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGhvZCA9ICh1cmxPclJlcXVlc3Q6IHN0cmluZyB8IEFqYXhSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+XG4gICAgbmV3IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPihzdWJzY3JpYmVyID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChqYXgodXJsT3JSZXF1ZXN0KSk7XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB0eXBlIFZhbHVlVHlwZTxULCBWPiA9IHtcbiAgICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFYgPyBUW0tdIDogbmV2ZXI7XG4gIH1cblxuICB0eXBlIFByb3BlcnRpZXMgPSBWYWx1ZVR5cGU8QWpheENyZWF0aW9uTWV0aG9kLCBGdW5jdGlvbj47XG5cbiAgY29uc3QgcHJvcGVydGllczogUHJvcGVydGllcyA9IHtcbiAgICBnZXQ6ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIHBvc3Q6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIHB1dDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgcGF0Y2g6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIGRlbGV0ZTogKHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgZ2V0SlNPTjogKHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KSA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICB9O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZCwgcHJvcGVydGllcyk7XG59XG5cbi8vIE1PQ0sgV2ViU29ja2V0ICh1c2VzIHNoYXJlZCBzdGF0ZSBpbiBTZXJ2ZXIpXG5cbnR5cGUgV2ViU29ja2V0Q29uc3RydWN0b3IgPSB0eXBlb2YgV2ViU29ja2V0O1xudHlwZSBFdmVudEhhbmRsZXI8RSBleHRlbmRzIEV2ZW50PiA9ICh0aGlzOiBXZWJTb2NrZXQsIGV2OiBFKSA9PiBhbnk7XG5cbmV4cG9ydCBjb25zdCBtb2NrV2ViU29ja2V0ID0gKHNlcnZlcjogU2VydmVyKTogV2ViU29ja2V0Q29uc3RydWN0b3IgPT5cbiAgY2xhc3MgTW9ja1dlYlNvY2tldCBpbXBsZW1lbnRzIFdlYlNvY2tldCwgQWN0aXZpdHlTb2NrZXQge1xuICAgIGNvbnN0cnVjdG9yKHVybDogc3RyaW5nLCBwcm90b2NvbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuXG4gICAgICBzZXJ2ZXIuc2NoZWR1bGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gICAgICAgIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cy5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMub25vcGVuKG5ldyBFdmVudCgnb3BlbicpKTtcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0Lk9QRU47XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgY29uc3Qgd2F0ZXJtYXJrID0gdXJpLnNlYXJjaFBhcmFtcy5nZXQoa2V5V2F0ZXJtYXJrKVxuICAgICAgICBpZiAod2F0ZXJtYXJrICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBOdW1iZXIucGFyc2VJbnQod2F0ZXJtYXJrLCAxMCk7XG4gICAgICAgICAgdGhpcy5wbGF5KHN0YXJ0LCBzZXJ2ZXIuY29udmVyc2F0aW9uLmhpc3RvcnkubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcGxheShzdGFydDogbnVtYmVyLCBhZnRlcjogbnVtYmVyKSB7XG5cbiAgICAgIGNvbnN0IHsgY29udmVyc2F0aW9uOiB7IGhpc3RvcnkgfSB9ID0gc2VydmVyO1xuICAgICAgY29uc3QgYWN0aXZpdGllcyA9IGhpc3Rvcnkuc2xpY2Uoc3RhcnQsIGFmdGVyKTtcbiAgICAgIGNvbnN0IHdhdGVybWFyayA9IGhpc3RvcnkubGVuZ3RoLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBhY3Rpdml0eUdyb3VwOiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5R3JvdXAgPSB7XG4gICAgICAgIGFjdGl2aXRpZXMsXG4gICAgICAgIHdhdGVybWFyayxcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlRXZlbnQoJ3R5cGUnLCB7IGRhdGE6IEpTT04uc3RyaW5naWZ5KGFjdGl2aXR5R3JvdXApIH0pO1xuXG4gICAgICB0aGlzLm9ubWVzc2FnZShtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBiaW5hcnlUeXBlOiBCaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICByZWFkb25seSBidWZmZXJlZEFtb3VudDogbnVtYmVyID0gMDtcbiAgICByZWFkb25seSBleHRlbnNpb25zOiBzdHJpbmcgPSAnJztcbiAgICByZWFkb25seSBwcm90b2NvbDogc3RyaW5nID0gJ2h0dHBzJztcbiAgICByZWFkeVN0YXRlOiBudW1iZXIgPSBXZWJTb2NrZXQuQ0xPU0VEO1xuICAgIHJlYWRvbmx5IHVybDogc3RyaW5nID0gJyc7XG4gICAgcmVhZG9ubHkgQ0xPU0VEOiBudW1iZXIgPSBXZWJTb2NrZXQuQ0xPU0VEO1xuICAgIHJlYWRvbmx5IENMT1NJTkc6IG51bWJlciA9IFdlYlNvY2tldC5DTE9TSU5HO1xuICAgIHJlYWRvbmx5IENPTk5FQ1RJTkc6IG51bWJlciA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgIHJlYWRvbmx5IE9QRU46IG51bWJlciA9IFdlYlNvY2tldC5PUEVOO1xuXG4gICAgb25jbG9zZTogRXZlbnRIYW5kbGVyPENsb3NlRXZlbnQ+O1xuICAgIG9uZXJyb3I6IEV2ZW50SGFuZGxlcjxFdmVudD47XG4gICAgb25tZXNzYWdlOiBFdmVudEhhbmRsZXI8TWVzc2FnZUV2ZW50PjtcbiAgICBvbm9wZW46IEV2ZW50SGFuZGxlcjxFdmVudD47XG5cbiAgICBjbG9zZShjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TSU5HO1xuICAgICAgdGhpcy5vbmNsb3NlKG5ldyBDbG9zZUV2ZW50KCdjbG9zZScpKVxuICAgICAgc2VydmVyLmNvbnZlcnNhdGlvbi5zb2NrZXRzLmRlbGV0ZSh0aGlzKTtcbiAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TRUQ7XG4gICAgfVxuXG4gICAgc2VuZChkYXRhOiBzdHJpbmcgfCBBcnJheUJ1ZmZlckxpa2UgfCBCbG9iIHwgQXJyYXlCdWZmZXJWaWV3KTogdm9pZCB7XG4gICAgfVxuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcigpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH1cbiAgICByZW1vdmVFdmVudExpc3RlbmVyKCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfVxuICAgIGRpc3BhdGNoRXZlbnQoKTogYm9vbGVhbiB7IHRocm93IG5ldyBFcnJvcigpOyB9XG5cbiAgICBzdGF0aWMgQ0xPU0VEID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICBzdGF0aWMgQ0xPU0lORyA9IFdlYlNvY2tldC5DTE9TSU5HO1xuICAgIHN0YXRpYyBDT05ORUNUSU5HID0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gICAgc3RhdGljIE9QRU4gPSBXZWJTb2NrZXQuT1BFTjtcbiAgfTtcblxuLy8gTU9DSyBzZXJ2aWNlcyAodG9wLWxldmVsIGFnZ3JlZ2F0aW9uIG9mIGFsbCBtb2NrcylcblxuZXhwb3J0IGNvbnN0IG1vY2tTZXJ2aWNlcyA9IChzZXJ2ZXI6IFNlcnZlciwgc2NoZWR1bGVyOiBUZXN0U2NoZWR1bGVyKTogRGlyZWN0TGluZUV4cG9ydC5TZXJ2aWNlcyA9PiAoe1xuICBzY2hlZHVsZXIsXG4gIFdlYlNvY2tldDogbW9ja1dlYlNvY2tldChzZXJ2ZXIpLFxuICBhamF4OiBtb2NrQWpheChzZXJ2ZXIpLFxuICByYW5kb206ICgpID0+IDAsXG59KTtcbiJdfQ==
|
|
287
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnhqcyIsInJlcXVpcmUiLCJfdXJsIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZSIsImYiLCJUeXBlRXJyb3IiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwiY2FsbCIsInN0ZXAiLCJuZXh0IiwiX2UyIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJhcnIiLCJsZW4iLCJhcnIyIiwibm90SW1wbGVtZW50ZWQiLCJFcnJvciIsIm1vY2tBY3Rpdml0eSIsInRleHQiLCJ0eXBlIiwiaWQiLCJleHBvcnRzIiwidG9rZW5QcmVmaXgiLCJtb2NrU2VydmVyIiwic2NoZWR1bGVyIiwiY29udmVyc2F0aW9uIiwic29ja2V0cyIsIlNldCIsImNvbnZlcnNhdGlvbklkIiwiaGlzdG9yeSIsInRva2VuIiwidG9rZW5SZXNwb25zZSIsInNlcnZlciIsInJlcXVlc3QiLCJoZWFkZXJzIiwiYXV0aG9yaXphdGlvbiIsImNvbmNhdCIsInJlc3BvbnNlIiwic3RhdHVzIiwiaW5qZWN0Q2xvc2UiLCJmb3JFYWNoIiwib25jbG9zZSIsIkNsb3NlRXZlbnQiLCJpbmplY3ROZXdUb2tlbiIsInN1ZmZpeCIsIk51bWJlciIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwia2V5V2F0ZXJtYXJrIiwibW9ja0FqYXgiLCJjdXN0b21BamF4IiwidXJpQmFzZSIsIlVSTCIsImNyZWF0ZVN0cmVhbVVybCIsIndhdGVybWFyayIsInVyaSIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImFwcGVuZCIsInNlYXJjaCIsImpheCIsInVybE9yUmVxdWVzdCIsInVybCIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwicGFydHMiLCJzcGxpdCIsInN0cmVhbVVybCIsInJlc3BvbnNlVG9rZW4iLCJhY3Rpdml0eSIsImJvZHkiLCJhZnRlciIsInB1c2giLCJzdGFydCIsIl9pdGVyYXRvciIsIl9zdGVwIiwic29ja2V0IiwicGxheSIsImdldCIsIm1ldGhvZCIsIk9ic2VydmFibGUiLCJzdWJzY3JpYmVyIiwiY29tcGxldGUiLCJlcnJvciIsInByb3BlcnRpZXMiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJfZGVsZXRlIiwiZ2V0SlNPTiIsImFzc2lnbiIsIm1vY2tXZWJTb2NrZXQiLCJfY2xhc3MiLCJNb2NrV2ViU29ja2V0IiwicHJvdG9jb2xzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIldlYlNvY2tldCIsIkNMT1NFRCIsIkNMT1NJTkciLCJDT05ORUNUSU5HIiwiT1BFTiIsInNjaGVkdWxlIiwicmVhZHlTdGF0ZSIsImFkZCIsIm9ub3BlbiIsIkV2ZW50IiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUdyb3VwIiwibWVzc2FnZSIsIk1lc3NhZ2VFdmVudCIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5Iiwib25tZXNzYWdlIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwic2VuZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsIm1vY2tTZXJ2aWNlcyIsImFqYXgiLCJyYW5kb20iXSwic291cmNlcyI6WyIuLi9zcmMvZGlyZWN0TGluZS5tb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERpcmVjdExpbmVFeHBvcnQgZnJvbSBcIi4vZGlyZWN0TGluZVwiO1xuaW1wb3J0IHsgVGVzdFNjaGVkdWxlciwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4UmVzcG9uc2UgfSBmcm9tIFwicnhqcy9vYnNlcnZhYmxlL2RvbS9BamF4T2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgVVJMLCBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tICd1cmwnO1xuXG4vLyBNT0NLIGhlbHBlcnNcblxuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpIH07XG5cbi8vIE1PQ0sgQWN0aXZpdHlcblxuZXhwb3J0IGNvbnN0IG1vY2tBY3Rpdml0eSA9ICh0ZXh0OiBzdHJpbmcpOiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5ID0+ICh7IHR5cGU6ICdtZXNzYWdlJywgZnJvbTogeyBpZDogJ3NlbmRlcicgfSwgdGV4dCB9KTtcblxuLy8gTU9DSyBEaXJlY3RMaW5lIFNlcnZlciAoc2hhcmVkIHN0YXRlIHVzZWQgYnkgT2JzZXJ2YWJsZS5hamF4IGFuZCBXZWJTb2NrZXQgbW9ja3MpXG5cbmludGVyZmFjZSBBY3Rpdml0eVNvY2tldCB7XG4gIHBsYXk6IChzdGFydDogbnVtYmVyLCBhZnRlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBTb2NrZXQgPSBXZWJTb2NrZXQgJiBBY3Rpdml0eVNvY2tldDtcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb24ge1xuICBzb2NrZXRzOiBTZXQ8U29ja2V0PjtcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgaGlzdG9yeTogQXJyYXk8RGlyZWN0TGluZUV4cG9ydC5BY3Rpdml0eT47XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyIHtcbiAgc2NoZWR1bGVyOiBUZXN0U2NoZWR1bGVyO1xuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbn1cblxuY29uc3QgdG9rZW5QcmVmaXggPSAndG9rZW4nO1xuXG5leHBvcnQgY29uc3QgbW9ja1NlcnZlciA9IChzY2hlZHVsZXI6IFRlc3RTY2hlZHVsZXIpOiBTZXJ2ZXIgPT4gKHtcbiAgc2NoZWR1bGVyLFxuICBjb252ZXJzYXRpb246IHtcbiAgICBzb2NrZXRzOiBuZXcgU2V0PFNvY2tldD4oKSxcbiAgICBjb252ZXJzYXRpb25JZDogJ09uZUNvbnZlcnNhdGlvbicsXG4gICAgaGlzdG9yeTogW10sXG4gICAgdG9rZW46IHRva2VuUHJlZml4ICsgJzEnLFxuICB9XG59KTtcblxuY29uc3QgdG9rZW5SZXNwb25zZSA9IChzZXJ2ZXI6IFNlcnZlciwgcmVxdWVzdDogQWpheFJlcXVlc3QpOiBBamF4UmVzcG9uc2UgfCBudWxsID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICBjb25zdCBhdXRob3JpemF0aW9uID0gaGVhZGVyc1snQXV0aG9yaXphdGlvbiddO1xuICBpZiAoYXV0aG9yaXphdGlvbiA9PT0gYEJlYXJlciAke3NlcnZlci5jb252ZXJzYXRpb24udG9rZW59YCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICBzdGF0dXM6IDQwMyxcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RDbG9zZSA9IChzZXJ2ZXI6IFNlcnZlcik6IHZvaWQgPT5cbiAgc2VydmVyLmNvbnZlcnNhdGlvbi5zb2NrZXRzLmZvckVhY2gocyA9PiBzLm9uY2xvc2UobmV3IENsb3NlRXZlbnQoJ2Nsb3NlJykpKTtcblxuZXhwb3J0IGNvbnN0IGluamVjdE5ld1Rva2VuID0gKHNlcnZlcjogU2VydmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHsgY29udmVyc2F0aW9uIH0gPSBzZXJ2ZXI7XG4gIGNvbnN0IHN1ZmZpeCA9IE51bWJlci5wYXJzZUludChjb252ZXJzYXRpb24udG9rZW4uc3Vic3RyaW5nKHRva2VuUHJlZml4Lmxlbmd0aCksIDEwKSArIDFcbiAgY29udmVyc2F0aW9uLnRva2VuID0gdG9rZW5QcmVmaXggKyBzdWZmaXg7XG59XG5cbmNvbnN0IGtleVdhdGVybWFyayA9ICd3YXRlcm1hcmsnO1xuXG50eXBlIGFqYXhUeXBlID0gKHVybE9yUmVxdWVzdDogc3RyaW5nIHwgQWpheFJlcXVlc3QpID0+IEFqYXhSZXNwb25zZTtcblxuLy8gTU9DSyBPYnNlcnZhYmxlLmFqYXggKHVzZXMgc2hhcmVkIHN0YXRlIGluIFNlcnZlcilcblxuZXhwb3J0IGNvbnN0IG1vY2tBamF4ID0gKHNlcnZlcjogU2VydmVyLCBjdXN0b21BamF4PzogYWpheFR5cGUpOiBBamF4Q3JlYXRpb25NZXRob2QgPT4ge1xuXG4gIGNvbnN0IHVyaUJhc2UgPSBuZXcgVVJMKCdodHRwczovL2RpcmVjdGxpbmUuYm90ZnJhbWV3b3JrLmNvbS92My9kaXJlY3RsaW5lLycpO1xuICBjb25zdCBjcmVhdGVTdHJlYW1VcmwgPSAod2F0ZXJtYXJrOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoJ2NvbnZlcnNhdGlvbnMvc3RyZWFtJywgdXJpQmFzZSk7XG4gICAgaWYgKHdhdGVybWFyayA+IDApIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5V2F0ZXJtYXJrLCB3YXRlcm1hcmsudG9TdHJpbmcoMTApKTtcbiAgICAgIHVyaS5zZWFyY2ggPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCBqYXggPSBjdXN0b21BamF4IHx8ICgodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCk6IEFqYXhSZXNwb25zZSA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cmxPclJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybE9yUmVxdWVzdC51cmwpO1xuXG4gICAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoUGFyYW1zIH0gPSB1cmk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAocGFydHNbM10gPT09ICd0b2tlbnMnICYmIHBhcnRzWzRdID09PSAncmVmcmVzaCcpIHtcblxuICAgICAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICAgICAgcmVzcG9uc2U6IHsgdG9rZW46IHNlcnZlci5jb252ZXJzYXRpb24udG9rZW4gfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbM10gIT09ICdjb252ZXJzYXRpb25zJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY29uc3QgY29udmVyc2F0aW9uOiBEaXJlY3RMaW5lRXhwb3J0LkNvbnZlcnNhdGlvbiA9IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHRva2VuOiBzZXJ2ZXIuY29udmVyc2F0aW9uLnRva2VuLFxuICAgICAgICBzdHJlYW1Vcmw6IGNyZWF0ZVN0cmVhbVVybCgwKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBQYXJ0aWFsPEFqYXhSZXNwb25zZT4gPSB7XG4gICAgICAgIHJlc3BvbnNlOiBjb252ZXJzYXRpb24sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzWzRdICE9PSBzZXJ2ZXIuY29udmVyc2F0aW9uLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbNV0gPT09ICdhY3Rpdml0aWVzJykge1xuICAgICAgY29uc3QgcmVzcG9uc2VUb2tlbiA9IHRva2VuUmVzcG9uc2Uoc2VydmVyLCB1cmxPclJlcXVlc3QpO1xuICAgICAgaWYgKHJlc3BvbnNlVG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlVG9rZW47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGl2aXR5OiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5ID0gdXJsT3JSZXF1ZXN0LmJvZHk7XG5cbiAgICAgIGNvbnN0IGFmdGVyID0gc2VydmVyLmNvbnZlcnNhdGlvbi5oaXN0b3J5LnB1c2goYWN0aXZpdHkpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBhZnRlciAtIDE7XG5cbiAgICAgIGZvciAoY29uc3Qgc29ja2V0IG9mIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cykge1xuICAgICAgICBzb2NrZXQucGxheShzdGFydCwgYWZ0ZXIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogeyBpZDogJ21lc3NhZ2VJZCcgfSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSA1KSB7XG4gICAgICBjb25zdCByZXNwb25zZVRva2VuID0gdG9rZW5SZXNwb25zZShzZXJ2ZXIsIHVybE9yUmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2VUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VUb2tlbjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2F0ZXJtYXJrID0gc2VhcmNoUGFyYW1zLmdldCgnd2F0ZXJtYXJrJyk7XG4gICAgICBjb25zdCBzdGFydCA9IE51bWJlci5wYXJzZUludCh3YXRlcm1hcmssIDEwKTtcblxuICAgICAgY29uc3QgY29udmVyc2F0aW9uOiBEaXJlY3RMaW5lRXhwb3J0LkNvbnZlcnNhdGlvbiA9IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHRva2VuOiBzZXJ2ZXIuY29udmVyc2F0aW9uLnRva2VuLFxuICAgICAgICBzdHJlYW1Vcmw6IGNyZWF0ZVN0cmVhbVVybChzdGFydCksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogY29udmVyc2F0aW9uLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgQWpheFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9KTtcblxuICBjb25zdCBtZXRob2QgPSAodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PlxuICAgIG5ldyBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4oc3Vic2NyaWJlciA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoamF4KHVybE9yUmVxdWVzdCkpO1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgdHlwZSBWYWx1ZVR5cGU8VCwgVj4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBWID8gVFtLXSA6IG5ldmVyO1xuICB9XG5cbiAgdHlwZSBQcm9wZXJ0aWVzID0gVmFsdWVUeXBlPEFqYXhDcmVhdGlvbk1ldGhvZCwgRnVuY3Rpb24+O1xuXG4gIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXMgPSB7XG4gICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBwb3N0OiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBwdXQ6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBkZWxldGU6ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIGdldEpTT046ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCkgPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihtZXRob2QsIHByb3BlcnRpZXMpO1xufVxuXG4vLyBNT0NLIFdlYlNvY2tldCAodXNlcyBzaGFyZWQgc3RhdGUgaW4gU2VydmVyKVxuXG50eXBlIFdlYlNvY2tldENvbnN0cnVjdG9yID0gdHlwZW9mIFdlYlNvY2tldDtcbnR5cGUgRXZlbnRIYW5kbGVyPEUgZXh0ZW5kcyBFdmVudD4gPSAodGhpczogV2ViU29ja2V0LCBldjogRSkgPT4gYW55O1xuXG5leHBvcnQgY29uc3QgbW9ja1dlYlNvY2tldCA9IChzZXJ2ZXI6IFNlcnZlcik6IFdlYlNvY2tldENvbnN0cnVjdG9yID0+XG4gIGNsYXNzIE1vY2tXZWJTb2NrZXQgaW1wbGVtZW50cyBXZWJTb2NrZXQsIEFjdGl2aXR5U29ja2V0IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgcHJvdG9jb2xzPzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblxuICAgICAgc2VydmVyLnNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgICAgICBzZXJ2ZXIuY29udmVyc2F0aW9uLnNvY2tldHMuYWRkKHRoaXMpO1xuICAgICAgICB0aGlzLm9ub3BlbihuZXcgRXZlbnQoJ29wZW4nKSk7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5PUEVOO1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIGNvbnN0IHdhdGVybWFyayA9IHVyaS5zZWFyY2hQYXJhbXMuZ2V0KGtleVdhdGVybWFyaylcbiAgICAgICAgaWYgKHdhdGVybWFyayAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHdhdGVybWFyaywgMTApO1xuICAgICAgICAgIHRoaXMucGxheShzdGFydCwgc2VydmVyLmNvbnZlcnNhdGlvbi5oaXN0b3J5Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBsYXkoc3RhcnQ6IG51bWJlciwgYWZ0ZXI6IG51bWJlcikge1xuXG4gICAgICBjb25zdCB7IGNvbnZlcnNhdGlvbjogeyBoaXN0b3J5IH0gfSA9IHNlcnZlcjtcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBoaXN0b3J5LnNsaWNlKHN0YXJ0LCBhZnRlcik7XG4gICAgICBjb25zdCB3YXRlcm1hcmsgPSBoaXN0b3J5Lmxlbmd0aC50b1N0cmluZygpO1xuICAgICAgY29uc3QgYWN0aXZpdHlHcm91cDogRGlyZWN0TGluZUV4cG9ydC5BY3Rpdml0eUdyb3VwID0ge1xuICAgICAgICBhY3Rpdml0aWVzLFxuICAgICAgICB3YXRlcm1hcmssXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZUV2ZW50KCd0eXBlJywgeyBkYXRhOiBKU09OLnN0cmluZ2lmeShhY3Rpdml0eUdyb3VwKSB9KTtcblxuICAgICAgdGhpcy5vbm1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYmluYXJ5VHlwZTogQmluYXJ5VHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgcmVhZG9ubHkgYnVmZmVyZWRBbW91bnQ6IG51bWJlciA9IDA7XG4gICAgcmVhZG9ubHkgZXh0ZW5zaW9uczogc3RyaW5nID0gJyc7XG4gICAgcmVhZG9ubHkgcHJvdG9jb2w6IHN0cmluZyA9ICdodHRwcyc7XG4gICAgcmVhZHlTdGF0ZTogbnVtYmVyID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZyA9ICcnO1xuICAgIHJlYWRvbmx5IENMT1NFRDogbnVtYmVyID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICByZWFkb25seSBDTE9TSU5HOiBudW1iZXIgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICByZWFkb25seSBDT05ORUNUSU5HOiBudW1iZXIgPSBXZWJTb2NrZXQuQ09OTkVDVElORztcbiAgICByZWFkb25seSBPUEVOOiBudW1iZXIgPSBXZWJTb2NrZXQuT1BFTjtcblxuICAgIG9uY2xvc2U6IEV2ZW50SGFuZGxlcjxDbG9zZUV2ZW50PjtcbiAgICBvbmVycm9yOiBFdmVudEhhbmRsZXI8RXZlbnQ+O1xuICAgIG9ubWVzc2FnZTogRXZlbnRIYW5kbGVyPE1lc3NhZ2VFdmVudD47XG4gICAgb25vcGVuOiBFdmVudEhhbmRsZXI8RXZlbnQ+O1xuXG4gICAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICAgIHRoaXMub25jbG9zZShuZXcgQ2xvc2VFdmVudCgnY2xvc2UnKSlcbiAgICAgIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cy5kZWxldGUodGhpcyk7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0VEO1xuICAgIH1cblxuICAgIHNlbmQoZGF0YTogc3RyaW5nIHwgQXJyYXlCdWZmZXJMaWtlIHwgQmxvYiB8IEFycmF5QnVmZmVyVmlldyk6IHZvaWQge1xuICAgIH1cblxuICAgIGFkZEV2ZW50TGlzdGVuZXIoKSB7IHRocm93IG5ldyBFcnJvcigpOyB9XG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH1cbiAgICBkaXNwYXRjaEV2ZW50KCk6IGJvb2xlYW4geyB0aHJvdyBuZXcgRXJyb3IoKTsgfVxuXG4gICAgc3RhdGljIENMT1NFRCA9IFdlYlNvY2tldC5DTE9TRUQ7XG4gICAgc3RhdGljIENMT1NJTkcgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICBzdGF0aWMgQ09OTkVDVElORyA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgIHN0YXRpYyBPUEVOID0gV2ViU29ja2V0Lk9QRU47XG4gIH07XG5cbi8vIE1PQ0sgc2VydmljZXMgKHRvcC1sZXZlbCBhZ2dyZWdhdGlvbiBvZiBhbGwgbW9ja3MpXG5cbmV4cG9ydCBjb25zdCBtb2NrU2VydmljZXMgPSAoc2VydmVyOiBTZXJ2ZXIsIHNjaGVkdWxlcjogVGVzdFNjaGVkdWxlcik6IERpcmVjdExpbmVFeHBvcnQuU2VydmljZXMgPT4gKHtcbiAgc2NoZWR1bGVyLFxuICBXZWJTb2NrZXQ6IG1vY2tXZWJTb2NrZXQoc2VydmVyKSxcbiAgYWpheDogbW9ja0FqYXgoc2VydmVyKSxcbiAgcmFuZG9tOiAoKSA9PiAwLFxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFBMkMsU0FBQUUs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
|