@kontur.candy/tools 2.138.0 → 2.140.0-debug

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.
Files changed (37) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/distr/Common/CandyApiClient/CandyApiClient.js +80 -9
  3. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +26 -4
  4. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
  5. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
  6. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
  7. package/distr/Common/CandyApiClient/Types/Print/PrintType.js +14 -0
  8. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
  9. package/distr/Common/HttpClient/HttpClient.js +5 -2
  10. package/distr/Common/IterableUtils.js +26 -1
  11. package/distr/Common/KCLangRuntimeUtils.js +10 -2
  12. package/distr/Common/ModelPath/BuildIterationSequence.js +3 -2
  13. package/distr/Common/ModelPath/ModelPath.js +15 -4
  14. package/distr/Common/StringArrayKey.js +4 -12
  15. package/distr/Common/UseShowOnce.js +88 -0
  16. package/distr/Common/hashUtils.js +17 -0
  17. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +10 -4
  18. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
  19. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
  20. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
  21. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +6 -6
  22. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +46 -4
  23. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -2
  24. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +12 -6
  25. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -2
  26. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +5 -2
  27. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
  28. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
  29. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -3
  30. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  31. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  32. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  33. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +151 -57
  34. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  35. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +226 -137
  36. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  37. package/package.json +1 -1
@@ -46,11 +46,11 @@
46
46
  u = ("ArrayBuffer" in n);
47
47
 
48
48
  if (u) var c = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
49
- f = ArrayBuffer.isView || function (e) {
49
+ l = ArrayBuffer.isView || function (e) {
50
50
  return e && c.indexOf(Object.prototype.toString.call(e)) > -1;
51
51
  };
52
52
 
53
- function l(e) {
53
+ function f(e) {
54
54
  if ("string" != typeof e && (e = String(e)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e) throw new TypeError('Invalid character in header field name: "' + e + '"');
55
55
  return e.toLowerCase();
56
56
  }
@@ -99,22 +99,22 @@
99
99
  });
100
100
  }
101
101
 
