@datagrok/sequence-translator 1.0.6 → 1.0.8

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.
@@ -15,18 +15,24 @@ __webpack_require__.r(__webpack_exports__);
15
15
  /* harmony export */ "currentCategory": () => (/* binding */ currentCategory),
16
16
  /* harmony export */ "assure": () => (/* binding */ assure),
17
17
  /* harmony export */ "Test": () => (/* binding */ Test),
18
+ /* harmony export */ "testEvent": () => (/* binding */ testEvent),
18
19
  /* harmony export */ "test": () => (/* binding */ test),
19
- /* harmony export */ "assertNoError": () => (/* binding */ assertNoError),
20
20
  /* harmony export */ "expect": () => (/* binding */ expect),
21
21
  /* harmony export */ "expectFloat": () => (/* binding */ expectFloat),
22
+ /* harmony export */ "expectObject": () => (/* binding */ expectObject),
23
+ /* harmony export */ "expectArray": () => (/* binding */ expectArray),
22
24
  /* harmony export */ "category": () => (/* binding */ category),
23
25
  /* harmony export */ "before": () => (/* binding */ before),
24
26
  /* harmony export */ "after": () => (/* binding */ after),
25
27
  /* harmony export */ "runTests": () => (/* binding */ runTests),
26
- /* harmony export */ "delay": () => (/* binding */ delay)
28
+ /* harmony export */ "delay": () => (/* binding */ delay),
29
+ /* harmony export */ "awaitCheck": () => (/* binding */ awaitCheck),
30
+ /* harmony export */ "isDialogPresent": () => (/* binding */ isDialogPresent)
27
31
  /* harmony export */ });
28
32
  /* harmony import */ var datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! datagrok-api/grok */ "datagrok-api/grok");
29
33
  /* harmony import */ var datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__);
34
+ /* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! datagrok-api/dg */ "datagrok-api/dg");
35
+ /* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__);
30
36
  var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
31
37
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
32
38
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -37,42 +43,62 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
37
43
  });
38
44
  };
39
45
 
40
- let tests = {};
46
+
47
+ const tests = {};
41
48
  let currentCategory;
42
49
  var assure;
43
50
  (function (assure) {
44
51
  function notNull(value, name) {
45
52
  if (value == null)
46
- throw `${name == null ? 'Value' : name} not defined`;
53
+ throw new Error(`${name == null ? 'Value' : name} not defined`);
47
54
  }
48
55
  assure.notNull = notNull;
49
56
  })(assure || (assure = {}));
50
57
  class Test {
51
58
  constructor(category, name, test, options) {
52
- var _a, _b;
59
+ var _a;
53
60
  this.category = category;
54
61
  this.name = name;
55
62
  options !== null && options !== void 0 ? options : (options = {});
56
63
  (_a = options.timeout) !== null && _a !== void 0 ? _a : (options.timeout = 30000);
57
- (_b = options.unhandledExceptionTimeout) !== null && _b !== void 0 ? _b : (options.unhandledExceptionTimeout = 2000);
58
64
  this.options = options;
59
65
  this.test = () => __awaiter(this, void 0, void 0, function* () {
60
66
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
61
67
  let result = '';
62
68
  try {
63
- datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.lastError = '';
64
69
  result = yield test();
65
70
  }
66
71
  catch (e) {
67
72
  reject(e);
68
73
  }
69
- if (!(yield assertNoError(options.unhandledExceptionTimeout)))
70
- reject(`Unhandled exception during test: ${datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.lastError}`);
71
74
  resolve(result);
72
75
  }));
73
76
  });
74
77
  }
75
78
  }
79
+ function testEvent(event, handler, trigger, ms = 0) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ let sub;
82
+ return new Promise((resolve, reject) => {
83
+ sub = event.subscribe((args) => {
84
+ try {
85
+ handler(args);
86
+ }
87
+ catch (e) {
88
+ reject(e);
89
+ }
90
+ sub.unsubscribe();
91
+ resolve('OK');
92
+ });
93
+ setTimeout(() => {
94
+ sub.unsubscribe();
95
+ // eslint-disable-next-line prefer-promise-reject-errors
96
+ reject('timeout');
97
+ }, ms);
98
+ trigger();
99
+ });
100
+ });
101
+ }
76
102
  function test(name, test, options) {
77
103
  if (tests[currentCategory] == undefined)
78
104
  tests[currentCategory] = {};
@@ -80,39 +106,57 @@ function test(name, test, options) {
80
106
  tests[currentCategory].tests = [];
81
107
  tests[currentCategory].tests.push(new Test(currentCategory, name, test, options));
82
108
  }
83
- /** Awaits for a while checking the error status of the platform */
84
- function assertNoError(ms) {
85
- return __awaiter(this, void 0, void 0, function* () {
86
- for (let i = 0; i < ms / 500; ++i) {
87
- yield delay(500);
88
- if (datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.lastError.length !== 0)
89
- return false;
90
- }
91
- return true;
92
- });
93
- }
94
- /** Tests two objects for equality, throws an exception if they are not equal. */
109
+ /* Tests two objects for equality, throws an exception if they are not equal. */
95
110
  function expect(actual, expected) {
96
111
  if (actual !== expected)
97
- throw `Expected "${expected}", got "${actual}"`;
112
+ throw new Error(`Expected "${expected}", got "${actual}"`);
98
113
  }
99
114
  function expectFloat(actual, expected, tolerance = 0.001) {
100
- const areEqual = Math.abs(actual - expected) < 0.001;
115
+ const areEqual = Math.abs(actual - expected) < tolerance;
101
116
  if (!areEqual)
102
- throw `Expected ${expected}, got ${actual} (tolerance = ${tolerance})`;
117
+ throw new Error(`Expected ${expected}, got ${actual} (tolerance = ${tolerance})`);
118
+ }
119
+ function expectObject(actual, expected) {
120
+ for (const [expectedKey, expectedValue] of Object.entries(expected)) {
121
+ if (!actual.hasOwnProperty(expectedKey))
122
+ throw new Error(`Expected property "${expectedKey}" not found`);
123
+ const actualValue = actual[expectedKey];
124
+ if (actualValue instanceof Array && expectedValue instanceof Array)
125
+ expectArray(actualValue, expectedValue);
126
+ else if (actualValue instanceof Object && expectedValue instanceof Object)
127
+ expectObject(actualValue, expectedValue);
128
+ else if (actualValue != expectedValue)
129
+ throw new Error(`Expected ${expectedValue} for key ${expectedKey}, got ${actualValue}`);
130
+ }
103
131
  }
104
- /** Defines a test suite. */
132
+ function expectArray(actual, expected) {
133
+ const actualLength = actual.length;
134
+ const expectedLength = expected.length;
135
+ if (actualLength != expectedLength) {
136
+ throw new Error(`Arrays are of different length: actual array length is ${actualLength} ` +
137
+ `and expected array length is ${expectedLength}`);
138
+ }
139
+ for (let i = 0; i < actualLength; i++) {
140
+ if (actual[i] instanceof Array && expected[i] instanceof Array)
141
+ expectArray(actual[i], expected[i]);
142
+ else if (actual[i] instanceof Object && expected[i] instanceof Object)
143
+ expectObject(actual[i], expected[i]);
144
+ else if (actual[i] != expected[i])
145
+ throw new Error(`Expected ${expected[i]} at position ${i}, got ${actual[i]}`);
146
+ }
147
+ }
148
+ /* Defines a test suite. */
105
149
  function category(category, tests) {
106
150
  currentCategory = category;
107
151
  tests();
108
152
  }
109
- /** Defines a function to be executed before the tests in this category are executed. */
153
+ /* Defines a function to be executed before the tests in this category are executed. */
110
154
  function before(before) {
111
155
  if (tests[currentCategory] == undefined)
112
156
  tests[currentCategory] = {};
113
157
  tests[currentCategory].before = before;
114
158
  }
115
- /** Defines a function to be executed after the tests in this category are executed. */
159
+ /* Defines a function to be executed after the tests in this category are executed. */
116
160
  function after(after) {
117
161
  if (tests[currentCategory] == undefined)
118
162
  tests[currentCategory] = {};
@@ -121,12 +165,15 @@ function after(after) {
121
165
  function runTests(options) {
122
166
  var _a;
123
167
  return __awaiter(this, void 0, void 0, function* () {
124
- let results = [];
168
+ const results = [];
169
+ console.log(`Running tests`);
170
+ datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.lastError = '';
125
171
  for (const [key, value] of Object.entries(tests)) {
126
172
  if ((options === null || options === void 0 ? void 0 : options.category) != undefined) {
127
173
  if (!key.toLowerCase().startsWith(options === null || options === void 0 ? void 0 : options.category.toLowerCase()))
128
174
  continue;
129
175
  }
176
+ console.log(`Started ${key} category`);
130
177
  try {
131
178
  if (value.before)
132
179
  yield value.before();
@@ -134,12 +181,11 @@ function runTests(options) {
134
181
  catch (x) {
135
182
  value.beforeStatus = x.toString();
136
183
  }
137
- let t = (_a = value.tests) !== null && _a !== void 0 ? _a : [];
138
- let res = [];
139
- for (let i = 0; i < t.length; i++) {
184
+ const t = (_a = value.tests) !== null && _a !== void 0 ? _a : [];
185
+ const res = [];
186
+ for (let i = 0; i < t.length; i++)
140
187
  res.push(yield execTest(t[i], options === null || options === void 0 ? void 0 : options.test));
141
- }
142
- let data = (yield Promise.all(res)).filter((d) => d.result != 'skipped');
188
+ const data = (yield Promise.all(res)).filter((d) => d.result != 'skipped');
143
189
  try {
144
190
  if (value.after)
145
191
  yield value.after();
@@ -148,11 +194,19 @@ function runTests(options) {
148
194
  value.afterStatus = x.toString();
149
195
  }
150
196
  if (value.afterStatus)
151
- data.push({ category: key, name: 'init', result: value.afterStatus, success: false });
197
+ data.push({ category: key, name: 'init', result: value.afterStatus, success: false, ms: 0 });
152
198
  if (value.beforeStatus)
153
- data.push({ category: key, name: 'init', result: value.beforeStatus, success: false });
199
+ data.push({ category: key, name: 'init', result: value.beforeStatus, success: false, ms: 0 });
154
200
  results.push(...data);
155
201
  }
202
+ yield delay(1000);
203
+ if (datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.lastError.length > 0) {
204
+ results.push({
205
+ category: 'Unhandled exceptions',
206
+ name: 'exceptions',
207
+ result: datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.lastError, success: false, ms: 0
208
+ });
209
+ }
156
210
  return results;
157
211
  });
158
212
  }
@@ -160,26 +214,64 @@ function execTest(t, predicate) {
160
214
  var _a;
161
215
  return __awaiter(this, void 0, void 0, function* () {
162
216
  let r;
217
+ const skip = predicate != undefined && (!t.name.toLowerCase().startsWith(predicate.toLowerCase()));
218
+ if (!skip)
219
+ console.log(`Started ${t.category} ${t.name}`);
220
+ const start = new Date();
163
221
  try {
164
- if (predicate != undefined && (!t.name.toLowerCase().startsWith(predicate.toLowerCase())))
165
- r = { success: true, result: 'skipped' };
222
+ if (skip)
223
+ r = { success: true, result: 'skipped', ms: 0 };
166
224
  else
167
- r = { success: true, result: (_a = yield t.test()) !== null && _a !== void 0 ? _a : 'OK' };
225
+ r = { success: true, result: (_a = yield t.test()) !== null && _a !== void 0 ? _a : 'OK', ms: 0 };
168
226
  }
169
227
  catch (x) {
170
- r = { success: false, result: x.toString() };
228
+ r = { success: false, result: x.toString(), ms: 0 };
171
229
  }
230
+ const stop = new Date();
231
+ // @ts-ignore
232
+ r.ms = stop - start;
233
+ if (!skip)
234
+ console.log(`Finished ${t.category} ${t.name} for ${r.ms} ms`);
172
235
  r.category = t.category;
173
236
  r.name = t.name;
174
237
  return r;
175
238
  });
176
239
  }
240
+ /* Waits [ms] milliseconds */
177
241
  function delay(ms) {
178
242
  return __awaiter(this, void 0, void 0, function* () {
179
- yield new Promise(r => setTimeout(r, ms));
243
+ yield new Promise((r) => setTimeout(r, ms));
244
+ });
245
+ }
246
+ function awaitCheck(checkHandler) {
247
+ return __awaiter(this, void 0, void 0, function* () {
248
+ return new Promise((resolve, reject) => {
249
+ let stop = false;
250
+ setTimeout(() => {
251
+ stop = true;
252
+ // eslint-disable-next-line prefer-promise-reject-errors
253
+ reject('Timeout exceeded');
254
+ }, 500);
255
+ function check() {
256
+ if (checkHandler()) {
257
+ stop = false;
258
+ resolve();
259
+ }
260
+ if (!stop)
261
+ setTimeout(check, 50);
262
+ }
263
+ check();
264
+ });
180
265
  });
181
266
  }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxNQUFNLENBQUMsSUFBSSxLQUFLLEdBQThJLEVBQUUsQ0FBQztBQUVqSyxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBTXRCO0FBTkQsV0FBaUIsTUFBTTtJQUVyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDO0lBQ3pELENBQUM7SUFIZSxjQUFPLFVBR3RCLENBQUE7QUFDSCxDQUFDLEVBTmdCLE1BQU0sS0FBTixNQUFNLFFBTXRCO0FBT0QsTUFBTSxPQUFPLElBQUk7SUFNZixZQUFZLFFBQWdCLEVBQUUsSUFBWSxFQUFFLElBQXdCLEVBQUUsT0FBcUI7O1FBQ3pGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxJQUFQLE9BQU8sR0FBSyxFQUFFLEVBQUM7UUFDZixNQUFBLE9BQU8sQ0FBQyxPQUFPLG9DQUFmLE9BQU8sQ0FBQyxPQUFPLEdBQUssS0FBSyxFQUFDO1FBQzFCLE1BQUEsT0FBTyxDQUFDLHlCQUF5QixvQ0FBakMsT0FBTyxDQUFDLHlCQUF5QixHQUFLLElBQUksRUFBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQXVCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFPLE9BQU8s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QUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsQ0FBQzs7Z0JBRXZDLENBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQUEsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLG1DQUFJLElBQUksRUFBQyxDQUFDO1NBQ3ZEO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDZixDQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUMsQ0FBQztTQUM1QztRQUNELENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN4QixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEIsT0FBTyxDQUFDLENBQUM7O0NBQ1Y7QUFFRCxNQUFNLFVBQWdCLEtBQUssQ0FBQyxFQUFVOztRQUNwQyxNQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSBcImRhdGFncm9rLWFwaS9ncm9rXCI7XG5cbmV4cG9ydCBsZXQgdGVzdHM6IHtba2V5OiBzdHJpbmddOiB7dGVzdHM/OiBUZXN0W10sIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD4sIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPiwgYmVmb3JlU3RhdHVzPzogc3RyaW5nLCBhZnRlclN0YXR1cz86IHN0cmluZ319ID0ge307XG5cbmV4cG9ydCBsZXQgY3VycmVudENhdGVnb3J5OiBzdHJpbmc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgYXNzdXJlIHtcblxuICBleHBvcnQgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICB0aHJvdyBgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PyA6IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD8gOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSAzMDAwMDtcbiAgICBvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQgPz89IDIwMDA7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBncm9rLnNoZWxsLmxhc3RFcnJvciA9ICcnO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGF3YWl0IGFzc2VydE5vRXJyb3Iob3B0aW9ucyEudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCEpKSlcbiAgICAgICAgICByZWplY3QoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCk7XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyk6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzIS5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuXG4vKiogQXdhaXRzIGZvciBhIHdoaWxlIGNoZWNraW5nIHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIHBsYXRmb3JtICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0Tm9FcnJvcihtczogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbXMgLyA1MDA7ICsraSkge1xuICAgIGF3YWl0IGRlbGF5KDUwMCk7XG4gICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCAhPT0gMClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KTogdm9pZCB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IGBFeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSk6IHZvaWQge1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IDAuMDAxO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWA7XG59XG5cbi8qKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0czogKCkgPT4gdm9pZCk6IHZvaWQge1xuICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGVzdHMoKTtcbn1cblxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86IHtjYXRlZ29yeT86IHN0cmluZywgdGVzdD86IHN0cmluZ30pIHtcbiAgbGV0IHJlc3VsdHM6IHsgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nfVtdID0gW107XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgaWYgKG9wdGlvbnM/LmNhdGVnb3J5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgIGF3YWl0IHZhbHVlLmJlZm9yZSgpO1xuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBsZXQgdCA9IHZhbHVlLnRlc3RzID8/IFtdO1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2goYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCkpO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gKGF3YWl0IFByb21pc2UuYWxsKHJlcykpLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHZhbHVlLmFmdGVyKVxuICAgICAgICBhd2FpdCB2YWx1ZS5hZnRlcigpO1xuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgIGRhdGEucHVzaCh7Y2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZX0pO1xuICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlfSk7XG4gICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGxldCByOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZyB9O1xuICB0cnkge1xuICAgIGlmIChwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICghdC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSkpKVxuICAgICAgciA9IHtzdWNjZXNzOiB0cnVlLCByZXN1bHQ6ICdza2lwcGVkJ307XG4gICAgZWxzZVxuICAgICAgciA9IHtzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHQudGVzdCgpID8/ICdPSyd9O1xuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICByID0ge3N1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHgudG9TdHJpbmcoKX07XG4gIH1cbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0ICBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTtcbn1cbiJdfQ==
267
+ function isDialogPresent(dialogTitle) {
268
+ for (let i = 0; i < datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.Dialog.getOpenDialogs().length; i++) {
269
+ if (datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.Dialog.getOpenDialogs()[i].title == dialogTitle)
270
+ return true;
271
+ }
272
+ return false;
273
+ }
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FLZCxFQUFFLENBQUM7QUFFUCxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBTXRCO0FBTkQsV0FBaUIsTUFBTTtJQUVyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUhlLGNBQU8sVUFHdEIsQ0FBQTtBQUNILENBQUMsRUFOZ0IsTUFBTSxLQUFOLE1BQU0sUUFNdEI7QUFPRCxNQUFNLE9BQU8sSUFBSTtJQU1mLFlBQVksUUFBZ0IsRUFBRSxJQUFZLEVBQUUsSUFBd0IsRUFBRSxPQUFxQjs7UUFDekYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLElBQVAsT0FBTyxHQUFLLEVBQUUsRUFBQztRQUNmLE1BQUEsT0FBTyxDQUFDLE9BQU8sb0NBQWYsT0FBTyxDQUFDLE9BQU8sR0FBSyxLQUFLLEVBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUF1QixFQUFFO1lBQ25DLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBTyxPQUFPLEVBQUUsTUFBTSxF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TyxJQUFJLENBQUM7S0FDZjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICB0ZXN0cz86IFRlc3RbXSwgYmVmb3JlPzogKCkgPT4gUHJvbWlzZTx2b2lkPiwgYWZ0ZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGJlZm9yZVN0YXR1cz86IHN0cmluZywgYWZ0ZXJTdGF0dXM/OiBzdHJpbmdcbiAgfVxufSA9IHt9O1xuXG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGwodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICB1bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gIHRlc3Q6ICgpID0+IFByb21pc2U8YW55PjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBvcHRpb25zPzogVGVzdE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgbmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykge1xuICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIG9wdGlvbnMgPz89IHt9O1xuICAgIG9wdGlvbnMudGltZW91dCA/Pz0gMzAwMDA7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0ZXN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnQ8VD4oZXZlbnQ6IE9ic2VydmFibGU8VD4sIGhhbmRsZXI6IChhcmdzOiBUKSA9PiB2b2lkLCB0cmlnZ2VyOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyID0gMCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxldCBzdWI6IFN1YnNjcmlwdGlvbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCgndGltZW91dCcpO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMhLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG5cbi8qIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KTogdm9pZCB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgXCIke2V4cGVjdGVkfVwiLCBnb3QgXCIke2FjdHVhbH1cImApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsOiBudW1iZXIsIGV4cGVjdGVkOiBudW1iZXIsIHRvbGVyYW5jZSA9IDAuMDAxKTogdm9pZCB7XG4gIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGV4cGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcblxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFZhbHVlfSBmb3Iga2V5ICR7ZXhwZWN0ZWRLZXl9LCBnb3QgJHthY3R1YWxWYWx1ZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsOiBBcnJheUxpa2U8YW55PiwgZXhwZWN0ZWQ6IEFycmF5TGlrZTxhbnk+KSB7XG4gIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuXG4gIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICB0ZXN0cygpO1xufVxuXG4vKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmUoYmVmb3JlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuXG4vKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86IHsgY2F0ZWdvcnk/OiBzdHJpbmcsIHRlc3Q/OiBzdHJpbmcgfSkge1xuICBjb25zdCByZXN1bHRzOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgbXM6IG51bWJlciB9W10gPSBbXTtcbiAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgaWYgKG9wdGlvbnM/LmNhdGVnb3J5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgIGF3YWl0IHZhbHVlLmJlZm9yZSgpO1xuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBjb25zdCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKVxuICAgICAgcmVzLnB1c2goYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCkpO1xuXG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwfSk7XG4gICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgIGRhdGEucHVzaCh7Y2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwfSk7XG4gICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICB9XG4gIGF3YWl0IGRlbGF5KDEwMDApO1xuICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgIG5hbWU6ICdleGNlcHRpb25zJyxcbiAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjVGVzdCh0OiBUZXN0LCBwcmVkaWNhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBsZXQgcjogeyBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIgfTtcbiAgY29uc3Qgc2tpcCA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gIGlmICghc2tpcClcbiAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc2tpcClcbiAgICAgIHIgPSB7c3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAnc2tpcHBlZCcsIG1zOiAwfTtcbiAgICBlbHNlXG4gICAgICByID0ge3N1Y2Nlc3M6IHRydWUsIHJlc3VsdDogYXdhaXQgdC50ZXN0KCkgPz8gJ09LJywgbXM6IDB9O1xuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICByID0ge3N1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHgudG9TdHJpbmcoKSwgbXM6IDB9O1xuICB9XG4gIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAvLyBAdHMtaWdub3JlXG4gIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gIGlmICghc2tpcClcbiAgICBjb25zb2xlLmxvZyhgRmluaXNoZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZm9yICR7ci5tc30gbXNgKTtcblxuICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgci5uYW1lID0gdC5uYW1lO1xuICByZXR1cm4gcjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzdG9wOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QoJ1RpbWVvdXQgZXhjZWVkZWQnKTtcbiAgICB9LCA1MDApO1xuICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xuICAgICAgaWYgKGNoZWNrSGFuZGxlcigpKSB7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdG9wKVxuICAgICAgICBzZXRUaW1lb3V0KGNoZWNrLCA1MCk7XG4gICAgfVxuICAgIGNoZWNrKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOnN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBpPTA7IGkgPCBERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKVtpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
183
275
 
184
276
  /***/ }),
185
277
 
@@ -219,6 +311,7 @@ __webpack_require__.r(__webpack_exports__);
219
311
  /* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__);
220
312
 
221
313
 
314
+
222
315
  //name: gcrsToLcms
223
316
  //input: string nucleotides {semType: GCRS}
224
317
  //output: string result {semType: LCMS}
@@ -228,12 +321,21 @@ function gcrsToLcms(sequence) {
228
321
  const arr2 = df.getCol('LCMS').toList();
229
322
  const obj = {};
230
323
  arr1.forEach((element, index) => obj[element] = arr2[index]);
231
- for (let i = 0; i < arr1.length; i++) {
232
- arr1[i] = arr1[i].replace('(', '\\(');
233
- arr1[i] = arr1[i].replace(')', '\\)');
324
+ obj[_map__WEBPACK_IMPORTED_MODULE_0__.delimiter] = _map__WEBPACK_IMPORTED_MODULE_0__.delimiter;
325
+ // for (let i = 0; i < arr1.length; i++) {
326
+ // arr1[i] = arr1[i].replace('(', '\\(');
327
+ // arr1[i] = arr1[i].replace(')', '\\)');
328
+ // }
329
+ // const regExp = new RegExp('(' + arr1.join('|') + ')', 'g');
330
+ // let r1 = sequence.replace(regExp, function(code) {return obj[code];});
331
+ const codes = arr1.concat(_map__WEBPACK_IMPORTED_MODULE_0__.delimiter).sort(function (a, b) { return b.length - a.length; });
332
+ let i = 0;
333
+ let r1 = '';
334
+ while (i < sequence.length) {
335
+ const matchedCode = codes.find((c) => c == sequence.slice(i, i + c.length));
336
+ r1 += obj[sequence.slice(i, i + matchedCode.length)];
337
+ i += matchedCode.length;
234
338
  }
235
- const regExp = new RegExp('(' + arr1.join('|') + ')', 'g');
236
- let r1 = sequence.replace(regExp, function (code) { return obj[code]; });
237
339
  while (r1.indexOf('//') != -1)
238
340
  r1 = r1.replace('//', '/');
239
341
  return r1;
@@ -543,7 +645,8 @@ function sequenceToMolV3000(sequence, inverted = false, oclRender = false, forma
543
645
  if (dropdowns.includes(codesList[i])) {
544
646
  smilesCodes.push((i >= codesList.length / 2) ?
545
647
  _map__WEBPACK_IMPORTED_MODULE_0__.MODIFICATIONS[codesList[i]].right : _map__WEBPACK_IMPORTED_MODULE_0__.MODIFICATIONS[codesList[i]].left);
546
- smilesCodes.push(_map__WEBPACK_IMPORTED_MODULE_0__.stadardPhosphateLinkSmiles);
648
+ if (!(i < codesList.length - 1 && links.includes(codesList[i + 1])))
649
+ smilesCodes.push(_map__WEBPACK_IMPORTED_MODULE_0__.stadardPhosphateLinkSmiles);
547
650
  }
548
651
  else {
549
652
  if (links.includes(codesList[i]) ||
@@ -681,6 +784,7 @@ const COL_NAMES = {
681
784
  EQUIVALENTS: 'Equivalents',
682
785
  PURITY: 'Purity',
683
786
  CPD_MW: 'Cpd MW',
787
+ SALT_MOL_WEIGHT: 'Salt MW',
684
788
  SALT_MASS: 'Salt mass',
685
789
  BATCH_MW: 'Batch MW',
686
790
  SOURCE: 'Source',
@@ -1449,7 +1553,7 @@ M V30 BEGIN ATOM
1449
1553
  M V30 1 O 1.0934 -2.1636 0 0
1450
1554
  M V30 2 C 1.8365 -1.4945 0 0 CFG=2
1451
1555
  M V30 3 C 2.8147 -1.7024 0 0
1452
- M V30 4 C 3.3147 -0.8364 0 0 VAL=3
1556
+ M V30 4 C 3.3147 -0.8364 0 0
1453
1557
  M V30 5 O 2.6455 -0.0932 0 0
1454
1558
  M V30 6 C 1.732 -0.5 0 0 CFG=1
1455
1559
  M V30 7 C 0.866 0 0 0
@@ -1617,7 +1721,7 @@ function linkV3000(molBlocks, twoChains = false, useChirality = true) {
1617
1721
  else
1618
1722
  macroMolBlock = macroMolBlock.replace(/ CFG=\d/g, ' ');
1619
1723
  macroMolBlock += 'M V30 END CTAB\n';
1620
- macroMolBlock += 'M END\n';
1724
+ macroMolBlock += 'M END';
1621
1725
  return macroMolBlock;
1622
1726
  }
1623
1727
  function rotateNucleotidesV3000(molecule) {
@@ -1917,8 +2021,8 @@ function isValidSequence(sequence, format) {
1917
2021
  // })
1918
2022
  // .show();
1919
2023
  // } else if (possibleTechnologies.length == 0)
1920
- if (possibleTechnologies.length == 0)
1921
- return { indexOfFirstNotValidChar: 0, synthesizer: [possibleSynthesizers[3]], technology: null };
2024
+ // if (possibleTechnologies.length == 0)
2025
+ // return {indexOfFirstNotValidChar: 0, synthesizer: [possibleSynthesizers[3]], technology: null};
1922
2026
  outputIndex = 0;
1923
2027
  // possibleTechnologies.forEach((technology: string) => {
1924
2028
  // const codes = Object.keys(map[possibleSynthesizers[0]][technology]);
@@ -2104,68 +2208,68 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
2104
2208
 
2105
2209
 
2106
2210
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.category)('sequence-translator', () => {
2107
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('AGGTCCTCTTGACTTAGGCC', () => __awaiter(void 0, void 0, void 0, function* () {
2108
- const expected = 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)C[C@@H]1OP(=O)(O)' +
2109
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2110
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2111
- 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2112
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2113
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2114
- 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2115
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2116
- 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2117
- 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2118
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2119
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)C[C@@H]1OP(=O)(O)' +
2120
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2121
- 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2122
- 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2123
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)C[C@@H]1OP(=O)(O)' +
2124
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2125
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2126
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1O';
2127
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('AGGTCCTCTTGACTTAGGCC', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.RAW_NUCLEOTIDES), expected);
2128
- }));
2129
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('invabasic/galnac1', () => __awaiter(void 0, void 0, void 0, function* () {
2130
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2131
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2132
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2133
- 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2134
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2135
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2136
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2137
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sgg(invabasic)(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2138
- }));
2139
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('invabasic/galnac2', () => __awaiter(void 0, void 0, void 0, function* () {
2140
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2141
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2142
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2143
- 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2144
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2145
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2146
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2147
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sgsg(invabasic)(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2148
- }));
2149
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('invabasic/galnac3', () => __awaiter(void 0, void 0, void 0, function* () {
2150
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2151
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2152
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2153
- 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2154
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2155
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2156
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2157
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sggs(invabasic)(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2158
- }));
2159
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('invabasic/galnac4', () => __awaiter(void 0, void 0, void 0, function* () {
2160
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2161
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2162
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2163
- 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2164
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2165
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2166
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2167
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sgg(invabasic)s(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2168
- }));
2211
+ // test('AGGTCCTCTTGACTTAGGCC', async () => {
2212
+ // const expected = 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)C[C@@H]1OP(=O)(O)' +
2213
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2214
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2215
+ // 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2216
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2217
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2218
+ // 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2219
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2220
+ // 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2221
+ // 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2222
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2223
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)C[C@@H]1OP(=O)(O)' +
2224
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)' +
2225
+ // 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2226
+ // 'OC[C@H]1O[C@@H](N2C=C(C)C(=O)NC2(=O))C[C@@H]1OP(=O)(O)' +
2227
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)C[C@@H]1OP(=O)(O)' +
2228
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2229
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2230
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1OP(=O)(O)OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))C[C@@H]1O';
2231
+ // expect(sequenceToSmiles('AGGTCCTCTTGACTTAGGCC', false, SYNTHESIZERS.RAW_NUCLEOTIDES), expected);
2232
+ // });
2233
+ // test('invabasic/galnac1', async () => {
2234
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2235
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2236
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2237
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2238
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2239
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2240
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2241
+ // expect(sequenceToSmiles('(invabasic)sgg(invabasic)(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2242
+ // });
2243
+ // test('invabasic/galnac2', async () => {
2244
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2245
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2246
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2247
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2248
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2249
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2250
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2251
+ // expect(sequenceToSmiles('(invabasic)sgsg(invabasic)(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2252
+ // });
2253
+ // test('invabasic/galnac3', async () => {
2254
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2255
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2256
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2257
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2258
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2259
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2260
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2261
+ // expect(sequenceToSmiles('(invabasic)sggs(invabasic)(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2262
+ // });
2263
+ // test('invabasic/galnac4', async () => {
2264
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2265
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2266
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2267
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2268
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2269
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2270
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2271
+ // expect(sequenceToSmiles('(invabasic)sgg(invabasic)s(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2272
+ // });
2169
2273
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('usCfCfUfGfAf', () => __awaiter(void 0, void 0, void 0, function* () {
2170
2274
  const expected = 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2171
2275
  'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
@@ -2249,26 +2353,28 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
2249
2353
  'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1O';
2250
2354
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('UfAfCfGfGfCfAfUf', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2251
2355
  }));
2252
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)sucuCfuUf', () => __awaiter(void 0, void 0, void 0, function* () {
2253
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2254
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2255
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2256
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2257
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2258
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2259
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1O';
2260
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sucuCfuUf', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2261
- }));
2262
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)sAfgcugUf', () => __awaiter(void 0, void 0, void 0, function* () {
2263
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2264
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2265
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2266
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2267
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2268
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2269
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1O';
2270
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sAfgcugUf', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2271
- }));
2356
+ // test('(invabasic)sucuCfuUf', async () => {
2357
+ // const expected =
2358
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2359
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2360
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2361
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2362
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2363
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2364
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1O';
2365
+ // expect(sequenceToSmiles('(invabasic)sucuCfuUf', false, SYNTHESIZERS.AXOLABS), expected);
2366
+ // });
2367
+ // test('(invabasic)sAfgcugUf', async () => {
2368
+ // const expected =
2369
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2370
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2371
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2372
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2373
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2374
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2375
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1O';
2376
+ // expect(sequenceToSmiles('(invabasic)sAfgcugUf', false, SYNTHESIZERS.AXOLABS), expected);
2377
+ // });
2272
2378
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)cuCfuUfsc', () => __awaiter(void 0, void 0, void 0, function* () {
2273
2379
  const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2274
2380
  'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
@@ -2279,17 +2385,18 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
2279
2385
  'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1O';
2280
2386
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)cuCfuUfsc', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2281
2387
  }));
2282
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)scususu(GalNAc-2-JNJ)', () => __awaiter(void 0, void 0, void 0, function* () {
2283
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2284
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2285
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2286
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2287
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2288
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2289
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2290
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2291
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)scususu(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2292
- }));
2388
+ // test('(invabasic)scususu(GalNAc-2-JNJ)', async () => {
2389
+ // const expected =
2390
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2391
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2392
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2393
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2394
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2395
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2396
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2397
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2398
+ // expect(sequenceToSmiles('(invabasic)scususu(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2399
+ // });
2293
2400
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)usAfsucuCfuUfAfgcugUfgCfacususu', () => __awaiter(void 0, void 0, void 0, function* () {
2294
2401
  const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2295
2402
  'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
@@ -2338,183 +2445,189 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
2338
2445
  'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2339
2446
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)asacgGfuGfCfAfacucuauuca', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2340
2447
  }));
2341
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)scsgguGfcAfAfCfucuauucuga', () => __awaiter(void 0, void 0, void 0, function* () {
2342
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2343
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2344
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2345
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2346
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2347
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2348
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2349
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2350
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2351
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2352
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2353
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2354
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2355
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2356
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2357
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2358
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2359
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2360
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2361
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2362
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)scsgguGfcAfAfCfucuauucuga', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2363
- }));
2364
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)scsaacUfcUfAfUfucuggacuua', () => __awaiter(void 0, void 0, void 0, function* () {
2365
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2366
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2367
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2368
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2369
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2370
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2371
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2372
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2373
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2374
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2375
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2376
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2377
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2378
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2379
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2380
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2381
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2382
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2383
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2384
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2385
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)scsaacUfcUfAfUfucuggacuua', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2386
- }));
2387
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)sasacuCfuAfUfUfcuggacuuua', () => __awaiter(void 0, void 0, void 0, function* () {
2388
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2389
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2390
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2391
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2392
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2393
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2394
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2395
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2396
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2397
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2398
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2399
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2400
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2401
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2402
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2403
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2404
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2405
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2406
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2407
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2408
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sasacuCfuAfUfUfcuggacuuua', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2409
- }));
2410
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)usAfscug(invabasic)(GalNAc-2-JNJ)', () => __awaiter(void 0, void 0, void 0, function* () {
2411
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2412
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2413
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(S)' +
2414
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2415
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2416
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2417
- 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2418
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2419
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2420
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2421
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)usAfscug(invabasic)(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2422
- }));
2423
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)sasuaaCfcUf(GalNAc-2-JNJ)', () => __awaiter(void 0, void 0, void 0, function* () {
2424
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2425
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2426
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2427
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2428
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2429
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2430
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2431
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2432
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2433
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2434
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2435
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sasuaaCfcUf(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2436
- }));
2437
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)sasuaaCfcUfCfUfuguaguuaua(GalNAc-2-JNJ)', () => __awaiter(void 0, void 0, void 0, function* () {
2438
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2439
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2440
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2441
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2442
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2443
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2444
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2445
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2446
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2447
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2448
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2449
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2450
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2451
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2452
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2453
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2454
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2455
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2456
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2457
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2458
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2459
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2460
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2461
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)sasuaaCfcUfCfUfuguaguuaua(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2462
- }));
2463
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)scsaucacguUfGfCfagccgucuua(invabasic)(GalNAc-2-JNJ)', () => __awaiter(void 0, void 0, void 0, function* () {
2464
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2465
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2466
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2467
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2468
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2469
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2470
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2471
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2472
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2473
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2474
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2475
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2476
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2477
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2478
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2479
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2480
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2481
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2482
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2483
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2484
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2485
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2486
- 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2487
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2488
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2489
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2490
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)scsaucacguUfGfCfagccgucuua(invabasic)(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2491
- }));
2492
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('(invabasic)susguuUfgCfCfUfacaucuacua(GalNAc-2-JNJ)', () => __awaiter(void 0, void 0, void 0, function* () {
2493
- const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2494
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2495
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2496
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2497
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2498
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2499
- 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2500
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2501
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2502
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2503
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2504
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2505
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2506
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2507
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2508
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2509
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2510
- 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2511
- 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2512
- 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2513
- 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2514
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2515
- '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2516
- (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.expect)((0,_structures_works_from_monomers__WEBPACK_IMPORTED_MODULE_1__.sequenceToSmiles)('(invabasic)susguuUfgCfCfUfacaucuacua(GalNAc-2-JNJ)', false, _structures_works_map__WEBPACK_IMPORTED_MODULE_2__.SYNTHESIZERS.AXOLABS), expected);
2517
- }));
2448
+ // test('(invabasic)scsgguGfcAfAfCfucuauucuga', async () => {
2449
+ // const expected =
2450
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2451
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2452
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2453
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2454
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2455
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2456
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2457
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2458
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2459
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2460
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2461
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2462
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2463
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2464
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2465
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2466
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2467
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2468
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2469
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2470
+ // expect(sequenceToSmiles('(invabasic)scsgguGfcAfAfCfucuauucuga', false, SYNTHESIZERS.AXOLABS), expected);
2471
+ // });
2472
+ // test('(invabasic)scsaacUfcUfAfUfucuggacuua', async () => {
2473
+ // const expected =
2474
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2475
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2476
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2477
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2478
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2479
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2480
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2481
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2482
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2483
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2484
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2485
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2486
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2487
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2488
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2489
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2490
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2491
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2492
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2493
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2494
+ // expect(sequenceToSmiles('(invabasic)scsaacUfcUfAfUfucuggacuua', false, SYNTHESIZERS.AXOLABS), expected);
2495
+ // });
2496
+ // test('(invabasic)sasacuCfuAfUfUfcuggacuuua', async () => {
2497
+ // const expected =
2498
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2499
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2500
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2501
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2502
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2503
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2504
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2505
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2506
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2507
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2508
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2509
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2510
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2511
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2512
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2513
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2514
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2515
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2516
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2517
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1O';
2518
+ // expect(sequenceToSmiles('(invabasic)sasacuCfuAfUfUfcuggacuuua', false, SYNTHESIZERS.AXOLABS), expected);
2519
+ // });
2520
+ // test('(invabasic)usAfscug(invabasic)(GalNAc-2-JNJ)', async () => {
2521
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2522
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2523
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(S)' +
2524
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2525
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2526
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2527
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2528
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2529
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2530
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2531
+ // expect(sequenceToSmiles('(invabasic)usAfscug(invabasic)(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2532
+ // });
2533
+ // test('(invabasic)sasuaaCfcUf(GalNAc-2-JNJ)', async () => {
2534
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2535
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2536
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2537
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2538
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2539
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2540
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2541
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2542
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2543
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2544
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2545
+ // expect(sequenceToSmiles('(invabasic)sasuaaCfcUf(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS), expected);
2546
+ // });
2547
+ // test('(invabasic)sasuaaCfcUfCfUfuguaguuaua(GalNAc-2-JNJ)', async () => {
2548
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2549
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(S)' +
2550
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2551
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2552
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2553
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2554
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2555
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2556
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2557
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2558
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2559
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2560
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2561
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2562
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2563
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2564
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2565
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2566
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2567
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2568
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2569
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2570
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2571
+ // expect(sequenceToSmiles('(invabasic)sasuaaCfcUfCfUfuguaguuaua(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS),
2572
+ // expected);
2573
+ // });
2574
+ // test('(invabasic)scsaucacguUfGfCfagccgucuua(invabasic)(GalNAc-2-JNJ)', async () => {
2575
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2576
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2577
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2578
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2579
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2580
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2581
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2582
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2583
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2584
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2585
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](F)[C@@H]1OP(=O)(O)' +
2586
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2587
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2588
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2589
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2590
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2591
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2592
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2593
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2594
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2595
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2596
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2597
+ // 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(O)' +
2598
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2599
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2600
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2601
+ // expect(sequenceToSmiles('(invabasic)scsaucacguUfGfCfagccgucuua(invabasic)(GalNAc-2-JNJ)',
2602
+ // false, SYNTHESIZERS.AXOLABS), expected);
2603
+ // });
2604
+ // test('(invabasic)susguuUfgCfCfUfacaucuacua(GalNAc-2-JNJ)', async () => {
2605
+ // const expected = 'O[C@@H]1C[C@@H]O[C@H]1COP(=O)(S)' +
2606
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(S)' +
2607
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2608
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2609
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2610
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2611
+ // 'OC[C@H]1O[C@@H](N2C3N=C(N)NC(=O)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2612
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2613
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2614
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](F)[C@@H]1OP(=O)(O)' +
2615
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2616
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2617
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2618
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2619
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2620
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2621
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2622
+ // 'OC[C@H]1O[C@@H](N2C=CC(N)=NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2623
+ // 'OC[C@H]1O[C@@H](N2C=CC(=O)NC2(=O))[C@H](OC)[C@@H]1OP(=O)(O)' +
2624
+ // 'OC[C@H]1O[C@@H](N2C3N=CN=C(N)C=3N=C2)[C@H](OC)[C@@H]1OP(=O)(O)' +
2625
+ // 'OCC(O)CNC(=O)CCCC(=O)NC(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2626
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)' +
2627
+ // '(COCCC(=O)NCCCNC(=O)CCCCOC2OC(CO)C(O)C(O)C2NC(=O)C)';
2628
+ // expect(sequenceToSmiles('(invabasic)susguuUfgCfCfUfacaucuacua(GalNAc-2-JNJ)', false, SYNTHESIZERS.AXOLABS),
2629
+ // expected);
2630
+ // });
2518
2631
  });
2519
2632
 
2520
2633
 
@@ -2652,4 +2765,4 @@ function test() {
2652
2765
  sequencetranslator_test = __webpack_exports__;
2653
2766
  /******/ })()
2654
2767
  ;
2655
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Qsb0JBQW9CO0FBQ3BCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwrRUFBd0I7QUFDaEQscUJBQXFCLDhEQUFvQjtBQUNsQztBQUNQO0FBQ0EsNENBQTRDOzs7Ozs7Ozs7Ozs7Ozs7O0FDdnRCNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxvQkFBb0IsNEJBQTRCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDBCQUEwQjtBQUN0RDtBQUNBLDRCQUE0QiwwQkFBMEI7QUFDdEQ7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRkFBb0Y7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBFQUFNLENBQUMsaUZBQWdCLDhEQUE4RCx1RUFBb0I7QUFDakgsS0FBSztBQUNMLENBQUM7Ozs7Ozs7Ozs7O0FDeGFEOzs7Ozs7Ozs7O0FDQUE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNzQztBQUMrQjtBQUN2QztBQUN2QixxQkFBcUIsb0RBQVU7QUFDckI7QUFDakI7QUFDQTtBQUNPO0FBQ1A7QUFDQSwyQkFBMkIsNEVBQVE7QUFDbkMsZUFBZSxrRUFBd0I7QUFDdkMsS0FBSztBQUNMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3N0cnVjdHVyZXMtd29ya3MvY29udmVydGVycy50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9mcm9tLW1vbm9tZXJzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL21hcC50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9tb2wtdHJhbnNmb3JtYXRpb25zLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL3NlcXVlbmNlLWNvZGVzLXRvb2xzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy90ZXN0cy9zbWlsZXMtdGVzdHMudHMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL2V4dGVybmFsIHZhciBcImdyb2tcIiIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3Ivd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3BhY2thZ2UtdGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSBcImRhdGFncm9rLWFwaS9ncm9rXCI7XG5leHBvcnQgbGV0IHRlc3RzID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYDtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgKF9iID0gb3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAob3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0ID0gMjAwMCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudGVzdCA9ICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIHRlc3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISh5aWVsZCBhc3NlcnROb0Vycm9yKG9wdGlvbnMudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCkpKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyoqIEF3YWl0cyBmb3IgYSB3aGlsZSBjaGVja2luZyB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBwbGF0Zm9ybSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vRXJyb3IobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zIC8gNTAwOyArK2kpIHtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDUwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbi8qKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IGBFeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSkge1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMC4wMDE7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYDtcbn1cbi8qKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeSwgdGVzdHMpIHtcbiAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0ZXN0cygpO1xufVxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeSkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdCA9IChfYSA9IHZhbHVlLnRlc3RzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHlpZWxkIGV4ZWNUZXN0KHRbaV0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50ZXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0YSA9ICh5aWVsZCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYWZ0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleGVjVGVzdCh0LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKSlcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6ICdza2lwcGVkJyB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9hID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdPSycgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgciA9IHsgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogeC50b1N0cmluZygpIH07XG4gICAgICAgIH1cbiAgICAgICAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gICAgICAgIHIubmFtZSA9IHQubmFtZTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVkQlFUaEpMRVZCUVVVc1EwRkJRenRCUVVWcVN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4bFFVRjFRaXhEUVVGRE8wRkJSVzVETEUxQlFVMHNTMEZCVnl4TlFVRk5MRU5CVFhSQ08wRkJUa1FzVjBGQmFVSXNUVUZCVFR0SlFVVnlRaXhUUVVGblFpeFBRVUZQTEVOQlFVTXNTMEZCVlN4RlFVRkZMRWxCUVdFN1VVRkRMME1zU1VGQlNTeExRVUZMTEVsQlFVa3NTVUZCU1R0WlFVTm1MRTFCUVUwc1IwRkJSeXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzWTBGQll5eERRVUZETzBsQlEzcEVMRU5CUVVNN1NVRklaU3hqUVVGUExGVkJSM1JDTEVOQlFVRTdRVUZEU0N4RFFVRkRMRVZCVG1kQ0xFMUJRVTBzUzBGQlRpeE5RVUZOTEZGQlRYUkNPMEZCVDBRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEUxQlFVRXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeHZRMEZCYWtNc1QwRkJUeXhEUVVGRExIbENRVUY1UWl4SFFVRkxMRWxCUVVrc1JVRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVhWQ0xFVkJRVVU3V1VGRGJrTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGUExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0blFrRkRNME1zU1VGQlNTeE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMmRDUVVOb1FpeEpRVUZKTzI5Q1FVTkdMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRNVUlzVFVGQlRTeEhRVUZITEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRM1pDTzJkQ1FVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yOUNRVU5tTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRFdEdG5Ra0ZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxHRkJRV0VzUTBGQlF5eFBRVUZSTEVOQlFVTXNlVUpCUVRCQ0xFTkJRVU1zUTBGQlF6dHZRa0ZETjBRc1RVRkJUU3hEUVVGRExHOURRVUZ2UXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNKRkxFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTnNRaXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETzFGQlEwd3NRMEZCUXl4RFFVRkJMRU5CUVVNN1NVRkRTaXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEZWQlFWVXNTVUZCU1N4RFFVRkRMRWxCUVZrc1JVRkJSU3hKUVVGM1FpeEZRVUZGTEU5QlFYRkNPMGxCUTJoR0xFbEJRVWtzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRk5CUVZNN1VVRkRja01zUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVNNVFpeEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVTBGQlV6dFJRVU16UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTndReXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNTMEZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzSkdMRU5CUVVNN1FVRkZSQ3h0UlVGQmJVVTdRVUZEYmtVc1RVRkJUU3hWUVVGblFpeGhRVUZoTEVOQlFVTXNSVUZCVlRzN1VVRkROVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRha01zVFVGQlRTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRha0lzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFdEJRVXNzUTBGQlF6dG5Ra0ZEYmtNc1QwRkJUeXhMUVVGTExFTkJRVU03VTBGRGFFSTdVVUZEUkN4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03UTBGQlFUdEJRVVZFTEdsR1FVRnBSanRCUVVOcVJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVZjc1JVRkJSU3hSUVVGaE8wbEJReTlETEVsQlFVa3NUVUZCVFN4TFFVRkxMRkZCUVZFN1VVRkRja0lzVFVGQlRTeGhRVUZoTEZGQlFWRXNWMEZCVnl4TlFVRk5MRWRCUVVjc1EwRkJRenRCUVVOd1JDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMRmRCUVZjc1EwRkJReXhOUVVGakxFVkJRVVVzVVVGQlowSXNSVUZCUlN4VFFVRlRMRWRCUVVjc1MwRkJTenRKUVVNM1JTeE5RVUZOTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1NVRkRja1FzU1VGQlNTeERRVUZETEZGQlFWRTdVVUZEV0N4TlFVRk5MRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRE8wRkJRek5GTEVOQlFVTTdRVUZGUkN3MFFrRkJORUk3UVVGRE5VSXNUVUZCVFN4VlFVRlZMRkZCUVZFc1EwRkJReXhSUVVGblFpeEZRVUZGTEV0QlFXbENPMGxCUXpGRUxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTTdTVUZETTBJc1MwRkJTeXhGUVVGRkxFTkJRVU03UVVGRFZpeERRVUZETzBGQlJVUXNkMFpCUVhkR08wRkJRM2hHTEUxQlFVMHNWVUZCVlN4TlFVRk5MRU5CUVVNc1RVRkJNa0k3U1VGRGFFUXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTNwRExFTkJRVU03UVVGRlJDeDFSa0ZCZFVZN1FVRkRka1lzVFVGQlRTeFZRVUZWTEV0QlFVc3NRMEZCUXl4TFFVRXdRanRKUVVNNVF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1NVRkJTU3hUUVVGVE8xRkJRM0pETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRE9VSXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEZGtNc1EwRkJRenRCUVVkRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVRSRE96czdVVUZEZWtVc1NVRkJTU3hQUVVGUExFZEJRVFJGTEVWQlFVVXNRMEZCUXp0UlFVVXhSaXhMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlR0WlFVTm9SQ3hKUVVGSkxFTkJRVUVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxGRkJRVkVzUzBGQlNTeFRRVUZUTEVWQlFVVTdaMEpCUTJ4RExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRVThzWVVGQlVDeFBRVUZQTEhWQ1FVRlFMRTlCUVU4c1EwRkJSU3hSUVVGUkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdiMEpCUTJoRkxGTkJRVk03WVVGRFdqdFpRVU5FTEVsQlFVazdaMEpCUTBZc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRUdHZRa0ZEWkN4TlFVRk5MRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dGhRVU40UWp0WlFVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yZENRVU5tTEV0QlFVc3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzJGQlEyNURPMWxCUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlFTeExRVUZMTEVOQlFVTXNTMEZCU3l4dFEwRkJTU3hGUVVGRkxFTkJRVU03V1VGRE1VSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMklzUzBGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRMmhETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJReTlETzFsQlJVUXNTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhOUVVGTkxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFbEJRVWtzVTBGQlV5eERRVUZETEVOQlFVTTdXVUZEZWtVc1NVRkJTVHRuUWtGRFJpeEpRVUZKTEV0QlFVc3NRMEZCUXl4TFFVRkxPMjlDUVVOaUxFMUJRVTBzUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMkZCUTNaQ08xbEJRVU1zVDBGQlR5eERRVUZOTEVWQlFVVTdaMEpCUTJZc1MwRkJTeXhEUVVGRExGZEJRVmNzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRU03V1VGRFJDeEpRVUZKTEV0QlFVc3NRMEZCUXl4WFFVRlhPMmRDUVVOdVFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zVjBGQlZ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JHTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrN1owSkJRM0JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFpRVUZaTEVWQlFVVXNUMEZCVHl4RlFVRkZMRXRCUVVzc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGRrWXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEzWkNPMUZCUlVRc1QwRkJUeXhQUVVGUExFTkJRVU03TzBOQlEyaENPMEZCUlVRc1UwRkJaU3hSUVVGUkxFTkJRVU1zUTBGQlR5eEZRVUZGTEZOQlFUWkNPenM3VVVGRE5VUXNTVUZCU1N4RFFVRjVSU3hEUVVGRE8xRkJRemxGTEVsQlFVazdXVUZEUml4SlFVRkpMRk5CUVZNc1NVRkJTU3hUUVVGVExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEZOQlFWTXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU4yUml4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVNc1EwRkJRenM3WjBKQlJYWkRMRU5CUVVNc1IwRkJSeXhGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVVFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEcxRFFVRkpMRWxCUVVrc1JVRkJReXhEUVVGRE8xTkJRM1pFTzFGQlFVTXNUMEZCVHl4RFFVRk5MRVZCUVVVN1dVRkRaaXhEUVVGRExFZEJRVWNzUlVGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVTXNRMEZCUXp0VFFVTTFRenRSUVVORUxFTkJRVU1zUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVONFFpeERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGFFSXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wTkJRMVk3UVVGRlJDeE5RVUZOTEZWQlFXZENMRXRCUVVzc1EwRkJReXhGUVVGVk96dFJRVU53UXl4TlFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZERMRU5CUVVNN1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHZHliMnNnWm5KdmJTQmNJbVJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJYQ0k3WEc1Y2JtVjRjRzl5ZENCc1pYUWdkR1Z6ZEhNNklIdGJhMlY1T2lCemRISnBibWRkT2lCN2RHVnpkSE0vT2lCVVpYTjBXMTBzSUdKbFptOXlaVDg2SUNncElEMCtJRkJ5YjIxcGMyVThkbTlwWkQ0c0lHRm1kR1Z5UHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZbVZtYjNKbFUzUmhkSFZ6UHpvZ2MzUnlhVzVuTENCaFpuUmxjbE4wWVhSMWN6ODZJSE4wY21sdVozMTlJRDBnZTMwN1hHNWNibVY0Y0c5eWRDQnNaWFFnWTNWeWNtVnVkRU5oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzVjYm1WNGNHOXlkQ0J1WVcxbGMzQmhZMlVnWVhOemRYSmxJSHRjYmx4dUlDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JtOTBUblZzYkNoMllXeDFaVG9nWVc1NUxDQnVZVzFsUHpvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QmdKSHR1WVcxbElEMDlJRzUxYkd3Z1B5QW5WbUZzZFdVbklEb2dibUZ0WlgwZ2JtOTBJR1JsWm1sdVpXUmdPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVkdWemRFOXdkR2x2Ym5NZ2UxeHVJQ0IwYVcxbGIzVjBQeUE2SUc1MWJXSmxjanRjYmlBZ2RXNW9ZVzVrYkdWa1JYaGpaWEIwYVc5dVZHbHRaVzkxZEQ4Z09pQnVkVzFpWlhJN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCdmNIUnBiMjV6TG5WdWFHRnVaR3hsWkVWNFkyVndkR2x2YmxScGJXVnZkWFFnUHo4OUlESXdNREE3WEc0Z0lDQWdkR2hwY3k1dmNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3p0Y2JpQWdJQ0IwYUdsekxuUmxjM1FnUFNCaGMzbHVZeUFvS1RvZ1VISnZiV2x6WlR4aGJuaytJRDArSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNoaGMzbHVZeUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J5WlhOMWJIUWdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlHRjNZV2wwSUhSbGMzUW9LVHRjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnFaV04wS0dVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNnaEtHRjNZV2wwSUdGemMyVnlkRTV2UlhKeWIzSW9iM0IwYVc5dWN5RXVkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWRDRXBLU2xjYmlBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWUZWdWFHRnVaR3hsWkNCbGVHTmxjSFJwYjI0Z1pIVnlhVzVuSUhSbGMzUTZJQ1I3WjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNKOVlDazdYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9jbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFJsYzNRb2JtRnRaVG9nYzNSeWFXNW5MQ0IwWlhOME9pQW9LU0E5UGlCUWNtOXRhWE5sUEdGdWVUNHNJRzl3ZEdsdmJuTS9PaUJVWlhOMFQzQjBhVzl1Y3lrNklIWnZhV1FnZTF4dUlDQnBaaUFvZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOUlIdDlPMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFM1MFpYTjBjeUE5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lBOUlGdGRPMXh1SUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRMblJsYzNSeklTNXdkWE5vS0c1bGR5QlVaWE4wS0dOMWNuSmxiblJEWVhSbFoyOXllU3dnYm1GdFpTd2dkR1Z6ZEN3Z2IzQjBhVzl1Y3lrcE8xeHVmVnh1WEc0dktpb2dRWGRoYVhSeklHWnZjaUJoSUhkb2FXeGxJR05vWldOcmFXNW5JSFJvWlNCbGNuSnZjaUJ6ZEdGMGRYTWdiMllnZEdobElIQnNZWFJtYjNKdElDb3ZYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z1lYTnpaWEowVG05RmNuSnZjaWh0Y3pvZ2JuVnRZbVZ5S1RvZ1VISnZiV2x6WlR4aWIyOXNaV0Z1UGlCN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYlhNZ0x5QTFNREE3SUNzcmFTa2dlMXh1SUNBZ0lHRjNZV2wwSUdSbGJHRjVLRFV3TUNrN1hHNGdJQ0FnYVdZZ0tHZHliMnN1YzJobGJHd3ViR0Z6ZEVWeWNtOXlMbXhsYm1kMGFDQWhQVDBnTUNsY2JpQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2RISjFaVHRjYm4xY2JseHVMeW9xSUZSbGMzUnpJSFIzYnlCdlltcGxZM1J6SUdadmNpQmxjWFZoYkdsMGVTd2dkR2h5YjNkeklHRnVJR1Y0WTJWd2RHbHZiaUJwWmlCMGFHVjVJR0Z5WlNCdWIzUWdaWEYxWVd3dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWGh3WldOMEtHRmpkSFZoYkRvZ1lXNTVMQ0JsZUhCbFkzUmxaRG9nWVc1NUtUb2dkbTlwWkNCN1hHNGdJR2xtSUNoaFkzUjFZV3dnSVQwOUlHVjRjR1ZqZEdWa0tWeHVJQ0FnSUhSb2NtOTNJR0JGZUhCbFkzUmxaQ0JjSWlSN1pYaHdaV04wWldSOVhDSXNJR2R2ZENCY0lpUjdZV04wZFdGc2ZWd2lZRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVac2IyRjBLR0ZqZEhWaGJEb2diblZ0WW1WeUxDQmxlSEJsWTNSbFpEb2diblZ0WW1WeUxDQjBiMnhsY21GdVkyVWdQU0F3TGpBd01TazZJSFp2YVdRZ2UxeHVJQ0JqYjI1emRDQmhjbVZGY1hWaGJDQTlJRTFoZEdndVlXSnpLR0ZqZEhWaGJDQXRJR1Y0Y0dWamRHVmtLU0E4SURBdU1EQXhPMXh1SUNCcFppQW9JV0Z5WlVWeGRXRnNLVnh1SUNBZ0lIUm9jbTkzSUdCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBN1hHNTlYRzVjYmk4cUtpQkVaV1pwYm1WeklHRWdkR1Z6ZENCemRXbDBaUzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCallYUmxaMjl5ZVNoallYUmxaMjl5ZVRvZ2MzUnlhVzVuTENCMFpYTjBjem9nS0NrZ1BUNGdkbTlwWkNrNklIWnZhV1FnZTF4dUlDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rZ1BTQmpZWFJsWjI5eWVUdGNiaUFnZEdWemRITW9LVHRjYm4xY2JseHVMeW9xSUVSbFptbHVaWE1nWVNCbWRXNWpkR2x2YmlCMGJ5QmlaU0JsZUdWamRYUmxaQ0JpWldadmNtVWdkR2hsSUhSbGMzUnpJR2x1SUhSb2FYTWdZMkYwWldkdmNua2dZWEpsSUdWNFpXTjFkR1ZrTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHSmxabTl5WlNoaVpXWnZjbVU2SUNncElEMCtJRkJ5YjIxcGMyVThkbTlwWkQ0cE9pQjJiMmxrSUh0Y2JpQWdhV1lnS0hSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMGdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BTQjdmVHRjYmlBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYUzVpWldadmNtVWdQU0JpWldadmNtVTdYRzU5WEc1Y2JpOHFLaUJFWldacGJtVnpJR0VnWm5WdVkzUnBiMjRnZEc4Z1ltVWdaWGhsWTNWMFpXUWdZV1owWlhJZ2RHaGxJSFJsYzNSeklHbHVJSFJvYVhNZ1kyRjBaV2R2Y25rZ1lYSmxJR1Y0WldOMWRHVmtMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGbWRHVnlLR0ZtZEdWeU9pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStLVG9nZG05cFpDQjdYRzRnSUdsbUlDaDBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwOUlIVnVaR1ZtYVc1bFpDbGNiaUFnSUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRJRDBnZTMwN1hHNGdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdVlXWjBaWElnUFNCaFpuUmxjanRjYm4xY2JseHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2NuVnVWR1Z6ZEhNb2IzQjBhVzl1Y3o4NklIdGpZWFJsWjI5eWVUODZJSE4wY21sdVp5d2dkR1Z6ZEQ4NklITjBjbWx1WjMwcElIdGNiaUFnYkdWMElISmxjM1ZzZEhNNklIc2dZMkYwWldkdmNuay9PaUJ6ZEhKcGJtY3NJRzVoYldVL09pQnpkSEpwYm1jc0lITjFZMk5sYzNNNklHSnZiMnhsWVc0c0lISmxjM1ZzZERvZ2MzUnlhVzVuZlZ0ZElEMGdXMTA3WEc1Y2JpQWdabTl5SUNoamIyNXpkQ0JiYTJWNUxDQjJZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb2RHVnpkSE1wS1NCN1hHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NL0xtTmhkR1ZuYjNKNUlDRTlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRnJaWGt1ZEc5TWIzZGxja05oYzJVb0tTNXpkR0Z5ZEhOWGFYUm9LRzl3ZEdsdmJuTS9MbU5oZEdWbmIzSjVMblJ2VEc5M1pYSkRZWE5sS0NrcEtWeHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNCOVhHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWlaV1p2Y21VcFhHNGdJQ0FnSUNBZ0lHRjNZV2wwSUhaaGJIVmxMbUpsWm05eVpTZ3BPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tIZzZJR0Z1ZVNrZ2UxeHVJQ0FnSUNBZ2RtRnNkV1V1WW1WbWIzSmxVM1JoZEhWeklEMGdlQzUwYjFOMGNtbHVaeWdwTzF4dUlDQWdJSDFjYmlBZ0lDQnNaWFFnZENBOUlIWmhiSFZsTG5SbGMzUnpJRDgvSUZ0ZE8xeHVJQ0FnSUd4bGRDQnlaWE1nUFNCYlhUdGNiaUFnSUNCbWIzSW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RDNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnY21WekxuQjFjMmdvWVhkaGFYUWdaWGhsWTFSbGMzUW9kRnRwWFN3Z2IzQjBhVzl1Y3o4dWRHVnpkQ2twTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCa1lYUmhJRDBnS0dGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0hKbGN5a3BMbVpwYkhSbGNpZ29aQ2tnUFQ0Z1pDNXlaWE4xYkhRZ0lUMGdKM05yYVhCd1pXUW5LVHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsTG1GbWRHVnlLVnh1SUNBZ0lDQWdJQ0JoZDJGcGRDQjJZV3gxWlM1aFpuUmxjaWdwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGc2SUdGdWVTa2dlMXh1SUNBZ0lDQWdkbUZzZFdVdVlXWjBaWEpUZEdGMGRYTWdQU0I0TG5SdlUzUnlhVzVuS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoMllXeDFaUzVoWm5SbGNsTjBZWFIxY3lsY2JpQWdJQ0FnSUdSaGRHRXVjSFZ6YUNoN1kyRjBaV2R2Y25rNklHdGxlU3dnYm1GdFpUb2dKMmx1YVhRbkxDQnlaWE4xYkhRNklIWmhiSFZsTG1GbWRHVnlVM1JoZEhWekxDQnpkV05qWlhOek9pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxmU2s3WEc0Z0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0M0dUxtUmhkR0VwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhKbGMzVnNkSE03WEc1OVhHNWNibUZ6ZVc1aklHWjFibU4wYVc5dUlHVjRaV05VWlhOMEtIUTZJRlJsYzNRc0lIQnlaV1JwWTJGMFpUb2djM1J5YVc1bklId2dkVzVrWldacGJtVmtLU0I3WEc0Z0lHeGxkQ0J5T2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQnVZVzFsUHpvZ2MzUnlhVzVuTENCemRXTmpaWE56T2lCaWIyOXNaV0Z1TENCeVpYTjFiSFE2SUhOMGNtbHVaeUI5TzF4dUlDQjBjbmtnZTF4dUlDQWdJR2xtSUNod2NtVmthV05oZEdVZ0lUMGdkVzVrWldacGJtVmtJQ1ltSUNnaGRDNXVZVzFsTG5SdlRHOTNaWEpEWVhObEtDa3VjM1JoY25SelYybDBhQ2h3Y21Wa2FXTmhkR1V1ZEc5TWIzZGxja05oYzJVb0tTa3BLVnh1SUNBZ0lDQWdjaUE5SUh0emRXTmpaWE56T2lCMGNuVmxMQ0J5WlhOMWJIUTZJQ2R6YTJsd2NHVmtKMzA3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQjBjblZsTENCeVpYTjFiSFE2SUdGM1lXbDBJSFF1ZEdWemRDZ3BJRDgvSUNkUFN5ZDlPMXh1SUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklHWmhiSE5sTENCeVpYTjFiSFE2SUhndWRHOVRkSEpwYm1jb0tYMDdYRzRnSUgxY2JpQWdjaTVqWVhSbFoyOXllU0E5SUhRdVkyRjBaV2R2Y25rN1hHNGdJSEl1Ym1GdFpTQTlJSFF1Ym1GdFpUdGNiaUFnY21WMGRYSnVJSEk3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCa1pXeGhlU2h0Y3pvZ2JuVnRZbVZ5S1NCN1hHNGdJR0YzWVdsMElDQnVaWGNnVUhKdmJXbHpaU2h5SUQwK0lITmxkRlJwYldWdmRYUW9jaXdnYlhNcEtUdGNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyBsY21zVG9HY3JzIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vbmFtZTogZ2Nyc1RvTGNtc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IExDTVN9XG5leHBvcnQgZnVuY3Rpb24gZ2Nyc1RvTGNtcyhzZXF1ZW5jZSkge1xuICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YobGNtc1RvR2Nycyk7XG4gICAgY29uc3QgYXJyMSA9IGRmLmdldENvbCgnR0NSUycpLnRvTGlzdCgpO1xuICAgIGNvbnN0IGFycjIgPSBkZi5nZXRDb2woJ0xDTVMnKS50b0xpc3QoKTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBhcnIxLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiBvYmpbZWxlbWVudF0gPSBhcnIyW2luZGV4XSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycjFbaV0gPSBhcnIxW2ldLnJlcGxhY2UoJygnLCAnXFxcXCgnKTtcbiAgICAgICAgYXJyMVtpXSA9IGFycjFbaV0ucmVwbGFjZSgnKScsICdcXFxcKScpO1xuICAgIH1cbiAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCcoJyArIGFycjEuam9pbignfCcpICsgJyknLCAnZycpO1xuICAgIGxldCByMSA9IHNlcXVlbmNlLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gb2JqW2NvZGVdOyB9KTtcbiAgICB3aGlsZSAocjEuaW5kZXhPZignLy8nKSAhPSAtMSlcbiAgICAgICAgcjEgPSByMS5yZXBsYWNlKCcvLycsICcvJyk7XG4gICAgcmV0dXJuIHIxO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0Jpb1NwcmluZ1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gR2FwbWVyc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0Jpb1NwcmluZyhudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckVkZ2VzID0ge1xuICAgICAgICAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnVCc6ICc1KicsICdBJzogJzYqJywgJ0MnOiAnNyonLCAnRyc6ICc4KidcbiAgICB9O1xuICAgIGNvbnN0IG9iakZvckNlbnRlciA9IHtcbiAgICAgICAgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ1QnOiAnVConLCAnQSc6ICdBKicsICdDJzogJzkqJywgJ0cnOiAnRyonXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxUfEN8RykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgcmV0dXJuIChjb3VudCA+IDQgJiYgY291bnQgPCAxNSkgPyBvYmpGb3JDZW50ZXJbeF0gOiBvYmpGb3JFZGdlc1t4XTtcbiAgICB9KS5zbGljZSgwLCAobnVjbGVvdGlkZXMuZW5kc1dpdGgoJyhpbnZhYmFzaWMpJykgfHwgbnVjbGVvdGlkZXMuZW5kc1dpdGgoJyhHYWxOQWMtMi1KTkopJykpID9cbiAgICAgICAgbnVjbGVvdGlkZXMubGVuZ3RoIDogMiAqIGNvdW50ICsgMSk7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSUyAvIEdhcG1lcnN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yRWRnZXMgPSB7XG4gICAgICAgICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdUJzogJ21vZVVucHMnLFxuICAgICAgICAnQSc6ICdtb2VBbnBzJywgJ0MnOiAnbW9lNW1DbnBzJywgJ0cnOiAnbW9lR25wcydcbiAgICB9O1xuICAgIGNvbnN0IG9iakZvckNlbnRlciA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0MnOiAnNW1DcHMnLCAnQSc6ICdBcHMnLCAnVCc6ICdUcHMnLCAnRyc6ICdHcHMnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VHxDfEcpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IDUpXG4gICAgICAgICAgICByZXR1cm4gKGNvdW50ID09IDQpID8gb2JqRm9yRWRnZXNbeF0uc2xpY2UoMCwgLTMpICsgJ3BzJyA6IG9iakZvckVkZ2VzW3hdO1xuICAgICAgICBpZiAoY291bnQgPCAxNSlcbiAgICAgICAgICAgIHJldHVybiAoY291bnQgPT0gMTQpID8gb2JqRm9yQ2VudGVyW3hdLnNsaWNlKDAsIC0yKSArICducHMnIDogb2JqRm9yQ2VudGVyW3hdO1xuICAgICAgICByZXR1cm4gb2JqRm9yRWRnZXNbeF07XG4gICAgfSkuc2xpY2UoMCwgKG51Y2xlb3RpZGVzLmVuZHNXaXRoKCcoaW52YWJhc2ljKScpIHx8IG51Y2xlb3RpZGVzLmVuZHNXaXRoKCcoR2FsTkFjLTItSk5KKScpKSA/XG4gICAgICAgIG51Y2xlb3RpZGVzLmxlbmd0aCA6IC0zKTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0Jpb1NwcmluZ1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gR2FwbWVyc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc0Jpb1NwcmluZ1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICcqJzogJycsICc1JzogJ1QnLCAnNic6ICdBJywgJzcnOiAnQycsICc4JzogJ0cnLCAnOSc6ICdDJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxcXCp8NXw2fDd8OHw5KS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0Jpb1NwcmluZ1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNCaW9TcHJpbmdUb0djcnMobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICc1Kic6ICdtb2VVbnBzJywgJzYqJzogJ21vZUFucHMnLCAnNyonOiAnbW9lNW1DbnBzJywgJzgqJzogJ21vZUducHMnLCAnOSonOiAnNW1DcHMnLCAnQSonOiAnQXBzJywgJ1QqJzogJ1RwcycsXG4gICAgICAgICdHKic6ICdHcHMnLCAnQyonOiAnQ3BzJywgJzUnOiAnbW9lVScsICc2JzogJ21vZUEnLCAnNyc6ICdtb2U1bUMnLCAnOCc6ICdtb2VHJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXw1XFwqfDZcXCp8N1xcKnw4XFwqfDlcXCp8QVxcKnxUXFwqfEdcXCp8Q1xcKnw1fDZ8N3w4KS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICByZXR1cm4gKGNvdW50ID09IDQpID8gb2JqW3hdLnNsaWNlKDAsIC0zKSArICdwcycgOiAoY291bnQgPT0gMTQpID8gb2JqW3hdLnNsaWNlKDAsIC0yKSArICducHMnIDogb2JqW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzR2Nyc1RvQmlvU3ByaW5nXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIEdhcG1lcnN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ21vZVQnOiAnNScsICdtb2VBJzogJzYnLCAnbW9lNW1DJzogJzcnLCAnbW9lRyc6ICc4JywgJ21vZVUnOiAnNScsICc1bUMnOiAnOScsICducHMnOiAnKicsICdwcyc6ICcqJywgJ1UnOiAnVCcsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8bW9lVHxtb2VBfG1vZTVtQ3xtb2VHfG1vZVV8NW1DfG5wc3xwc3xVKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEROQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzR2Nyc1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdtb2UnOiAnJywgJzVtJzogJycsICduJzogJycsICdwcyc6ICcnLCAnVSc6ICdUJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxtb2V8NW18bnxwc3xVKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUJpb1NwcmluZ1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICcxJzogJ1UnLCAnMic6ICdBJywgJzMnOiAnQycsICc0JzogJ0cnLCAnNSc6ICdVJywgJzYnOiAnQScsICc3JzogJ0MnLCAnOCc6ICdHJywgJyonOiAnJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXwxfDJ8M3w0fDV8Nnw3fDh8XFwqKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFCaW9TcHJpbmdUb0F4b2xhYnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQmlvU3ByaW5nVG9BeG9sYWJzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnMSc6ICdVZicsICcyJzogJ0FmJywgJzMnOiAnQ2YnLCAnNCc6ICdHZicsICc1JzogJ3UnLCAnNic6ICdhJywgJzcnOiAnYycsICc4JzogJ2cnLCAnKic6ICdzJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXwxfDJ8M3w0fDV8Nnw3fDh8XFwqKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFCaW9TcHJpbmdUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSU31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUJpb1NwcmluZ1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJzEnOiAnZlUnLCAnMic6ICdmQScsICczJzogJ2ZDJywgJzQnOiAnZkcnLCAnNSc6ICdtVScsICc2JzogJ21BJywgJzcnOiAnbUMnLCAnOCc6ICdtRycsICcqJzogJ3BzJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXwxfDJ8M3w0fDV8Nnw3fDh8XFwqKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFBeG9sYWJzVG9HY3JzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBHQ1JTfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQXhvbGFic1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ1VmJzogJ2ZVJywgJ0FmJzogJ2ZBJywgJ0NmJzogJ2ZDJywgJ0dmJzogJ2ZHJywgJ3UnOiAnbVUnLCAnYSc6ICdtQScsICdjJzogJ21DJywgJ2cnOiAnbUcnLCAncyc6ICdwcycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8VWZ8QWZ8Q2Z8R2Z8dXxhfGN8Z3xzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFBeG9sYWJzVG9CaW9TcHJpbmdcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnVWYnOiAnMScsICdBZic6ICcyJywgJ0NmJzogJzMnLCAnR2YnOiAnNCcsICd1JzogJzUnLCAnYSc6ICc2JywgJ2MnOiAnNycsICdnJzogJzgnLCAncyc6ICcqJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxVZnxBZnxDZnxHZnx1fGF8Y3xnfHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUF4b2xhYnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ1VmJzogJ1UnLCAnQWYnOiAnQScsICdDZic6ICdDJywgJ0dmJzogJ0cnLCAndSc6ICdVJywgJ2EnOiAnQScsICdjJzogJ0MnLCAnZyc6ICdHJywgJ3MnOiAnJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxVZnxBZnxDZnxHZnx1fGF8Y3xnfHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUdjcnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hR2Nyc1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdmVSc6ICdVJywgJ2ZBJzogJ0EnLCAnZkMnOiAnQycsICdmRyc6ICdHJywgJ21VJzogJ1UnLCAnbUEnOiAnQScsICdtQyc6ICdDJywgJ21HJzogJ0cnLCAncHMnOiAnJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtR3xwcykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hR2Nyc1RvQmlvU3ByaW5nXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFHY3JzVG9CaW9TcHJpbmcobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdmVSc6ICcxJywgJ2ZBJzogJzInLCAnZkMnOiAnMycsICdmRyc6ICc0JywgJ21VJzogJzUnLCAnbUEnOiAnNicsICdtQyc6ICc3JywgJ21HJzogJzgnLCAncHMnOiAnKicsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUd8cHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUdjcnNUb0F4b2xhYnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBBeG9sYWJzIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFHY3JzVG9BeG9sYWJzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnZlUnOiAnVWYnLCAnZkEnOiAnQWYnLCAnZkMnOiAnQ2YnLCAnZkcnOiAnR2YnLCAnbVUnOiAndScsICdtQSc6ICdhJywgJ21DJzogJ2MnLCAnbUcnOiAnZycsICdwcyc6ICdzJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtR3xwcykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hTnVjbGVvdGlkZVRvQmlvU3ByaW5nU2Vuc2VTdHJhbmRcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hTnVjbGVvdGlkZVRvQmlvU3ByaW5nU2Vuc2VTdHJhbmQobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JMZWZ0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnNionLCAnVSc6ICc1KicsICdHJzogJzgqJywgJ0MnOiAnNyonIH07XG4gICAgY29uc3Qgb2JqRm9yUmlnaHRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICcqNicsICdVJzogJyo1JywgJ0cnOiAnKjgnLCAnQyc6ICcqNycgfTtcbiAgICBjb25zdCBvYmpGb3JPZGRJbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICc2JywgJ1UnOiAnNScsICdHJzogJzgnLCAnQyc6ICc3JyB9O1xuICAgIGNvbnN0IG9iakZvckV2ZW5JbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICcyJywgJ1UnOiAnMScsICdHJzogJzQnLCAnQyc6ICczJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFV8R3xDKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPCAyKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvckxlZnRFZGdlW3hdO1xuICAgICAgICBpZiAoY291bnQgPiBudWNsZW90aWRlcy5sZW5ndGggLSAzKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvclJpZ2h0RWRnZVt4XTtcbiAgICAgICAgcmV0dXJuIChjb3VudCAlIDIgPT0gMCkgPyBvYmpGb3JFdmVuSW5kaWNlc1t4XSA6IG9iakZvck9kZEluZGljZXNbeF07XG4gICAgfSk7XG59XG4vL25hbWU6IHNpUm5hTnVjbGVvdGlkZXNUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlc1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckxlZnRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICdtQXBzJywgJ1UnOiAnbVVwcycsICdHJzogJ21HcHMnLCAnQyc6ICdtQ3BzJyB9O1xuICAgIGNvbnN0IG9iakZvclJpZ2h0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAncHNtQScsICdVJzogJ3BzbVUnLCAnRyc6ICdwc21HJywgJ0MnOiAncHNtQycgfTtcbiAgICBjb25zdCBvYmpGb3JFdmVuSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnZkEnLCAnVSc6ICdmVScsICdHJzogJ2ZHJywgJ0MnOiAnZkMnIH07XG4gICAgY29uc3Qgb2JqRm9yT2RkSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnbUEnLCAnVSc6ICdtVScsICdHJzogJ21HJywgJ0MnOiAnbUMnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VXxHfEMpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yTGVmdEVkZ2VbeF07XG4gICAgICAgIGlmIChjb3VudCA+IG51Y2xlb3RpZGVzLmxlbmd0aCAtIDMpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yUmlnaHRFZGdlW3hdO1xuICAgICAgICByZXR1cm4gKGNvdW50ICUgMiA9PSAwKSA/IG9iakZvckV2ZW5JbmRpY2VzW3hdIDogb2JqRm9yT2RkSW5kaWNlc1t4XTtcbiAgICB9KTtcbn1cbi8vbmFtZTogc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmRcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEF4b2xhYnN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmQobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JMZWZ0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnYXMnLCAnVSc6ICd1cycsICdHJzogJ2dzJywgJ0MnOiAnY3MnIH07XG4gICAgY29uc3Qgb2JqRm9yU29tZUluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ0FmJywgJ1UnOiAnVWYnLCAnRyc6ICdHZicsICdDJzogJ0NmJyB9O1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnYScsICdVJzogJ3UnLCAnRyc6ICdnJywgJ0MnOiAnYycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxVfEd8QykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50IDwgMilcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JMZWZ0RWRnZVt4XTtcbiAgICAgICAgaWYgKGNvdW50ID09IDYgfHwgKGNvdW50ID4gNyAmJiBjb3VudCA8IDExKSlcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JTb21lSW5kaWNlc1t4XTtcbiAgICAgICAgaWYgKGNvdW50ID09IG51Y2xlb3RpZGVzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gJ2EnO1xuICAgICAgICByZXR1cm4gb2JqW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNBbnRpc2Vuc2VTdHJhbmRcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEF4b2xhYnN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzQW50aXNlbnNlU3RyYW5kKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yU21hbGxMaW5rYWdlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnYXMnLCAnVSc6ICd1cycsICdHJzogJ2dzJywgJ0MnOiAnY3MnIH07XG4gICAgY29uc3Qgb2JqRm9yQmlnTGlua2FnZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ0FmcycsICdVJzogJ1VmcycsICdHJzogJ0dmcycsICdDJzogJ0NmcycgfTtcbiAgICBjb25zdCBvYmpGb3JTb21lSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnQWYnLCAnVSc6ICdVZicsICdHJzogJ0dmJywgJ0MnOiAnQ2YnIH07XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdhJywgJ1UnOiAndScsICdHJzogJ2cnLCAnQyc6ICdjJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFV8R3xDKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPiAxOSAmJiBjb3VudCA8IDIyKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvclNtYWxsTGlua2FnZXNbeF07XG4gICAgICAgIGlmIChjb3VudCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuICd1cyc7XG4gICAgICAgIGlmIChjb3VudCA9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvckJpZ0xpbmthZ2VzW3hdO1xuICAgICAgICByZXR1cm4gKGNvdW50ID09IDUgfHwgY291bnQgPT0gNyB8fCBjb3VudCA9PSA4IHx8IGNvdW50ID09IDEzIHx8IGNvdW50ID09IDE1KSA/IG9iakZvclNvbWVJbmRpY2VzW3hdIDogb2JqW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBnY3JzVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBnY3JzVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ21BcHMnOiAnQScsICdtVXBzJzogJ1UnLCAnbUdwcyc6ICdHJywgJ21DcHMnOiAnQycsICdmQXBzJzogJ0EnLCAnZlVwcyc6ICdVJywgJ2ZHcHMnOiAnRycsICdmQ3BzJzogJ0MnLFxuICAgICAgICAnZlUnOiAnVScsICdmQSc6ICdBJywgJ2ZDJzogJ0MnLCAnZkcnOiAnRycsICdtVSc6ICdVJywgJ21BJzogJ0EnLCAnbUMnOiAnQycsICdtRyc6ICdHJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxtQXBzfG1VcHN8bUdwc3xtQ3BzfGZBcHN8ZlVwc3xmR3BzfGZDcHN8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUcpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBnY3JzVG9NZXJtYWRlMTJcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBNZXJtYWRlIDEyIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gZ2Nyc1RvTWVybWFkZTEyKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnbUFwcyc6ICdlJywgJ21VcHMnOiAnaCcsICdtR3BzJzogJ2cnLCAnbUNwcyc6ICdmJywgJ2ZBcHMnOiAnaScsICdmVXBzJzogJ2wnLCAnZkdwcyc6ICdrJywgJ2ZDcHMnOiAnaicsICdmVSc6ICdMJyxcbiAgICAgICAgJ2ZBJzogJ0knLCAnZkMnOiAnSicsICdmRyc6ICdLJywgJ21VJzogJ0gnLCAnbUEnOiAnRScsICdtQyc6ICdGJywgJ21HJzogJ0cnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfG1BcHN8bVVwc3xtR3BzfG1DcHN8ZkFwc3xmVXBzfGZHcHN8ZkNwc3xmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtRykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzLCBTWU5USEVTSVpFUlMsIFRFQ0hOT0xPR0lFUywgTU9ESUZJQ0FUSU9OUywgZGVsaW1pdGVyIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaXNWYWxpZFNlcXVlbmNlIH0gZnJvbSAnLi9zZXF1ZW5jZS1jb2Rlcy10b29scyc7XG5pbXBvcnQgeyBnZXROdWNsZW90aWRlc01vbCB9IGZyb20gJy4vbW9sLXRyYW5zZm9ybWF0aW9ucyc7XG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2VUb01vbFYzMDAwKHNlcXVlbmNlLCBpbnZlcnRlZCA9IGZhbHNlLCBvY2xSZW5kZXIgPSBmYWxzZSwgZm9ybWF0KSB7XG4gICAgY29uc3Qgb2JqID0gZ2V0T2JqZWN0V2l0aENvZGVzQW5kU21pbGVzKHNlcXVlbmNlLCBmb3JtYXQpO1xuICAgIGxldCBjb2RlcyA9IHNvcnRCeVN0cmluZ0xlbmd0aEluRGVzY2VuZGluZ09yZGVyKE9iamVjdC5rZXlzKG9iaikpO1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCBzbWlsZXNDb2RlcyA9IFtdO1xuICAgIGNvbnN0IGNvZGVzTGlzdCA9IFtdO1xuICAgIGNvbnN0IGxpbmtzID0gWydzJywgJ3BzJywgJyonXTtcbiAgICBjb25zdCBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkgPSBbJ2UnLCAnaCcsIC8qJ2cnLCovICdmJywgJ2knLCAnbCcsICdrJywgJ2onXTtcbiAgICBjb25zdCBkcm9wZG93bnMgPSBPYmplY3Qua2V5cyhNT0RJRklDQVRJT05TKTtcbiAgICBjb2RlcyA9IGNvZGVzLmNvbmNhdChkcm9wZG93bnMpLmNvbmNhdChkZWxpbWl0ZXIpO1xuICAgIHdoaWxlIChpIDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBjb2Rlcy5maW5kKChzKSA9PiBzID09IHNlcXVlbmNlLnNsaWNlKGksIGkgKyBzLmxlbmd0aCkpO1xuICAgICAgICBpICs9IGNvZGUubGVuZ3RoO1xuICAgICAgICBpbnZlcnRlZCA/IGNvZGVzTGlzdC51bnNoaWZ0KGNvZGUpIDogY29kZXNMaXN0LnB1c2goY29kZSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZXNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkcm9wZG93bnMuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSkge1xuICAgICAgICAgICAgc21pbGVzQ29kZXMucHVzaCgoaSA+PSBjb2Rlc0xpc3QubGVuZ3RoIC8gMikgP1xuICAgICAgICAgICAgICAgIE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5yaWdodCA6IE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5sZWZ0KTtcbiAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2goc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSB8fFxuICAgICAgICAgICAgICAgIChpIDwgY29kZXNMaXN0Lmxlbmd0aCAtIDEgJiYgbGlua3MuaW5jbHVkZXMoY29kZXNMaXN0W2kgKyAxXSkpKVxuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2gob2JqW2NvZGVzTGlzdFtpXV0pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc21pbGVzQ29kZXMucHVzaChvYmpbY29kZXNMaXN0W2ldXSk7XG4gICAgICAgICAgICAgICAgc21pbGVzQ29kZXMucHVzaChzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldE51Y2xlb3RpZGVzTW9sKHNtaWxlc0NvZGVzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZVRvU21pbGVzKHNlcXVlbmNlLCBpbnZlcnRlZCA9IGZhbHNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBvYmogPSBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCk7XG4gICAgbGV0IGNvZGVzID0gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoT2JqZWN0LmtleXMob2JqKSk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBzbWlsZXMgPSAnJztcbiAgICBjb25zdCBjb2Rlc0xpc3QgPSBbXTtcbiAgICBjb25zdCBsaW5rcyA9IFsncycsICdwcycsICcqJ107XG4gICAgY29uc3QgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5ID0gWydlJywgJ2gnLCAvKidnJywqLyAnZicsICdpJywgJ2wnLCAnaycsICdqJ107XG4gICAgY29uc3QgZHJvcGRvd25zID0gT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUyk7XG4gICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZHJvcGRvd25zKS5jb25jYXQoZGVsaW1pdGVyKTtcbiAgICB3aGlsZSAoaSA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2RlID0gY29kZXMuZmluZCgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShpLCBpICsgcy5sZW5ndGgpKTtcbiAgICAgICAgaSArPSBjb2RlLmxlbmd0aDtcbiAgICAgICAgaW52ZXJ0ZWQgPyBjb2Rlc0xpc3QudW5zaGlmdChjb2RlKSA6IGNvZGVzTGlzdC5wdXNoKGNvZGUpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvZGVzTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZHJvcGRvd25zLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkpIHtcbiAgICAgICAgICAgIHNtaWxlcyArPSAoaSA+PSBjb2Rlc0xpc3QubGVuZ3RoIC8gMikgP1xuICAgICAgICAgICAgICAgIE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5yaWdodCArIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzIDpcbiAgICAgICAgICAgICAgICBNT0RJRklDQVRJT05TW2NvZGVzTGlzdFtpXV0ubGVmdCArIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSB8fFxuICAgICAgICAgICAgICAgIChpIDwgY29kZXNMaXN0Lmxlbmd0aCAtIDEgJiYgbGlua3MuaW5jbHVkZXMoY29kZXNMaXN0W2kgKyAxXSkpKVxuICAgICAgICAgICAgICAgIHNtaWxlcyArPSBvYmpbY29kZXNMaXN0W2ldXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzbWlsZXMgKz0gb2JqW2NvZGVzTGlzdFtpXV0gKyBzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzbWlsZXMgPSBzbWlsZXMucmVwbGFjZSgvT08vZywgJ08nKTtcbiAgICByZXR1cm4gKChsaW5rcy5pbmNsdWRlcyhjb2Rlc0xpc3RbY29kZXNMaXN0Lmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICBjb2Rlc0xpc3QubGVuZ3RoID4gMSAmJlxuICAgICAgICAhaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMl0pKSB8fFxuICAgICAgICBkcm9wZG93bnMuaW5jbHVkZXMoY29kZXNMaXN0W2NvZGVzTGlzdC5sZW5ndGggLSAxXSkgfHxcbiAgICAgICAgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMV0pKSA/XG4gICAgICAgIHNtaWxlcyA6XG4gICAgICAgIHNtaWxlcy5zbGljZSgwLCBzbWlsZXMubGVuZ3RoIC0gc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMubGVuZ3RoICsgMSk7XG59XG5mdW5jdGlvbiBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN5bnRoZXNpemVyIG9mIE9iamVjdC5rZXlzKG1hcCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdW3RlY2hub2xvZ3ldKSlcbiAgICAgICAgICAgICAgICAgICAgb2JqW2NvZGVdID0gbWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XVtjb2RlXS5TTUlMRVM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbZm9ybWF0XSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBPYmplY3Qua2V5cyhtYXBbZm9ybWF0XVt0ZWNobm9sb2d5XSkpXG4gICAgICAgICAgICAgICAgb2JqW2NvZGVdID0gbWFwW2Zvcm1hdF1bdGVjaG5vbG9neV1bY29kZV0uU01JTEVTO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9ialtkZWxpbWl0ZXJdID0gJyc7XG4gICAgLy8gVE9ETzogY3JlYXRlIG9iamVjdCBiYXNlZCBmcm9tIHN5bnRoZXNpemVyIHR5cGUgdG8gYXZvaWQga2V5KGNvZGVzKSBkdXBsaWNhdGVzXG4gICAgY29uc3Qgb3V0cHV0ID0gaXNWYWxpZFNlcXVlbmNlKHNlcXVlbmNlLCBmb3JtYXQpO1xuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLk1FUk1BREVfMTIpKVxuICAgICAgICBvYmpbJ2cnXSA9IG1hcFtTWU5USEVTSVpFUlMuTUVSTUFERV8xMl1bVEVDSE5PTE9HSUVTLlNJX1JOQV1bJ2cnXS5TTUlMRVM7XG4gICAgZWxzZSBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5BWE9MQUJTKSlcbiAgICAgICAgb2JqWydnJ10gPSBtYXBbU1lOVEhFU0laRVJTLkFYT0xBQlNdW1RFQ0hOT0xPR0lFUy5TSV9STkFdWydnJ10uU01JTEVTO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoOyB9KTtcbn1cbiIsImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIgfSBmcm9tICcuL3NlcXVlbmNlLWNvZGVzLXRvb2xzJztcbmV4cG9ydCBjb25zdCBkZWxpbWl0ZXIgPSAnOyc7XG5leHBvcnQgY29uc3QgU1lOVEhFU0laRVJTID0ge1xuICAgIFJBV19OVUNMRU9USURFUzogJ1JhdyBOdWNsZW90aWRlcycsXG4gICAgQklPU1BSSU5HOiAnQmlvU3ByaW5nIENvZGVzJyxcbiAgICBHQ1JTOiAnSmFuc3NlbiBHQ1JTIENvZGVzJyxcbiAgICBBWE9MQUJTOiAnQXhvbGFicyBDb2RlcycsXG4gICAgTUVSTUFERV8xMjogJ01lcm1hZGUgMTInLFxuICAgIExDTVM6ICdMQ01TJyxcbn07XG5leHBvcnQgY29uc3QgVEVDSE5PTE9HSUVTID0ge1xuICAgIEROQTogJ0ROQScsXG4gICAgUk5BOiAnUk5BJyxcbiAgICBBU09fR0FQTUVSUzogJ0ZvciBBU08gR2FwbWVycycsXG4gICAgU0lfUk5BOiAnRm9yIDJcXCctT01lIGFuZCAyXFwnLUYgbW9kaWZpZWQgc2lSTkEnLFxufTtcbmV4cG9ydCBjb25zdCBDT0xfTkFNRVMgPSB7XG4gICAgQ0hFTUlTVFJZOiAnQ2hlbWlzdHJ5JyxcbiAgICBOVU1CRVI6ICdOdW1iZXInLFxuICAgIFRZUEU6ICdUeXBlJyxcbiAgICBDSEVNSVNUUllfTkFNRTogJ0NoZW1pc3RyeSBOYW1lJyxcbiAgICBJTlRFUk5BTF9DT01QT1VORF9JRDogJ0ludGVybmFsIGNvbXBvdW5kIElEJyxcbiAgICBJRFA6ICdJRFAnLFxuICAgIFNFUVVFTkNFOiAnU2VxdWVuY2UnLFxuICAgIENPTVBPVU5EX05BTUU6ICdDb21wb3VuZCBOYW1lJyxcbiAgICBDT01QT1VORF9DT01NRU5UUzogJ0NvbXBvdW5kIENvbW1lbnRzJyxcbiAgICBTQUxUOiAnU2FsdCcsXG4gICAgRVFVSVZBTEVOVFM6ICdFcXVpdmFsZW50cycsXG4gICAgUFVSSVRZOiAnUHVyaXR5JyxcbiAgICBDUERfTVc6ICdDcGQgTVcnLFxuICAgIFNBTFRfTUFTUzogJ1NhbHQgbWFzcycsXG4gICAgQkFUQ0hfTVc6ICdCYXRjaCBNVycsXG4gICAgU09VUkNFOiAnU291cmNlJyxcbiAgICBJQ0Q6ICdJQ0QnLFxuICAgIE9XTkVSOiAnT3duZXInLFxufTtcbi8vIGludGVyZmFjZSBDT0RFUyB7XG4vLyB9XG5leHBvcnQgY29uc3QgTU9ESUZJQ0FUSU9OUyA9IHtcbiAgICAnKGludmFiYXNpYyknOiB7XG4gICAgICAgIG1vbGVjdWxhcldlaWdodDogMTE4LjEzLFxuICAgICAgICBsZWZ0OiAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPJyxcbiAgICAgICAgcmlnaHQ6ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ08nLFxuICAgIH0sXG4gICAgJyhHYWxOQWMtMi1KTkopJzoge1xuICAgICAgICBtb2xlY3VsYXJXZWlnaHQ6IDEyNzMuMyxcbiAgICAgICAgbGVmdDogJ0MoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQylOQyg9TylDQ0NDKD1PKU5DQyhPKUNPJyxcbiAgICAgICAgcmlnaHQ6ICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScsXG4gICAgfSxcbn07XG5leHBvcnQgY29uc3Qgc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMgPSAnT1AoPU8pKE8pTyc7XG5leHBvcnQgY29uc3QgbWFwID0ge1xuICAgICdSYXcgTnVjbGVvdGlkZXMnOiB7XG4gICAgICAgICdETkEnOiB7XG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdSTkEnOiB7XG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdVJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1VyYWNpbCcsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNi4xNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oTylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnQmlvU3ByaW5nIENvZGVzJzoge1xuICAgICAgICAnRm9yIEFTTyBHYXBtZXJzJzoge1xuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzguMjcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzg3LjI5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNDAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzknOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyonOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0N5dG9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMjg5LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1QnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnVHlyb3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDQuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkVCcsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICcxJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMzEuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNy4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzYnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc3Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyonOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnQXhvbGFicyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xuICAgICAgICAgICAgJ1VmJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdBZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnR2YnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3UnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ0phbnNzZW4gR0NSUyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciBBU08gR2FwbWVycyc6IHtcbiAgICAgICAgICAgICdtb2VUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc4LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21vZUEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM4Ny4yOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtb2U1bUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnKDVtKW1vZUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbW9lRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNDAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzVtQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICc1LU1ldGh5bC1kQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwMy4yOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnKDVtKUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3BzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3MnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0N5dG9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMjg5LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2RUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3JBJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0FkZW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oTylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3JHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDUuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdVcmFjaWwnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDYuMTcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xuICAgICAgICAgICAgJ2ZVJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdmQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdmQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZkcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21VJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjAuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQzLjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21DJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbUcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM1OS4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgJ090aGVycyc6IHt9LFxuICAgIH0sXG4gICAgJ01lcm1hZGUgMTInOiB7XG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICdlJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckEtcHMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNTkuMzEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJVLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzM2LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRy1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM3NS4zMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdmJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMtcHMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMzUuMjgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQ3LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI0LjIzLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnayc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1HLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzYzLjI2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzIzLjI1LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnTCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA4LjE2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdKJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDcuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdLJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDcuMTksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdIJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjAuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdFJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDMuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzE5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM1OS4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIC8vICdMQ01TJzoge1xuICAgIC8vICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xufTtcbmV4cG9ydCBjb25zdCBsY21zVG9HY3JzID0gYExDTVMsIEdDUlNcbkEsIEFcbkMsIENcbi81bUMvLCAoNW0pQ1xuRywgR1xuVCwgVFxuckEsIHJBXG5yQywgckNcbnJHLCByR1xuclUsIHJVXG5tQSwgbUFcbm1DLCBtQ1xuLzVtbUMvLCAoNW0pbUNcbm1HLCBtR1xubVUsIG1VXG5mQSwgZkFcbmZDLCBmQ1xuLzVtZkMvLCAoNW0pZkNcbmZHLCBmR1xuZlUsIGZVXG4vYWZBLywgYWZBXG4vYWZDLywgYWZDXG4vYWZHLywgYWZHXG4vYWZVLywgYWZVXG4rQSwgbG5hIEFcbitDLCBsbmEgQ1xuK0csIGxuYSBHXG4rVCwgbG5hIFRcbi9tb2VBLywgbW9lQVxuL21vZUMvLCBtb2VDXG4vNW1tb2VDLywgKDVtKW1vZUNcbi9tb2VHLywgbW9lR1xuL21vZVQvLCBtb2VUXG4vbW9lVS8sIG1vZVVcbi94QS8sIEFucFxuL3hDLywgQ25wXG4veDVtQy8sICg1bSlDbnBcbi94Ry8sIEducFxuL3hULywgVG5wXG4veHJBLywgckFucFxuL3hyQy8sIHJDbnBcbi94ckcvLCByR25wXG4veHJVLywgclVucFxuL3htQS8sIG1BbnBcbi94bUMvLCBtQ25wXG4veDVtbUMvLCAoNW0pbUNucFxuL3htRy8sIG1HbnBcbi94bVUvLCBtVW5wXG4veGZBLywgZkFucFxuL3hmQy8sIGZDbnBcbi94ZkcvLCBmR25wXG4veGZULywgZlRucFxuL3hmVS8sIGZVbnBcbi94YWZBLywgYWZBbnBcbi94YWZDLywgYWZDbnBcbi94YWZHLywgYWZHbnBcbi94YWZVLywgYWZVbnBcbi94ZUEvLCBlQW5wXG4veGVDLywgZUNucFxuL3hlRy8sIGVHbnBcbi94ZVUvLCBlVW5wXG4veG1vZUEvLCBtb2VBbnBcbi94bW9lQy8sIG1vZUNucFxuL3g1bW1vZUMvLCAoNW0pbW9lQ25wXG4veG1vZUcvLCBtb2VHbnBcbi94bW9lVS8sIG1vZVVucFxuL1VOQS1BLywgKFVOQS1BKVxuL1VOQS1DLywgKFVOQS1DKVxuL1VOQS1HLywgKFVOQS1HKVxuL1VOQS1ULywgKFVOQS1UKVxuL1VOQS1VLywgKFVOQS1VKVxuL0dOQS1BLywgKEdOQS1BKVxuL0dOQS1DLywgKEdOQS1DKVxuL0dOQS1HLywgKEdOQS1HKVxuL0dOQS1ULywgKEdOQS1UKVxuL0dOQS1VLywgKEdOQS1VKVxuLzVDaG9sVEVHLywgKDUtQ2hvbFRFRylcbi8zQ2hvbFRFRy8sIChURUdDaG9sLTMpXG4vVG9jby8sIFRvY29cbi9QYWxtLywgUGFsbVxuL0dhbE5BYy8sIEdhbE5BY1xuL0dhbE5BYzIvLCBHYWxOQWMyXG4vR2FsTkFjMy8sIEdhbE5BYzNcbi9HYWxOQWM2LywgR2FsTkFjNlxuL0dhbE5BYzcvLCBHYWxOQWM3XG4vR2FsTkFjOS8sIEdhbE5BYzlcbi9HYWxOQWMxNC8sIEdhbE5BYzE0XG4vTkFHMzcvLCBOQUczN1xuL0hFRy8sIChIRUcpXG4vVEVHLywgKFRFRylcbi9BbW1DNi8sIChOSEM2KVxuL0FtbUM3LywgKE5IQzcpXG4vQW1tQzEyLywgKE5IQzEyKVxuL2ludkFiLywgKGludmFiYXNpYylcbi9pbnZkVC8sIChpbnZkVClcbi9WUG1VLywgKHZpbnUpXG4qLCBwc1xuLzItQzE2VS8sIDItQzE2VSBcbi8yLUMxOHc5VS8sIDItQzE4dzlVXG4vSkRpLVBhbG0vLCBKRGktUGFsbVxuL0oyLUNPTkMxNlUvLCBKMi1DT05DMTZVXG4vSjItQzNOQzE2VS8sIEoyLUMzTkMxNlVcbi9KLUMxNUFkYS8sIEotQzE1QWRhXG4vSi0yQzE1QWRhVS8sIEotMkMxNUFkYVVcbi9KLUMxNk5DNi8sIEotQzE2TkM2XG4vUjItQzZOSC1VLywgUjItQzZOSC1VXG4vSi1NMS8sIEotTTFcbi9KLUIxLywgSi1CMVxuL0otQjIvLCBKLUIyXG4vSi1NMi8sIEotTTJcbi8yLUMxNkMvLCAyLUMxNkNcbi8yLUMxNkEvLCAyLUMxNkFcbi8yLUMxNkcvLCAyLUMxNkdcbi9SMi1DNk5ILUcvLCBSMi1DNk5ILUdcbi9SMi1DNk5ILUMvLCBSMi1DNk5ILUNcbi9KMi1DT05DMTZBLywgSjItQ09OQzE2QVxuL0oyLUNPTkMxNkMvLCBKMi1DT05DMTZDXG4vSjItQ09OQzE2Ry8sIEoyLUNPTkMxNkdcbi9KMi1DMTVBZGFDLywgSjItQzE1QWRhQ1xuL0oyLU0yVS8sIEoyLU0yVVxuL0oyLUIyVS8sIEoyLUIyVVxuL0oyLUMzTkMxNkMvLCBKMi1DM05DMTZDXG4vSjItQzNOQzE2Ry8sIEoyLUMzTkMxNkdcbi9SMi1DNk5ILUEvLCBSMi1DNk5ILUFcbi9KMi1DMTVBZGFBLywgSjItQzE1QWRhQVxuL0oyLUMzTkMxNkEvLCBKMi1DM05DMTZBXG4vSi1DNS1TRVItMS8sIEotQzUtU0VSLTFcbi9KLUMxNi1TRVItMS8sIEotQzE2LVNFUi0xXG4vSi1BMi8sIEotQTJcbi9KLUExLywgSi1BMVxuL0oyLUMxNUFkYUcvLCBKMi1DMTVBZGFHXG4vSi1DMTZOQXNwLywgSi1DMTZOQXNwXG4vSjItQzE2TkM2VS8sIEoyLUMxNk5DNlVcbi9KLUM1LVJFQk8tMS8sIEotQzUtUkVCTy0xXG4vSi1DMTYtUkVCTy0xLywgSi1DMTYtUkVCTy0xXG4vSi1DMTYtSU5ELTEvLCBKLUMxNi1JTkQtMVxuL0otQzUtSU5ELTEvLCBKLUM1LUlORC0xXG4vSi0xQzE1QWRhLTJNYW4vLCBKLTFDMTVBZGEtMk1hblxuL0pHLTFDMTVBZGEtMjNEaU1hbi8sIEpHLTFDMTVBZGEtMiwzRGlNYW5cbi9KLVRyaU1hblBDLywgSi1UcmlNYW5QQ1xuL0otdHJpTWFuUE8vLCBKLXRyaU1hblBPXG4vSi1BNC8sIEotQTRcbi9KLUFyYS0xLywgSi1BcmEtMVxuL0otQXJhLTIvLCBKLUFyYS0yXG4vSi1BY0NTLywgSi1BY0NTXG4vSi1DYkNTLywgSi1DYkNTXG4vSi1NdENELywgSi1NdENEYDtcbmZ1bmN0aW9uIGRpZmZlcmVuY2VPZlR3b0FycmF5cyhhLCBiKSB7XG4gICAgcmV0dXJuIGEuZmlsdGVyKCh4KSA9PiAhYi5pbmNsdWRlcyh4KSk7XG59XG5jb25zdCBjb2Rlc1dpdGhTbWlsZXMgPSBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoU1lOVEhFU0laRVJTLkdDUlMpO1xuY29uc3QgYWxsR2Nyc0NvZGVzID0gREcuRGF0YUZyYW1lLmZyb21Dc3YobGNtc1RvR2NycykuZ2V0Q29sKCdHQ1JTJykudG9MaXN0KCk7XG5leHBvcnQgY29uc3QgZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyA9IGRpZmZlcmVuY2VPZlR3b0FycmF5cyhhbGxHY3JzQ29kZXMsIGNvZGVzV2l0aFNtaWxlcyk7XG5mb3IgKGNvbnN0IGUgb2YgZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcylcbiAgICBtYXBbU1lOVEhFU0laRVJTLkdDUlNdWydPdGhlcnMnXVtlXSA9IHsgJ1NNSUxFUyc6ICcnIH07XG4iLCJjb25zdCBQSE9TSEFURSA9IGBcbkRhdGFncm9rIG1vbm9tZXIgbGlicmFyeSBOdWNsZW90aWRlc1xuXG4gIDAgIDAgIDAgIDAgIDAgIDAgICAgICAgICAgICAgIDAgVjMwMDBcbk0gIFYzMCBCRUdJTiBDVEFCXG5NICBWMzAgQ09VTlRTIDUgNCAwIDAgMFxuTSAgVjMwIEJFR0lOIEFUT01cbk0gIFYzMCAxIE8gLTEuNSAwIDAgMFxuTSAgVjMwIDIgUCAwIDAgMCAwXG5NICBWMzAgMyBPIDAgMSAwIDBcbk0gIFYzMCA0IE8gMCAtMSAwIDBcbk0gIFYzMCA1IE8gMS41IDAgMCAwXG5NICBWMzAgRU5EIEFUT01cbk0gIFYzMCBCRUdJTiBCT05EXG5NICBWMzAgMSAxIDEgMlxuTSAgVjMwIDIgMiAyIDNcbk0gIFYzMCAzIDEgMiA0XG5NICBWMzAgNCAxIDIgNVxuTSAgVjMwIEVORCBCT05EXG5NICBWMzAgRU5EIENUQUJcbk0gIFYzMCBCRUdJTiBDT0xMRUNUSU9OXG5NICBWMzAgRU5EIENPTExFQ1RJT05cbk0gIEVORGA7XG5jb25zdCBUSElPUEhPU0hBVEUgPSBgXG5EYXRhZ3JvayBtb25vbWVyIGxpYnJhcnkgTnVjbGVvdGlkZXNcblxuICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgICAwIFYzMDAwXG5NICBWMzAgQkVHSU4gQ1RBQlxuTSAgVjMwIENPVU5UUyA1IDQgMCAwIDBcbk0gIFYzMCBCRUdJTiBBVE9NXG5NICBWMzAgMSBPIC0xLjUgMCAwIDBcbk0gIFYzMCAyIFAgMCAwIDAgMFxuTSAgVjMwIDMgTyAwIDEgMCAwXG5NICBWMzAgNCBTIDAgLTEgMCAwXG5NICBWMzAgNSBPIDEuNSAwIDAgMFxuTSAgVjMwIEVORCBBVE9NXG5NICBWMzAgQkVHSU4gQk9ORFxuTSAgVjMwIDEgMSAxIDJcbk0gIFYzMCAyIDIgMiAzXG5NICBWMzAgMyAxIDIgNFxuTSAgVjMwIDQgMSAyIDVcbk0gIFYzMCBFTkQgQk9ORFxuTSAgVjMwIEVORCBDVEFCXG5NICBWMzAgQkVHSU4gQ09MTEVDVElPTlxuTSAgVjMwIEVORCBDT0xMRUNUSU9OXG5NICBFTkRgO1xuY29uc3QgSU5WQUJBU0lDID0gYFxuRGF0YWdyb2sgbW9ub21lciBsaWJyYXJ5IE51Y2xlb3RpZGVzXG5cbiAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgICAgMCBWMzAwMFxuTSAgVjMwIEJFR0lOIENUQUJcbk0gIFYzMCBDT1VOVFMgOCA4IDAgMCAwXG5NICBWMzAgQkVHSU4gQVRPTVxuTSAgVjMwIDEgTyAxLjA5MzQgLTIuMTYzNiAwIDBcbk0gIFYzMCAyIEMgMS44MzY1IC0xLjQ5NDUgMCAwIENGRz0yXG5NICBWMzAgMyBDIDIuODE0NyAtMS43MDI0IDAgMFxuTSAgVjMwIDQgQyAzLjMxNDcgLTAuODM2NCAwIDAgVkFMPTNcbk0gIFYzMCA1IE8gMi42NDU1IC0wLjA5MzIgMCAwXG5NICBWMzAgNiBDIDEuNzMyIC0wLjUgMCAwIENGRz0xXG5NICBWMzAgNyBDIDAuODY2IDAgMCAwXG5NICBWMzAgOCBPIDAuODY2IDEgMCAwXG5NICBWMzAgRU5EIEFUT01cbk0gIFYzMCBCRUdJTiBCT05EXG5NICBWMzAgMSAxIDIgMSBDRkc9MVxuTSAgVjMwIDIgMSAyIDNcbk0gIFYzMCAzIDEgMyA0XG5NICBWMzAgNCAxIDQgNVxuTSAgVjMwIDUgMSA2IDVcbk0gIFYzMCA2IDEgMiA2XG5NICBWMzAgNyAxIDYgNyBDRkc9M1xuTSAgVjMwIDggMSA3IDhcbk0gIFYzMCBFTkQgQk9ORFxuTSAgVjMwIEJFR0lOIENPTExFQ1RJT05cbk0gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgyIDIgNilcbk0gIFYzMCBFTkQgQ09MTEVDVElPTlxuTSAgVjMwIEVORCBDVEFCXG5NICBFTkRgO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51Y2xlb3RpZGVzTW9sKHNtaWxlc0NvZGVzKSB7XG4gICAgY29uc3QgbW9sQmxvY2tzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbWlsZXNDb2Rlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgc21pbGVzQ29kZXNbaV0gPT0gJ09QKD1PKShPKU8nID8gbW9sQmxvY2tzLnB1c2goUEhPU0hBVEUpIDpcbiAgICAgICAgICAgIHNtaWxlc0NvZGVzW2ldID09ICdPUCg9TykoUylPJyA/IG1vbEJsb2Nrcy5wdXNoKFRISU9QSE9TSEFURSkgOlxuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzW2ldID09ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ08nID8gbW9sQmxvY2tzLnB1c2gocm90YXRlTnVjbGVvdGlkZXNWMzAwMChJTlZBQkFTSUMpKSA6XG4gICAgICAgICAgICAgICAgICAgIG1vbEJsb2Nrcy5wdXNoKHJvdGF0ZU51Y2xlb3RpZGVzVjMwMDAoc21pbGVzQ29kZXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmtWMzAwMChtb2xCbG9ja3MsIGZhbHNlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVjMwMDAobW9sQmxvY2tzLCB0d29DaGFpbnMgPSBmYWxzZSwgdXNlQ2hpcmFsaXR5ID0gdHJ1ZSkge1xuICAgIGxldCBtYWNyb01vbEJsb2NrID0gJ1xcbkRhdGFncm9rIG1hY3JvbW9sZWN1bGUgaGFuZGxlclxcblxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgOTk5IFYzMDAwXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ1RBQlxcbic7XG4gICAgbGV0IGF0b21CbG9jayA9ICcnO1xuICAgIGxldCBib25kQmxvY2sgPSAnJztcbiAgICBsZXQgY29sbGVjdGlvbkJsb2NrID0gJyc7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgIGxldCBuYXRvbSA9IDA7XG4gICAgbGV0IG5ib25kID0gMDtcbiAgICBsZXQgeFNoaWZ0ID0gMDtcbiAgICBpZiAodHdvQ2hhaW5zICYmIG1vbEJsb2Nrcy5sZW5ndGggPiAxKVxuICAgICAgICBtb2xCbG9ja3NbMV0gPSBpbnZlcnROdWNsZW90aWRlc1YzMDAwKG1vbEJsb2Nrc1sxXSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2xCbG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnJlcGxhY2VBbGwoJygtXFxuTSAgVjMwICcsICcoJylcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCctXFxuTSAgVjMwICcsICcnKS5yZXBsYWNlQWxsKCcgKScsICcpJyk7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9ja3NbaV0pO1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2Nrc1tpXSk7XG4gICAgICAgIGlmICh0d29DaGFpbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHhTaGlmdFJpZ2h0ID0gTWF0aC5taW4oLi4uY29vcmRpbmF0ZXMueCk7XG4gICAgICAgICAgICBjb25zdCB5U2hpZnQgPSBpID09IDAgPyBNYXRoLm1pbiguLi5jb29yZGluYXRlcy55KSAtIDEgOiBNYXRoLm1heCguLi5jb29yZGluYXRlcy55KSArIDE7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3JkaW5hdGVzLngubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtqXSAtPSB4U2hpZnRSaWdodDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29vcmRpbmF0ZXMueS5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlcy55W2pdIC09IHlTaGlmdDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXhBdG9tcyA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgQkVHSU4gQVRPTScpOyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgY29vcmRpbmF0ZXNcbiAgICAgICAgaW5kZXhBdG9tcyA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleEF0b21zKTtcbiAgICAgICAgbGV0IGluZGV4ID0gaW5kZXhBdG9tcztcbiAgICAgICAgbGV0IGluZGV4RW5kID0gaW5kZXhBdG9tcztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1iZXJzLm5hdG9tOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb29yZGluYXRlcy5hdG9tSW5kZXhbal0gIT0gMSB8fCBpID09IDAgfHwgdHdvQ2hhaW5zKSB7XG4gICAgICAgICAgICAgICAgLy9yZXdyaXRlIGF0b20gbnVtYmVyXG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0b21OdW1iZXIgPSBwYXJzZUludChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgbmF0b207XG4gICAgICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgICAgIC8vcmV3cml0ZSBjb29yZGluYXRlc1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxTaGlmdCA9IHR3b0NoYWlucyA/IDAgOiB4U2hpZnQgLSBjb29yZGluYXRlcy54WzBdO1xuICAgICAgICAgICAgICAgIGxldCBjb29yZGluYXRlID0gdHdvQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgxMDAwMCAqIGNvb3JkaW5hdGVzLnhbal0pIC8gMTAwMDAgOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKDEwMDAwICogKHBhcnNlRmxvYXQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIHRvdGFsU2hpZnQpKSAvIDEwMDAwO1xuICAgICAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBjb29yZGluYXRlICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGUgPSB0d29DaGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKDEwMDAwICogY29vcmRpbmF0ZXMueVtqXSkgLyAxMDAwMCA6XG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpKSkgLyAxMDAwMDtcbiAgICAgICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgY29vcmRpbmF0ZSArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCcsIGluZGV4KSAtIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleEF0b21zRW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBFTkQgQVRPTScpO1xuICAgICAgICBhdG9tQmxvY2sgKz0gbW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleEF0b21zICsgMSwgaW5kZXhBdG9tc0VuZCk7XG4gICAgICAgIGxldCBpbmRleEJvbmRzID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBCT05EJyk7IC8vIFYzMDAwIGluZGV4IGZvciBib25kc1xuICAgICAgICBpbmRleEJvbmRzID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4Qm9uZHMpO1xuICAgICAgICBpbmRleCA9IGluZGV4Qm9uZHM7XG4gICAgICAgIGluZGV4RW5kID0gaW5kZXhCb25kcztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1iZXJzLm5ib25kOyBqKyspIHtcbiAgICAgICAgICAgIC8vcmV3cml0ZSBib25kIG51bWJlclxuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBjb25zdCBib25kTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIG5ib25kO1xuICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGJvbmROdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgLy9yZXdyaXRlIGF0b20gcGFpciBpbiBib25kXG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgIGxldCBhdG9tTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIG5hdG9tO1xuICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICBpbmRleEVuZCA9IE1hdGgubWluKG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleCksIG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpKTtcbiAgICAgICAgICAgIGF0b21OdW1iZXIgPSBwYXJzZUludChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgbmF0b207XG4gICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgYXRvbU51bWJlciArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4Qm9uZEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgRU5EIEJPTkQnKTtcbiAgICAgICAgYm9uZEJsb2NrICs9IG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXhCb25kcyArIDEsIGluZGV4Qm9uZEVuZCk7XG4gICAgICAgIGxldCBpbmRleENvbGxlY3Rpb24gPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIE1ETFYzMC9TVEVBQlMgQVRPTVM9KCcpOyAvLyBWMzAwMCBpbmRleCBmb3IgY29sbGVjdGlvbnNcbiAgICAgICAgd2hpbGUgKGluZGV4Q29sbGVjdGlvbiAhPSAtMSkge1xuICAgICAgICAgICAgaW5kZXhDb2xsZWN0aW9uICs9IDI4O1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcpJywgaW5kZXhDb2xsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gbW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleENvbGxlY3Rpb24sIGNvbGxlY3Rpb25FbmQpLnNwbGl0KCcgJykuc2xpY2UoMSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uRW50cmllcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKHBhcnNlSW50KGUpICsgbmF0b20pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbmRleENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uRW5kO1xuICAgICAgICAgICAgaW5kZXhDb2xsZWN0aW9uID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnLCBpbmRleENvbGxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIG5hdG9tICs9IHR3b0NoYWlucyA/IG51bWJlcnMubmF0b20gOiBudW1iZXJzLm5hdG9tIC0gMTtcbiAgICAgICAgbmJvbmQgKz0gbnVtYmVycy5uYm9uZDtcbiAgICAgICAgeFNoaWZ0ICs9IHR3b0NoYWlucyA/IDAgOiBjb29yZGluYXRlcy54W251bWJlcnMubmF0b20gLSAxXSAtIGNvb3JkaW5hdGVzLnhbMF07XG4gICAgfVxuICAgIGNvbnN0IGVudHJpZXMgPSA0O1xuICAgIGNvbnN0IGNvbGxOdW1iZXIgPSBNYXRoLmNlaWwoY29sbGVjdGlvbi5sZW5ndGggLyBlbnRyaWVzKTtcbiAgICAvL2lmIChvY2xSZW5kZXIpIHtcbiAgICAvLyBjb2xsZWN0aW9uQmxvY2sgKz0gJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnICsgY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBjb2xsZWN0aW9uLmxlbmd0aDsgaisrKVxuICAgIC8vICAgY29sbGVjdGlvbkJsb2NrICs9ICcgJyArIGNvbGxlY3Rpb25bal07XG4gICAgLy8gY29sbGVjdGlvbkJsb2NrICs9ICcpXFxuJztcbiAgICAvL30gZWxzZSB7XG4gICAgY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyArIGNvbGxlY3Rpb24ubGVuZ3RoICsgJyAtXFxuJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxOdW1iZXI7IGkrKykge1xuICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gJ00gIFYzMCAnO1xuICAgICAgICBjb25zdCBlbnRyaWVzQ3VycmVudCA9IGkgKyAxID09IGNvbGxOdW1iZXIgPyBjb2xsZWN0aW9uLmxlbmd0aCAtIChjb2xsTnVtYmVyIC0gMSkgKiBlbnRyaWVzIDogZW50cmllcztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbnRyaWVzQ3VycmVudDsgaisrKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gKGogKyAxID09IGVudHJpZXNDdXJyZW50KSA/XG4gICAgICAgICAgICAgICAgKGkgPT0gY29sbE51bWJlciAtIDEgPyBjb2xsZWN0aW9uW2VudHJpZXMgKiBpICsgal0gKyAnKVxcbicgOiBjb2xsZWN0aW9uW2VudHJpZXMgKiBpICsgal0gKyAnIC1cXG4nKSA6XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbltlbnRyaWVzICogaSArIGpdICsgJyAnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vfVxuICAgIC8vZ2VuZXJhdGUgZmlsZVxuICAgIHR3b0NoYWlucyA/IG5hdG9tIDogbmF0b20rKztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQ09VTlRTICcgKyBuYXRvbSArICcgJyArIG5ib25kICsgJyAwIDAgMFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEFUT01cXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYXRvbUJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQVRPTVxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEJPTkRcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYm9uZEJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQk9ORFxcbic7XG4gICAgaWYgKHVzZUNoaXJhbGl0eSkge1xuICAgICAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ09MTEVDVElPTlxcbic7XG4gICAgICAgIG1hY3JvTW9sQmxvY2sgKz0gY29sbGVjdGlvbkJsb2NrO1xuICAgICAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgRU5EIENPTExFQ1RJT05cXG4nO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIG1hY3JvTW9sQmxvY2sgPSBtYWNyb01vbEJsb2NrLnJlcGxhY2UoLyBDRkc9XFxkL2csICcgJyk7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBDVEFCXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBFTkRcXG4nO1xuICAgIHJldHVybiBtYWNyb01vbEJsb2NrO1xufVxuZnVuY3Rpb24gcm90YXRlTnVjbGVvdGlkZXNWMzAwMChtb2xlY3VsZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsZXQgbW9sQmxvY2sgPSBtb2xlY3VsZS5pbmNsdWRlcygnTSAgRU5EJykgPyBtb2xlY3VsZSA6IE9DTC5Nb2xlY3VsZS5mcm9tU21pbGVzKG1vbGVjdWxlKS50b01vbGZpbGVWMygpO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZXh0cmFjdEF0b21EYXRhVjMwMDAobW9sQmxvY2spO1xuICAgIGNvbnN0IG5hdG9tID0gY29vcmRpbmF0ZXMuYXRvbUluZGV4Lmxlbmd0aDtcbiAgICBjb25zdCBpbmRleEZpdmVQcmltZSA9IGNvb3JkaW5hdGVzLmF0b21JbmRleC5pbmRleE9mKDEpO1xuICAgIGNvbnN0IGluZGV4VGhyZWVQcmltZSA9IGNvb3JkaW5hdGVzLmF0b21JbmRleC5pbmRleE9mKG5hdG9tKTtcbiAgICAvL2ZpeCA1IHByaW1lIGlmIGluYWRlcXVhdGVcbiAgICBpZiAobmF0b20gPiA4KVxuICAgICAgICBmaXg1UHJpbWUoY29vcmRpbmF0ZXMsIGluZGV4Rml2ZVByaW1lLCBpbmRleFRocmVlUHJpbWUpO1xuICAgIGNvbnN0IHhDZW50ZXIgPSAoY29vcmRpbmF0ZXMueFtpbmRleFRocmVlUHJpbWVdICsgY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV0pIC8gMjtcbiAgICBjb25zdCB5Q2VudGVyID0gKGNvb3JkaW5hdGVzLnlbaW5kZXhUaHJlZVByaW1lXSArIGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdKSAvIDI7XG4gICAgLy9wbGFjZSB0byBjZW50ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSAtPSB4Q2VudGVyO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldIC09IHlDZW50ZXI7XG4gICAgfVxuICAgIGxldCBhbmdsZSA9IDA7XG4gICAgaWYgKGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdID09IDApXG4gICAgICAgIGFuZ2xlID0gY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0gPiBjb29yZGluYXRlcy55W2luZGV4VGhyZWVQcmltZV0gPyBNYXRoLlBJIC8gMiA6IDMgKiBNYXRoLlBJIC8gMjtcbiAgICBlbHNlIGlmIChjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSA9PSAwKVxuICAgICAgICBhbmdsZSA9IGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdID4gY29vcmRpbmF0ZXMueFtpbmRleFRocmVlUHJpbWVdID8gTWF0aC5QSSA6IDA7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlcml2YXRpdmUgPSBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSAvIGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdO1xuICAgICAgICBhbmdsZSA9IGRlcml2YXRpdmUgPiAwID8gTWF0aC5QSSAtIE1hdGguYXRhbihkZXJpdmF0aXZlKSA6IE1hdGguYXRhbihkZXJpdmF0aXZlKTtcbiAgICB9XG4gICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29uc3QgeEFkZCA9IGNvb3JkaW5hdGVzLnhbaV07XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gPSB4QWRkICogY29zIC0gY29vcmRpbmF0ZXMueVtpXSAqIHNpbjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSA9IHhBZGQgKiBzaW4gKyBjb29yZGluYXRlcy55W2ldICogY29zO1xuICAgIH1cbiAgICAvL3BsYWNlIHRvIHJpZ2h0XG4gICAgY29uc3QgeFNoaWZ0ID0gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKVxuICAgICAgICBjb29yZGluYXRlcy54W2ldIC09IHhTaGlmdDtcbiAgICAvL3Jld3JpdGUgbW9sQmxvY2tcbiAgICBsZXQgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdNICBWMzAgQkVHSU4gQVRPTScpOyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgY29vcmRpbmF0ZXNcbiAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICBsZXQgaW5kZXhFbmQgPSBpbmRleDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleEVuZCk7XG4gICAgICAgIG1vbEJsb2NrID0gbW9sQmxvY2suc2xpY2UoMCwgaW5kZXgpICtcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gKyAnICcgKyBjb29yZGluYXRlcy55W2ldICtcbiAgICAgICAgICAgIG1vbEJsb2NrLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gbW9sQmxvY2s7XG59XG5mdW5jdGlvbiBpbnZlcnROdWNsZW90aWRlc1YzMDAwKG1vbGVjdWxlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxldCBtb2xCbG9jayA9IG1vbGVjdWxlLmluY2x1ZGVzKCdNICBFTkQnKSA/IG1vbGVjdWxlIDogT0NMLk1vbGVjdWxlLmZyb21TbWlsZXMobW9sZWN1bGUpLnRvTW9sZmlsZVYzKCk7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jayk7XG4gICAgY29uc3QgbmF0b20gPSBjb29yZGluYXRlcy5hdG9tSW5kZXgubGVuZ3RoO1xuICAgIGNvbnN0IHhDZW50ZXIgPSAoTWF0aC5tYXgoLi4uY29vcmRpbmF0ZXMueCkgKyBNYXRoLm1pbiguLi5jb29yZGluYXRlcy54KSkgLyAyO1xuICAgIGNvbnN0IHlDZW50ZXIgPSAoTWF0aC5tYXgoLi4uY29vcmRpbmF0ZXMueSkgKyBNYXRoLm1pbiguLi5jb29yZGluYXRlcy55KSkgLyAyO1xuICAgIC8vcGxhY2UgdG8gY2VudGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gLT0geENlbnRlcjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSAtPSB5Q2VudGVyO1xuICAgIH1cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguUEk7XG4gICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29uc3QgeEFkZCA9IGNvb3JkaW5hdGVzLnhbaV07XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gPSB4QWRkICogY29zIC0gY29vcmRpbmF0ZXMueVtpXSAqIHNpbjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSA9IHhBZGQgKiBzaW4gKyBjb29yZGluYXRlcy55W2ldICogY29zO1xuICAgIH1cbiAgICAvL3BsYWNlIGJhY2tcbiAgICBjb25zdCB5U2hpZnQgPSBNYXRoLm1heCguLi5jb29yZGluYXRlcy55KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSArPSB4Q2VudGVyO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldIC09IHlTaGlmdDtcbiAgICB9XG4gICAgLy9yZXdyaXRlIG1vbEJsb2NrXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXhFbmQpO1xuICAgICAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnNsaWNlKDAsIGluZGV4KSArXG4gICAgICAgICAgICBjb29yZGluYXRlcy54W2ldICsgJyAnICsgY29vcmRpbmF0ZXMueVtpXSArXG4gICAgICAgICAgICBtb2xCbG9jay5zbGljZShpbmRleEVuZCk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbEJsb2NrO1xufVxuZnVuY3Rpb24gZml4NVByaW1lKGNvb3JkaW5hdGVzLCBpbmRleEZpdmVQcmltZSwgaW5kZXhUaHJlZVByaW1lKSB7XG4gICAgY29uc3QgaW5kZXhGaXZlUHJpbWVOZWlnaGJvdXIgPSBpbmRleEZpdmVQcmltZSArIDE7XG4gICAgY29uc3QgeFNoaWZ0ID0gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZU5laWdoYm91cl07XG4gICAgY29uc3QgeVNoaWZ0ID0gY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZU5laWdoYm91cl07XG4gICAgY29uc3QgYmFzZTNQcmltZVggPSBjb29yZGluYXRlcy54W2luZGV4VGhyZWVQcmltZV0gLSB4U2hpZnQ7XG4gICAgY29uc3QgYmFzZTNQcmltZVkgPSBjb29yZGluYXRlcy55W2luZGV4VGhyZWVQcmltZV0gLSB5U2hpZnQ7XG4gICAgY29uc3QgYmFzZTVQcmltZVggPSBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXSAtIHhTaGlmdDtcbiAgICBjb25zdCBiYXNlNVByaW1lWSA9IGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdIC0geVNoaWZ0O1xuICAgIGNvbnN0IHJvdGF0ZWQ1UHJpbWVYID0gYmFzZTVQcmltZVggKiBNYXRoLmNvcyhNYXRoLlBJICogMiAvIDMpIC0gYmFzZTVQcmltZVkgKiBNYXRoLnNpbihNYXRoLlBJICogMiAvIDMpO1xuICAgIGNvbnN0IHJvdGF0ZWQ1UHJpbWVZID0gYmFzZTVQcmltZVggKiBNYXRoLnNpbihNYXRoLlBJICogMiAvIDMpICsgYmFzZTVQcmltZVkgKiBNYXRoLmNvcyhNYXRoLlBJICogMiAvIDMpO1xuICAgIGNvbnN0IGR4ID0gYmFzZTVQcmltZVggLSBiYXNlM1ByaW1lWDtcbiAgICBjb25zdCBkeSA9IGJhc2U1UHJpbWVZIC0gYmFzZTNQcmltZVk7XG4gICAgY29uc3QgZHhSb3RhdGVkID0gcm90YXRlZDVQcmltZVggLSBiYXNlM1ByaW1lWDtcbiAgICBjb25zdCBkeVJvdGF0ZWQgPSByb3RhdGVkNVByaW1lWSAtIGJhc2UzUHJpbWVZO1xuICAgIGlmIChNYXRoLnNxcnQoZHlSb3RhdGVkICogZHlSb3RhdGVkICsgZHhSb3RhdGVkICogZHhSb3RhdGVkKSA+PSBNYXRoLnNxcnQoZHkgKiBkeSArIGR4ICogZHgpKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdID0gcm90YXRlZDVQcmltZVggKyB4U2hpZnQ7XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdID0gcm90YXRlZDVQcmltZVkgKyB5U2hpZnQ7XG4gICAgfVxufVxuZnVuY3Rpb24gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sQmxvY2spIHtcbiAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnJlcGxhY2VBbGwoJ1xccicsICcnKTsgLy9lcXVhbGl6ZSBvbGQgYW5kIG5ldyBzZGYgc3RhbmRhcmRzXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignQ09VTlRTJykgKyA3OyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgYW5kIGJvbmRzIG51bWJlclxuICAgIGxldCBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgY29uc3QgYXRvbXNOdW1iZXIgPSBwYXJzZUludChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgIGNvbnN0IGJvbmRzTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgIHJldHVybiB7IG5hdG9tOiBhdG9tc051bWJlciwgbmJvbmQ6IGJvbmRzTnVtYmVyIH07XG59XG5mdW5jdGlvbiBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jaykge1xuICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9jayk7XG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgY29uc3QgaW5kZXhlcyA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgY29uc3QgeCA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHkgPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubmF0b207IGkrKykge1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgaW5kZXhlc1tpXSA9IHBhcnNlSW50KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgdHlwZXNbaV0gPSBtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgeFtpXSA9IHBhcnNlRmxvYXQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICB5W2ldID0gcGFyc2VGbG9hdChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXRvbUluZGV4OiBpbmRleGVzLCBhdG9tVHlwZTogdHlwZXMsIHg6IHgsIHk6IHkgfTtcbn1cbiIsImltcG9ydCB7IG1hcCwgU1lOVEhFU0laRVJTLCBURUNITk9MT0dJRVMsIE1PRElGSUNBVElPTlMsIGRlbGltaXRlciwgZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvQmlvU3ByaW5nLCBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0djcnMsIGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzLCBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzLCBhc29HYXBtZXJzR2Nyc1RvTnVjbGVvdGlkZXMsIGFzb0dhcG1lcnNHY3JzVG9CaW9TcHJpbmcsIGdjcnNUb01lcm1hZGUxMiwgc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZCwgc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmQsIHNpUm5hTnVjbGVvdGlkZXNUb0djcnMsIHNpUm5hQmlvU3ByaW5nVG9OdWNsZW90aWRlcywgc2lSbmFCaW9TcHJpbmdUb0F4b2xhYnMsIHNpUm5hQmlvU3ByaW5nVG9HY3JzLCBzaVJuYUF4b2xhYnNUb051Y2xlb3RpZGVzLCBzaVJuYUF4b2xhYnNUb0Jpb1NwcmluZywgc2lSbmFBeG9sYWJzVG9HY3JzLCBzaVJuYUdjcnNUb051Y2xlb3RpZGVzLCBzaVJuYUdjcnNUb0Jpb1NwcmluZywgc2lSbmFHY3JzVG9BeG9sYWJzLCBnY3JzVG9OdWNsZW90aWRlcywgZ2Nyc1RvTGNtcyB9IGZyb20gJy4vY29udmVydGVycyc7XG5jb25zdCBub1RyYW5zbGF0aW9uVGFibGVBdmFpbGFibGUgPSAnTm8gdHJhbnNsYXRpb24gdGFibGUgYXZhaWxhYmxlJztcbmV4cG9ydCBjb25zdCB1bmRlZmluZWRJbnB1dFNlcXVlbmNlID0gJ1R5cGUgb2YgaW5wdXQgc2VxdWVuY2UgaXMgdW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXQoc2VxdWVuY2UpIHtcbiAgICBjb25zdCBwb3NzaWJsZVN5bnRoZXNpemVycyA9IGdldExpc3RPZlBvc3NpYmxlU3ludGhlc2l6ZXJzQnlGaXJzdE1hdGNoZWRDb2RlKHNlcXVlbmNlKTtcbiAgICBpZiAocG9zc2libGVTeW50aGVzaXplcnMubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBvdXRwdXRJbmRleCA9IDA7XG4gICAgY29uc3QgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzID0gWydyJywgJ2QnXTtcbiAgICBjb25zdCBudWNsZW90aWRlcyA9IFsnQScsICdVJywgJ1QnLCAnQycsICdHJ107XG4gICAgcG9zc2libGVTeW50aGVzaXplcnMuZm9yRWFjaCgoc3ludGhlc2l6ZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpO1xuICAgICAgICB3aGlsZSAob3V0cHV0SW5kZXggPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShvdXRwdXRJbmRleCwgb3V0cHV0SW5kZXggKyBjLmxlbmd0aCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ3JBQSdcbiAgICAgICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAgICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ0FyQSdcbiAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCArIDFdKSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0SW5kZXggKz0gbWF0Y2hlZENvZGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyID0gKG91dHB1dEluZGV4ID09IHNlcXVlbmNlLmxlbmd0aCkgPyAtMSA6IG91dHB1dEluZGV4O1xuICAgIGlmIChpbmRleE9mRmlyc3ROb3RWYWxpZENoYXIgIT0gLTEpXG4gICAgICAgIHJldHVybiBwb3NzaWJsZVN5bnRoZXNpemVyc1swXTtcbiAgICBjb25zdCBwb3NzaWJsZVRlY2hub2xvZ2llcyA9IGdldExpc3RPZlBvc3NpYmxlVGVjaG5vbG9naWVzQnlGaXJzdE1hdGNoZWRDb2RlKHNlcXVlbmNlLCBwb3NzaWJsZVN5bnRoZXNpemVyc1swXSk7XG4gICAgaWYgKHBvc3NpYmxlVGVjaG5vbG9naWVzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBvdXRwdXRJbmRleCA9IDA7XG4gICAgcG9zc2libGVUZWNobm9sb2dpZXMuZm9yRWFjaCgodGVjaG5vbG9neSkgPT4ge1xuICAgICAgICBjb25zdCBjb2RlcyA9IE9iamVjdC5rZXlzKG1hcFtwb3NzaWJsZVN5bnRoZXNpemVyc1swXV1bdGVjaG5vbG9neV0pO1xuICAgICAgICB3aGlsZSAob3V0cHV0SW5kZXggPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShvdXRwdXRJbmRleCwgb3V0cHV0SW5kZXggKyBjLmxlbmd0aCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ3JBQSdcbiAgICAgICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAgICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ0FyQSdcbiAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCArIDFdKSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0SW5kZXggKz0gbWF0Y2hlZENvZGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdO1xufVxuZnVuY3Rpb24gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDsgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFNlcXVlbmNlKHNlcXVlbmNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBwb3NzaWJsZVN5bnRoZXNpemVycyA9IGZvcm1hdCA9PSBudWxsID9cbiAgICAgICAgZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpIDpcbiAgICAgICAgW2Zvcm1hdF07XG4gICAgLy8gaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAvLyAgIGNvbnN0IHN5bnRoZXNpemVyID0gdWkuY2hvaWNlSW5wdXQoJ0Nob29zZSBzeW50aGVzaXplciBmcm9tIGxpc3Q6ICcsIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdLFxuICAgIC8vICBwb3NzaWJsZVN5bnRoZXNpemVycyk7XG4gICAgLy8gICB1aS5kaWFsb2coJ0Nob29zZSBTeW50aGVzaXplcicpXG4gICAgLy8gICAgIC5hZGQodWkucGFuZWwoW3N5bnRoZXNpemVyLnJvb3RdLCB7c3R5bGU6IHtmb250V2VpZ2h0OiAnYm9sZCd9fSkpXG4gICAgLy8gICAgIC5vbk9LKCgpID0+IHBvc3NpYmxlU3ludGhlc2l6ZXJzID0gW3N5bnRoZXNpemVyLnZhbHVlXSlcbiAgICAvLyAgICAgLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAvLyAgICAgICBwb3NzaWJsZVN5bnRoZXNpemVycyA9IFtwb3NzaWJsZVN5bnRoZXNpemVyc1swXV07XG4gICAgLy8gICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdJbnB1dCBzZXF1ZW5jZSBpcyBleHBlY3RlZCB0byBiZSBpbiBmb3JtYXQgJyArIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgLnNob3coKTtcbiAgICAvLyB9IGVsc2UgaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA9PSAwKVxuICAgIGlmIChwb3NzaWJsZVN5bnRoZXNpemVycy5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIHsgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyOiAwLCBzeW50aGVzaXplcjogbnVsbCwgdGVjaG5vbG9neTogbnVsbCB9O1xuICAgIGxldCBvdXRwdXRJbmRleCA9IDA7XG4gICAgY29uc3QgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzID0gWydyJywgJ2QnXTtcbiAgICBjb25zdCBudWNsZW90aWRlcyA9IFsnQScsICdVJywgJ1QnLCAnQycsICdHJ107XG4gICAgcG9zc2libGVTeW50aGVzaXplcnMuZm9yRWFjaCgoc3ludGhlc2l6ZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpKTtcbiAgICAgICAgd2hpbGUgKG91dHB1dEluZGV4IDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkQ29kZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdyQUEnXG4gICAgICAgICAgICBvdXRwdXRJbmRleCA+IDEgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pICYmXG4gICAgICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4IC0gMl0pKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggKyAxXSkgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciA9IChvdXRwdXRJbmRleCA9PSBzZXF1ZW5jZS5sZW5ndGgpID8gLTEgOiBvdXRwdXRJbmRleDtcbiAgICBpZiAoaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyICE9IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcixcbiAgICAgICAgICAgIHN5bnRoZXNpemVyOiBwb3NzaWJsZVN5bnRoZXNpemVycyxcbiAgICAgICAgICAgIHRlY2hub2xvZ3k6IG51bGwsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHBvc3NpYmxlVGVjaG5vbG9naWVzID0gZ2V0TGlzdE9mUG9zc2libGVUZWNobm9sb2dpZXNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UsIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdKTtcbiAgICAvLyBpZiAocG9zc2libGVUZWNobm9sb2dpZXMubGVuZ3RoID4gMSkge1xuICAgIC8vICAgY29uc3QgdGVjaG5vbG9neSA9IHVpLmNob2ljZUlucHV0KCdDaG9vc2UgdGVjaG5vbG9neSBmcm9tIGxpc3Q6ICcsIHBvc3NpYmxlVGVjaG5vbG9naWVzWzBdLFxuICAgIC8vIHBvc3NpYmxlVGVjaG5vbG9naWVzKTtcbiAgICAvLyAgIHVpLmRpYWxvZygnQ2hvb3NlIFRlY2hub2xvZ3knKVxuICAgIC8vICAgICAuYWRkKHVpLnBhbmVsKFt0ZWNobm9sb2d5LnJvb3RdLCB7c3R5bGU6IHtmb250V2VpZ2h0OiAnYm9sZCd9fSkpXG4gICAgLy8gICAgIC5vbk9LKCgpID0+IHBvc3NpYmxlVGVjaG5vbG9naWVzID0gW3RlY2hub2xvZ3kudmFsdWVdKVxuICAgIC8vICAgICAub25DYW5jZWwoKCkgPT4ge1xuICAgIC8vICAgICAgIHBvc3NpYmxlVGVjaG5vbG9naWVzID0gW3Bvc3NpYmxlVGVjaG5vbG9naWVzWzBdXTtcbiAgICAvLyAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0lucHV0IHNlcXVlbmNlIGlzIGV4cGVjdGVkIHRvIGJlIGluIGZvcm1hdCAnICsgcG9zc2libGVUZWNobm9sb2dpZXNbMF0pO1xuICAgIC8vICAgICB9KVxuICAgIC8vICAgICAuc2hvdygpO1xuICAgIC8vIH0gZWxzZSBpZiAocG9zc2libGVUZWNobm9sb2dpZXMubGVuZ3RoID09IDApXG4gICAgaWYgKHBvc3NpYmxlVGVjaG5vbG9naWVzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4geyBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IDAsIHN5bnRoZXNpemVyOiBbcG9zc2libGVTeW50aGVzaXplcnNbM11dLCB0ZWNobm9sb2d5OiBudWxsIH07XG4gICAgb3V0cHV0SW5kZXggPSAwO1xuICAgIC8vIHBvc3NpYmxlVGVjaG5vbG9naWVzLmZvckVhY2goKHRlY2hub2xvZ3k6IHN0cmluZykgPT4ge1xuICAgIC8vICAgY29uc3QgY29kZXMgPSBPYmplY3Qua2V5cyhtYXBbcG9zc2libGVTeW50aGVzaXplcnNbMF1dW3RlY2hub2xvZ3ldKTtcbiAgICAvLyAgIHdoaWxlIChvdXRwdXRJbmRleCA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgIC8vICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAvLyAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgLy8gICAgICAgYnJlYWs7XG4gICAgLy8gICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnckFBJ1xuICAgIC8vICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgIC8vICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAvLyAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSlcbiAgICAvLyAgICAgKSBicmVhaztcbiAgICAvLyAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgLy8gICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4ICsgMV0pICYmXG4gICAgLy8gICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKVxuICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgIC8vICAgICAgIGJyZWFrO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcixcbiAgICAgICAgc3ludGhlc2l6ZXI6IHBvc3NpYmxlU3ludGhlc2l6ZXJzLFxuICAgICAgICB0ZWNobm9sb2d5OiBbcG9zc2libGVUZWNobm9sb2dpZXNbb3V0cHV0SW5kZXhdXSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbENvZGVzT2ZTeW50aGVzaXplcihzeW50aGVzaXplcikge1xuICAgIGxldCBjb2RlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKSlcbiAgICAgICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkpO1xuICAgIHJldHVybiBjb2Rlcy5jb25jYXQoT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUykpLmNvbmNhdChkZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpIHtcbiAgICBsZXQgc3ludGhlc2l6ZXJzID0gW107XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKChzeW50aGVzaXplcikgPT4ge1xuICAgICAgICBsZXQgY29kZXMgPSBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpKTtcbiAgICAgICAgaWYgKHN5bnRoZXNpemVyID09ICdKYW5zc2VuIEdDUlMgQ29kZXMnKVxuICAgICAgICAgICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyk7XG4gICAgICAgIC8vVE9ETzogZ2V0IGZpcnN0IG5vbi1kcm9wZG93biBjb2RlIHdoZW4gdGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb25zXG4gICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzZXF1ZW5jZVtpXSA9PSAnKScgJiYgaSAhPSBzZXF1ZW5jZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcy5zb21lKChzKSA9PiBzID09IHNlcXVlbmNlLnNsaWNlKHN0YXJ0LCBzdGFydCArIHMubGVuZ3RoKSkpXG4gICAgICAgICAgICBzeW50aGVzaXplcnMgPSBbJ0phbnNzZW4gR0NSUyBDb2RlcyddO1xuICAgICAgICBpZiAoY29kZXMuc29tZSgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShzdGFydCwgc3RhcnQgKyBzLmxlbmd0aCkpKVxuICAgICAgICAgICAgc3ludGhlc2l6ZXJzLnB1c2goc3ludGhlc2l6ZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBzeW50aGVzaXplcnM7XG59XG5mdW5jdGlvbiBnZXRMaXN0T2ZQb3NzaWJsZVRlY2hub2xvZ2llc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSwgc3ludGhlc2l6ZXIpIHtcbiAgICBjb25zdCB0ZWNobm9sb2dpZXMgPSBbXTtcbiAgICBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKS5mb3JFYWNoKCh0ZWNobm9sb2d5KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvZGVzID0gT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkuY29uY2F0KE9iamVjdC5rZXlzKE1PRElGSUNBVElPTlMpKTtcbiAgICAgICAgaWYgKGNvZGVzLnNvbWUoKHMpID0+IHMgPT0gc2VxdWVuY2Uuc2xpY2UoMCwgcy5sZW5ndGgpKSlcbiAgICAgICAgICAgIHRlY2hub2xvZ2llcy5wdXNoKHRlY2hub2xvZ3kpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZWNobm9sb2dpZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNlcXVlbmNlKHNlcXVlbmNlLCBvdXRwdXQpIHtcbiAgICBpZiAob3V0cHV0LmluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciAhPSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gdHlwZTogJycsXG4gICAgICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IEpTT04uc3RyaW5naWZ5KG91dHB1dCksXG4gICAgICAgICAgICBFcnJvcjogdW5kZWZpbmVkSW5wdXRTZXF1ZW5jZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTKSkgeyAvLyYmIG91dHB1dC50ZWNobm9sb2d5IS5pbmNsdWRlcyhURUNITk9MT0dJRVMuRE5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQklPU1BSSU5HKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuQVNPX0dBUE1FUlMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuQklPU1BSSU5HICsgJyAnICsgVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2VxdWVuY2UsXG4gICAgICAgICAgICBHQ1JTOiBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkdDUlMgKyAnICcgKyBURUNITk9MT0dJRVMuQVNPX0dBUE1FUlMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBNZXJtYWRlMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIExDTVM6IGdjcnNUb0xjbXMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5SQVdfTlVDTEVPVElERVMpICYmIG91dHB1dC50ZWNobm9sb2d5LmluY2x1ZGVzKFRFQ0hOT0xPR0lFUy5STkEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTICsgJyAnICsgVEVDSE5PTE9HSUVTLlJOQSxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZChzZXF1ZW5jZSksXG4gICAgICAgICAgICBBeG9sYWJzOiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNTZW5zZVN0cmFuZChzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzaVJuYU51Y2xlb3RpZGVzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQklPU1BSSU5HKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuU0lfUk5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkJJT1NQUklORyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2VxdWVuY2UsXG4gICAgICAgICAgICBBeG9sYWJzOiBzaVJuYUJpb1NwcmluZ1RvQXhvbGFicyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzaVJuYUJpb1NwcmluZ1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkFYT0xBQlMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuQVhPTEFCUyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEF4b2xhYnM6IHNlcXVlbmNlLFxuICAgICAgICAgICAgR0NSUzogc2lSbmFBeG9sYWJzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLlNJX1JOQSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5HQ1JTICsgJyAnICsgVEVDSE5PTE9HSUVTLlNJX1JOQSxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzaVJuYUdjcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2lSbmFHY3JzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgQXhvbGFiczogc2lSbmFHY3JzVG9BeG9sYWJzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIE1NMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIExDTVM6IGdjcnNUb0xjbXMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5HQ1JTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkdDUlMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogZ2Nyc1RvTnVjbGVvdGlkZXMoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2VxdWVuY2UsXG4gICAgICAgICAgICBNZXJtYWRlMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBMQ01TOiBnY3JzVG9MY21zKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuTUVSTUFERV8xMikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5NRVJNQURFXzEyLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSxcbiAgICAgICAgICAgIEdDUlM6IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSxcbiAgICAgICAgICAgIE1lcm1hZGUxMjogc2VxdWVuY2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZElucHV0U2VxdWVuY2UsXG4gICAgICAgIE51Y2xlb3RpZGVzOiB1bmRlZmluZWRJbnB1dFNlcXVlbmNlLFxuICAgIH07XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCBleHBlY3QsIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IHNlcXVlbmNlVG9TbWlsZXMgfSBmcm9tICcuLi9zdHJ1Y3R1cmVzLXdvcmtzL2Zyb20tbW9ub21lcnMnO1xuaW1wb3J0IHsgU1lOVEhFU0laRVJTIH0gZnJvbSAnLi4vc3RydWN0dXJlcy13b3Jrcy9tYXAnO1xuY2F0ZWdvcnkoJ3NlcXVlbmNlLXRyYW5zbGF0b3InLCAoKSA9PiB7XG4gICAgdGVzdCgnQUdHVENDVENUVEdBQ1RUQUdHQ0MnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKU9DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnQUdHVENDVENUVEdBQ1RUQUdHQ0MnLCBmYWxzZSwgU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaW52YWJhc2ljL2dhbG5hYzEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNnZyhpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2ludmFiYXNpYy9nYWxuYWMyJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzZ3NnKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaW52YWJhc2ljL2dhbG5hYzMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNnZ3MoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdpbnZhYmFzaWMvZ2FsbmFjNCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2dnKGludmFiYXNpYylzKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3VzQ2ZDZlVmR2ZBZicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCd1c0NmQ2ZVZkdmQWYnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3VzQWZzdXNnc2dzZycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygndXNBZnN1c2dzZ3NnJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdVZlVmVWZzQ2ZzdWFjZycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ1VmVWZVZnNDZnN1YWNnJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdzdXN1c3VzYXVhc3UnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1AoPU8pKFMpT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ3N1c3VzdXNhdWFzdScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnQ2ZHZkNmc0dmc0NmJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCdDZkdmQ2ZzR2ZzQ2YnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2FjYWNhY3NhY3NhYycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnYWNhY2Fjc2Fjc2FjJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdjY2NnZ2d1c3VnJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnY2NjZ2dndXN1ZycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnVWZBZkNmR2ZHZkNmQWZVZicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnVWZBZkNmR2ZHZkNmQWZVZicsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzdWN1Q2Z1VWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXN1Y3VDZnVVZicsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzQWZnY3VnVWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNBZmdjdWdVZicsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYyljdUNmdVVmc2MnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKWN1Q2Z1VWZzYycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzY3VzdXN1KEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2N1c3VzdShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXVzQWZzdWN1Q2Z1VWZBZmdjdWdVZmdDZmFjdXN1c3UnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpdXNBZnN1Y3VDZnVVZkFmZ2N1Z1VmZ0NmYWN1c3VzdScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylhc2FjZ0dmdUdmQ2ZBZmFjdWN1YXV1Y2EnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKWFzYWNnR2Z1R2ZDZkFmYWN1Y3VhdXVjYScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzY3NnZ3VHZmNBZkFmQ2Z1Y3VhdXVjdWdhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzY3NnZ3VHZmNBZkFmQ2Z1Y3VhdXVjdWdhJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNjc2FhY1VmY1VmQWZVZnVjdWdnYWN1dWEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNjc2FhY1VmY1VmQWZVZnVjdWdnYWN1dWEnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc2FzYWN1Q2Z1QWZVZlVmY3VnZ2FjdXV1YScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2FzYWN1Q2Z1QWZVZlVmY3VnZ2FjdXV1YScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYyl1c0Fmc2N1ZyhpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpdXNBZnNjdWcoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmKEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc2FzdWFhQ2ZjVWZDZlVmdWd1YWd1dWF1YShHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2FzdWFhQ2ZjVWZDZlVmdWd1YWd1dWF1YShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNjc2F1Y2FjZ3VVZkdmQ2ZhZ2NjZ3VjdXVhKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzY3NhdWNhY2d1VWZHZkNmYWdjY2d1Y3V1YShpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc3VzZ3V1VWZnQ2ZDZlVmYWNhdWN1YWN1YShHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc3VzZ3V1VWZnQ2ZDZlVmYWNhdWN1YWN1YShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBERzsiLCJtb2R1bGUuZXhwb3J0cyA9IGdyb2s7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IHJ1blRlc3RzLCB0ZXN0cyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL3NtaWxlcy10ZXN0cyc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuZXhwb3J0IHsgdGVzdHMgfTtcbi8vbmFtZTogdGVzdFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSByZXN1bHRcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCBydW5UZXN0cygpO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21PYmplY3RzKGRhdGEpO1xuICAgIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
2768
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hHc0M7QUFDNEI7QUFDM0Qsb0JBQW9CO0FBQ3BCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULG9CQUFvQjtBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsK0VBQXdCO0FBQ2hELHFCQUFxQiw4REFBb0I7QUFDbEM7QUFDUDtBQUNBLDRDQUE0Qzs7Ozs7Ozs7Ozs7Ozs7OztBQ3h0QjVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsMEVBQU0sQ0FBQyxpRkFBZ0IsK0NBQStDLHVFQUFvQjtBQUNsRyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLENBQUM7Ozs7Ozs7Ozs7O0FDamJEOzs7Ozs7Ozs7O0FDQUE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNzQztBQUMrQjtBQUN2QztBQUN2QixxQkFBcUIsb0RBQVU7QUFDckI7QUFDakI7QUFDQTtBQUNPO0FBQ1A7QUFDQSwyQkFBMkIsNEVBQVE7QUFDbkMsZUFBZSxrRUFBd0I7QUFDdkMsS0FBSztBQUNMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3N0cnVjdHVyZXMtd29ya3MvY29udmVydGVycy50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9mcm9tLW1vbm9tZXJzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL21hcC50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9tb2wtdHJhbnNmb3JtYXRpb25zLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL3NlcXVlbmNlLWNvZGVzLXRvb2xzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy90ZXN0cy9zbWlsZXMtdGVzdHMudHMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL2V4dGVybmFsIHZhciBcImdyb2tcIiIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3Ivd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3BhY2thZ2UtdGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmV4cG9ydCBjb25zdCB0ZXN0cyA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9hID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAob3B0aW9ucy50aW1lb3V0ID0gMzAwMDApO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnRlc3QgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCB0ZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdEV2ZW50KGV2ZW50LCBoYW5kbGVyLCB0cmlnZ2VyLCBtcyA9IDApIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3ViO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgICAgICAgICAgIHJlamVjdCgndGltZW91dCcpO1xuICAgICAgICAgICAgfSwgbXMpO1xuICAgICAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG4vKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgXCIke2V4cGVjdGVkfVwiLCBnb3QgXCIke2FjdHVhbH1cImApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbCwgZXhwZWN0ZWQsIHRvbGVyYW5jZSA9IDAuMDAxKSB7XG4gICAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkVmFsdWV9IGZvciBrZXkgJHtleHBlY3RlZEtleX0sIGdvdCAke2FjdHVhbFZhbHVlfWApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgICAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgICB9XG59XG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeSwgdGVzdHMpIHtcbiAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0ZXN0cygpO1xufVxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZSkge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcikge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeSkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYmVmb3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHQgPSAoX2EgPSB2YWx1ZS50ZXN0cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXMucHVzaCh5aWVsZCBleGVjVGVzdCh0W2ldLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGVzdCkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9ICh5aWVsZCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYWZ0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAgfSk7XG4gICAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBkZWxheSgxMDAwKTtcbiAgICAgICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleGVjVGVzdCh0LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGNvbnN0IHNraXAgPSBwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICghdC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICBpZiAoIXNraXApXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2tpcClcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6ICdza2lwcGVkJywgbXM6IDAgfTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IChfYSA9IHlpZWxkIHQudGVzdCgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnT0snLCBtczogMCB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgci5tcyA9IHN0b3AgLSBzdGFydDtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG4gICAgICAgIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICAgICAgICByLm5hbWUgPSB0Lm5hbWU7XG4gICAgICAgIHJldHVybiByO1xuICAgIH0pO1xufVxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXIpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN0b3AgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICAgICAgICAgICAgcmVqZWN0KCdUaW1lb3V0IGV4Y2VlZGVkJyk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrSGFuZGxlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpW2ldLnRpdGxlID09IGRpYWxvZ1RpdGxlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJSM1JETEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkxaQ3hGUVVGRkxFTkJRVU03UVVGRlVDeE5RVUZOTEVOQlFVTXNTVUZCU1N4bFFVRjFRaXhEUVVGRE8wRkJSVzVETEUxQlFVMHNTMEZCVnl4TlFVRk5MRU5CVFhSQ08wRkJUa1FzVjBGQmFVSXNUVUZCVFR0SlFVVnlRaXhUUVVGblFpeFBRVUZQTEVOQlFVTXNTMEZCVlN4RlFVRkZMRWxCUVdFN1VVRkRMME1zU1VGQlNTeExRVUZMTEVsQlFVa3NTVUZCU1R0WlFVTm1MRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NZMEZCWXl4RFFVRkRMRU5CUVVNN1NVRkRjRVVzUTBGQlF6dEpRVWhsTEdOQlFVOHNWVUZIZEVJc1EwRkJRVHRCUVVOSUxFTkJRVU1zUlVGT1owSXNUVUZCVFN4TFFVRk9MRTFCUVUwc1VVRk5kRUk3UVVGUFJDeE5RVUZOTEU5QlFVOHNTVUZCU1R0SlFVMW1MRmxCUVZrc1VVRkJaMElzUlVGQlJTeEpRVUZaTEVWQlFVVXNTVUZCZDBJc1JVRkJSU3hQUVVGeFFqczdVVUZEZWtZc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eFJRVUZSTEVOQlFVTTdVVUZEZWtJc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZEYWtJc1QwRkJUeXhoUVVGUUxFOUJRVThzWTBGQlVDeFBRVUZQTEVsQlFWQXNUMEZCVHl4SFFVRkxMRVZCUVVVc1JVRkJRenRSUVVObUxFMUJRVUVzVDBGQlR5eERRVUZETEU5QlFVOHNiME5CUVdZc1QwRkJUeXhEUVVGRExFOUJRVThzUjBGQlN5eExRVUZMTEVWQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTTdVVUZEZGtJc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUYxUWl4RlFVRkZPMWxCUTI1RExFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCVHl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVU3WjBKQlF6TkRMRWxCUVVrc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF6dG5Ra0ZEYUVJc1NVRkJTVHR2UWtGRFJpeE5RVUZOTEVkQlFVY3NUVUZCVFN4SlFVRkpMRVZCUVVVc1EwRkJRenRwUWtGRGRrSTdaMEpCUVVNc1QwRkJUeXhEUVVGTkxFVkJRVVU3YjBKQlEyWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU5zUWl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRE8xRkJRMHdzUTBGQlF5eERRVUZCTEVOQlFVTTdTVUZEU2l4RFFVRkRPME5CUTBZN1FVRkZSQ3hOUVVGTkxGVkJRV2RDTEZOQlFWTXNRMEZCU1N4TFFVRnZRaXhGUVVGRkxFOUJRVEJDTEVWQlFVVXNUMEZCYlVJc1JVRkJSU3hMUVVGaExFTkJRVU03TzFGQlEzUklMRWxCUVVrc1IwRkJhVUlzUTBGQlF6dFJRVU4wUWl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZPMWxCUTNKRExFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVVU3WjBKQlF6ZENMRWxCUVVrN2IwSkJRMFlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmxDUVVObU8yZENRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMjlDUVVOV0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRXRHRuUWtGRFJDeEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1owSkJRMnhDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOb1FpeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTklMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVU3WjBKQlEyUXNSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRE8yZENRVU5zUWl4M1JFRkJkMFE3WjBKQlEzaEVMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU53UWl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRFVDeFBRVUZQTEVWQlFVVXNRMEZCUXp0UlFVTmFMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dERRVUZCTzBGQlJVUXNUVUZCVFN4VlFVRlZMRWxCUVVrc1EwRkJReXhKUVVGWkxFVkJRVVVzU1VGQmQwSXNSVUZCUlN4UFFVRnhRanRKUVVOb1JpeEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1NVRkJTU3hUUVVGVE8xRkJRM0pETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRE9VSXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEZOQlFWTTdVVUZETTBNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRjRU1zUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRXRCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnlSaXhEUVVGRE8wRkJSVVFzWjBaQlFXZEdPMEZCUTJoR0xFMUJRVTBzVlVGQlZTeE5RVUZOTEVOQlFVTXNUVUZCVnl4RlFVRkZMRkZCUVdFN1NVRkRMME1zU1VGQlNTeE5RVUZOTEV0QlFVc3NVVUZCVVR0UlFVTnlRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdGQlFXRXNVVUZCVVN4WFFVRlhMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGREwwUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zVFVGQll5eEZRVUZGTEZGQlFXZENMRVZCUVVVc1UwRkJVeXhIUVVGSExFdEJRVXM3U1VGRE4wVXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NVVUZCVVN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRE8wbEJRM3BFTEVsQlFVa3NRMEZCUXl4UlFVRlJPMUZCUTFnc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFpRVUZaTEZGQlFWRXNVMEZCVXl4TlFVRk5MR2xDUVVGcFFpeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNSR0xFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNXVUZCV1N4RFFVRkRMRTFCUVRoQ0xFVkJRVVVzVVVGQlowTTdTVUZETTBZc1MwRkJTeXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEdGQlFXRXNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVWQlFVVTdVVUZEYmtVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNWMEZCVnl4RFFVRkRPMWxCUTNKRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNjMEpCUVhOQ0xGZEJRVmNzWVVGQllTeERRVUZETEVOQlFVTTdVVUZGYkVVc1RVRkJUU3hYUVVGWExFZEJRVWNzVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMUZCUTNoRExFbEJRVWtzVjBGQlZ5eFpRVUZaTEV0QlFVc3NTVUZCU1N4aFFVRmhMRmxCUVZrc1MwRkJTenRaUVVOb1JTeFhRVUZYTEVOQlFVTXNWMEZCVnl4RlFVRkZMR0ZCUVdFc1EwRkJReXhEUVVGRE8yRkJRM0pETEVsQlFVa3NWMEZCVnl4WlFVRlpMRTFCUVUwc1NVRkJTU3hoUVVGaExGbEJRVmtzVFVGQlRUdFpRVU4yUlN4WlFVRlpMRU5CUVVNc1YwRkJWeXhGUVVGRkxHRkJRV0VzUTBGQlF5eERRVUZETzJGQlEzUkRMRWxCUVVrc1YwRkJWeXhKUVVGSkxHRkJRV0U3V1VGRGJrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxHRkJRV0VzV1VGQldTeFhRVUZYTEZOQlFWTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVNelJqdEJRVU5JTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1YwRkJWeXhEUVVGRExFMUJRWE5DTEVWQlFVVXNVVUZCZDBJN1NVRkRNVVVzVFVGQlRTeFpRVUZaTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVOdVF5eE5RVUZOTEdOQlFXTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJSWFpETEVsQlFVa3NXVUZCV1N4SlFVRkpMR05CUVdNc1JVRkJSVHRSUVVOc1F5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMREJFUVVFd1JDeFpRVUZaTEVkQlFVYzdXVUZEZGtZc1owTkJRV2RETEdOQlFXTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1MwRkRja1E3U1VGRlJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzV1VGQldTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMUZCUTNKRExFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRXRCUVVzc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NTMEZCU3p0WlFVTTFSQ3hYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEycERMRWxCUVVrc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEUxQlFVMHNTVUZCU1N4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzVFVGQlRUdFpRVU51UlN4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRMnhETEVsQlFVa3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETDBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFpRVUZaTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzB0QlEycEdPMEZCUTBnc1EwRkJRenRCUVVWRUxESkNRVUV5UWp0QlFVTXpRaXhOUVVGTkxGVkJRVlVzVVVGQlVTeERRVUZETEZGQlFXZENMRVZCUVVVc1MwRkJhVUk3U1VGRE1VUXNaVUZCWlN4SFFVRkhMRkZCUVZFc1EwRkJRenRKUVVNelFpeExRVUZMTEVWQlFVVXNRMEZCUXp0QlFVTldMRU5CUVVNN1FVRkZSQ3gxUmtGQmRVWTdRVUZEZGtZc1RVRkJUU3hWUVVGVkxFMUJRVTBzUTBGQlF5eE5RVUV5UWp0SlFVTm9SQ3hKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNTVUZCU1N4VFFVRlRPMUZCUTNKRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRGVrTXNRMEZCUXp0QlFVVkVMSE5HUVVGelJqdEJRVU4wUml4TlFVRk5MRlZCUVZVc1MwRkJTeXhEUVVGRExFdEJRVEJDTzBsQlF6bERMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOMlF5eERRVUZETzBGQlIwUXNUVUZCVFN4VlFVRm5RaXhSUVVGUkxFTkJRVU1zVDBGQk9FTTdPenRSUVVNelJTeE5RVUZOTEU5QlFVOHNSMEZCZVVZc1JVRkJSU3hEUVVGRE8xRkJRM3BITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU03VVVGRE4wSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlF6RkNMRXRCUVVzc1RVRkJUU3hEUVVGRExFZEJRVWNzUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlEyaEVMRWxCUVVrc1EwRkJRU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc1VVRkJVU3hMUVVGSkxGTkJRVk1zUlVGQlJUdG5Ra0ZEYkVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dHZRa0ZEYUVVc1UwRkJVenRoUVVOYU8xbEJRMFFzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4WFFVRlhMRWRCUVVjc1YwRkJWeXhEUVVGRExFTkJRVU03V1VGRGRrTXNTVUZCU1R0blFrRkRSaXhKUVVGSkxFdEJRVXNzUTBGQlF5eE5RVUZOTzI5Q1FVTmtMRTFCUVUwc1MwRkJTeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzJGQlEzaENPMWxCUVVNc1QwRkJUeXhEUVVGTkxFVkJRVVU3WjBKQlEyWXNTMEZCU3l4RFFVRkRMRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdZVUZEYmtNN1dVRkRSQ3hOUVVGTkxFTkJRVU1zUjBGQlJ5eE5RVUZCTEV0QlFVc3NRMEZCUXl4TFFVRkxMRzFEUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU0xUWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU03V1VGRFppeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJReTlDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJSV2hFTEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hKUVVGSkxGTkJRVk1zUTBGQlF5eERRVUZETzFsQlF6TkZMRWxCUVVrN1owSkJRMFlzU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3p0dlFrRkRZaXhOUVVGTkxFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXp0aFFVTjJRanRaUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzJkQ1FVTm1MRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMkZCUTJ4RE8xbEJRMFFzU1VGQlNTeExRVUZMTEVOQlFVTXNWMEZCVnp0blFrRkRia0lzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExGZEJRVmNzUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEdMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVms3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRaUVVNNVJpeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGRrSTdVVUZEUkN4TlFVRk5MRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU5zUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVN1dVRkRia01zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRXQ3hSUVVGUkxFVkJRVVVzYzBKQlFYTkNPMmRDUVVOb1F5eEpRVUZKTEVWQlFVVXNXVUZCV1R0blFrRkRiRUlzVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNN1lVRkRjRVFzUTBGQlF5eERRVUZETzFOQlEwbzdVVUZEUkN4UFFVRlBMRTlCUVU4c1EwRkJRenM3UTBGRGFFSTdRVUZGUkN4VFFVRmxMRkZCUVZFc1EwRkJReXhEUVVGUExFVkJRVVVzVTBGQk5rSTdPenRSUVVNMVJDeEpRVUZKTEVOQlFYRkdMRU5CUVVNN1VVRkRNVVlzVFVGQlRTeEpRVUZKTEVkQlFVY3NVMEZCVXl4SlFVRkpMRk5CUVZNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zVTBGQlV5eERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVJ5eEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVTlFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNVVUZCVVN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEycEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZGZWtJc1NVRkJTVHRaUVVOR0xFbEJRVWtzU1VGQlNUdG5Ra0ZEVGl4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZET3p0blFrRkZPVU1zUTBGQlF5eEhRVUZITEVWQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlFTeE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc2JVTkJRVWtzU1VGQlNTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRUUVVNNVJEdFJRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMWxCUTJZc1EwRkJReXhIUVVGSExFVkJRVU1zVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRUUVVOdVJEdFJRVU5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNZVUZCWVR0UlFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGYWtVc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNoQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1EwRkRWanRCUVVWRUxEWkNRVUUyUWp0QlFVTTNRaXhOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VTXNRMEZCUXp0RFFVRkJPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNXVUZCTWtJN08xRkJRekZFTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVTdXVUZEY2tNc1NVRkJTU3hKUVVGSkxFZEJRVmtzUzBGQlN5eERRVUZETzFsQlF6RkNMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVU3WjBKQlEyUXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRuUWtGRFdpeDNSRUZCZDBRN1owSkJRM2hFTEUxQlFVMHNRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETzFsQlF6ZENMRU5CUVVNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5TTEZOQlFWTXNTMEZCU3p0blFrRkRXaXhKUVVGSkxGbEJRVmtzUlVGQlJTeEZRVUZGTzI5Q1FVTnNRaXhKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETzI5Q1FVTmlMRTlCUVU4c1JVRkJSU3hEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRWxCUVVrc1EwRkJReXhKUVVGSk8yOUNRVU5RTEZWQlFWVXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRE1VSXNRMEZCUXp0WlFVTkVMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJRMVlzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPME5CUVVFN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWlVGQlpTeERRVUZETEZkQlFXdENPMGxCUTJoRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU40UkN4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhKUVVGSkxGZEJRVmM3V1VGRGNFUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1MwRkRaanRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJR2R5YjJzZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyZHliMnNuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibWx0Y0c5eWRDQjdUMkp6WlhKMllXSnNaU3dnVTNWaWMyTnlhWEIwYVc5dWZTQm1jbTl0SUNkeWVHcHpKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJsYzNSek9pQjdYRzRnSUZ0clpYazZJSE4wY21sdVoxMDZJSHRjYmlBZ0lDQjBaWE4wY3o4NklGUmxjM1JiWFN3Z1ltVm1iM0psUHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZV1owWlhJL09pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMRnh1SUNBZ0lHSmxabTl5WlZOMFlYUjFjejg2SUhOMGNtbHVaeXdnWVdaMFpYSlRkR0YwZFhNL09pQnpkSEpwYm1kY2JpQWdmVnh1ZlNBOUlIdDlPMXh1WEc1bGVIQnZjblFnYkdWMElHTjFjbkpsYm5SRFlYUmxaMjl5ZVRvZ2MzUnlhVzVuTzF4dVhHNWxlSEJ2Y25RZ2JtRnRaWE53WVdObElHRnpjM1Z5WlNCN1hHNWNiaUFnWlhod2IzSjBJR1oxYm1OMGFXOXVJRzV2ZEU1MWJHd29kbUZzZFdVNklHRnVlU3dnYm1GdFpUODZJSE4wY21sdVp5a2dlMXh1SUNBZ0lHbG1JQ2gyWVd4MVpTQTlQU0J1ZFd4c0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dBa2UyNWhiV1VnUFQwZ2JuVnNiQ0EvSUNkV1lXeDFaU2NnT2lCdVlXMWxmU0J1YjNRZ1pHVm1hVzVsWkdBcE8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdWR1Z6ZEU5d2RHbHZibk1nZTF4dUlDQjBhVzFsYjNWMFB6b2diblZ0WW1WeU8xeHVJQ0IxYm1oaGJtUnNaV1JGZUdObGNIUnBiMjVVYVcxbGIzVjBQem9nYm5WdFltVnlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVkdWemRDQjdYRzRnSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQanRjYmlBZ2JtRnRaVG9nYzNSeWFXNW5PMXh1SUNCallYUmxaMjl5ZVRvZ2MzUnlhVzVuTzF4dUlDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk03WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvWTJGMFpXZHZjbms2SUhOMGNtbHVaeXdnYm1GdFpUb2djM1J5YVc1bkxDQjBaWE4wT2lBb0tTQTlQaUJRY205dGFYTmxQR0Z1ZVQ0c0lHOXdkR2x2Ym5NL09pQlVaWE4wVDNCMGFXOXVjeWtnZTF4dUlDQWdJSFJvYVhNdVkyRjBaV2R2Y25rZ1BTQmpZWFJsWjI5eWVUdGNiaUFnSUNCMGFHbHpMbTVoYldVZ1BTQnVZVzFsTzF4dUlDQWdJRzl3ZEdsdmJuTWdQejg5SUh0OU8xeHVJQ0FnSUc5d2RHbHZibk11ZEdsdFpXOTFkQ0EvUHowZ016QXdNREE3WEc0Z0lDQWdkR2hwY3k1dmNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3p0Y2JpQWdJQ0IwYUdsekxuUmxjM1FnUFNCaGMzbHVZeUFvS1RvZ1VISnZiV2x6WlR4aGJuaytJRDArSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNoaGMzbHVZeUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J5WlhOMWJIUWdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFFnUFNCaGQyRnBkQ0IwWlhOMEtDazdYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1U2SUdGdWVTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2hsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWE52YkhabEtISmxjM1ZzZENrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOU8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCMFpYTjBSWFpsYm5ROFZENG9aWFpsYm5RNklFOWljMlZ5ZG1GaWJHVThWRDRzSUdoaGJtUnNaWEk2SUNoaGNtZHpPaUJVS1NBOVBpQjJiMmxrTENCMGNtbG5aMlZ5T2lBb0tTQTlQaUIyYjJsa0xDQnRjem9nYm5WdFltVnlJRDBnTUNrNklGQnliMjFwYzJVOGMzUnlhVzVuUGlCN1hHNGdJR3hsZENCemRXSTZJRk4xWW5OamNtbHdkR2x2Ymp0Y2JpQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0J6ZFdJZ1BTQmxkbVZ1ZEM1emRXSnpZM0pwWW1Vb0tHRnlaM01wSUQwK0lIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUdoaGJtUnNaWElvWVhKbmN5azdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUhKbGFtVmpkQ2hsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhOMVlpNTFibk4xWW5OamNtbGlaU2dwTzF4dUlDQWdJQ0FnY21WemIyeDJaU2duVDBzbktUdGNiaUFnSUNCOUtUdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUhOMVlpNTFibk4xWW5OamNtbGlaU2dwTzF4dUlDQWdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUhCeVpXWmxjaTF3Y205dGFYTmxMWEpsYW1WamRDMWxjbkp2Y25OY2JpQWdJQ0FnSUhKbGFtVmpkQ2duZEdsdFpXOTFkQ2NwTzF4dUlDQWdJSDBzSUcxektUdGNiaUFnSUNCMGNtbG5aMlZ5S0NrN1hHNGdJSDBwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkR1Z6ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSFJsYzNRNklDZ3BJRDArSUZCeWIyMXBjMlU4WVc1NVBpd2diM0IwYVc5dWN6ODZJRlJsYzNSUGNIUnBiMjV6S1RvZ2RtOXBaQ0I3WEc0Z0lHbG1JQ2gwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwZ2UzMDdYRzRnSUdsbUlDaDBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG5SbGMzUnpJRDA5SUhWdVpHVm1hVzVsWkNsY2JpQWdJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExuUmxjM1J6SUQwZ1cxMDdYRzRnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVkR1Z6ZEhNaExuQjFjMmdvYm1WM0lGUmxjM1FvWTNWeWNtVnVkRU5oZEdWbmIzSjVMQ0J1WVcxbExDQjBaWE4wTENCdmNIUnBiMjV6S1NrN1hHNTlYRzVjYmk4cUlGUmxjM1J6SUhSM2J5QnZZbXBsWTNSeklHWnZjaUJsY1hWaGJHbDBlU3dnZEdoeWIzZHpJR0Z1SUdWNFkyVndkR2x2YmlCcFppQjBhR1Y1SUdGeVpTQnViM1FnWlhGMVlXd3VJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBLR0ZqZEhWaGJEb2dZVzU1TENCbGVIQmxZM1JsWkRvZ1lXNTVLVG9nZG05cFpDQjdYRzRnSUdsbUlDaGhZM1IxWVd3Z0lUMDlJR1Y0Y0dWamRHVmtLVnh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JYaHdaV04wWldRZ1hDSWtlMlY0Y0dWamRHVmtmVndpTENCbmIzUWdYQ0lrZTJGamRIVmhiSDFjSW1BcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBSbXh2WVhRb1lXTjBkV0ZzT2lCdWRXMWlaWElzSUdWNGNHVmpkR1ZrT2lCdWRXMWlaWElzSUhSdmJHVnlZVzVqWlNBOUlEQXVNREF4S1RvZ2RtOXBaQ0I3WEc0Z0lHTnZibk4wSUdGeVpVVnhkV0ZzSUQwZ1RXRjBhQzVoWW5Nb1lXTjBkV0ZzSUMwZ1pYaHdaV04wWldRcElEd2dkRzlzWlhKaGJtTmxPMXh1SUNCcFppQW9JV0Z5WlVWeGRXRnNLVnh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JYaHdaV04wWldRZ0pIdGxlSEJsWTNSbFpIMHNJR2R2ZENBa2UyRmpkSFZoYkgwZ0tIUnZiR1Z5WVc1alpTQTlJQ1I3ZEc5c1pYSmhibU5sZlNsZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd3NklIc2dXMnRsZVRvZ2MzUnlhVzVuWFRvZ1lXNTVJSDBzSUdWNGNHVmpkR1ZrT2lCN0lGdHJaWGs2SUhOMGNtbHVaMTA2SUdGdWVTQjlLU0I3WEc0Z0lHWnZjaUFvWTI5dWMzUWdXMlY0Y0dWamRHVmtTMlY1TENCbGVIQmxZM1JsWkZaaGJIVmxYU0J2WmlCUFltcGxZM1F1Wlc1MGNtbGxjeWhsZUhCbFkzUmxaQ2twSUh0Y2JpQWdJQ0JwWmlBb0lXRmpkSFZoYkM1b1lYTlBkMjVRY205d1pYSjBlU2hsZUhCbFkzUmxaRXRsZVNrcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUhCeWIzQmxjblI1SUZ3aUpIdGxlSEJsWTNSbFpFdGxlWDFjSWlCdWIzUWdabTkxYm1SZ0tUdGNibHh1SUNBZ0lHTnZibk4wSUdGamRIVmhiRlpoYkhWbElEMGdZV04wZFdGc1cyVjRjR1ZqZEdWa1MyVjVYVHRjYmlBZ0lDQnBaaUFvWVdOMGRXRnNWbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQkJjbkpoZVNBbUppQmxlSEJsWTNSbFpGWmhiSFZsSUdsdWMzUmhibU5sYjJZZ1FYSnlZWGtwWEc0Z0lDQWdJQ0JsZUhCbFkzUkJjbkpoZVNoaFkzUjFZV3hXWVd4MVpTd2daWGh3WldOMFpXUldZV3gxWlNrN1hHNGdJQ0FnWld4elpTQnBaaUFvWVdOMGRXRnNWbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQlBZbXBsWTNRZ0ppWWdaWGh3WldOMFpXUldZV3gxWlNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENsY2JpQWdJQ0FnSUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd4V1lXeDFaU3dnWlhod1pXTjBaV1JXWVd4MVpTazdYRzRnSUNBZ1pXeHpaU0JwWmlBb1lXTjBkV0ZzVm1Gc2RXVWdJVDBnWlhod1pXTjBaV1JXWVd4MVpTbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JYaHdaV04wWldRZ0pIdGxlSEJsWTNSbFpGWmhiSFZsZlNCbWIzSWdhMlY1SUNSN1pYaHdaV04wWldSTFpYbDlMQ0JuYjNRZ0pIdGhZM1IxWVd4V1lXeDFaWDFnS1R0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc09pQkJjbkpoZVV4cGEyVThZVzU1UGl3Z1pYaHdaV04wWldRNklFRnljbUY1VEdsclpUeGhibmsrS1NCN1hHNGdJR052Ym5OMElHRmpkSFZoYkV4bGJtZDBhQ0E5SUdGamRIVmhiQzVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJR1Y0Y0dWamRHVmtUR1Z1WjNSb0lEMGdaWGh3WldOMFpXUXViR1Z1WjNSb08xeHVYRzRnSUdsbUlDaGhZM1IxWVd4TVpXNW5kR2dnSVQwZ1pYaHdaV04wWldSTVpXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRUZ5Y21GNWN5QmhjbVVnYjJZZ1pHbG1abVZ5Wlc1MElHeGxibWQwYURvZ1lXTjBkV0ZzSUdGeWNtRjVJR3hsYm1kMGFDQnBjeUFrZTJGamRIVmhiRXhsYm1kMGFIMGdZQ0FyWEc0Z0lDQWdJQ0JnWVc1a0lHVjRjR1ZqZEdWa0lHRnljbUY1SUd4bGJtZDBhQ0JwY3lBa2UyVjRjR1ZqZEdWa1RHVnVaM1JvZldBcE8xeHVJQ0I5WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JoWTNSMVlXeE1aVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR2xtSUNoaFkzUjFZV3hiYVYwZ2FXNXpkR0Z1WTJWdlppQkJjbkpoZVNBbUppQmxlSEJsWTNSbFpGdHBYU0JwYm5OMFlXNWpaVzltSUVGeWNtRjVLVnh1SUNBZ0lDQWdaWGh3WldOMFFYSnlZWGtvWVdOMGRXRnNXMmxkTENCbGVIQmxZM1JsWkZ0cFhTazdYRzRnSUNBZ1pXeHpaU0JwWmlBb1lXTjBkV0ZzVzJsZElHbHVjM1JoYm1ObGIyWWdUMkpxWldOMElDWW1JR1Y0Y0dWamRHVmtXMmxkSUdsdWMzUmhibU5sYjJZZ1QySnFaV04wS1Z4dUlDQWdJQ0FnWlhod1pXTjBUMkpxWldOMEtHRmpkSFZoYkZ0cFhTd2daWGh3WldOMFpXUmJhVjBwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGdHBYU0FoUFNCbGVIQmxZM1JsWkZ0cFhTbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JYaHdaV04wWldRZ0pIdGxlSEJsWTNSbFpGdHBYWDBnWVhRZ2NHOXphWFJwYjI0Z0pIdHBmU3dnWjI5MElDUjdZV04wZFdGc1cybGRmV0FwTzF4dUlDQjlYRzU5WEc1Y2JpOHFJRVJsWm1sdVpYTWdZU0IwWlhOMElITjFhWFJsTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhkR1ZuYjNKNUtHTmhkR1ZuYjNKNU9pQnpkSEpwYm1jc0lIUmxjM1J6T2lBb0tTQTlQaUIyYjJsa0tUb2dkbTlwWkNCN1hHNGdJR04xY25KbGJuUkRZWFJsWjI5eWVTQTlJR05oZEdWbmIzSjVPMXh1SUNCMFpYTjBjeWdwTzF4dWZWeHVYRzR2S2lCRVpXWnBibVZ6SUdFZ1puVnVZM1JwYjI0Z2RHOGdZbVVnWlhobFkzVjBaV1FnWW1WbWIzSmxJSFJvWlNCMFpYTjBjeUJwYmlCMGFHbHpJR05oZEdWbmIzSjVJR0Z5WlNCbGVHVmpkWFJsWkM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmlaV1p2Y21Vb1ltVm1iM0psT2lBb0tTQTlQaUJRY205dGFYTmxQSFp2YVdRK0tUb2dkbTlwWkNCN1hHNGdJR2xtSUNoMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRJRDA5SUhWdVpHVm1hVzVsWkNsY2JpQWdJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMGdlMzA3WEc0Z0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1WW1WbWIzSmxJRDBnWW1WbWIzSmxPMXh1ZlZ4dVhHNHZLaUJFWldacGJtVnpJR0VnWm5WdVkzUnBiMjRnZEc4Z1ltVWdaWGhsWTNWMFpXUWdZV1owWlhJZ2RHaGxJSFJsYzNSeklHbHVJSFJvYVhNZ1kyRjBaV2R2Y25rZ1lYSmxJR1Y0WldOMWRHVmtMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGbWRHVnlLR0ZtZEdWeU9pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStLVG9nZG05cFpDQjdYRzRnSUdsbUlDaDBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwOUlIVnVaR1ZtYVc1bFpDbGNiaUFnSUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRJRDBnZTMwN1hHNGdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdVlXWjBaWElnUFNCaFpuUmxjanRjYm4xY2JseHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2NuVnVWR1Z6ZEhNb2IzQjBhVzl1Y3o4NklIc2dZMkYwWldkdmNuay9PaUJ6ZEhKcGJtY3NJSFJsYzNRL09pQnpkSEpwYm1jZ2ZTa2dlMXh1SUNCamIyNXpkQ0J5WlhOMWJIUnpPaUI3SUdOaGRHVm5iM0o1UHpvZ2MzUnlhVzVuTENCdVlXMWxQem9nYzNSeWFXNW5MQ0J6ZFdOalpYTnpPaUJpYjI5c1pXRnVMQ0J5WlhOMWJIUTZJSE4wY21sdVp5d2diWE02SUc1MWJXSmxjaUI5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjMjlzWlM1c2IyY29ZRkoxYm01cGJtY2dkR1Z6ZEhOZ0tUdGNiaUFnWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJZ1BTQW5KenRjYmlBZ1ptOXlJQ2hqYjI1emRDQmJhMlY1TENCMllXeDFaVjBnYjJZZ1QySnFaV04wTG1WdWRISnBaWE1vZEdWemRITXBLU0I3WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk0vTG1OaGRHVm5iM0o1SUNFOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdhV1lnS0NGclpYa3VkRzlNYjNkbGNrTmhjMlVvS1M1emRHRnlkSE5YYVhSb0tHOXdkR2x2Ym5NL0xtTmhkR1ZuYjNKNUxuUnZURzkzWlhKRFlYTmxLQ2twS1Z4dUlDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzI5c1pTNXNiMmNvWUZOMFlYSjBaV1FnSkh0clpYbDlJR05oZEdWbmIzSjVZQ2s3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVVwWEc0Z0lDQWdJQ0FnSUdGM1lXbDBJSFpoYkhWbExtSmxabTl5WlNncE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0hnNklHRnVlU2tnZTF4dUlDQWdJQ0FnZG1Gc2RXVXVZbVZtYjNKbFUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0IwSUQwZ2RtRnNkV1V1ZEdWemRITWdQejhnVzEwN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ1cxMDdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBMbXhsYm1kMGFEc2dhU3NyS1Z4dUlDQWdJQ0FnY21WekxuQjFjMmdvWVhkaGFYUWdaWGhsWTFSbGMzUW9kRnRwWFN3Z2IzQjBhVzl1Y3o4dWRHVnpkQ2twTzF4dVhHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVXNJRzF6T2lBd2ZTazdYRzRnSUNBZ2FXWWdLSFpoYkhWbExtSmxabTl5WlZOMFlYUjFjeWxjYmlBZ0lDQWdJR1JoZEdFdWNIVnphQ2g3WTJGMFpXZHZjbms2SUd0bGVTd2dibUZ0WlRvZ0oybHVhWFFuTENCeVpYTjFiSFE2SUhaaGJIVmxMbUpsWm05eVpWTjBZWFIxY3l3Z2MzVmpZMlZ6Y3pvZ1ptRnNjMlVzSUcxek9pQXdmU2s3WEc0Z0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0M0dUxtUmhkR0VwTzF4dUlDQjlYRzRnSUdGM1lXbDBJR1JsYkdGNUtERXdNREFwTzF4dUlDQnBaaUFvWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lISmxjM1ZzZEhNdWNIVnphQ2g3WEc0Z0lDQWdJQ0JqWVhSbFoyOXllVG9nSjFWdWFHRnVaR3hsWkNCbGVHTmxjSFJwYjI1ekp5eGNiaUFnSUNBZ0lHNWhiV1U2SUNkbGVHTmxjSFJwYjI1ekp5eGNiaUFnSUNBZ0lISmxjM1ZzZERvZ1ozSnZheTV6YUdWc2JDNXNZWE4wUlhKeWIzSXNJSE4xWTJObGMzTTZJR1poYkhObExDQnRjem9nTUZ4dUlDQWdJSDBwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlZ4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCbGVHVmpWR1Z6ZENoME9pQlVaWE4wTENCd2NtVmthV05oZEdVNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDa2dlMXh1SUNCc1pYUWdjam9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY3NJRzF6T2lCdWRXMWlaWElnZlR0Y2JpQWdZMjl1YzNRZ2MydHBjQ0E5SUhCeVpXUnBZMkYwWlNBaFBTQjFibVJsWm1sdVpXUWdKaVlnS0NGMExtNWhiV1V1ZEc5TWIzZGxja05oYzJVb0tTNXpkR0Z5ZEhOWGFYUm9LSEJ5WldScFkyRjBaUzUwYjB4dmQyVnlRMkZ6WlNncEtTazdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmV0FwTzF4dUlDQmpiMjV6ZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNWNiaUFnZEhKNUlIdGNiaUFnSUNCcFppQW9jMnRwY0NsY2JpQWdJQ0FnSUhJZ1BTQjdjM1ZqWTJWemN6b2dkSEoxWlN3Z2NtVnpkV3gwT2lBbmMydHBjSEJsWkNjc0lHMXpPaUF3ZlR0Y2JpQWdJQ0JsYkhObFhHNGdJQ0FnSUNCeUlEMGdlM04xWTJObGMzTTZJSFJ5ZFdVc0lISmxjM1ZzZERvZ1lYZGhhWFFnZEM1MFpYTjBLQ2tnUHo4Z0owOUxKeXdnYlhNNklEQjlPMXh1SUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklHWmhiSE5sTENCeVpYTjFiSFE2SUhndWRHOVRkSEpwYm1jb0tTd2diWE02SURCOU8xeHVJQ0I5WEc0Z0lHTnZibk4wSUhOMGIzQWdQU0J1WlhjZ1JHRjBaU2dwTzF4dUlDQXZMeUJBZEhNdGFXZHViM0psWEc0Z0lISXViWE1nUFNCemRHOXdJQzBnYzNSaGNuUTdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1JtbHVhWE5vWldRZ0pIdDBMbU5oZEdWbmIzSjVmU0FrZTNRdWJtRnRaWDBnWm05eUlDUjdjaTV0YzMwZ2JYTmdLVHRjYmx4dUlDQnlMbU5oZEdWbmIzSjVJRDBnZEM1allYUmxaMjl5ZVR0Y2JpQWdjaTV1WVcxbElEMGdkQzV1WVcxbE8xeHVJQ0J5WlhSMWNtNGdjanRjYm4xY2JseHVMeW9nVjJGcGRITWdXMjF6WFNCdGFXeHNhWE5sWTI5dVpITWdLaTljYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJRzVsZHlCUWNtOXRhWE5sS0NoeUtTQTlQaUJ6WlhSVWFXMWxiM1YwS0hJc0lHMXpLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCaGQyRnBkRU5vWldOcktHTm9aV05yU0dGdVpHeGxjam9nS0NrZ1BUNGdZbTl2YkdWaGJpazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUd4bGRDQnpkRzl3T2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdjMlYwVkdsdFpXOTFkQ2dvS1NBOVBpQjdYRzRnSUNBZ0lDQnpkRzl3SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J3Y21WbVpYSXRjSEp2YldselpTMXlaV3BsWTNRdFpYSnliM0p6WEc0Z0lDQWdJQ0J5WldwbFkzUW9KMVJwYldWdmRYUWdaWGhqWldWa1pXUW5LVHRjYmlBZ0lDQjlMQ0ExTURBcE8xeHVJQ0FnSUdaMWJtTjBhVzl1SUdOb1pXTnJLQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tHTm9aV05yU0dGdVpHeGxjaWdwS1NCN1hHNGdJQ0FnSUNBZ0lITjBiM0FnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tDRnpkRzl3S1Z4dUlDQWdJQ0FnSUNCelpYUlVhVzFsYjNWMEtHTm9aV05yTENBMU1DazdYRzRnSUNBZ2ZWeHVJQ0FnSUdOb1pXTnJLQ2s3WEc0Z0lIMHBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTkVhV0ZzYjJkUWNtVnpaVzUwS0dScFlXeHZaMVJwZEd4bE9uTjBjbWx1WnlrNklHSnZiMnhsWVc0Z2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwUFRBN0lHa2dQQ0JFUnk1RWFXRnNiMmN1WjJWMFQzQmxia1JwWVd4dlozTW9LUzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaEVSeTVFYVdGc2IyY3VaMlYwVDNCbGJrUnBZV3h2WjNNb0tWdHBYUzUwYVhSc1pTQTlQU0JrYVdGc2IyZFVhWFJzWlNsY2JpQWdJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JpSmRmUT09IiwiaW1wb3J0IHsgbGNtc1RvR2NycyB9IGZyb20gJy4vbWFwJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBkZWxpbWl0ZXIgfSBmcm9tICcuL21hcCc7XG4vL25hbWU6IGdjcnNUb0xjbXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBMQ01TfVxuZXhwb3J0IGZ1bmN0aW9uIGdjcnNUb0xjbXMoc2VxdWVuY2UpIHtcbiAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGxjbXNUb0djcnMpO1xuICAgIGNvbnN0IGFycjEgPSBkZi5nZXRDb2woJ0dDUlMnKS50b0xpc3QoKTtcbiAgICBjb25zdCBhcnIyID0gZGYuZ2V0Q29sKCdMQ01TJykudG9MaXN0KCk7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgYXJyMS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4gb2JqW2VsZW1lbnRdID0gYXJyMltpbmRleF0pO1xuICAgIG9ialtkZWxpbWl0ZXJdID0gZGVsaW1pdGVyO1xuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIC8vICAgYXJyMVtpXSA9IGFycjFbaV0ucmVwbGFjZSgnKCcsICdcXFxcKCcpO1xuICAgIC8vICAgYXJyMVtpXSA9IGFycjFbaV0ucmVwbGFjZSgnKScsICdcXFxcKScpO1xuICAgIC8vIH1cbiAgICAvLyBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCcoJyArIGFycjEuam9pbignfCcpICsgJyknLCAnZycpO1xuICAgIC8vIGxldCByMSA9IHNlcXVlbmNlLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbihjb2RlKSB7cmV0dXJuIG9ialtjb2RlXTt9KTtcbiAgICBjb25zdCBjb2RlcyA9IGFycjEuY29uY2F0KGRlbGltaXRlcikuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDsgfSk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCByMSA9ICcnO1xuICAgIHdoaWxlIChpIDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShpLCBpICsgYy5sZW5ndGgpKTtcbiAgICAgICAgcjEgKz0gb2JqW3NlcXVlbmNlLnNsaWNlKGksIGkgKyBtYXRjaGVkQ29kZS5sZW5ndGgpXTtcbiAgICAgICAgaSArPSBtYXRjaGVkQ29kZS5sZW5ndGg7XG4gICAgfVxuICAgIHdoaWxlIChyMS5pbmRleE9mKCcvLycpICE9IC0xKVxuICAgICAgICByMSA9IHIxLnJlcGxhY2UoJy8vJywgJy8nKTtcbiAgICByZXR1cm4gcjE7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvQmlvU3ByaW5nXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEROQSBudWNsZW90aWRlc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBHYXBtZXJzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvQmlvU3ByaW5nKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yRWRnZXMgPSB7XG4gICAgICAgICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdUJzogJzUqJywgJ0EnOiAnNionLCAnQyc6ICc3KicsICdHJzogJzgqJ1xuICAgIH07XG4gICAgY29uc3Qgb2JqRm9yQ2VudGVyID0ge1xuICAgICAgICAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnVCc6ICdUKicsICdBJzogJ0EqJywgJ0MnOiAnOSonLCAnRyc6ICdHKidcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFR8Q3xHKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICByZXR1cm4gKGNvdW50ID4gNCAmJiBjb3VudCA8IDE1KSA/IG9iakZvckNlbnRlclt4XSA6IG9iakZvckVkZ2VzW3hdO1xuICAgIH0pLnNsaWNlKDAsIChudWNsZW90aWRlcy5lbmRzV2l0aCgnKGludmFiYXNpYyknKSB8fCBudWNsZW90aWRlcy5lbmRzV2l0aCgnKEdhbE5BYy0yLUpOSiknKSkgP1xuICAgICAgICBudWNsZW90aWRlcy5sZW5ndGggOiAyICogY291bnQgKyAxKTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEROQSBudWNsZW90aWRlc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBHQ1JTIC8gR2FwbWVyc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0djcnMobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JFZGdlcyA9IHtcbiAgICAgICAgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ1QnOiAnbW9lVW5wcycsXG4gICAgICAgICdBJzogJ21vZUFucHMnLCAnQyc6ICdtb2U1bUNucHMnLCAnRyc6ICdtb2VHbnBzJ1xuICAgIH07XG4gICAgY29uc3Qgb2JqRm9yQ2VudGVyID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQyc6ICc1bUNwcycsICdBJzogJ0FwcycsICdUJzogJ1RwcycsICdHJzogJ0dwcycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxUfEN8RykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50IDwgNSlcbiAgICAgICAgICAgIHJldHVybiAoY291bnQgPT0gNCkgPyBvYmpGb3JFZGdlc1t4XS5zbGljZSgwLCAtMykgKyAncHMnIDogb2JqRm9yRWRnZXNbeF07XG4gICAgICAgIGlmIChjb3VudCA8IDE1KVxuICAgICAgICAgICAgcmV0dXJuIChjb3VudCA9PSAxNCkgPyBvYmpGb3JDZW50ZXJbeF0uc2xpY2UoMCwgLTIpICsgJ25wcycgOiBvYmpGb3JDZW50ZXJbeF07XG4gICAgICAgIHJldHVybiBvYmpGb3JFZGdlc1t4XTtcbiAgICB9KS5zbGljZSgwLCAobnVjbGVvdGlkZXMuZW5kc1dpdGgoJyhpbnZhYmFzaWMpJykgfHwgbnVjbGVvdGlkZXMuZW5kc1dpdGgoJyhHYWxOQWMtMi1KTkopJykpID9cbiAgICAgICAgbnVjbGVvdGlkZXMubGVuZ3RoIDogLTMpO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzQmlvU3ByaW5nVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEROQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzQmlvU3ByaW5nVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJyonOiAnJywgJzUnOiAnVCcsICc2JzogJ0EnLCAnNyc6ICdDJywgJzgnOiAnRycsICc5JzogJ0MnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfFxcKnw1fDZ8N3w4fDkpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEJpb1NwcmluZyAvIEdhcG1lcnN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSUyAvIEdhcG1lcnN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc0Jpb1NwcmluZ1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJzUqJzogJ21vZVVucHMnLCAnNionOiAnbW9lQW5wcycsICc3Kic6ICdtb2U1bUNucHMnLCAnOConOiAnbW9lR25wcycsICc5Kic6ICc1bUNwcycsICdBKic6ICdBcHMnLCAnVConOiAnVHBzJyxcbiAgICAgICAgJ0cqJzogJ0dwcycsICdDKic6ICdDcHMnLCAnNSc6ICdtb2VVJywgJzYnOiAnbW9lQScsICc3JzogJ21vZTVtQycsICc4JzogJ21vZUcnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfDVcXCp8NlxcKnw3XFwqfDhcXCp8OVxcKnxBXFwqfFRcXCp8R1xcKnxDXFwqfDV8Nnw3fDgpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHJldHVybiAoY291bnQgPT0gNCkgPyBvYmpbeF0uc2xpY2UoMCwgLTMpICsgJ3BzJyA6IChjb3VudCA9PSAxNCkgPyBvYmpbeF0uc2xpY2UoMCwgLTIpICsgJ25wcycgOiBvYmpbeF07XG4gICAgfSk7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNHY3JzVG9CaW9TcHJpbmdcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSUyAvIEdhcG1lcnN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gR2FwbWVyc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzR2Nyc1RvQmlvU3ByaW5nKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnbW9lVCc6ICc1JywgJ21vZUEnOiAnNicsICdtb2U1bUMnOiAnNycsICdtb2VHJzogJzgnLCAnbW9lVSc6ICc1JywgJzVtQyc6ICc5JywgJ25wcyc6ICcqJywgJ3BzJzogJyonLCAnVSc6ICdUJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxtb2VUfG1vZUF8bW9lNW1DfG1vZUd8bW9lVXw1bUN8bnBzfHBzfFUpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzR2Nyc1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSUyAvIEdhcG1lcnN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogRE5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNHY3JzVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ21vZSc6ICcnLCAnNW0nOiAnJywgJ24nOiAnJywgJ3BzJzogJycsICdVJzogJ1QnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfG1vZXw1bXxufHBzfFUpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUJpb1NwcmluZ1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQmlvU3ByaW5nVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJzEnOiAnVScsICcyJzogJ0EnLCAnMyc6ICdDJywgJzQnOiAnRycsICc1JzogJ1UnLCAnNic6ICdBJywgJzcnOiAnQycsICc4JzogJ0cnLCAnKic6ICcnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfDF8MnwzfDR8NXw2fDd8OHxcXCopL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUJpb1NwcmluZ1RvQXhvbGFic1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBBeG9sYWJzIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFCaW9TcHJpbmdUb0F4b2xhYnMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICcxJzogJ1VmJywgJzInOiAnQWYnLCAnMyc6ICdDZicsICc0JzogJ0dmJywgJzUnOiAndScsICc2JzogJ2EnLCAnNyc6ICdjJywgJzgnOiAnZycsICcqJzogJ3MnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfDF8MnwzfDR8NXw2fDd8OHxcXCopL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUJpb1NwcmluZ1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBHQ1JTfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQmlvU3ByaW5nVG9HY3JzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnMSc6ICdmVScsICcyJzogJ2ZBJywgJzMnOiAnZkMnLCAnNCc6ICdmRycsICc1JzogJ21VJywgJzYnOiAnbUEnLCAnNyc6ICdtQycsICc4JzogJ21HJywgJyonOiAncHMnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfDF8MnwzfDR8NXw2fDd8OHxcXCopL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUF4b2xhYnNUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFBeG9sYWJzVG9HY3JzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnVWYnOiAnZlUnLCAnQWYnOiAnZkEnLCAnQ2YnOiAnZkMnLCAnR2YnOiAnZkcnLCAndSc6ICdtVScsICdhJzogJ21BJywgJ2MnOiAnbUMnLCAnZyc6ICdtRycsICdzJzogJ3BzJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxVZnxBZnxDZnxHZnx1fGF8Y3xnfHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUF4b2xhYnNUb0Jpb1NwcmluZ1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBBeG9sYWJzIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFBeG9sYWJzVG9CaW9TcHJpbmcobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdVZic6ICcxJywgJ0FmJzogJzInLCAnQ2YnOiAnMycsICdHZic6ICc0JywgJ3UnOiAnNScsICdhJzogJzYnLCAnYyc6ICc3JywgJ2cnOiAnOCcsICdzJzogJyonLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfFVmfEFmfENmfEdmfHV8YXxjfGd8cykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hQXhvbGFic1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUF4b2xhYnNUb051Y2xlb3RpZGVzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnVWYnOiAnVScsICdBZic6ICdBJywgJ0NmJzogJ0MnLCAnR2YnOiAnRycsICd1JzogJ1UnLCAnYSc6ICdBJywgJ2MnOiAnQycsICdnJzogJ0cnLCAncyc6ICcnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfFVmfEFmfENmfEdmfHV8YXxjfGd8cykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hR2Nyc1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFHY3JzVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ2ZVJzogJ1UnLCAnZkEnOiAnQScsICdmQyc6ICdDJywgJ2ZHJzogJ0cnLCAnbVUnOiAnVScsICdtQSc6ICdBJywgJ21DJzogJ0MnLCAnbUcnOiAnRycsICdwcyc6ICcnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfGZVfGZBfGZDfGZHfG1VfG1BfG1DfG1HfHBzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFHY3JzVG9CaW9TcHJpbmdcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBzaVJOQX1cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUdjcnNUb0Jpb1NwcmluZyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ2ZVJzogJzEnLCAnZkEnOiAnMicsICdmQyc6ICczJywgJ2ZHJzogJzQnLCAnbVUnOiAnNScsICdtQSc6ICc2JywgJ21DJzogJzcnLCAnbUcnOiAnOCcsICdwcyc6ICcqJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtR3xwcykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hR2Nyc1RvQXhvbGFic1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUdjcnNUb0F4b2xhYnMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdmVSc6ICdVZicsICdmQSc6ICdBZicsICdmQyc6ICdDZicsICdmRyc6ICdHZicsICdtVSc6ICd1JywgJ21BJzogJ2EnLCAnbUMnOiAnYycsICdtRyc6ICdnJywgJ3BzJzogJ3MnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfGZVfGZBfGZDfGZHfG1VfG1BfG1DfG1HfHBzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZFxuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZChudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckxlZnRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICc2KicsICdVJzogJzUqJywgJ0cnOiAnOConLCAnQyc6ICc3KicgfTtcbiAgICBjb25zdCBvYmpGb3JSaWdodEVkZ2UgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJyo2JywgJ1UnOiAnKjUnLCAnRyc6ICcqOCcsICdDJzogJyo3JyB9O1xuICAgIGNvbnN0IG9iakZvck9kZEluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJzYnLCAnVSc6ICc1JywgJ0cnOiAnOCcsICdDJzogJzcnIH07XG4gICAgY29uc3Qgb2JqRm9yRXZlbkluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJzInLCAnVSc6ICcxJywgJ0cnOiAnNCcsICdDJzogJzMnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VXxHfEMpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yTGVmdEVkZ2VbeF07XG4gICAgICAgIGlmIChjb3VudCA+IG51Y2xlb3RpZGVzLmxlbmd0aCAtIDMpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yUmlnaHRFZGdlW3hdO1xuICAgICAgICByZXR1cm4gKGNvdW50ICUgMiA9PSAwKSA/IG9iakZvckV2ZW5JbmRpY2VzW3hdIDogb2JqRm9yT2RkSW5kaWNlc1t4XTtcbiAgICB9KTtcbn1cbi8vbmFtZTogc2lSbmFOdWNsZW90aWRlc1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSU31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYU51Y2xlb3RpZGVzVG9HY3JzKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yTGVmdEVkZ2UgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJ21BcHMnLCAnVSc6ICdtVXBzJywgJ0cnOiAnbUdwcycsICdDJzogJ21DcHMnIH07XG4gICAgY29uc3Qgb2JqRm9yUmlnaHRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICdwc21BJywgJ1UnOiAncHNtVScsICdHJzogJ3BzbUcnLCAnQyc6ICdwc21DJyB9O1xuICAgIGNvbnN0IG9iakZvckV2ZW5JbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdmQScsICdVJzogJ2ZVJywgJ0cnOiAnZkcnLCAnQyc6ICdmQycgfTtcbiAgICBjb25zdCBvYmpGb3JPZGRJbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdtQScsICdVJzogJ21VJywgJ0cnOiAnbUcnLCAnQyc6ICdtQycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxVfEd8QykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50IDwgMilcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JMZWZ0RWRnZVt4XTtcbiAgICAgICAgaWYgKGNvdW50ID4gbnVjbGVvdGlkZXMubGVuZ3RoIC0gMylcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JSaWdodEVkZ2VbeF07XG4gICAgICAgIHJldHVybiAoY291bnQgJSAyID09IDApID8gb2JqRm9yRXZlbkluZGljZXNbeF0gOiBvYmpGb3JPZGRJbmRpY2VzW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNTZW5zZVN0cmFuZFxuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQXhvbGFic31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNTZW5zZVN0cmFuZChudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckxlZnRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICdhcycsICdVJzogJ3VzJywgJ0cnOiAnZ3MnLCAnQyc6ICdjcycgfTtcbiAgICBjb25zdCBvYmpGb3JTb21lSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnQWYnLCAnVSc6ICdVZicsICdHJzogJ0dmJywgJ0MnOiAnQ2YnIH07XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICdhJywgJ1UnOiAndScsICdHJzogJ2cnLCAnQyc6ICdjJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFV8R3xDKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPCAyKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvckxlZnRFZGdlW3hdO1xuICAgICAgICBpZiAoY291bnQgPT0gNiB8fCAoY291bnQgPiA3ICYmIGNvdW50IDwgMTEpKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvclNvbWVJbmRpY2VzW3hdO1xuICAgICAgICBpZiAoY291bnQgPT0gbnVjbGVvdGlkZXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHJldHVybiAnYSc7XG4gICAgICAgIHJldHVybiBvYmpbeF07XG4gICAgfSk7XG59XG4vL25hbWU6IHNpUm5hTnVjbGVvdGlkZVRvQXhvbGFic0FudGlzZW5zZVN0cmFuZFxuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQXhvbGFic31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNBbnRpc2Vuc2VTdHJhbmQobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JTbWFsbExpbmthZ2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdhcycsICdVJzogJ3VzJywgJ0cnOiAnZ3MnLCAnQyc6ICdjcycgfTtcbiAgICBjb25zdCBvYmpGb3JCaWdMaW5rYWdlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnQWZzJywgJ1UnOiAnVWZzJywgJ0cnOiAnR2ZzJywgJ0MnOiAnQ2ZzJyB9O1xuICAgIGNvbnN0IG9iakZvclNvbWVJbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdBZicsICdVJzogJ1VmJywgJ0cnOiAnR2YnLCAnQyc6ICdDZicgfTtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ2EnLCAnVSc6ICd1JywgJ0cnOiAnZycsICdDJzogJ2MnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VXxHfEMpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA+IDE5ICYmIGNvdW50IDwgMjIpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yU21hbGxMaW5rYWdlc1t4XTtcbiAgICAgICAgaWYgKGNvdW50ID09IDApXG4gICAgICAgICAgICByZXR1cm4gJ3VzJztcbiAgICAgICAgaWYgKGNvdW50ID09IDEpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yQmlnTGlua2FnZXNbeF07XG4gICAgICAgIHJldHVybiAoY291bnQgPT0gNSB8fCBjb3VudCA9PSA3IHx8IGNvdW50ID09IDggfHwgY291bnQgPT0gMTMgfHwgY291bnQgPT0gMTUpID8gb2JqRm9yU29tZUluZGljZXNbeF0gOiBvYmpbeF07XG4gICAgfSk7XG59XG4vL25hbWU6IGdjcnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIGdjcnNUb051Y2xlb3RpZGVzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnbUFwcyc6ICdBJywgJ21VcHMnOiAnVScsICdtR3BzJzogJ0cnLCAnbUNwcyc6ICdDJywgJ2ZBcHMnOiAnQScsICdmVXBzJzogJ1UnLCAnZkdwcyc6ICdHJywgJ2ZDcHMnOiAnQycsXG4gICAgICAgICdmVSc6ICdVJywgJ2ZBJzogJ0EnLCAnZkMnOiAnQycsICdmRyc6ICdHJywgJ21VJzogJ1UnLCAnbUEnOiAnQScsICdtQyc6ICdDJywgJ21HJzogJ0cnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfG1BcHN8bVVwc3xtR3BzfG1DcHN8ZkFwc3xmVXBzfGZHcHN8ZkNwc3xmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtRykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IGdjcnNUb01lcm1hZGUxMlxuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IE1lcm1hZGUgMTIgLyBzaVJOQX1cbmV4cG9ydCBmdW5jdGlvbiBnY3JzVG9NZXJtYWRlMTIobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdtQXBzJzogJ2UnLCAnbVVwcyc6ICdoJywgJ21HcHMnOiAnZycsICdtQ3BzJzogJ2YnLCAnZkFwcyc6ICdpJywgJ2ZVcHMnOiAnbCcsICdmR3BzJzogJ2snLCAnZkNwcyc6ICdqJywgJ2ZVJzogJ0wnLFxuICAgICAgICAnZkEnOiAnSScsICdmQyc6ICdKJywgJ2ZHJzogJ0snLCAnbVUnOiAnSCcsICdtQSc6ICdFJywgJ21DJzogJ0YnLCAnbUcnOiAnRycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8bUFwc3xtVXBzfG1HcHN8bUNwc3xmQXBzfGZVcHN8Zkdwc3xmQ3BzfGZVfGZBfGZDfGZHfG1VfG1BfG1DfG1HKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbiIsImltcG9ydCB7IG1hcCwgc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMsIFNZTlRIRVNJWkVSUywgVEVDSE5PTE9HSUVTLCBNT0RJRklDQVRJT05TLCBkZWxpbWl0ZXIgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBpc1ZhbGlkU2VxdWVuY2UgfSBmcm9tICcuL3NlcXVlbmNlLWNvZGVzLXRvb2xzJztcbmltcG9ydCB7IGdldE51Y2xlb3RpZGVzTW9sIH0gZnJvbSAnLi9tb2wtdHJhbnNmb3JtYXRpb25zJztcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZVRvTW9sVjMwMDAoc2VxdWVuY2UsIGludmVydGVkID0gZmFsc2UsIG9jbFJlbmRlciA9IGZhbHNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBvYmogPSBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCk7XG4gICAgbGV0IGNvZGVzID0gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoT2JqZWN0LmtleXMob2JqKSk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IHNtaWxlc0NvZGVzID0gW107XG4gICAgY29uc3QgY29kZXNMaXN0ID0gW107XG4gICAgY29uc3QgbGlua3MgPSBbJ3MnLCAncHMnLCAnKiddO1xuICAgIGNvbnN0IGluY2x1ZGVzU3RhbmRhcmRMaW5rQWxyZWFkeSA9IFsnZScsICdoJywgLyonZycsKi8gJ2YnLCAnaScsICdsJywgJ2snLCAnaiddO1xuICAgIGNvbnN0IGRyb3Bkb3ducyA9IE9iamVjdC5rZXlzKE1PRElGSUNBVElPTlMpO1xuICAgIGNvZGVzID0gY29kZXMuY29uY2F0KGRyb3Bkb3ducykuY29uY2F0KGRlbGltaXRlcik7XG4gICAgd2hpbGUgKGkgPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IGNvZGVzLmZpbmQoKHMpID0+IHMgPT0gc2VxdWVuY2Uuc2xpY2UoaSwgaSArIHMubGVuZ3RoKSk7XG4gICAgICAgIGkgKz0gY29kZS5sZW5ndGg7XG4gICAgICAgIGludmVydGVkID8gY29kZXNMaXN0LnVuc2hpZnQoY29kZSkgOiBjb2Rlc0xpc3QucHVzaChjb2RlKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2Rlc0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRyb3Bkb3ducy5pbmNsdWRlcyhjb2Rlc0xpc3RbaV0pKSB7XG4gICAgICAgICAgICBzbWlsZXNDb2Rlcy5wdXNoKChpID49IGNvZGVzTGlzdC5sZW5ndGggLyAyKSA/XG4gICAgICAgICAgICAgICAgTU9ESUZJQ0FUSU9OU1tjb2Rlc0xpc3RbaV1dLnJpZ2h0IDogTU9ESUZJQ0FUSU9OU1tjb2Rlc0xpc3RbaV1dLmxlZnQpO1xuICAgICAgICAgICAgaWYgKCEoaSA8IGNvZGVzTGlzdC5sZW5ndGggLSAxICYmIGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpICsgMV0pKSlcbiAgICAgICAgICAgICAgICBzbWlsZXNDb2Rlcy5wdXNoKHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaW5rcy5pbmNsdWRlcyhjb2Rlc0xpc3RbaV0pIHx8XG4gICAgICAgICAgICAgICAgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICAoaSA8IGNvZGVzTGlzdC5sZW5ndGggLSAxICYmIGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpICsgMV0pKSlcbiAgICAgICAgICAgICAgICBzbWlsZXNDb2Rlcy5wdXNoKG9ialtjb2Rlc0xpc3RbaV1dKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2gob2JqW2NvZGVzTGlzdFtpXV0pO1xuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2goc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXROdWNsZW90aWRlc01vbChzbWlsZXNDb2Rlcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2VUb1NtaWxlcyhzZXF1ZW5jZSwgaW52ZXJ0ZWQgPSBmYWxzZSwgZm9ybWF0KSB7XG4gICAgY29uc3Qgb2JqID0gZ2V0T2JqZWN0V2l0aENvZGVzQW5kU21pbGVzKHNlcXVlbmNlLCBmb3JtYXQpO1xuICAgIGxldCBjb2RlcyA9IHNvcnRCeVN0cmluZ0xlbmd0aEluRGVzY2VuZGluZ09yZGVyKE9iamVjdC5rZXlzKG9iaikpO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgc21pbGVzID0gJyc7XG4gICAgY29uc3QgY29kZXNMaXN0ID0gW107XG4gICAgY29uc3QgbGlua3MgPSBbJ3MnLCAncHMnLCAnKiddO1xuICAgIGNvbnN0IGluY2x1ZGVzU3RhbmRhcmRMaW5rQWxyZWFkeSA9IFsnZScsICdoJywgLyonZycsKi8gJ2YnLCAnaScsICdsJywgJ2snLCAnaiddO1xuICAgIGNvbnN0IGRyb3Bkb3ducyA9IE9iamVjdC5rZXlzKE1PRElGSUNBVElPTlMpO1xuICAgIGNvZGVzID0gY29kZXMuY29uY2F0KGRyb3Bkb3ducykuY29uY2F0KGRlbGltaXRlcik7XG4gICAgd2hpbGUgKGkgPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IGNvZGVzLmZpbmQoKHMpID0+IHMgPT0gc2VxdWVuY2Uuc2xpY2UoaSwgaSArIHMubGVuZ3RoKSk7XG4gICAgICAgIGkgKz0gY29kZS5sZW5ndGg7XG4gICAgICAgIGludmVydGVkID8gY29kZXNMaXN0LnVuc2hpZnQoY29kZSkgOiBjb2Rlc0xpc3QucHVzaChjb2RlKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2Rlc0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRyb3Bkb3ducy5pbmNsdWRlcyhjb2Rlc0xpc3RbaV0pKSB7XG4gICAgICAgICAgICBzbWlsZXMgKz0gKGkgPj0gY29kZXNMaXN0Lmxlbmd0aCAvIDIpID9cbiAgICAgICAgICAgICAgICBNT0RJRklDQVRJT05TW2NvZGVzTGlzdFtpXV0ucmlnaHQgKyBzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcyA6XG4gICAgICAgICAgICAgICAgTU9ESUZJQ0FUSU9OU1tjb2Rlc0xpc3RbaV1dLmxlZnQgKyBzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaW5rcy5pbmNsdWRlcyhjb2Rlc0xpc3RbaV0pIHx8XG4gICAgICAgICAgICAgICAgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICAoaSA8IGNvZGVzTGlzdC5sZW5ndGggLSAxICYmIGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpICsgMV0pKSlcbiAgICAgICAgICAgICAgICBzbWlsZXMgKz0gb2JqW2NvZGVzTGlzdFtpXV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc21pbGVzICs9IG9ialtjb2Rlc0xpc3RbaV1dICsgc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc21pbGVzID0gc21pbGVzLnJlcGxhY2UoL09PL2csICdPJyk7XG4gICAgcmV0dXJuICgobGlua3MuaW5jbHVkZXMoY29kZXNMaXN0W2NvZGVzTGlzdC5sZW5ndGggLSAxXSkgJiZcbiAgICAgICAgY29kZXNMaXN0Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgIWluY2x1ZGVzU3RhbmRhcmRMaW5rQWxyZWFkeS5pbmNsdWRlcyhjb2Rlc0xpc3RbY29kZXNMaXN0Lmxlbmd0aCAtIDJdKSkgfHxcbiAgICAgICAgZHJvcGRvd25zLmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMV0pIHx8XG4gICAgICAgIGluY2x1ZGVzU3RhbmRhcmRMaW5rQWxyZWFkeS5pbmNsdWRlcyhjb2Rlc0xpc3RbY29kZXNMaXN0Lmxlbmd0aCAtIDFdKSkgP1xuICAgICAgICBzbWlsZXMgOlxuICAgICAgICBzbWlsZXMuc2xpY2UoMCwgc21pbGVzLmxlbmd0aCAtIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzLmxlbmd0aCArIDEpO1xufVxuZnVuY3Rpb24gZ2V0T2JqZWN0V2l0aENvZGVzQW5kU21pbGVzKHNlcXVlbmNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBpZiAoZm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgZm9yIChjb25zdCBzeW50aGVzaXplciBvZiBPYmplY3Qua2V5cyhtYXApKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRlY2hub2xvZ3kgb2YgT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkpXG4gICAgICAgICAgICAgICAgICAgIG9ialtjb2RlXSA9IG1hcFtzeW50aGVzaXplcl1bdGVjaG5vbG9neV1bY29kZV0uU01JTEVTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IHRlY2hub2xvZ3kgb2YgT2JqZWN0LmtleXMobWFwW2Zvcm1hdF0pKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgT2JqZWN0LmtleXMobWFwW2Zvcm1hdF1bdGVjaG5vbG9neV0pKVxuICAgICAgICAgICAgICAgIG9ialtjb2RlXSA9IG1hcFtmb3JtYXRdW3RlY2hub2xvZ3ldW2NvZGVdLlNNSUxFUztcbiAgICAgICAgfVxuICAgIH1cbiAgICBvYmpbZGVsaW1pdGVyXSA9ICcnO1xuICAgIC8vIFRPRE86IGNyZWF0ZSBvYmplY3QgYmFzZWQgZnJvbSBzeW50aGVzaXplciB0eXBlIHRvIGF2b2lkIGtleShjb2RlcykgZHVwbGljYXRlc1xuICAgIGNvbnN0IG91dHB1dCA9IGlzVmFsaWRTZXF1ZW5jZShzZXF1ZW5jZSwgZm9ybWF0KTtcbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5NRVJNQURFXzEyKSlcbiAgICAgICAgb2JqWydnJ10gPSBtYXBbU1lOVEhFU0laRVJTLk1FUk1BREVfMTJdW1RFQ0hOT0xPR0lFUy5TSV9STkFdWydnJ10uU01JTEVTO1xuICAgIGVsc2UgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQVhPTEFCUykpXG4gICAgICAgIG9ialsnZyddID0gbWFwW1NZTlRIRVNJWkVSUy5BWE9MQUJTXVtURUNITk9MT0dJRVMuU0lfUk5BXVsnZyddLlNNSUxFUztcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDsgfSk7XG59XG4iLCJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgZ2V0QWxsQ29kZXNPZlN5bnRoZXNpemVyIH0gZnJvbSAnLi9zZXF1ZW5jZS1jb2Rlcy10b29scyc7XG5leHBvcnQgY29uc3QgZGVsaW1pdGVyID0gJzsnO1xuZXhwb3J0IGNvbnN0IFNZTlRIRVNJWkVSUyA9IHtcbiAgICBSQVdfTlVDTEVPVElERVM6ICdSYXcgTnVjbGVvdGlkZXMnLFxuICAgIEJJT1NQUklORzogJ0Jpb1NwcmluZyBDb2RlcycsXG4gICAgR0NSUzogJ0phbnNzZW4gR0NSUyBDb2RlcycsXG4gICAgQVhPTEFCUzogJ0F4b2xhYnMgQ29kZXMnLFxuICAgIE1FUk1BREVfMTI6ICdNZXJtYWRlIDEyJyxcbiAgICBMQ01TOiAnTENNUycsXG59O1xuZXhwb3J0IGNvbnN0IFRFQ0hOT0xPR0lFUyA9IHtcbiAgICBETkE6ICdETkEnLFxuICAgIFJOQTogJ1JOQScsXG4gICAgQVNPX0dBUE1FUlM6ICdGb3IgQVNPIEdhcG1lcnMnLFxuICAgIFNJX1JOQTogJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJyxcbn07XG5leHBvcnQgY29uc3QgQ09MX05BTUVTID0ge1xuICAgIENIRU1JU1RSWTogJ0NoZW1pc3RyeScsXG4gICAgTlVNQkVSOiAnTnVtYmVyJyxcbiAgICBUWVBFOiAnVHlwZScsXG4gICAgQ0hFTUlTVFJZX05BTUU6ICdDaGVtaXN0cnkgTmFtZScsXG4gICAgSU5URVJOQUxfQ09NUE9VTkRfSUQ6ICdJbnRlcm5hbCBjb21wb3VuZCBJRCcsXG4gICAgSURQOiAnSURQJyxcbiAgICBTRVFVRU5DRTogJ1NlcXVlbmNlJyxcbiAgICBDT01QT1VORF9OQU1FOiAnQ29tcG91bmQgTmFtZScsXG4gICAgQ09NUE9VTkRfQ09NTUVOVFM6ICdDb21wb3VuZCBDb21tZW50cycsXG4gICAgU0FMVDogJ1NhbHQnLFxuICAgIEVRVUlWQUxFTlRTOiAnRXF1aXZhbGVudHMnLFxuICAgIFBVUklUWTogJ1B1cml0eScsXG4gICAgQ1BEX01XOiAnQ3BkIE1XJyxcbiAgICBTQUxUX01PTF9XRUlHSFQ6ICdTYWx0IE1XJyxcbiAgICBTQUxUX01BU1M6ICdTYWx0IG1hc3MnLFxuICAgIEJBVENIX01XOiAnQmF0Y2ggTVcnLFxuICAgIFNPVVJDRTogJ1NvdXJjZScsXG4gICAgSUNEOiAnSUNEJyxcbiAgICBPV05FUjogJ093bmVyJyxcbn07XG4vLyBpbnRlcmZhY2UgQ09ERVMge1xuLy8gfVxuZXhwb3J0IGNvbnN0IE1PRElGSUNBVElPTlMgPSB7XG4gICAgJyhpbnZhYmFzaWMpJzoge1xuICAgICAgICBtb2xlY3VsYXJXZWlnaHQ6IDExOC4xMyxcbiAgICAgICAgbGVmdDogJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDTycsXG4gICAgICAgIHJpZ2h0OiAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPJyxcbiAgICB9LFxuICAgICcoR2FsTkFjLTItSk5KKSc6IHtcbiAgICAgICAgbW9sZWN1bGFyV2VpZ2h0OiAxMjczLjMsXG4gICAgICAgIGxlZnQ6ICdDKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpTkMoPU8pQ0NDQyg9TylOQ0MoTylDTycsXG4gICAgICAgIHJpZ2h0OiAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknLFxuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzID0gJ09QKD1PKShPKU8nO1xuZXhwb3J0IGNvbnN0IG1hcCA9IHtcbiAgICAnUmF3IE51Y2xlb3RpZGVzJzoge1xuICAgICAgICAnRE5BJzoge1xuICAgICAgICAgICAgJ0EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnVCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdUeXJvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RUJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0MnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQ3l0b3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAyODkuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAnUk5BJzoge1xuICAgICAgICAgICAgJ0EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdVcmFjaWwnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDYuMTcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0MnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQ3l0b3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAyODkuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ0Jpb1NwcmluZyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciBBU08gR2FwbWVycyc6IHtcbiAgICAgICAgICAgICc1Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc4LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzYnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM4Ny4yOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc3Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc3LjI5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoTik9TkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzgnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDQwMy4yOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc5Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzUtTWV0aHlsLWRDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzAzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcqJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAnRm9yIDJcXCctT01lIGFuZCAyXFwnLUYgbW9kaWZpZWQgc2lSTkEnOiB7XG4gICAgICAgICAgICAnMSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA4LjE2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDcuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDcuMTksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc1Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjAuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc2Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDMuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzE5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzgnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM1OS4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcqJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ0F4b2xhYnMgQ29kZXMnOiB7XG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICdVZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA4LjE2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQWYnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzMS4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQ2YnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNy4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0dmJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDcuMTksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICd1Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjAuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdhJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDMuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnYyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzE5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM1OS4sXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdwcyBsaW5rYWdlJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMTYuMDcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09QKD1PKShTKU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdKYW5zc2VuIEdDUlMgQ29kZXMnOiB7XG4gICAgICAgICdGb3IgQVNPIEdhcG1lcnMnOiB7XG4gICAgICAgICAgICAnbW9lVCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLTVNZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM3OC4yNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtb2VBJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtckEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzODcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbW9lNW1DJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc3LjI5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoTik9TkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyg1bSltb2VDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc3LjI5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoTik9TkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21vZUcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDQwMy4yOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc1bUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyg1bSlDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzUtTWV0aHlsLWRDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdwcyBsaW5rYWdlJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMTYuMDcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09QKD1PKShTKU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZEEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZEMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQ3l0b3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAyODkuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZEcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnVCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdUeXJvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RUJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkVCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdUeXJvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RUJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnckMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQ3l0b3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDUuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQ1LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnclUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnVXJhY2lsJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA2LjE3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICdmVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA4LjE2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZkEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzMS4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZkMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNy4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2ZHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDcuMTksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzIwLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbUEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzE5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21HJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNTkuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdPdGhlcnMnOiB7fSxcbiAgICB9LFxuICAgICdNZXJtYWRlIDEyJzoge1xuICAgICAgICAnRm9yIDJcXCctT01lIGFuZCAyXFwnLUYgbW9kaWZpZWQgc2lSTkEnOiB7XG4gICAgICAgICAgICAnZSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJBLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LjMxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2gnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVS1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzNi4yNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdnJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckctcHMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzUuMzEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzM1LjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2knOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQS1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4yNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2wnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tVS1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyNC4yMyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2snOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRy1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM2My4yNixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2onOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQy1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMy4yNSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0wnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwOC4xNixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0knOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzMS4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1HJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQ3LjE5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzIwLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQzLjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0YnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNTkuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAvLyAnTENNUyc6IHtcbiAgICAvLyAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbn07XG5leHBvcnQgY29uc3QgbGNtc1RvR2NycyA9IGBMQ01TLCBHQ1JTXG5BLCBBXG5DLCBDXG4vNW1DLywgKDVtKUNcbkcsIEdcblQsIFRcbnJBLCByQVxuckMsIHJDXG5yRywgckdcbnJVLCByVVxubUEsIG1BXG5tQywgbUNcbi81bW1DLywgKDVtKW1DXG5tRywgbUdcbm1VLCBtVVxuZkEsIGZBXG5mQywgZkNcbi81bWZDLywgKDVtKWZDXG5mRywgZkdcbmZVLCBmVVxuL2FmQS8sIGFmQVxuL2FmQy8sIGFmQ1xuL2FmRy8sIGFmR1xuL2FmVS8sIGFmVVxuK0EsIGxuYSBBXG4rQywgbG5hIENcbitHLCBsbmEgR1xuK1QsIGxuYSBUXG4vbW9lQS8sIG1vZUFcbi9tb2VDLywgbW9lQ1xuLzVtbW9lQy8sICg1bSltb2VDXG4vbW9lRy8sIG1vZUdcbi9tb2VULywgbW9lVFxuL21vZVUvLCBtb2VVXG4veEEvLCBBbnBcbi94Qy8sIENucFxuL3g1bUMvLCAoNW0pQ25wXG4veEcvLCBHbnBcbi94VC8sIFRucFxuL3hyQS8sIHJBbnBcbi94ckMvLCByQ25wXG4veHJHLywgckducFxuL3hyVS8sIHJVbnBcbi94bUEvLCBtQW5wXG4veG1DLywgbUNucFxuL3g1bW1DLywgKDVtKW1DbnBcbi94bUcvLCBtR25wXG4veG1VLywgbVVucFxuL3hmQS8sIGZBbnBcbi94ZkMvLCBmQ25wXG4veGZHLywgZkducFxuL3hmVC8sIGZUbnBcbi94ZlUvLCBmVW5wXG4veGFmQS8sIGFmQW5wXG4veGFmQy8sIGFmQ25wXG4veGFmRy8sIGFmR25wXG4veGFmVS8sIGFmVW5wXG4veGVBLywgZUFucFxuL3hlQy8sIGVDbnBcbi94ZUcvLCBlR25wXG4veGVVLywgZVVucFxuL3htb2VBLywgbW9lQW5wXG4veG1vZUMvLCBtb2VDbnBcbi94NW1tb2VDLywgKDVtKW1vZUNucFxuL3htb2VHLywgbW9lR25wXG4veG1vZVUvLCBtb2VVbnBcbi9VTkEtQS8sIChVTkEtQSlcbi9VTkEtQy8sIChVTkEtQylcbi9VTkEtRy8sIChVTkEtRylcbi9VTkEtVC8sIChVTkEtVClcbi9VTkEtVS8sIChVTkEtVSlcbi9HTkEtQS8sIChHTkEtQSlcbi9HTkEtQy8sIChHTkEtQylcbi9HTkEtRy8sIChHTkEtRylcbi9HTkEtVC8sIChHTkEtVClcbi9HTkEtVS8sIChHTkEtVSlcbi81Q2hvbFRFRy8sICg1LUNob2xURUcpXG4vM0Nob2xURUcvLCAoVEVHQ2hvbC0zKVxuL1RvY28vLCBUb2NvXG4vUGFsbS8sIFBhbG1cbi9HYWxOQWMvLCBHYWxOQWNcbi9HYWxOQWMyLywgR2FsTkFjMlxuL0dhbE5BYzMvLCBHYWxOQWMzXG4vR2FsTkFjNi8sIEdhbE5BYzZcbi9HYWxOQWM3LywgR2FsTkFjN1xuL0dhbE5BYzkvLCBHYWxOQWM5XG4vR2FsTkFjMTQvLCBHYWxOQWMxNFxuL05BRzM3LywgTkFHMzdcbi9IRUcvLCAoSEVHKVxuL1RFRy8sIChURUcpXG4vQW1tQzYvLCAoTkhDNilcbi9BbW1DNy8sIChOSEM3KVxuL0FtbUMxMi8sIChOSEMxMilcbi9pbnZBYi8sIChpbnZhYmFzaWMpXG4vaW52ZFQvLCAoaW52ZFQpXG4vVlBtVS8sICh2aW51KVxuKiwgcHNcbi8yLUMxNlUvLCAyLUMxNlUgXG4vMi1DMTh3OVUvLCAyLUMxOHc5VVxuL0pEaS1QYWxtLywgSkRpLVBhbG1cbi9KMi1DT05DMTZVLywgSjItQ09OQzE2VVxuL0oyLUMzTkMxNlUvLCBKMi1DM05DMTZVXG4vSi1DMTVBZGEvLCBKLUMxNUFkYVxuL0otMkMxNUFkYVUvLCBKLTJDMTVBZGFVXG4vSi1DMTZOQzYvLCBKLUMxNk5DNlxuL1IyLUM2TkgtVS8sIFIyLUM2TkgtVVxuL0otTTEvLCBKLU0xXG4vSi1CMS8sIEotQjFcbi9KLUIyLywgSi1CMlxuL0otTTIvLCBKLU0yXG4vMi1DMTZDLywgMi1DMTZDXG4vMi1DMTZBLywgMi1DMTZBXG4vMi1DMTZHLywgMi1DMTZHXG4vUjItQzZOSC1HLywgUjItQzZOSC1HXG4vUjItQzZOSC1DLywgUjItQzZOSC1DXG4vSjItQ09OQzE2QS8sIEoyLUNPTkMxNkFcbi9KMi1DT05DMTZDLywgSjItQ09OQzE2Q1xuL0oyLUNPTkMxNkcvLCBKMi1DT05DMTZHXG4vSjItQzE1QWRhQy8sIEoyLUMxNUFkYUNcbi9KMi1NMlUvLCBKMi1NMlVcbi9KMi1CMlUvLCBKMi1CMlVcbi9KMi1DM05DMTZDLywgSjItQzNOQzE2Q1xuL0oyLUMzTkMxNkcvLCBKMi1DM05DMTZHXG4vUjItQzZOSC1BLywgUjItQzZOSC1BXG4vSjItQzE1QWRhQS8sIEoyLUMxNUFkYUFcbi9KMi1DM05DMTZBLywgSjItQzNOQzE2QVxuL0otQzUtU0VSLTEvLCBKLUM1LVNFUi0xXG4vSi1DMTYtU0VSLTEvLCBKLUMxNi1TRVItMVxuL0otQTIvLCBKLUEyXG4vSi1BMS8sIEotQTFcbi9KMi1DMTVBZGFHLywgSjItQzE1QWRhR1xuL0otQzE2TkFzcC8sIEotQzE2TkFzcFxuL0oyLUMxNk5DNlUvLCBKMi1DMTZOQzZVXG4vSi1DNS1SRUJPLTEvLCBKLUM1LVJFQk8tMVxuL0otQzE2LVJFQk8tMS8sIEotQzE2LVJFQk8tMVxuL0otQzE2LUlORC0xLywgSi1DMTYtSU5ELTFcbi9KLUM1LUlORC0xLywgSi1DNS1JTkQtMVxuL0otMUMxNUFkYS0yTWFuLywgSi0xQzE1QWRhLTJNYW5cbi9KRy0xQzE1QWRhLTIzRGlNYW4vLCBKRy0xQzE1QWRhLTIsM0RpTWFuXG4vSi1UcmlNYW5QQy8sIEotVHJpTWFuUENcbi9KLXRyaU1hblBPLywgSi10cmlNYW5QT1xuL0otQTQvLCBKLUE0XG4vSi1BcmEtMS8sIEotQXJhLTFcbi9KLUFyYS0yLywgSi1BcmEtMlxuL0otQWNDUy8sIEotQWNDU1xuL0otQ2JDUy8sIEotQ2JDU1xuL0otTXRDRC8sIEotTXRDRGA7XG5mdW5jdGlvbiBkaWZmZXJlbmNlT2ZUd29BcnJheXMoYSwgYikge1xuICAgIHJldHVybiBhLmZpbHRlcigoeCkgPT4gIWIuaW5jbHVkZXMoeCkpO1xufVxuY29uc3QgY29kZXNXaXRoU21pbGVzID0gZ2V0QWxsQ29kZXNPZlN5bnRoZXNpemVyKFNZTlRIRVNJWkVSUy5HQ1JTKTtcbmNvbnN0IGFsbEdjcnNDb2RlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGxjbXNUb0djcnMpLmdldENvbCgnR0NSUycpLnRvTGlzdCgpO1xuZXhwb3J0IGNvbnN0IGdjcnNDb2Rlc1dpdGhvdXRTbWlsZXMgPSBkaWZmZXJlbmNlT2ZUd29BcnJheXMoYWxsR2Nyc0NvZGVzLCBjb2Rlc1dpdGhTbWlsZXMpO1xuZm9yIChjb25zdCBlIG9mIGdjcnNDb2Rlc1dpdGhvdXRTbWlsZXMpXG4gICAgbWFwW1NZTlRIRVNJWkVSUy5HQ1JTXVsnT3RoZXJzJ11bZV0gPSB7ICdTTUlMRVMnOiAnJyB9O1xuIiwiY29uc3QgUEhPU0hBVEUgPSBgXG5EYXRhZ3JvayBtb25vbWVyIGxpYnJhcnkgTnVjbGVvdGlkZXNcblxuICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgICAwIFYzMDAwXG5NICBWMzAgQkVHSU4gQ1RBQlxuTSAgVjMwIENPVU5UUyA1IDQgMCAwIDBcbk0gIFYzMCBCRUdJTiBBVE9NXG5NICBWMzAgMSBPIC0xLjUgMCAwIDBcbk0gIFYzMCAyIFAgMCAwIDAgMFxuTSAgVjMwIDMgTyAwIDEgMCAwXG5NICBWMzAgNCBPIDAgLTEgMCAwXG5NICBWMzAgNSBPIDEuNSAwIDAgMFxuTSAgVjMwIEVORCBBVE9NXG5NICBWMzAgQkVHSU4gQk9ORFxuTSAgVjMwIDEgMSAxIDJcbk0gIFYzMCAyIDIgMiAzXG5NICBWMzAgMyAxIDIgNFxuTSAgVjMwIDQgMSAyIDVcbk0gIFYzMCBFTkQgQk9ORFxuTSAgVjMwIEVORCBDVEFCXG5NICBWMzAgQkVHSU4gQ09MTEVDVElPTlxuTSAgVjMwIEVORCBDT0xMRUNUSU9OXG5NICBFTkRgO1xuY29uc3QgVEhJT1BIT1NIQVRFID0gYFxuRGF0YWdyb2sgbW9ub21lciBsaWJyYXJ5IE51Y2xlb3RpZGVzXG5cbiAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgICAgMCBWMzAwMFxuTSAgVjMwIEJFR0lOIENUQUJcbk0gIFYzMCBDT1VOVFMgNSA0IDAgMCAwXG5NICBWMzAgQkVHSU4gQVRPTVxuTSAgVjMwIDEgTyAtMS41IDAgMCAwXG5NICBWMzAgMiBQIDAgMCAwIDBcbk0gIFYzMCAzIE8gMCAxIDAgMFxuTSAgVjMwIDQgUyAwIC0xIDAgMFxuTSAgVjMwIDUgTyAxLjUgMCAwIDBcbk0gIFYzMCBFTkQgQVRPTVxuTSAgVjMwIEJFR0lOIEJPTkRcbk0gIFYzMCAxIDEgMSAyXG5NICBWMzAgMiAyIDIgM1xuTSAgVjMwIDMgMSAyIDRcbk0gIFYzMCA0IDEgMiA1XG5NICBWMzAgRU5EIEJPTkRcbk0gIFYzMCBFTkQgQ1RBQlxuTSAgVjMwIEJFR0lOIENPTExFQ1RJT05cbk0gIFYzMCBFTkQgQ09MTEVDVElPTlxuTSAgRU5EYDtcbmNvbnN0IElOVkFCQVNJQyA9IGBcbkRhdGFncm9rIG1vbm9tZXIgbGlicmFyeSBOdWNsZW90aWRlc1xuXG4gIDAgIDAgIDAgIDAgIDAgIDAgICAgICAgICAgICAgIDAgVjMwMDBcbk0gIFYzMCBCRUdJTiBDVEFCXG5NICBWMzAgQ09VTlRTIDggOCAwIDAgMFxuTSAgVjMwIEJFR0lOIEFUT01cbk0gIFYzMCAxIE8gMS4wOTM0IC0yLjE2MzYgMCAwXG5NICBWMzAgMiBDIDEuODM2NSAtMS40OTQ1IDAgMCBDRkc9MlxuTSAgVjMwIDMgQyAyLjgxNDcgLTEuNzAyNCAwIDBcbk0gIFYzMCA0IEMgMy4zMTQ3IC0wLjgzNjQgMCAwXG5NICBWMzAgNSBPIDIuNjQ1NSAtMC4wOTMyIDAgMFxuTSAgVjMwIDYgQyAxLjczMiAtMC41IDAgMCBDRkc9MVxuTSAgVjMwIDcgQyAwLjg2NiAwIDAgMFxuTSAgVjMwIDggTyAwLjg2NiAxIDAgMFxuTSAgVjMwIEVORCBBVE9NXG5NICBWMzAgQkVHSU4gQk9ORFxuTSAgVjMwIDEgMSAyIDEgQ0ZHPTFcbk0gIFYzMCAyIDEgMiAzXG5NICBWMzAgMyAxIDMgNFxuTSAgVjMwIDQgMSA0IDVcbk0gIFYzMCA1IDEgNiA1XG5NICBWMzAgNiAxIDIgNlxuTSAgVjMwIDcgMSA2IDcgQ0ZHPTNcbk0gIFYzMCA4IDEgNyA4XG5NICBWMzAgRU5EIEJPTkRcbk0gIFYzMCBCRUdJTiBDT0xMRUNUSU9OXG5NICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oMiAyIDYpXG5NICBWMzAgRU5EIENPTExFQ1RJT05cbk0gIFYzMCBFTkQgQ1RBQlxuTSAgRU5EYDtcbmV4cG9ydCBmdW5jdGlvbiBnZXROdWNsZW90aWRlc01vbChzbWlsZXNDb2Rlcykge1xuICAgIGNvbnN0IG1vbEJsb2NrcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc21pbGVzQ29kZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHNtaWxlc0NvZGVzW2ldID09ICdPUCg9TykoTylPJyA/IG1vbEJsb2Nrcy5wdXNoKFBIT1NIQVRFKSA6XG4gICAgICAgICAgICBzbWlsZXNDb2Rlc1tpXSA9PSAnT1AoPU8pKFMpTycgPyBtb2xCbG9ja3MucHVzaChUSElPUEhPU0hBVEUpIDpcbiAgICAgICAgICAgICAgICBzbWlsZXNDb2Rlc1tpXSA9PSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPJyA/IG1vbEJsb2Nrcy5wdXNoKHJvdGF0ZU51Y2xlb3RpZGVzVjMwMDAoSU5WQUJBU0lDKSkgOlxuICAgICAgICAgICAgICAgICAgICBtb2xCbG9ja3MucHVzaChyb3RhdGVOdWNsZW90aWRlc1YzMDAwKHNtaWxlc0NvZGVzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5rVjMwMDAobW9sQmxvY2tzLCBmYWxzZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbGlua1YzMDAwKG1vbEJsb2NrcywgdHdvQ2hhaW5zID0gZmFsc2UsIHVzZUNoaXJhbGl0eSA9IHRydWUpIHtcbiAgICBsZXQgbWFjcm9Nb2xCbG9jayA9ICdcXG5EYXRhZ3JvayBtYWNyb21vbGVjdWxlIGhhbmRsZXJcXG5cXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJyAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgIDk5OSBWMzAwMFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIENUQUJcXG4nO1xuICAgIGxldCBhdG9tQmxvY2sgPSAnJztcbiAgICBsZXQgYm9uZEJsb2NrID0gJyc7XG4gICAgbGV0IGNvbGxlY3Rpb25CbG9jayA9ICcnO1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBbXTtcbiAgICBsZXQgbmF0b20gPSAwO1xuICAgIGxldCBuYm9uZCA9IDA7XG4gICAgbGV0IHhTaGlmdCA9IDA7XG4gICAgaWYgKHR3b0NoYWlucyAmJiBtb2xCbG9ja3MubGVuZ3RoID4gMSlcbiAgICAgICAgbW9sQmxvY2tzWzFdID0gaW52ZXJ0TnVjbGVvdGlkZXNWMzAwMChtb2xCbG9ja3NbMV0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9sQmxvY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5yZXBsYWNlQWxsKCcoLVxcbk0gIFYzMCAnLCAnKCcpXG4gICAgICAgICAgICAucmVwbGFjZUFsbCgnLVxcbk0gIFYzMCAnLCAnJykucmVwbGFjZUFsbCgnICknLCAnKScpO1xuICAgICAgICBjb25zdCBudW1iZXJzID0gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sQmxvY2tzW2ldKTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9ja3NbaV0pO1xuICAgICAgICBpZiAodHdvQ2hhaW5zKSB7XG4gICAgICAgICAgICBjb25zdCB4U2hpZnRSaWdodCA9IE1hdGgubWluKC4uLmNvb3JkaW5hdGVzLngpO1xuICAgICAgICAgICAgY29uc3QgeVNoaWZ0ID0gaSA9PSAwID8gTWF0aC5taW4oLi4uY29vcmRpbmF0ZXMueSkgLSAxIDogTWF0aC5tYXgoLi4uY29vcmRpbmF0ZXMueSkgKyAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29yZGluYXRlcy54Lmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLnhbal0gLT0geFNoaWZ0UmlnaHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3JkaW5hdGVzLnkubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMueVtqXSAtPSB5U2hpZnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4QXRvbXMgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgICAgIGluZGV4QXRvbXMgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXhBdG9tcyk7XG4gICAgICAgIGxldCBpbmRleCA9IGluZGV4QXRvbXM7XG4gICAgICAgIGxldCBpbmRleEVuZCA9IGluZGV4QXRvbXM7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVycy5uYXRvbTsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXMuYXRvbUluZGV4W2pdICE9IDEgfHwgaSA9PSAwIHx8IHR3b0NoYWlucykge1xuICAgICAgICAgICAgICAgIC8vcmV3cml0ZSBhdG9tIG51bWJlclxuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdG9tTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIG5hdG9tO1xuICAgICAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBhdG9tTnVtYmVyICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgICAgICAvL3Jld3JpdGUgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2hpZnQgPSB0d29DaGFpbnMgPyAwIDogeFNoaWZ0IC0gY29vcmRpbmF0ZXMueFswXTtcbiAgICAgICAgICAgICAgICBsZXQgY29vcmRpbmF0ZSA9IHR3b0NoYWlucyA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoMTAwMDAgKiBjb29yZGluYXRlcy54W2pdKSAvIDEwMDAwIDpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgxMDAwMCAqIChwYXJzZUZsb2F0KG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSkgKyB0b3RhbFNoaWZ0KSkgLyAxMDAwMDtcbiAgICAgICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgY29vcmRpbmF0ZSArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlID0gdHdvQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgxMDAwMCAqIGNvb3JkaW5hdGVzLnlbal0pIC8gMTAwMDAgOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKDEwMDAwICogKHBhcnNlRmxvYXQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSkpIC8gMTAwMDA7XG4gICAgICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGNvb3JkaW5hdGUgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAnLCBpbmRleCkgLSAxO1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhBdG9tc0VuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgRU5EIEFUT00nKTtcbiAgICAgICAgYXRvbUJsb2NrICs9IG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXhBdG9tcyArIDEsIGluZGV4QXRvbXNFbmQpO1xuICAgICAgICBsZXQgaW5kZXhCb25kcyA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgQkVHSU4gQk9ORCcpOyAvLyBWMzAwMCBpbmRleCBmb3IgYm9uZHNcbiAgICAgICAgaW5kZXhCb25kcyA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleEJvbmRzKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEJvbmRzO1xuICAgICAgICBpbmRleEVuZCA9IGluZGV4Qm9uZHM7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVycy5uYm9uZDsgaisrKSB7XG4gICAgICAgICAgICAvL3Jld3JpdGUgYm9uZCBudW1iZXJcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgYm9uZE51bWJlciA9IHBhcnNlSW50KG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSkgKyBuYm9uZDtcbiAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBib25kTnVtYmVyICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIC8vcmV3cml0ZSBhdG9tIHBhaXIgaW4gYm9uZFxuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBsZXQgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSkgKyBuYXRvbTtcbiAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBhdG9tTnVtYmVyICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBNYXRoLm1pbihtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXgpLCBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSk7XG4gICAgICAgICAgICBhdG9tTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIG5hdG9tO1xuICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleEJvbmRFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIEVORCBCT05EJyk7XG4gICAgICAgIGJvbmRCbG9jayArPSBtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4Qm9uZHMgKyAxLCBpbmRleEJvbmRFbmQpO1xuICAgICAgICBsZXQgaW5kZXhDb2xsZWN0aW9uID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnKTsgLy8gVjMwMDAgaW5kZXggZm9yIGNvbGxlY3Rpb25zXG4gICAgICAgIHdoaWxlIChpbmRleENvbGxlY3Rpb24gIT0gLTEpIHtcbiAgICAgICAgICAgIGluZGV4Q29sbGVjdGlvbiArPSAyODtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25FbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignKScsIGluZGV4Q29sbGVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXhDb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW5kKS5zcGxpdCgnICcpLnNsaWNlKDEpO1xuICAgICAgICAgICAgY29sbGVjdGlvbkVudHJpZXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChwYXJzZUludChlKSArIG5hdG9tKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5kZXhDb2xsZWN0aW9uID0gY29sbGVjdGlvbkVuZDtcbiAgICAgICAgICAgIGluZGV4Q29sbGVjdGlvbiA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJywgaW5kZXhDb2xsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBuYXRvbSArPSB0d29DaGFpbnMgPyBudW1iZXJzLm5hdG9tIDogbnVtYmVycy5uYXRvbSAtIDE7XG4gICAgICAgIG5ib25kICs9IG51bWJlcnMubmJvbmQ7XG4gICAgICAgIHhTaGlmdCArPSB0d29DaGFpbnMgPyAwIDogY29vcmRpbmF0ZXMueFtudW1iZXJzLm5hdG9tIC0gMV0gLSBjb29yZGluYXRlcy54WzBdO1xuICAgIH1cbiAgICBjb25zdCBlbnRyaWVzID0gNDtcbiAgICBjb25zdCBjb2xsTnVtYmVyID0gTWF0aC5jZWlsKGNvbGxlY3Rpb24ubGVuZ3RoIC8gZW50cmllcyk7XG4gICAgLy9pZiAob2NsUmVuZGVyKSB7XG4gICAgLy8gY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyArIGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgIC8vIGZvciAobGV0IGogPSAwOyBqIDwgY29sbGVjdGlvbi5sZW5ndGg7IGorKylcbiAgICAvLyAgIGNvbGxlY3Rpb25CbG9jayArPSAnICcgKyBjb2xsZWN0aW9uW2pdO1xuICAgIC8vIGNvbGxlY3Rpb25CbG9jayArPSAnKVxcbic7XG4gICAgLy99IGVsc2Uge1xuICAgIGNvbGxlY3Rpb25CbG9jayArPSAnTSAgVjMwIE1ETFYzMC9TVEVBQlMgQVRPTVM9KCcgKyBjb2xsZWN0aW9uLmxlbmd0aCArICcgLVxcbic7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsTnVtYmVyOyBpKyspIHtcbiAgICAgICAgY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgJztcbiAgICAgICAgY29uc3QgZW50cmllc0N1cnJlbnQgPSBpICsgMSA9PSBjb2xsTnVtYmVyID8gY29sbGVjdGlvbi5sZW5ndGggLSAoY29sbE51bWJlciAtIDEpICogZW50cmllcyA6IGVudHJpZXM7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZW50cmllc0N1cnJlbnQ7IGorKykge1xuICAgICAgICAgICAgY29sbGVjdGlvbkJsb2NrICs9IChqICsgMSA9PSBlbnRyaWVzQ3VycmVudCkgP1xuICAgICAgICAgICAgICAgIChpID09IGNvbGxOdW1iZXIgLSAxID8gY29sbGVjdGlvbltlbnRyaWVzICogaSArIGpdICsgJylcXG4nIDogY29sbGVjdGlvbltlbnRyaWVzICogaSArIGpdICsgJyAtXFxuJykgOlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25bZW50cmllcyAqIGkgKyBqXSArICcgJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL31cbiAgICAvL2dlbmVyYXRlIGZpbGVcbiAgICB0d29DaGFpbnMgPyBuYXRvbSA6IG5hdG9tKys7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIENPVU5UUyAnICsgbmF0b20gKyAnICcgKyBuYm9uZCArICcgMCAwIDBcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBCRUdJTiBBVE9NXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9IGF0b21CbG9jaztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgRU5EIEFUT01cXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBCRUdJTiBCT05EXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9IGJvbmRCbG9jaztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgRU5EIEJPTkRcXG4nO1xuICAgIGlmICh1c2VDaGlyYWxpdHkpIHtcbiAgICAgICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIENPTExFQ1RJT05cXG4nO1xuICAgICAgICBtYWNyb01vbEJsb2NrICs9IGNvbGxlY3Rpb25CbG9jaztcbiAgICAgICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBDT0xMRUNUSU9OXFxuJztcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBtYWNyb01vbEJsb2NrID0gbWFjcm9Nb2xCbG9jay5yZXBsYWNlKC8gQ0ZHPVxcZC9nLCAnICcpO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQ1RBQlxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgRU5EJztcbiAgICByZXR1cm4gbWFjcm9Nb2xCbG9jaztcbn1cbmZ1bmN0aW9uIHJvdGF0ZU51Y2xlb3RpZGVzVjMwMDAobW9sZWN1bGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGV0IG1vbEJsb2NrID0gbW9sZWN1bGUuaW5jbHVkZXMoJ00gIEVORCcpID8gbW9sZWN1bGUgOiBPQ0wuTW9sZWN1bGUuZnJvbVNtaWxlcyhtb2xlY3VsZSkudG9Nb2xmaWxlVjMoKTtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2NrKTtcbiAgICBjb25zdCBuYXRvbSA9IGNvb3JkaW5hdGVzLmF0b21JbmRleC5sZW5ndGg7XG4gICAgY29uc3QgaW5kZXhGaXZlUHJpbWUgPSBjb29yZGluYXRlcy5hdG9tSW5kZXguaW5kZXhPZigxKTtcbiAgICBjb25zdCBpbmRleFRocmVlUHJpbWUgPSBjb29yZGluYXRlcy5hdG9tSW5kZXguaW5kZXhPZihuYXRvbSk7XG4gICAgLy9maXggNSBwcmltZSBpZiBpbmFkZXF1YXRlXG4gICAgaWYgKG5hdG9tID4gOClcbiAgICAgICAgZml4NVByaW1lKGNvb3JkaW5hdGVzLCBpbmRleEZpdmVQcmltZSwgaW5kZXhUaHJlZVByaW1lKTtcbiAgICBjb25zdCB4Q2VudGVyID0gKGNvb3JkaW5hdGVzLnhbaW5kZXhUaHJlZVByaW1lXSArIGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdKSAvIDI7XG4gICAgY29uc3QgeUNlbnRlciA9IChjb29yZGluYXRlcy55W2luZGV4VGhyZWVQcmltZV0gKyBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSkgLyAyO1xuICAgIC8vcGxhY2UgdG8gY2VudGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gLT0geENlbnRlcjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSAtPSB5Q2VudGVyO1xuICAgIH1cbiAgICBsZXQgYW5nbGUgPSAwO1xuICAgIGlmIChjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXSA9PSAwKVxuICAgICAgICBhbmdsZSA9IGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdID4gY29vcmRpbmF0ZXMueVtpbmRleFRocmVlUHJpbWVdID8gTWF0aC5QSSAvIDIgOiAzICogTWF0aC5QSSAvIDI7XG4gICAgZWxzZSBpZiAoY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0gPT0gMClcbiAgICAgICAgYW5nbGUgPSBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXSA+IGNvb3JkaW5hdGVzLnhbaW5kZXhUaHJlZVByaW1lXSA/IE1hdGguUEkgOiAwO1xuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBkZXJpdmF0aXZlID0gY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0gLyBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXTtcbiAgICAgICAgYW5nbGUgPSBkZXJpdmF0aXZlID4gMCA/IE1hdGguUEkgLSBNYXRoLmF0YW4oZGVyaXZhdGl2ZSkgOiBNYXRoLmF0YW4oZGVyaXZhdGl2ZSk7XG4gICAgfVxuICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHhBZGQgPSBjb29yZGluYXRlcy54W2ldO1xuICAgICAgICBjb29yZGluYXRlcy54W2ldID0geEFkZCAqIGNvcyAtIGNvb3JkaW5hdGVzLnlbaV0gKiBzaW47XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaV0gPSB4QWRkICogc2luICsgY29vcmRpbmF0ZXMueVtpXSAqIGNvcztcbiAgICB9XG4gICAgLy9wbGFjZSB0byByaWdodFxuICAgIGNvbnN0IHhTaGlmdCA9IGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKylcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSAtPSB4U2hpZnQ7XG4gICAgLy9yZXdyaXRlIG1vbEJsb2NrXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXhFbmQpO1xuICAgICAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnNsaWNlKDAsIGluZGV4KSArXG4gICAgICAgICAgICBjb29yZGluYXRlcy54W2ldICsgJyAnICsgY29vcmRpbmF0ZXMueVtpXSArXG4gICAgICAgICAgICBtb2xCbG9jay5zbGljZShpbmRleEVuZCk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbEJsb2NrO1xufVxuZnVuY3Rpb24gaW52ZXJ0TnVjbGVvdGlkZXNWMzAwMChtb2xlY3VsZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsZXQgbW9sQmxvY2sgPSBtb2xlY3VsZS5pbmNsdWRlcygnTSAgRU5EJykgPyBtb2xlY3VsZSA6IE9DTC5Nb2xlY3VsZS5mcm9tU21pbGVzKG1vbGVjdWxlKS50b01vbGZpbGVWMygpO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZXh0cmFjdEF0b21EYXRhVjMwMDAobW9sQmxvY2spO1xuICAgIGNvbnN0IG5hdG9tID0gY29vcmRpbmF0ZXMuYXRvbUluZGV4Lmxlbmd0aDtcbiAgICBjb25zdCB4Q2VudGVyID0gKE1hdGgubWF4KC4uLmNvb3JkaW5hdGVzLngpICsgTWF0aC5taW4oLi4uY29vcmRpbmF0ZXMueCkpIC8gMjtcbiAgICBjb25zdCB5Q2VudGVyID0gKE1hdGgubWF4KC4uLmNvb3JkaW5hdGVzLnkpICsgTWF0aC5taW4oLi4uY29vcmRpbmF0ZXMueSkpIC8gMjtcbiAgICAvL3BsYWNlIHRvIGNlbnRlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBjb29yZGluYXRlcy54W2ldIC09IHhDZW50ZXI7XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaV0gLT0geUNlbnRlcjtcbiAgICB9XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLlBJO1xuICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHhBZGQgPSBjb29yZGluYXRlcy54W2ldO1xuICAgICAgICBjb29yZGluYXRlcy54W2ldID0geEFkZCAqIGNvcyAtIGNvb3JkaW5hdGVzLnlbaV0gKiBzaW47XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaV0gPSB4QWRkICogc2luICsgY29vcmRpbmF0ZXMueVtpXSAqIGNvcztcbiAgICB9XG4gICAgLy9wbGFjZSBiYWNrXG4gICAgY29uc3QgeVNoaWZ0ID0gTWF0aC5tYXgoLi4uY29vcmRpbmF0ZXMueSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gKz0geENlbnRlcjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSAtPSB5U2hpZnQ7XG4gICAgfVxuICAgIC8vcmV3cml0ZSBtb2xCbG9ja1xuICAgIGxldCBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBBVE9NJyk7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBjb29yZGluYXRlc1xuICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpO1xuICAgIGxldCBpbmRleEVuZCA9IGluZGV4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4RW5kKTtcbiAgICAgICAgbW9sQmxvY2sgPSBtb2xCbG9jay5zbGljZSgwLCBpbmRleCkgK1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSArICcgJyArIGNvb3JkaW5hdGVzLnlbaV0gK1xuICAgICAgICAgICAgbW9sQmxvY2suc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgfVxuICAgIHJldHVybiBtb2xCbG9jaztcbn1cbmZ1bmN0aW9uIGZpeDVQcmltZShjb29yZGluYXRlcywgaW5kZXhGaXZlUHJpbWUsIGluZGV4VGhyZWVQcmltZSkge1xuICAgIGNvbnN0IGluZGV4Rml2ZVByaW1lTmVpZ2hib3VyID0gaW5kZXhGaXZlUHJpbWUgKyAxO1xuICAgIGNvbnN0IHhTaGlmdCA9IGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVOZWlnaGJvdXJdO1xuICAgIGNvbnN0IHlTaGlmdCA9IGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVOZWlnaGJvdXJdO1xuICAgIGNvbnN0IGJhc2UzUHJpbWVYID0gY29vcmRpbmF0ZXMueFtpbmRleFRocmVlUHJpbWVdIC0geFNoaWZ0O1xuICAgIGNvbnN0IGJhc2UzUHJpbWVZID0gY29vcmRpbmF0ZXMueVtpbmRleFRocmVlUHJpbWVdIC0geVNoaWZ0O1xuICAgIGNvbnN0IGJhc2U1UHJpbWVYID0gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV0gLSB4U2hpZnQ7XG4gICAgY29uc3QgYmFzZTVQcmltZVkgPSBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSAtIHlTaGlmdDtcbiAgICBjb25zdCByb3RhdGVkNVByaW1lWCA9IGJhc2U1UHJpbWVYICogTWF0aC5jb3MoTWF0aC5QSSAqIDIgLyAzKSAtIGJhc2U1UHJpbWVZICogTWF0aC5zaW4oTWF0aC5QSSAqIDIgLyAzKTtcbiAgICBjb25zdCByb3RhdGVkNVByaW1lWSA9IGJhc2U1UHJpbWVYICogTWF0aC5zaW4oTWF0aC5QSSAqIDIgLyAzKSArIGJhc2U1UHJpbWVZICogTWF0aC5jb3MoTWF0aC5QSSAqIDIgLyAzKTtcbiAgICBjb25zdCBkeCA9IGJhc2U1UHJpbWVYIC0gYmFzZTNQcmltZVg7XG4gICAgY29uc3QgZHkgPSBiYXNlNVByaW1lWSAtIGJhc2UzUHJpbWVZO1xuICAgIGNvbnN0IGR4Um90YXRlZCA9IHJvdGF0ZWQ1UHJpbWVYIC0gYmFzZTNQcmltZVg7XG4gICAgY29uc3QgZHlSb3RhdGVkID0gcm90YXRlZDVQcmltZVkgLSBiYXNlM1ByaW1lWTtcbiAgICBpZiAoTWF0aC5zcXJ0KGR5Um90YXRlZCAqIGR5Um90YXRlZCArIGR4Um90YXRlZCAqIGR4Um90YXRlZCkgPj0gTWF0aC5zcXJ0KGR5ICogZHkgKyBkeCAqIGR4KSkge1xuICAgICAgICBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXSA9IHJvdGF0ZWQ1UHJpbWVYICsgeFNoaWZ0O1xuICAgICAgICBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSA9IHJvdGF0ZWQ1UHJpbWVZICsgeVNoaWZ0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGV4dHJhY3RBdG9tc0JvbmRzTnVtYmVyc1YzMDAwKG1vbEJsb2NrKSB7XG4gICAgbW9sQmxvY2sgPSBtb2xCbG9jay5yZXBsYWNlQWxsKCdcXHInLCAnJyk7IC8vZXF1YWxpemUgb2xkIGFuZCBuZXcgc2RmIHN0YW5kYXJkc1xuICAgIGxldCBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ0NPVU5UUycpICsgNzsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGFuZCBib25kcyBudW1iZXJcbiAgICBsZXQgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgIGNvbnN0IGF0b21zTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgIGluZGV4ID0gaW5kZXhFbmQgKyAxO1xuICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICBjb25zdCBib25kc051bWJlciA9IHBhcnNlSW50KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICByZXR1cm4geyBuYXRvbTogYXRvbXNOdW1iZXIsIG5ib25kOiBib25kc051bWJlciB9O1xufVxuZnVuY3Rpb24gZXh0cmFjdEF0b21EYXRhVjMwMDAobW9sQmxvY2spIHtcbiAgICBjb25zdCBudW1iZXJzID0gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sQmxvY2spO1xuICAgIGxldCBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBBVE9NJyk7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBjb29yZGluYXRlc1xuICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpO1xuICAgIGxldCBpbmRleEVuZCA9IGluZGV4O1xuICAgIGNvbnN0IGluZGV4ZXMgPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBjb25zdCB0eXBlcyA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHggPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBjb25zdCB5ID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJzLm5hdG9tOyBpKyspIHtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgIGluZGV4ZXNbaV0gPSBwYXJzZUludChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgIGluZGV4ID0gaW5kZXhFbmQgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgIHR5cGVzW2ldID0gbW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCk7XG4gICAgICAgIGluZGV4ID0gaW5kZXhFbmQgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgIHhbaV0gPSBwYXJzZUZsb2F0KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgeVtpXSA9IHBhcnNlRmxvYXQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgfVxuICAgIHJldHVybiB7IGF0b21JbmRleDogaW5kZXhlcywgYXRvbVR5cGU6IHR5cGVzLCB4OiB4LCB5OiB5IH07XG59XG4iLCJpbXBvcnQgeyBtYXAsIFNZTlRIRVNJWkVSUywgVEVDSE5PTE9HSUVTLCBNT0RJRklDQVRJT05TLCBkZWxpbWl0ZXIsIGdjcnNDb2Rlc1dpdGhvdXRTbWlsZXMgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0Jpb1NwcmluZywgYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzLCBhc29HYXBtZXJzQmlvU3ByaW5nVG9OdWNsZW90aWRlcywgYXNvR2FwbWVyc0Jpb1NwcmluZ1RvR2NycywgYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzLCBhc29HYXBtZXJzR2Nyc1RvQmlvU3ByaW5nLCBnY3JzVG9NZXJtYWRlMTIsIHNpUm5hTnVjbGVvdGlkZVRvQmlvU3ByaW5nU2Vuc2VTdHJhbmQsIHNpUm5hTnVjbGVvdGlkZVRvQXhvbGFic1NlbnNlU3RyYW5kLCBzaVJuYU51Y2xlb3RpZGVzVG9HY3JzLCBzaVJuYUJpb1NwcmluZ1RvTnVjbGVvdGlkZXMsIHNpUm5hQmlvU3ByaW5nVG9BeG9sYWJzLCBzaVJuYUJpb1NwcmluZ1RvR2Nycywgc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlcywgc2lSbmFBeG9sYWJzVG9CaW9TcHJpbmcsIHNpUm5hQXhvbGFic1RvR2Nycywgc2lSbmFHY3JzVG9OdWNsZW90aWRlcywgc2lSbmFHY3JzVG9CaW9TcHJpbmcsIHNpUm5hR2Nyc1RvQXhvbGFicywgZ2Nyc1RvTnVjbGVvdGlkZXMsIGdjcnNUb0xjbXMgfSBmcm9tICcuL2NvbnZlcnRlcnMnO1xuY29uc3Qgbm9UcmFuc2xhdGlvblRhYmxlQXZhaWxhYmxlID0gJ05vIHRyYW5zbGF0aW9uIHRhYmxlIGF2YWlsYWJsZSc7XG5leHBvcnQgY29uc3QgdW5kZWZpbmVkSW5wdXRTZXF1ZW5jZSA9ICdUeXBlIG9mIGlucHV0IHNlcXVlbmNlIGlzIHVuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0KHNlcXVlbmNlKSB7XG4gICAgY29uc3QgcG9zc2libGVTeW50aGVzaXplcnMgPSBnZXRMaXN0T2ZQb3NzaWJsZVN5bnRoZXNpemVyc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSk7XG4gICAgaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgb3V0cHV0SW5kZXggPSAwO1xuICAgIGNvbnN0IGZpcnN0VW5pcXVlQ2hhcmFjdGVycyA9IFsncicsICdkJ107XG4gICAgY29uc3QgbnVjbGVvdGlkZXMgPSBbJ0EnLCAnVScsICdUJywgJ0MnLCAnRyddO1xuICAgIHBvc3NpYmxlU3ludGhlc2l6ZXJzLmZvckVhY2goKHN5bnRoZXNpemVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvZGVzID0gZ2V0QWxsQ29kZXNPZlN5bnRoZXNpemVyKHN5bnRoZXNpemVyKTtcbiAgICAgICAgd2hpbGUgKG91dHB1dEluZGV4IDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkQ29kZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdyQUEnXG4gICAgICAgICAgICBvdXRwdXRJbmRleCA+IDEgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pICYmXG4gICAgICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4IC0gMl0pKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggKyAxXSkgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciA9IChvdXRwdXRJbmRleCA9PSBzZXF1ZW5jZS5sZW5ndGgpID8gLTEgOiBvdXRwdXRJbmRleDtcbiAgICBpZiAoaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyICE9IC0xKVxuICAgICAgICByZXR1cm4gcG9zc2libGVTeW50aGVzaXplcnNbMF07XG4gICAgY29uc3QgcG9zc2libGVUZWNobm9sb2dpZXMgPSBnZXRMaXN0T2ZQb3NzaWJsZVRlY2hub2xvZ2llc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSwgcG9zc2libGVTeW50aGVzaXplcnNbMF0pO1xuICAgIGlmIChwb3NzaWJsZVRlY2hub2xvZ2llcy5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgb3V0cHV0SW5kZXggPSAwO1xuICAgIHBvc3NpYmxlVGVjaG5vbG9naWVzLmZvckVhY2goKHRlY2hub2xvZ3kpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBPYmplY3Qua2V5cyhtYXBbcG9zc2libGVTeW50aGVzaXplcnNbMF1dW3RlY2hub2xvZ3ldKTtcbiAgICAgICAgd2hpbGUgKG91dHB1dEluZGV4IDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkQ29kZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdyQUEnXG4gICAgICAgICAgICBvdXRwdXRJbmRleCA+IDEgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pICYmXG4gICAgICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4IC0gMl0pKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggKyAxXSkgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwb3NzaWJsZVN5bnRoZXNpemVyc1swXTtcbn1cbmZ1bmN0aW9uIHNvcnRCeVN0cmluZ0xlbmd0aEluRGVzY2VuZGluZ09yZGVyKGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7IH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTZXF1ZW5jZShzZXF1ZW5jZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgcG9zc2libGVTeW50aGVzaXplcnMgPSBmb3JtYXQgPT0gbnVsbCA/XG4gICAgICAgIGdldExpc3RPZlBvc3NpYmxlU3ludGhlc2l6ZXJzQnlGaXJzdE1hdGNoZWRDb2RlKHNlcXVlbmNlKSA6XG4gICAgICAgIFtmb3JtYXRdO1xuICAgIC8vIGlmIChwb3NzaWJsZVN5bnRoZXNpemVycy5sZW5ndGggPiAxKSB7XG4gICAgLy8gICBjb25zdCBzeW50aGVzaXplciA9IHVpLmNob2ljZUlucHV0KCdDaG9vc2Ugc3ludGhlc2l6ZXIgZnJvbSBsaXN0OiAnLCBwb3NzaWJsZVN5bnRoZXNpemVyc1swXSxcbiAgICAvLyAgcG9zc2libGVTeW50aGVzaXplcnMpO1xuICAgIC8vICAgdWkuZGlhbG9nKCdDaG9vc2UgU3ludGhlc2l6ZXInKVxuICAgIC8vICAgICAuYWRkKHVpLnBhbmVsKFtzeW50aGVzaXplci5yb290XSwge3N0eWxlOiB7Zm9udFdlaWdodDogJ2JvbGQnfX0pKVxuICAgIC8vICAgICAub25PSygoKSA9PiBwb3NzaWJsZVN5bnRoZXNpemVycyA9IFtzeW50aGVzaXplci52YWx1ZV0pXG4gICAgLy8gICAgIC5vbkNhbmNlbCgoKSA9PiB7XG4gICAgLy8gICAgICAgcG9zc2libGVTeW50aGVzaXplcnMgPSBbcG9zc2libGVTeW50aGVzaXplcnNbMF1dO1xuICAgIC8vICAgICAgIGdyb2suc2hlbGwud2FybmluZygnSW5wdXQgc2VxdWVuY2UgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gZm9ybWF0ICcgKyBwb3NzaWJsZVN5bnRoZXNpemVyc1swXSk7XG4gICAgLy8gICAgIH0pXG4gICAgLy8gICAgIC5zaG93KCk7XG4gICAgLy8gfSBlbHNlIGlmIChwb3NzaWJsZVN5bnRoZXNpemVycy5sZW5ndGggPT0gMClcbiAgICBpZiAocG9zc2libGVTeW50aGVzaXplcnMubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiB7IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcjogMCwgc3ludGhlc2l6ZXI6IG51bGwsIHRlY2hub2xvZ3k6IG51bGwgfTtcbiAgICBsZXQgb3V0cHV0SW5kZXggPSAwO1xuICAgIGNvbnN0IGZpcnN0VW5pcXVlQ2hhcmFjdGVycyA9IFsncicsICdkJ107XG4gICAgY29uc3QgbnVjbGVvdGlkZXMgPSBbJ0EnLCAnVScsICdUJywgJ0MnLCAnRyddO1xuICAgIHBvc3NpYmxlU3ludGhlc2l6ZXJzLmZvckVhY2goKHN5bnRoZXNpemVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvZGVzID0gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoZ2V0QWxsQ29kZXNPZlN5bnRoZXNpemVyKHN5bnRoZXNpemVyKSk7XG4gICAgICAgIHdoaWxlIChvdXRwdXRJbmRleCA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENvZGUgPSBjb2Rlcy5maW5kKChjKSA9PiBjID09IHNlcXVlbmNlLnNsaWNlKG91dHB1dEluZGV4LCBvdXRwdXRJbmRleCArIGMubGVuZ3RoKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlZENvZGUgPT0gbnVsbClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnckFBJ1xuICAgICAgICAgICAgb3V0cHV0SW5kZXggPiAxICYmXG4gICAgICAgICAgICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSAmJlxuICAgICAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCAtIDJdKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnQXJBJ1xuICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4ICsgMV0pICYmXG4gICAgICAgICAgICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXRJbmRleCArPSBtYXRjaGVkQ29kZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXIgPSAob3V0cHV0SW5kZXggPT0gc2VxdWVuY2UubGVuZ3RoKSA/IC0xIDogb3V0cHV0SW5kZXg7XG4gICAgaWYgKGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciAhPSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyOiBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXIsXG4gICAgICAgICAgICBzeW50aGVzaXplcjogcG9zc2libGVTeW50aGVzaXplcnMsXG4gICAgICAgICAgICB0ZWNobm9sb2d5OiBudWxsLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwb3NzaWJsZVRlY2hub2xvZ2llcyA9IGdldExpc3RPZlBvc3NpYmxlVGVjaG5vbG9naWVzQnlGaXJzdE1hdGNoZWRDb2RlKHNlcXVlbmNlLCBwb3NzaWJsZVN5bnRoZXNpemVyc1swXSk7XG4gICAgLy8gaWYgKHBvc3NpYmxlVGVjaG5vbG9naWVzLmxlbmd0aCA+IDEpIHtcbiAgICAvLyAgIGNvbnN0IHRlY2hub2xvZ3kgPSB1aS5jaG9pY2VJbnB1dCgnQ2hvb3NlIHRlY2hub2xvZ3kgZnJvbSBsaXN0OiAnLCBwb3NzaWJsZVRlY2hub2xvZ2llc1swXSxcbiAgICAvLyBwb3NzaWJsZVRlY2hub2xvZ2llcyk7XG4gICAgLy8gICB1aS5kaWFsb2coJ0Nob29zZSBUZWNobm9sb2d5JylcbiAgICAvLyAgICAgLmFkZCh1aS5wYW5lbChbdGVjaG5vbG9neS5yb290XSwge3N0eWxlOiB7Zm9udFdlaWdodDogJ2JvbGQnfX0pKVxuICAgIC8vICAgICAub25PSygoKSA9PiBwb3NzaWJsZVRlY2hub2xvZ2llcyA9IFt0ZWNobm9sb2d5LnZhbHVlXSlcbiAgICAvLyAgICAgLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAvLyAgICAgICBwb3NzaWJsZVRlY2hub2xvZ2llcyA9IFtwb3NzaWJsZVRlY2hub2xvZ2llc1swXV07XG4gICAgLy8gICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdJbnB1dCBzZXF1ZW5jZSBpcyBleHBlY3RlZCB0byBiZSBpbiBmb3JtYXQgJyArIHBvc3NpYmxlVGVjaG5vbG9naWVzWzBdKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgLnNob3coKTtcbiAgICAvLyB9IGVsc2UgaWYgKHBvc3NpYmxlVGVjaG5vbG9naWVzLmxlbmd0aCA9PSAwKVxuICAgIC8vIGlmIChwb3NzaWJsZVRlY2hub2xvZ2llcy5sZW5ndGggPT0gMClcbiAgICAvLyAgIHJldHVybiB7aW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyOiAwLCBzeW50aGVzaXplcjogW3Bvc3NpYmxlU3ludGhlc2l6ZXJzWzNdXSwgdGVjaG5vbG9neTogbnVsbH07XG4gICAgb3V0cHV0SW5kZXggPSAwO1xuICAgIC8vIHBvc3NpYmxlVGVjaG5vbG9naWVzLmZvckVhY2goKHRlY2hub2xvZ3k6IHN0cmluZykgPT4ge1xuICAgIC8vICAgY29uc3QgY29kZXMgPSBPYmplY3Qua2V5cyhtYXBbcG9zc2libGVTeW50aGVzaXplcnNbMF1dW3RlY2hub2xvZ3ldKTtcbiAgICAvLyAgIHdoaWxlIChvdXRwdXRJbmRleCA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgIC8vICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAvLyAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgLy8gICAgICAgYnJlYWs7XG4gICAgLy8gICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnckFBJ1xuICAgIC8vICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgIC8vICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAvLyAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSlcbiAgICAvLyAgICAgKSBicmVhaztcbiAgICAvLyAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgLy8gICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4ICsgMV0pICYmXG4gICAgLy8gICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKVxuICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgIC8vICAgICAgIGJyZWFrO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcixcbiAgICAgICAgc3ludGhlc2l6ZXI6IHBvc3NpYmxlU3ludGhlc2l6ZXJzLFxuICAgICAgICB0ZWNobm9sb2d5OiBbcG9zc2libGVUZWNobm9sb2dpZXNbb3V0cHV0SW5kZXhdXSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbENvZGVzT2ZTeW50aGVzaXplcihzeW50aGVzaXplcikge1xuICAgIGxldCBjb2RlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKSlcbiAgICAgICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkpO1xuICAgIHJldHVybiBjb2Rlcy5jb25jYXQoT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUykpLmNvbmNhdChkZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpIHtcbiAgICBsZXQgc3ludGhlc2l6ZXJzID0gW107XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKChzeW50aGVzaXplcikgPT4ge1xuICAgICAgICBsZXQgY29kZXMgPSBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpKTtcbiAgICAgICAgaWYgKHN5bnRoZXNpemVyID09ICdKYW5zc2VuIEdDUlMgQ29kZXMnKVxuICAgICAgICAgICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyk7XG4gICAgICAgIC8vVE9ETzogZ2V0IGZpcnN0IG5vbi1kcm9wZG93biBjb2RlIHdoZW4gdGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb25zXG4gICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzZXF1ZW5jZVtpXSA9PSAnKScgJiYgaSAhPSBzZXF1ZW5jZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcy5zb21lKChzKSA9PiBzID09IHNlcXVlbmNlLnNsaWNlKHN0YXJ0LCBzdGFydCArIHMubGVuZ3RoKSkpXG4gICAgICAgICAgICBzeW50aGVzaXplcnMgPSBbJ0phbnNzZW4gR0NSUyBDb2RlcyddO1xuICAgICAgICBpZiAoY29kZXMuc29tZSgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShzdGFydCwgc3RhcnQgKyBzLmxlbmd0aCkpKVxuICAgICAgICAgICAgc3ludGhlc2l6ZXJzLnB1c2goc3ludGhlc2l6ZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBzeW50aGVzaXplcnM7XG59XG5mdW5jdGlvbiBnZXRMaXN0T2ZQb3NzaWJsZVRlY2hub2xvZ2llc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSwgc3ludGhlc2l6ZXIpIHtcbiAgICBjb25zdCB0ZWNobm9sb2dpZXMgPSBbXTtcbiAgICBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKS5mb3JFYWNoKCh0ZWNobm9sb2d5KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvZGVzID0gT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkuY29uY2F0KE9iamVjdC5rZXlzKE1PRElGSUNBVElPTlMpKTtcbiAgICAgICAgaWYgKGNvZGVzLnNvbWUoKHMpID0+IHMgPT0gc2VxdWVuY2Uuc2xpY2UoMCwgcy5sZW5ndGgpKSlcbiAgICAgICAgICAgIHRlY2hub2xvZ2llcy5wdXNoKHRlY2hub2xvZ3kpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZWNobm9sb2dpZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNlcXVlbmNlKHNlcXVlbmNlLCBvdXRwdXQpIHtcbiAgICBpZiAob3V0cHV0LmluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciAhPSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gdHlwZTogJycsXG4gICAgICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IEpTT04uc3RyaW5naWZ5KG91dHB1dCksXG4gICAgICAgICAgICBFcnJvcjogdW5kZWZpbmVkSW5wdXRTZXF1ZW5jZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTKSkgeyAvLyYmIG91dHB1dC50ZWNobm9sb2d5IS5pbmNsdWRlcyhURUNITk9MT0dJRVMuRE5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQklPU1BSSU5HKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuQVNPX0dBUE1FUlMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuQklPU1BSSU5HICsgJyAnICsgVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2VxdWVuY2UsXG4gICAgICAgICAgICBHQ1JTOiBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkdDUlMgKyAnICcgKyBURUNITk9MT0dJRVMuQVNPX0dBUE1FUlMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBNZXJtYWRlMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIExDTVM6IGdjcnNUb0xjbXMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5SQVdfTlVDTEVPVElERVMpICYmIG91dHB1dC50ZWNobm9sb2d5LmluY2x1ZGVzKFRFQ0hOT0xPR0lFUy5STkEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTICsgJyAnICsgVEVDSE5PTE9HSUVTLlJOQSxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZChzZXF1ZW5jZSksXG4gICAgICAgICAgICBBeG9sYWJzOiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNTZW5zZVN0cmFuZChzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzaVJuYU51Y2xlb3RpZGVzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQklPU1BSSU5HKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuU0lfUk5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkJJT1NQUklORyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2VxdWVuY2UsXG4gICAgICAgICAgICBBeG9sYWJzOiBzaVJuYUJpb1NwcmluZ1RvQXhvbGFicyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzaVJuYUJpb1NwcmluZ1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkFYT0xBQlMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuQVhPTEFCUyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEF4b2xhYnM6IHNlcXVlbmNlLFxuICAgICAgICAgICAgR0NSUzogc2lSbmFBeG9sYWJzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLlNJX1JOQSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5HQ1JTICsgJyAnICsgVEVDSE5PTE9HSUVTLlNJX1JOQSxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzaVJuYUdjcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2lSbmFHY3JzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgQXhvbGFiczogc2lSbmFHY3JzVG9BeG9sYWJzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIE1NMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIExDTVM6IGdjcnNUb0xjbXMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5HQ1JTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkdDUlMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogZ2Nyc1RvTnVjbGVvdGlkZXMoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2VxdWVuY2UsXG4gICAgICAgICAgICBNZXJtYWRlMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBMQ01TOiBnY3JzVG9MY21zKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuTUVSTUFERV8xMikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5NRVJNQURFXzEyLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSxcbiAgICAgICAgICAgIEdDUlM6IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSxcbiAgICAgICAgICAgIE1lcm1hZGUxMjogc2VxdWVuY2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZElucHV0U2VxdWVuY2UsXG4gICAgICAgIE51Y2xlb3RpZGVzOiB1bmRlZmluZWRJbnB1dFNlcXVlbmNlLFxuICAgIH07XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCBleHBlY3QsIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IHNlcXVlbmNlVG9TbWlsZXMgfSBmcm9tICcuLi9zdHJ1Y3R1cmVzLXdvcmtzL2Zyb20tbW9ub21lcnMnO1xuaW1wb3J0IHsgU1lOVEhFU0laRVJTIH0gZnJvbSAnLi4vc3RydWN0dXJlcy13b3Jrcy9tYXAnO1xuY2F0ZWdvcnkoJ3NlcXVlbmNlLXRyYW5zbGF0b3InLCAoKSA9PiB7XG4gICAgLy8gdGVzdCgnQUdHVENDVENUVEdBQ1RUQUdHQ0MnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xTyc7XG4gICAgLy8gICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnQUdHVENDVENUVEdBQ1RUQUdHQ0MnLCBmYWxzZSwgU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyksIGV4cGVjdGVkKTtcbiAgICAvLyB9KTtcbiAgICAvLyB0ZXN0KCdpbnZhYmFzaWMvZ2FsbmFjMScsIGFzeW5jICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2dnKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICAvLyB9KTtcbiAgICAvLyB0ZXN0KCdpbnZhYmFzaWMvZ2FsbmFjMicsIGFzeW5jICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2dzZyhpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgLy8gfSk7XG4gICAgLy8gdGVzdCgnaW52YWJhc2ljL2dhbG5hYzMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAvLyAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShPKScgK1xuICAgIC8vICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgLy8gICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgLy8gICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAvLyAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNnZ3MoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIC8vIH0pO1xuICAgIC8vIHRlc3QoJ2ludmFiYXNpYy9nYWxuYWM0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgIC8vICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgIC8vICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgLy8gICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzZ2coaW52YWJhc2ljKXMoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICAvLyB9KTtcbiAgICB0ZXN0KCd1c0NmQ2ZVZkdmQWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygndXNDZkNmVWZHZkFmJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd1c0Fmc3VzZ3Nnc2cnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ3VzQWZzdXNnc2dzZycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnVWZVZlVmc0Nmc3VhY2cnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCdVZlVmVWZzQ2ZzdWFjZycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc3VzdXN1c2F1YXN1JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09QKD1PKShTKU9DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCdzdXN1c3VzYXVhc3UnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ0NmR2ZDZnNHZnNDZicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnQ2ZHZkNmc0dmc0NmJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdhY2FjYWNzYWNzYWMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ2FjYWNhY3NhY3NhYycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnY2NjZ2dndXN1ZycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ2NjY2dnZ3VzdWcnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1VmQWZDZkdmR2ZDZkFmVWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ1VmQWZDZkdmR2ZDZkFmVWYnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIC8vIHRlc3QoJyhpbnZhYmFzaWMpc3VjdUNmdVVmJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPVxuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc3VjdUNmdVVmJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIC8vIH0pO1xuICAgIC8vIHRlc3QoJyhpbnZhYmFzaWMpc0FmZ2N1Z1VmJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPVxuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc0FmZ2N1Z1VmJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIC8vIH0pO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpY3VDZnVVZnNjJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYyljdUNmdVVmc2MnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIC8vIHRlc3QoJyhpbnZhYmFzaWMpc2N1c3VzdShHYWxOQWMtMi1KTkopJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPVxuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgIC8vICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgIC8vICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgLy8gICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzY3VzdXN1KEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgLy8gfSk7XG4gICAgdGVzdCgnKGludmFiYXNpYyl1c0Fmc3VjdUNmdVVmQWZnY3VnVWZnQ2ZhY3VzdXN1JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXVzQWZzdWN1Q2Z1VWZBZmdjdWdVZmdDZmFjdXN1c3UnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpYXNhY2dHZnVHZkNmQWZhY3VjdWF1dWNhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylhc2FjZ0dmdUdmQ2ZBZmFjdWN1YXV1Y2EnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIC8vIHRlc3QoJyhpbnZhYmFzaWMpc2NzZ2d1R2ZjQWZBZkNmdWN1YXV1Y3VnYScsIGFzeW5jICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkID1cbiAgICAvLyAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAvLyAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNjc2dndUdmY0FmQWZDZnVjdWF1dWN1Z2EnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgLy8gfSk7XG4gICAgLy8gdGVzdCgnKGludmFiYXNpYylzY3NhYWNVZmNVZkFmVWZ1Y3VnZ2FjdXVhJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPVxuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2NzYWFjVWZjVWZBZlVmdWN1Z2dhY3V1YScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICAvLyB9KTtcbiAgICAvLyB0ZXN0KCcoaW52YWJhc2ljKXNhc2FjdUNmdUFmVWZVZmN1Z2dhY3V1dWEnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBleHBlY3RlZCA9XG4gICAgLy8gICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgLy8gICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzYXNhY3VDZnVBZlVmVWZjdWdnYWN1dXVhJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIC8vIH0pO1xuICAgIC8vIHRlc3QoJyhpbnZhYmFzaWMpdXNBZnNjdWcoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShPKScgK1xuICAgIC8vICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgLy8gICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgLy8gICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAvLyAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXVzQWZzY3VnKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICAvLyB9KTtcbiAgICAvLyB0ZXN0KCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmKEdhbE5BYy0yLUpOSiknLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgLy8gICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgLy8gICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAvLyAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgLy8gfSk7XG4gICAgLy8gdGVzdCgnKGludmFiYXNpYylzYXN1YWFDZmNVZkNmVWZ1Z3VhZ3V1YXVhKEdhbE5BYy0yLUpOSiknLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgIC8vICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgIC8vICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgLy8gICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzYXN1YWFDZmNVZkNmVWZ1Z3VhZ3V1YXVhKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLFxuICAgIC8vICAgICBleHBlY3RlZCk7XG4gICAgLy8gfSk7XG4gICAgLy8gdGVzdCgnKGludmFiYXNpYylzY3NhdWNhY2d1VWZHZkNmYWdjY2d1Y3V1YShpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2NzYXVjYWNndVVmR2ZDZmFnY2NndWN1dWEoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJyxcbiAgICAvLyAgICAgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIC8vIH0pO1xuICAgIC8vIHRlc3QoJyhpbnZhYmFzaWMpc3VzZ3V1VWZnQ2ZDZlVmYWNhdWN1YWN1YShHYWxOQWMtMi1KTkopJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAvLyAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgIC8vICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgLy8gICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAvLyAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgIC8vICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc3VzZ3V1VWZnQ2ZDZlVmYWNhdWN1YWN1YShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSxcbiAgICAvLyAgICAgZXhwZWN0ZWQpO1xuICAgIC8vIH0pO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IERHOyIsIm1vZHVsZS5leHBvcnRzID0gZ3JvazsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgcnVuVGVzdHMsIHRlc3RzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgJy4vdGVzdHMvc21pbGVzLXRlc3RzJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG5leHBvcnQgeyB0ZXN0cyB9O1xuLy9uYW1lOiB0ZXN0XG4vL291dHB1dDogZGF0YWZyYW1lIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJ1blRlc3RzKCk7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbU9iamVjdHMoZGF0YSk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=