102
- function b(e) {
102
+ function v(e) {
103
103
  var t = new FileReader(),
104
104
  r = m(t);
105
105
  return t.readAsArrayBuffer(e), r;
106
106
  }
107
107
 
108
- function v(e) {
108
+ function b(e) {
109
109
  if (e.slice) return e.slice(0);
110
110
  var t = new Uint8Array(e.byteLength);
111
111
  return t.set(new Uint8Array(e)), t.buffer;
112
112
  }
113
113
 
114
- function g() {
114
+ function w() {
115
115
  return this.bodyUsed = !1, this._initBody = function (e) {
116
116
  var t;
117
- this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : o && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = v(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || f(e)) ? this._bodyArrayBuffer = v(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
117
+ this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : o && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = b(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || l(e)) ? this._bodyArrayBuffer = b(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
118
118
  }, a && (this.blob = function () {
119
119
  var e = y(this);
120
120
  if (e) return e;
@@ -123,7 +123,7 @@
123
123
  if (this._bodyFormData) throw new Error("could not read FormData body as blob");
124
124
  return Promise.resolve(new Blob([this._bodyText]));
125
125
  }, this.arrayBuffer = function () {
126
- return this._bodyArrayBuffer ? y(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer)) : this.blob().then(b);
126
+ return this._bodyArrayBuffer ? y(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer)) : this.blob().then(v);
127
127
  }), this.text = function () {
128
128
  var e,
129
129
  t,
@@ -146,17 +146,17 @@
146
146
  }
147
147
 
148
148
  p.prototype.append = function (e, t) {
149
- e = l(e), t = h(t);
149
+ e = f(e), t = h(t);
150
150
  var r = this.map[e];
151
151
  this.map[e] = r ? r + ", " + t : t;
152
152
  }, p.prototype.delete = function (e) {
153
- delete this.map[l(e)];
153
+ delete this.map[f(e)];
154
154
  }, p.prototype.get = function (e) {
155
- return e = l(e), this.has(e) ? this.map[e] : null;
155
+ return e = f(e), this.has(e) ? this.map[e] : null;
156
156
  }, p.prototype.has = function (e) {
157
- return this.map.hasOwnProperty(l(e));
157
+ return this.map.hasOwnProperty(f(e));
158
158
  }, p.prototype.set = function (e, t) {
159
- this.map[l(e)] = h(t);
159
+ this.map[f(e)] = h(t);
160
160
  }, p.prototype.forEach = function (e, t) {
161
161
  for (var r in this.map) this.map.hasOwnProperty(r) && e.call(t, this.map[r], r, this);
162
162
  }, p.prototype.keys = function () {
@@ -175,7 +175,7 @@
175
175
  e.push([r, t]);
176
176
  }), d(e);
177
177
  }, i && (p.prototype[Symbol.iterator] = p.prototype.entries);
178
- var w = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
178
+ var g = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
179
179
 
180
180
  function E(e, t) {
181
181
  if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
@@ -188,7 +188,7 @@
188
188
  this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new p(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
189
189
  } else this.url = String(e);
190
190
 
191
- if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new p(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), w.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
191
+ if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new p(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), g.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
192
192
 
193
193
  if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
194
194
  var i = /([?&])_=[^&]*/;
@@ -217,7 +217,7 @@
217
217
  return new E(this, {
218
218
  body: this._bodyInit
219
219
  });
220
- }, g.call(E.prototype), g.call(A.prototype), A.prototype.clone = function () {
220
+ }, w.call(E.prototype), w.call(A.prototype), A.prototype.clone = function () {
221
221
  return new A(this._bodyInit, {
222
222
  status: this.status,
223
223
  statusText: this.statusText,
@@ -231,10 +231,10 @@
231
231
  });
232
232
  return e.type = "error", e;
233
233
  };
234
- var j = [301, 302, 303, 307, 308];
234
+ var k = [301, 302, 303, 307, 308];
235
235
 
236
236
  A.redirect = function (e, t) {
237
- if (-1 === j.indexOf(t)) throw new RangeError("Invalid status code");
237
+ if (-1 === k.indexOf(t)) throw new RangeError("Invalid status code");
238
238
  return new A(null, {
239
239
  status: t,
240
240
  headers: {
@@ -243,22 +243,22 @@
243
243
  });
244
244
  };
245
245
 
246
- var T = n.DOMException;
246
+ var j = n.DOMException;
247
247
 
248
248
  try {
249
- new T();
249
+ new j();
250
250
  } catch (e) {
251
- (T = function (e, t) {
251
+ (j = function (e, t) {
252
252
  this.message = e, this.name = t;
253
253
  var r = Error(e);
254
254
  this.stack = r.stack;
255
- }).prototype = Object.create(Error.prototype), T.prototype.constructor = T;
255
+ }).prototype = Object.create(Error.prototype), j.prototype.constructor = j;
256
256
  }
257
257
 
258
- function k(e, t) {
258
+ function T(e, t) {
259
259
  return new Promise(function (r, o) {
260
260
  var i = new E(e, t);
261
- if (i.signal && i.signal.aborted) return o(new T("Aborted", "AbortError"));
261
+ if (i.signal && i.signal.aborted) return o(new j("Aborted", "AbortError"));
262
262
  var s = new XMLHttpRequest();
263
263
 
264
264
  function c() {
@@ -298,7 +298,7 @@
298
298
  }, 0);
299
299
  }, s.onabort = function () {
300
300
  setTimeout(function () {
301
- o(new T("Aborted", "AbortError"));
301
+ o(new j("Aborted", "AbortError"));
302
302
  }, 0);
303
303
  }, s.open(i.method, function (e) {
304
304
  try {
@@ -333,9 +333,9 @@
333
333
  }), e;
334
334
  }
335
335
 
336
- k.polyfill = !0, n.fetch || (n.fetch = k, n.Headers = p, n.Request = E, n.Response = A);
336
+ T.polyfill = !0, n.fetch || (n.fetch = T, n.Headers = p, n.Request = E, n.Response = A);
337
337
 
338
- var C = function () {
338
+ var I = function () {
339
339
  function e() {
340
340
  P(this, e);
341
341
  }
@@ -374,36 +374,47 @@
374
374
  return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
375
375
  }
376
376
 
377
- function I(e) {
377
+ function C(e) {
378
378
  return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
379
379
  }
380
380
 
381
- var U = {
382
- authorized: I("{authorized}"),
381
+ var R = {
382
+ authorized: C("{authorized}"),
383
383
  cauldronApiUrl: "{cauldronApiUrl}",
384
- isTestServer: I("{isTestServer}"),
385
- renderCachingForIE8: I("{renderCachingForIE8}"),
386
- normalizationOnServer: I("{normalizationOnServer}"),
384
+ isTestServer: C("{isTestServer}"),
385
+ renderCachingForIE8: C("{renderCachingForIE8}"),
386
+ normalizationOnServer: C("{normalizationOnServer}"),
387
387
  normativeUrl: "{normativeUrl}",
388
388
  resourcesVersion: "{resourcesVersion}",
389
389
  konturDomains: "{konturDomains}"
390
390
  };
391
391
 
392
- function D(e) {
393
- return D = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
392
+ function U(e) {
393
+ return U = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
394
394
  return typeof e;
395
395
  } : function (e) {
396
396
  return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
397
- }, D(e);
397
+ }, U(e);
398
398
  }
399
399
 
400
- function R(e, t) {
401
- return R = Object.setPrototypeOf || function (e, t) {
402
- return e.__proto__ = t, e;
403
- }, R(e, t);
400
+ function D(e, t, r, n, o, i, a) {
401
+ try {
402
+ var s = e[i](a),
403
+ u = s.value;
404
+ } catch (e) {
405
+ return void r(e);
406
+ }
407
+
408
+ s.done ? t(u) : Promise.resolve(u).then(n, o);
404
409
  }
405
410
 
406
411
  function x(e, t) {
412
+ return x = Object.setPrototypeOf || function (e, t) {
413
+ return e.__proto__ = t, e;
414
+ }, x(e, t);
415
+ }
416
+
417
+ function F(e, t) {
407
418
  if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
408
419
  e.prototype = Object.create(t && t.prototype, {
409
420
  constructor: {
@@ -413,11 +424,11 @@
413
424
  }
414
425
  }), Object.defineProperty(e, "prototype", {
415
426
  writable: !1
416
- }), t && R(e, t);
427
+ }), t && x(e, t);
417
428
  }
418
429
 
419
- function F(e, t) {
420
- if (t && ("object" === D(t) || "function" == typeof t)) return t;
430
+ function M(e, t) {
431
+ if (t && ("object" === U(t) || "function" == typeof t)) return t;
421
432
  if (void 0 !== t) throw new TypeError("Derived constructors may only return object or undefined");
422
433
  return function (e) {
423
434
  if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -425,13 +436,13 @@
425
436
  }(e);
426
437
  }
427
438
 
428
- function M(e) {
429
- return M = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
439
+ function L(e) {
440
+ return L = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
430
441
  return e.__proto__ || Object.getPrototypeOf(e);
431
- }, M(e);
442
+ }, L(e);
432
443
  }
433
444
 
434
- function L() {
445
+ function V() {
435
446
  if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
436
447
  if (Reflect.construct.sham) return !1;
437
448
  if ("function" == typeof Proxy) return !0;
@@ -443,18 +454,18 @@
443
454
  }
444
455
  }
445
456
 
446
- function V(e, t, r) {
447
- return V = L() ? Reflect.construct : function (e, t, r) {
457
+ function z(e, t, r) {
458
+ return z = V() ? Reflect.construct : function (e, t, r) {
448
459
  var n = [null];
449
460
  n.push.apply(n, t);
450
461
  var o = new (Function.bind.apply(e, n))();
451
- return r && R(o, r.prototype), o;
452
- }, V.apply(null, arguments);
462
+ return r && x(o, r.prototype), o;
463
+ }, z.apply(null, arguments);
453
464
  }
454
465
 
455
- function z(e) {
466
+ function N(e) {
456
467
  var t = "function" == typeof Map ? new Map() : void 0;
457
- return z = function (e) {
468
+ return N = function (e) {
458
469
  if (null === e || (r = e, -1 === Function.toString.call(r).indexOf("[native code]"))) return e;
459
470
  var r;
460
471
  if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
@@ -465,7 +476,7 @@
465
476
  }
466
477
 
467
478
  function n() {
468
- return V(e, arguments, M(this).constructor);
479
+ return z(e, arguments, L(this).constructor);
469
480
  }
470
481
 
471
482
  return n.prototype = Object.create(e.prototype, {
@@ -475,11 +486,11 @@
475
486
  writable: !0,
476
487
  configurable: !0
477
488
  }
478
- }), R(n, e);
479
- }, z(e);
489
+ }), x(n, e);
490
+ }, N(e);
480
491
  }
481
492
 
482
- function N(e) {
493
+ function q(e) {
483
494
  var t = function () {
484
495
  if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
485
496
  if (Reflect.construct.sham) return !1;
@@ -494,20 +505,20 @@
494
505
 
495
506
  return function () {
496
507
  var r,
497
- n = M(e);
508
+ n = L(e);
498
509
 
499
510
  if (t) {
500
- var o = M(this).constructor;
511
+ var o = L(this).constructor;
501
512
  r = Reflect.construct(n, arguments, o);
502
513
  } else r = n.apply(this, arguments);
503
514
 
504
- return F(this, r);
515
+ return M(this, r);
505
516
  };
506
517
  }
507
518
 
508
- var q = function (e) {
509
- x(r, e);
510
- var t = N(r);
519
+ var H = function (e) {
520
+ F(r, e);
521
+ var t = q(r);
511
522
 
512
523
  function r() {
513
524
  return P(this, r), t.call(this, "Operation not implemented");
@@ -515,8 +526,8 @@
515
526
 
516
527
  return r;
517
528
  }(function (e) {
518
- x(r, e);
519
- var t = N(r);
529
+ F(r, e);
530
+ var t = q(r);
520
531
 
521
532
  function r(e) {
522
533
  var n;
@@ -524,9 +535,9 @@
524
535
  }
525
536
 
526
537
  return r;
527
- }(z(Error)));
538
+ }(N(Error)));
528
539
 
529
- function H(e, t) {
540
+ function G(e, t) {
530
541
  var r = Object.keys(e);
531
542
 
532
543
  if (Object.getOwnPropertySymbols) {
@@ -542,9 +553,9 @@
542
553
  function Z(e) {
543
554
  for (var r = 1; r < arguments.length; r++) {
544
555
  var n = null != arguments[r] ? arguments[r] : {};
545
- r % 2 ? H(Object(n), !0).forEach(function (r) {
556
+ r % 2 ? G(Object(n), !0).forEach(function (r) {
546
557
  t(e, r, n[r]);
547
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : H(Object(n)).forEach(function (t) {
558
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : G(Object(n)).forEach(function (t) {
548
559
  Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
549
560
  });
550
561
  }
@@ -552,7 +563,7 @@
552
563
  return e;
553
564
  }
554
565
 
555
- function G(e, t) {
566
+ function $(e, t) {
556
567
  if (null != t) {
557
568
  if (null == e) throw new Error("Path must be defined");
558
569
  return ["model", "change", e, t];
@@ -561,7 +572,7 @@
561
572
  return null != e ? ["model", "change", e] : ["model", "change"];
562
573
  }
563
574
 
564
- function $(e) {
575
+ function X(e) {
565
576
  return Object.keys(e).filter(function (t) {
566
577
  return e[t] && Object.prototype.hasOwnProperty.call(e[t], "value");
567
578
  }).map(function (r) {
@@ -570,17 +581,18 @@
570
581
  });
571
582
  }
572
583
 
573
- function X(e) {
584
+ function J(e) {
574
585
  return e.reduce(function (e, t) {
575
586
  return Z(Z({}, e), t);
576
587
  }, {});
577
588
  }
578
589
 
579
- var J = function () {
590
+ var W = function () {
580
591
  function e(t) {
581
592
  P(this, e), this.form = void 0, this.form = t;
582
593
  }
583
594
 
595
+ var r, n;
584
596
  return _(e, [{
585
597
  key: "batchUpdate",
586
598
  value: function (e) {
@@ -596,6 +608,38 @@
596
608
  value: function (e) {
597
609
  throw new Error("Method not implemented.");
598
610
  }
611
+ }, {
612
+ key: "validateChildrenByPath",
613
+ value: (r = regeneratorRuntime.mark(function e(t) {
614
+ return regeneratorRuntime.wrap(function (e) {
615
+ for (;;) switch (e.prev = e.next) {
616
+ case 0:
617
+ throw new Error("Method not implemented.");
618
+
619
+ case 1:
620
+ case "end":
621
+ return e.stop();
622
+ }
623
+ }, e);
624
+ }), n = function () {
625
+ var e = this,
626
+ t = arguments;
627
+ return new Promise(function (n, o) {
628
+ var i = r.apply(e, t);
629
+
630
+ function a(e) {
631
+ D(i, n, o, a, s, "next", e);
632
+ }
633
+
634
+ function s(e) {
635
+ D(i, n, o, a, s, "throw", e);
636
+ }
637
+
638
+ a(void 0);
639
+ });
640
+ }, function (e) {
641
+ return n.apply(this, arguments);
642
+ })
599
643
  }, {
600
644
  key: "__INTERNAL__importFromEmployeeService",
601
645
  value: function () {
@@ -603,7 +647,17 @@
603
647
  }
604
648
  }, {
605
649
  key: "importEmployees",
606
- value: function (e) {
650
+ value: function (e, t) {
651
+ throw new Error("Method not implemented.");
652
+ }
653
+ }, {
654
+ key: "print",
655
+ value: function (e, t) {
656
+ throw new Error("Method not implemented.");
657
+ }
658
+ }, {
659
+ key: "runMassAction",
660
+ value: function (e, t) {
607
661
  throw new Error("Method not implemented.");
608
662
  }
609
663
  }, {
@@ -624,12 +678,7 @@
624
678
  }, {
625
679
  key: "onModelChange",
626
680
  value: function (e, t) {
627
- console.error("form.onModelChange() is not supported yet");
628
- }
629
- }, {
630
- key: "offModelChange",
631
- value: function (e, t) {
632
- console.error("form.offModelChange() is not supported yet");
681
+ throw Error("form.onModelChange() is not supported yet");
633
682
  }
634
683
  }, {
635
684
  key: "save",
@@ -652,6 +701,16 @@
652
701
  var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
653
702
  return this.form.validator.validateAll(e);
654
703
  }
704
+ }, {
705
+ key: "getAdditionalEmployeeInfo",
706
+ value: function (e) {
707
+ throw new Error("not implemented");
708
+ }
709
+ }, {
710
+ key: "getWorkingEventsForEmployee",
711
+ value: function (e) {
712
+ throw new Error("not implemented");
713
+ }
655
714
  }, {
656
715
  key: "hasErrors",
657
716
  value: function () {
@@ -661,17 +720,17 @@
661
720
  }, {
662
721
  key: "onErrorsCountChanged",
663
722
  value: function (e) {
664
- this.form.eventManager.on(G(this.form.settings.formRoot, "errorsCount"), e);
723
+ this.form.eventManager.on($(this.form.settings.formRoot, "errorsCount"), e);
665
724
  }
666
725
  }, {
667
726
  key: "offErrorsCountChanged",
668
727
  value: function (e) {
669
- this.form.eventManager.off(G(this.form.settings.formRoot, "errorsCount"), e);
728
+ this.form.eventManager.off($(this.form.settings.formRoot, "errorsCount"), e);
670
729
  }
671
730
  }, {
672
731
  key: "set",
673
732
  value: function (e, r) {
674
- if (null === e || "string" == typeof e || "object" !== D(e) || Array.isArray(e)) {
733
+ if (null === e || "string" == typeof e || "object" !== U(e) || Array.isArray(e)) {
675
734
  if ("string" != typeof e) throw new Error("form.set() parameter should be string path or object with path-value pairs");
676
735
  this.form.model.set(e, "value", r);
677
736
  } else {
@@ -687,13 +746,13 @@
687
746
  key: "get",
688
747
  value: function (e) {
689
748
  var t = this;
690
- if (Array.isArray(e)) return X(e.map(function (e) {
691
- return $(t.form.model.getChunk(e));
749
+ if (Array.isArray(e)) return J(e.map(function (e) {
750
+ return X(t.form.model.getChunk(e));
692
751
  }).reduce(function (e, t) {
693
752
  return e.concat(t);
694
753
  }, []));
695
- if ("string" == typeof e) return X($(this.form.model.getChunk(e)));
696
- if (void 0 === e) return X($(this.form.model.getChunk(this.form.settings.formRoot)));
754
+ if ("string" == typeof e) return J(X(this.form.model.getChunk(e)));
755
+ if (void 0 === e) return J(X(this.form.model.getChunk(this.form.settings.formRoot)));
697
756
  throw new Error("form.get() parameter should be string path or array of paths");
698
757
  }
699
758
  }, {
@@ -704,37 +763,57 @@
704
763
  }, {
705
764
  key: "copySubtree",
706
765
  value: function (e, t, r) {
707
- throw new q();
766
+ throw new H();
708
767
  }
709
768
  }, {
710
769
  key: "addInstance",
711
770
  value: function (e) {
712
- throw new q();
771
+ throw new H();
713
772
  }
714
773
  }, {
715
774
  key: "getChildren",
716
775
  value: function (e) {
717
- throw new q();
776
+ throw new H();
777
+ }
778
+ }, {
779
+ key: "uuidGenerate",
780
+ value: function () {
781
+ throw new H();
718
782
  }
719
783
  }, {
720
784
  key: "showModal",
721
785
  value: function (e) {
722
- throw new Error("Method not implemented.");
786
+ throw new H();
787
+ }
788
+ }, {
789
+ key: "addSection",
790
+ value: function (e) {
791
+ throw new H();
792
+ }
793
+ }, {
794
+ key: "callInitSection",
795
+ value: function (e) {
796
+ throw new H();
797
+ }
798
+ }, {
799
+ key: "openEmployeeEditor",
800
+ value: function (e) {
801
+ throw new H();
723
802
  }
724
803
  }, {
725
804
  key: "removeInstance",
726
805
  value: function (e, t) {
727
- throw new q();
806
+ throw new H();
728
807
  }
729
808
  }, {
730
809
  key: "removeInstances",
731
810
  value: function (e, t) {
732
- throw new q();
811
+ throw new H();
733
812
  }
734
813
  }, {
735
814
  key: "focusOnControlIfExist",
736
815
  value: function (e) {
737
- throw new q();
816
+ throw new H();
738
817
  }
739
818
  }, {
740
819
  key: "setAllCheckboxesFor113103",
@@ -746,6 +825,16 @@
746
825
  value: function (e) {
747
826
  return Promise.resolve(void 0);
748
827
  }
828
+ }, {
829
+ key: "ensureInstanceFullyLoaded",
830
+ value: function (e) {
831
+ throw new Error("Method not implemented.");
832
+ }
833
+ }, {
834
+ key: "customNormalize",
835
+ value: function (e, t) {
836
+ throw new H();
837
+ }
749
838
  }]), e;
750
839
  }();
751
840
 
@@ -775,15 +864,15 @@
775
864
  return e;
776
865
  }
777
866
 
778
- function W() {}
867
+ function Y() {}
779
868
 
780
- function Y() {
869
+ function ee() {
781
870
  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
782
871
  r = e.g.CF.keformsUrl || "";
783
872
  return "".concat(r, "/").concat(t).replace(/([^:])\/{2,}/g, "$1/");
784
873
  }
785
874
 
786
- function ee(e, t) {
875
+ function te(e, t) {
787
876
  if (void 0 === t) return e;
788
877
 
789
878
  for (var r = [], n = 0, o = Object.keys(t); n < o.length; n++) {
@@ -795,11 +884,11 @@
795
884
  return 0 === r.length ? e : e + "?" + r.join("&");
796
885
  }
797
886
 
798
- function te(t) {
887
+ function re(t) {
799
888
  return new RegExp("^(?:".concat(t.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(e.g.location.host);
800
889
  }
801
890
 
802
- function re(t) {
891
+ function ne(t) {
803
892
  return (e.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
804
893
  return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
805
894
  }).find(function (e) {
@@ -842,26 +931,26 @@
842
931
  }) || [])[1];
843
932
  }
844
933
 
845
- function ne(t, r) {
934
+ function oe(t, r) {
846
935
  var n = t.gfv,
847
936
  o = t.engineVersion,
848
937
  i = t.resourcesVersion;
849
938
  if (e.g.CF.entryPoint[n]) r();else {
850
939
  var a = o && !e.g[o],
851
- s = "true" === re("debug") ? "" : ".min",
940
+ s = "true" === ne("debug") ? "" : ".min",
852
941
  u = [],
853
942
  c = {
854
943
  v: i,
855
944
  resourceZone: t.resourceZone
856
945
  };
857
946
  u.push(function (e) {
858
- return C.styleSheet(Y(ee("static/public/styles/".concat(n).concat(s, ".css"), c)), !0, e);
947
+ return I.styleSheet(ee(te("static/public/styles/".concat(n).concat(s, ".css"), c)), !0, e);
859
948
  }), u.push(function (e) {
860
- return C.script(Y(ee("static/public/scripts/".concat(n).concat(s, ".js"), c)), e);
949
+ return I.script(ee(te("static/public/scripts/".concat(n).concat(s, ".js"), c)), e);
861
950
  }), a && u.push(function (e) {
862
- return C.styleSheet(Y(ee("static/public/styles/candy_".concat(o).concat(s, ".css"), c)), !1, e);
951
+ return I.styleSheet(ee(te("static/public/styles/candy_".concat(o).concat(s, ".css"), c)), !1, e);
863
952
  }, function (e) {
864
- return C.script(Y(ee("static/public/scripts/candy_".concat(o).concat(s, ".js"), c)), e);
953
+ return I.script(ee(te("static/public/scripts/candy_".concat(o).concat(s, ".js"), c)), e);
865
954
  }), function (e, t) {
866
955
  var r = 0;
867
956
  e.forEach(function (n) {
@@ -876,74 +965,74 @@
876
965
  }
877
966
  }
878
967
 
879
- function oe(t, r, n) {
968
+ function ie(t, r, n) {
880
969
  var o;
881
970
  (null !== (o = e.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (e) {
882
971
  throw "string" == typeof e || null == e ? new Error(null != e ? e : "Undefined is not allowed") : e;
883
972
  }("Form entry point ".concat(r.gfv, " not found.")))(t, r).then(function (e) {
884
973
  var t = e.publicForm || function (e) {
885
- return new J(e);
974
+ return new W(e);
886
975
  }(e);
887
976
 
888
977
  n(null, t);
889
978
  }).catch(n);
890
979
  }
891
980
 
892
- function ie(t) {
981
+ function ae(t) {
893
982
  if (null != t) return e.g[t] && e.g[t].default;
894
983
  }
895
984
 
896
- var ae = {
985
+ var se = {
897
986
  start: function (t, r) {
898
987
  var n,
899
988
  o,
900
- i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : W,
989
+ i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : Y,
901
990
  a = null,
902
991
  s = r.ns,
903
992
  u = r.draftId;
904
- if (te(U.konturDomains) ? U.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
905
- var c = null !== (n = r.resourceZone) && void 0 !== n ? n : re("resourceZone"),
906
- f = ee(Y(B({
993
+ if (re(R.konturDomains) ? R.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
994
+ var c = null !== (n = r.resourceZone) && void 0 !== n ? n : ne("resourceZone"),
995
+ l = te(ee(B({
907
996
  ns: s,
908
997
  draftId: u
909
998
  })), {
910
999
  resourceZone: c
911
1000
  }),
912
- l = {
1001
+ f = {
913
1002
  method: "GET"
914
1003
  };
915
- if (null == r.authentication || "browser-credentials-include" === r.authentication) l.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
1004
+ if (null == r.authentication || "browser-credentials-include" === r.authentication) f.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
916
1005
  var h;
917
- l.credentials = "omit", l.headers = null !== (h = l.headers) && void 0 !== h ? h : {}, l.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
918
- } else l.credentials = "omit";
919
- var d = null !== (o = r.fetch) && void 0 !== o ? o : k;
920
- d(f, l).then(function (e) {
1006
+ f.credentials = "omit", f.headers = null !== (h = f.headers) && void 0 !== h ? h : {}, f.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
1007
+ } else f.credentials = "omit";
1008
+ var d = null !== (o = r.fetch) && void 0 !== o ? o : T;
1009
+ d(l, f).then(function (e) {
921
1010
  return e.json();
922
1011
  }).then(function (n) {
923
1012
  var o,
924
1013
  a,
925
1014
  s,
926
1015
  u,
927
- f = n.gfv,
928
- l = n.engineVersion,
1016
+ l = n.gfv,
1017
+ f = n.engineVersion,
929
1018
  h = Q(Q(Q({
930
- authorized: U.authorized,
931
- cauldronApiUrl: U.cauldronApiUrl,
932
- isTestServer: U.isTestServer,
933
- renderCachingForIE8: U.renderCachingForIE8,
934
- normalizationOnServer: U.normalizationOnServer,
935
- normativeUrl: U.normativeUrl,
936
- resourcesVersion: U.resourcesVersion,
937
- konturDomains: U.konturDomains
1019
+ authorized: R.authorized,
1020
+ cauldronApiUrl: R.cauldronApiUrl,
1021
+ isTestServer: R.isTestServer,
1022
+ renderCachingForIE8: R.renderCachingForIE8,
1023
+ normalizationOnServer: R.normalizationOnServer,
1024
+ normativeUrl: R.normativeUrl,
1025
+ resourcesVersion: R.resourcesVersion,
1026
+ konturDomains: R.konturDomains
938
1027
  }, r), {}, {
939
1028
  abonId: r.abonId,
940
1029
  orgId: r.orgId,
941
1030
  userId: r.userId
942
1031
  }, n), {}, {
943
- gfv: f,
1032
+ gfv: l,
944
1033
  isIndividual: n.isIndividual,
945
1034
  isForeign: n.isForeign,
946
- engineVersion: l,
1035
+ engineVersion: f,
947
1036
  feedbackEnabled: null !== (o = r.feedbackEnabled) && void 0 !== o ? o : n.feedbackEnabled,
948
1037
  candyTourAvailable: n.candyTourAvailable,
949
1038
  eventEmitter: r.eventEmitter,
@@ -958,20 +1047,20 @@
958
1047
  resourceZone: c,
959
1048
  authentication: r.authentication
960
1049
  });
961
- ne({
1050
+ oe({
962
1051
  gfv: h.gfv,
963
1052
  engineVersion: h.engineVersion,
964
1053
  resourceZone: h.resourceZone,
965
1054
  resourcesVersion: h.resourcesVersion,
966
1055
  theme: h.theme
967
1056
  }, function (n) {
968
- if (!n && e.g.CF.entryPoint[f]) {
969
- var o = ie(l);
970
- oe(t, Q(Q({}, h), {}, {
1057
+ if (!n && e.g.CF.entryPoint[l]) {
1058
+ var o = ae(f);
1059
+ ie(t, Q(Q({}, h), {}, {
971
1060
  templatesApi: r.templatesApi,
972
1061
  renderForm: o
973
1062
  }), i);
974
- } else i(new Error("dynamic loading is not supported for gfv ".concat(f)));
1063
+ } else i(new Error("dynamic loading is not supported for gfv ".concat(l)));
975
1064
  });
976
1065
  }).catch(i);
977
1066
  }
@@ -980,6 +1069,6 @@
980
1069
  partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
981
1070
  keformsUrl: "{keformsUrl}"
982
1071
  };
983
- e.g.CF = ae;
1072
+ e.g.CF = se;
984
1073
  }();
985
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJfc2V0UHJvdG90eXBlT2YiLCJvIiwicCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJSZWZlcmVuY2VFcnJvciIsIl9nZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsImFyZ3MiLCJDbGFzcyIsImEiLCJhcHBseSIsImJpbmQiLCJhcmd1bWVudHMiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiX2NhY2hlIiwiTWFwIiwiV3JhcHBlciIsImZuIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY29uc29sZSIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJpbnN0YW5jZXMiLCJlbmFibGVkIiwicGF0aFByZWZpeGVzIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibG9hZEZvcm0iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZW50cnlQb2ludCIsImlzTmVlZEVuZ2luZSIsIm1pbiIsInYiLCJyZXNvdXJjZVpvbmUiLCJzdHlsZVNoZWV0IiwiY2IiLCJydW5QYXJhbGxlbCIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJjbGllbnREcmFmdFVybCIsInJlcXVlc3RPcHRpb25zIiwiYXV0aGVudGljYXRpb24iLCJhdXRoU2lkIiwiZmV0Y2hJbXBsIiwieCIsImNsaWVudERyYWZ0SW5mbyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsTUFBSUEsQ0FBQUEsR0FBc0IsRUFBMUI7O0FDRGUsV0FBU0MsQ0FBVCxDQUF5QkMsQ0FBekIsRUFBOEJDLENBQTlCLEVBQW1DQyxDQUFuQyxFQUFtQ0E7QUFZaEQs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fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IGZyb20gXCIuL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn0iLCJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlRnVuY3Rpb24gZnJvbSBcIi4vaXNOYXRpdmVGdW5jdGlvbi5qc1wiO1xuaW1wb3J0IGNvbnN0cnVjdCBmcm9tIFwiLi9jb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzcztcblxuICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTtcblxuICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCBDbGFzcyk7XG4gIH07XG5cbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7XG4gIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSAhPT0gLTE7XG59IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRW1wbG95ZWUgfSBmcm9tIFwiQHNrYmtvbnR1ci9zdGFmZi1zZWxlY3Rvci13aWRnZXRcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfX0lOVEVSTkFMX19pbXBvcnRGcm9tRW1wbG95ZWVTZXJ2aWNlKCk6IFByb21pc2U8RW1wbG95ZWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKGVtcGxveWVlczogRW1wbG95ZWVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmb3JtLm9mZk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZXMocGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzT25Db250cm9sSWZFeGlzdChwYXRoOiBCaW5kaW5nUGF0aCk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdXRvRmllbGRzVG9BdXRvVmFsdWUocGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7bWlufS5jc3NgLCBwYXJhbXMpKSwgdHJ1ZSwgY2IpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPEFVT09wdGlvbnM+IHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKHsgbnM6IG5zLCBkcmFmdElkOiBkcmFmdElkIH0pKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdmdiA9IGNsaWVudERyYWZ0SW5mby5nZnY7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6IGNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgY2F1bGRyb25BcGlVcmw6IGNsaWVudFNldHRpbmdzLmNhdWxkcm9uQXBpVXJsLFxuICAgICAgICAgICAgICAgIGlzVGVzdFNlcnZlcjogY2xpZW50U2V0dGluZ3MuaXNUZXN0U2VydmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IGNsaWVudFNldHRpbmdzLnJlbmRlckNhY2hpbmdGb3JJRTgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBjbGllbnRTZXR0aW5ncy5ub3JtYWxpemF0aW9uT25TZXJ2ZXIsXG4gICAgICAgICAgICAgICAgbm9ybWF0aXZlVXJsOiBjbGllbnRTZXR0aW5ncy5ub3JtYXRpdmVVcmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogY2xpZW50U2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYWJvbklkOiBvcHRpb25zLmFib25JZCxcbiAgICAgICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmdJZCxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBpc0luZGl2aWR1YWw6IGNsaWVudERyYWZ0SW5mby5pc0luZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgaXNGb3JlaWduOiBjbGllbnREcmFmdEluZm8uaXNGb3JlaWduLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNhbmR5VG91ckF2YWlsYWJsZTogY2xpZW50RHJhZnRJbmZvLmNhbmR5VG91ckF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXI6IG9wdGlvbnMuZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIGZvcm1JbmZvOiBjbGllbnREcmFmdEluZm8uZm9ybUluZm8sXG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvOiBjbGllbnREcmFmdEluZm8ucHJpbnRJbmZvLFxuICAgICAgICAgICAgICAgIHJlZ2lvbnM6IGNsaWVudERyYWZ0SW5mby5yZWdpb25zLFxuICAgICAgICAgICAgICAgIGhhc1RlbXBsYXRlczogY2xpZW50RHJhZnRJbmZvLmhhc1RlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwic291cmNlUm9vdCI6IiJ9
1074
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJmbiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlJlZmVyZW5jZUVycm9yIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsInZhbHVlT2YiLCJfY29uc3RydWN0IiwiUGFyZW50IiwiQ2xhc3MiLCJhIiwiYmluZCIsIl93cmFwTmF0aXZlU3VwZXIiLCJfY2FjaGUiLCJNYXAiLCJXcmFwcGVyIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJwcmludFR5cGUiLCJhY3Rpb25JZCIsInBhcmFtZXRlcnMiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJmaWx0ZXJzIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJlbXBsb3llZUlkIiwiaW5zdGFuY2VzIiwiZW5hYmxlZCIsInBhdGhQcmVmaXhlcyIsImJpbmRpbmdQYXRoIiwibm9ybWFsaXplcklkIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibG9hZEZvcm0iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZW50cnlQb2ludCIsImlzTmVlZEVuZ2luZSIsIm1pbiIsInYiLCJyZXNvdXJjZVpvbmUiLCJzdHlsZVNoZWV0IiwiY2IiLCJydW5QYXJhbGxlbCIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJjbGllbnREcmFmdFVybCIsInJlcXVlc3RPcHRpb25zIiwiYXV0aGVudGljYXRpb24iLCJhdXRoU2lkIiwiZmV0Y2hJbXBsIiwieCIsImNsaWVudERyYWZ0SW5mbyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsTUFBSUEsQ0FBQUEsR0FBc0IsRUFBMUI7O0FDRGUsV0FBU0MsQ0FBVCxDQUF5QkMsQ0FBekIsRUFBOEJDLENBQTlCLEVBQW1DQyxDQUFuQyxFQUFtQ0E7QUFZaEQsV0FYSUQsQ0FBQUEsSUFBT0QsQ0FBUEMsR0FDRkUsTUFBQUEsQ0FBT0MsY0FBUEQsQ0FBc0JILENBQXRCRyxFQUEyQkYsQ0FBM0JFLEVBQWdDO0FBQzlCRCxNQUFBQSxLQUFBQSxFQUFPQSxDQUR1QjtBQUU5QkcsTUFBQUEsVUFBQUEsRUFBQUEsQ0FBWSxDQUZrQjtBQUc5QkMsTUFBQUEsWUFBQUEsRUFBQUEsQ0FBYyxDQUhnQjtBQUk5QkMsTUFBQUEsUUFBQUEsRUFBQUEsQ0FBVTtBQUpvQixLQUFoQ0osQ0FERUYsR0FRRkQsQ0FBQUEsQ0FBSUMsQ0FBSkQsQ0FBQUEsR0FBV0UsQ0FSVEQsRUFXR0QsQ0FBUDtBQ1phOztBQUFBLFdBQVNRLENBQVQsQ0FBMkJDLENBQTNCLEVBQWdDQyxDQUFoQyxFQUFnQ0E7QUFBQUEsS0FDbEMsUUFBUEEsQ0FBTyxJQUFRQSxDQUFBQSxHQUFNRCxDQUFBQSxDQUFJRSxNQURnQkQsTUFDUkEsQ0FBQUEsR0FBTUQsQ0FBQUEsQ0FBSUUsTUFERkQ7O0FBRzdDLFNBQUssSUFBSUUsQ0FBQUEsR0FBSSxDQUFSLEVBQVdDLENBQUFBLEdBQU8sSUFBSUMsS0FBSixDQUFVSixDQUFWLENBQXZCLEVBQXVDRSxDQUFBQSxHQUFJRixDQUEzQyxFQUFnREUsQ0FBQUEsRUFBaEQsRUFDRUMsQ0FBQUEsQ0FBS0QsQ0FBTEMsQ0FBQUEsR0FBVUosQ0FBQUEsQ0FBSUcsQ0FBSkgsQ0FBVkk7O0FBR0YsV0FBT0EsQ0FBUDtBQ1BGZjs7QUFBQUEsRUFBQUEsQ0FBQUEsQ0FBb0Jp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QUFLRi9CLGdCQUFBQSxVQUFBQSxFQUFZOEI7QUFMVixlQUFBLENBQVY5QixFQU9JOVIsQ0FQSjhSLENBQUFBO0FBT0k5UixhQWJKLE1BQ0lBLENBQUFBLENBQVMsSUFBSTZDLEtBQUosQ0FBQSw0Q0FBQSxNQUFBLENBQXNEdU8sQ0FBdEQsQ0FBQSxDQUFUcFIsQ0FBQUE7QUFBK0RvUixXQVYzRUQsQ0FBQUE7QUFVMkVDLFNBaERuRm9CLEVBQUFBLEtBQUFBLENBaUVXeFMsQ0FqRVh3UztBQWlFV3hTO0FBQUFBLEtBR29DO0FBRS9Dc1IsSUFBQUEsVUFBQUEsRUFBWSxFQUZtQztBQUcvQzBDLElBQUFBLHNCQUFBQSxHQUFrQyw0QkFBQSxDQXhTMUI3WCxDQXdTUjZYLENBSCtDO0FBSS9DL0QsSUFBQUEsVUFBQUEsRUFBWTtBQUptQyxHQUFuRDtBQU9BM1MsRUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FBTzBTLEVBQVAxUyxHQUFZd1csRUFBWnhXIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn0iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKGRyYWZ0SWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgLy8gTk9URSDQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7QsdGK0Y/QstC70LXQvdCwINC+0YLQtNC10LvRjNC90L4sINC40LHQviDQvtC90LAg0LLRhdC+0LTQuNGCINCyINGB0L7RgdGC0LDQsiBjbGllbnQuanMg0LhcbiAgICAvLyDQvdC1INC00L7Qu9C20L3QviDQv9GA0L7QuNGB0YXQvtC00LjRgtGMINGD0YLQtdC20LXQu9C10L3QuNGPIGNsaWVudC5qcy3QsFxuICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdElkLm5zfS9kcmFmdHMvJHtkcmFmdElkLmRyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYDtcbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgX3dyYXBOYXRpdmVTdXBlciA9IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIWlzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG5cbiAgICBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuXG4gIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQge1xuICAgIEVtcGxveWVlTGlzdCxcbiAgICBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLWNvbW1vbi9zcmMvQ2xpZW50L1R5cGVzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10sIG9wdGlvbnM/OiB7IHNjZW5hcmlvPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHByaW50VHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgLy8gRm9yIG9sZCBrZXdlYlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRBZGRpdGlvbmFsRW1wbG95ZWVJbmZvKGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFJlcXVlc3QpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdvcmtpbmdFdmVudHNGb3JFbXBsb3llZShmaWx0ZXJzOiBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCk6IFByb21pc2U8V29ya2luZ0V2ZW50TGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlTdWJ0cmVlKFxuICAgICAgICBzb3VyY2VCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YXJnZXRCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICBkb05vdENvcHlQYXRocz86IHN0cmluZ1tdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXVpZEdlbmVyYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VjdGlvbihvcHRpb25zOiBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsbEluaXRTZWN0aW9uKG9wdGlvbnM6IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbkVtcGxveWVlRWRpdG9yKGVtcGxveWVlSWQ6IHN0cmluZykge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c09uQ29udHJvbElmRXhpc3QocGF0aDogQmluZGluZ1BhdGgpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXV0b0ZpZWxkc1RvQXV0b1ZhbHVlKHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVJbnN0YW5jZUZ1bGx5TG9hZGVkKFxuICAgICAgICBiaW5kaW5nUGF0aDogc3RyaW5nIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgLi4uaW5zdGFuY2VzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7bWlufS5jc3NgLCBwYXJhbXMpKSwgdHJ1ZSwgY2IpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPEFVT09wdGlvbnM+IHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKHsgbnM6IG5zLCBkcmFmdElkOiBkcmFmdElkIH0pKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdmdiA9IGNsaWVudERyYWZ0SW5mby5nZnY7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6IGNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgY2F1bGRyb25BcGlVcmw6IGNsaWVudFNldHRpbmdzLmNhdWxkcm9uQXBpVXJsLFxuICAgICAgICAgICAgICAgIGlzVGVzdFNlcnZlcjogY2xpZW50U2V0dGluZ3MuaXNUZXN0U2VydmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IGNsaWVudFNldHRpbmdzLnJlbmRlckNhY2hpbmdGb3JJRTgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBjbGllbnRTZXR0aW5ncy5ub3JtYWxpemF0aW9uT25TZXJ2ZXIsXG4gICAgICAgICAgICAgICAgbm9ybWF0aXZlVXJsOiBjbGllbnRTZXR0aW5ncy5ub3JtYXRpdmVVcmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogY2xpZW50U2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYWJvbklkOiBvcHRpb25zLmFib25JZCxcbiAgICAgICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmdJZCxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBpc0luZGl2aWR1YWw6IGNsaWVudERyYWZ0SW5mby5pc0luZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgaXNGb3JlaWduOiBjbGllbnREcmFmdEluZm8uaXNGb3JlaWduLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNhbmR5VG91ckF2YWlsYWJsZTogY2xpZW50RHJhZnRJbmZvLmNhbmR5VG91ckF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXI6IG9wdGlvbnMuZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIGZvcm1JbmZvOiBjbGllbnREcmFmdEluZm8uZm9ybUluZm8sXG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvOiBjbGllbnREcmFmdEluZm8ucHJpbnRJbmZvLFxuICAgICAgICAgICAgICAgIHJlZ2lvbnM6IGNsaWVudERyYWZ0SW5mby5yZWdpb25zLFxuICAgICAgICAgICAgICAgIGhhc1RlbXBsYXRlczogY2xpZW50RHJhZnRJbmZvLmhhc1RlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwic291cmNlUm9vdCI6IiJ9