@getopenpay/openpay-js 0.2.29-alpha.5211859 → 0.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -641,9 +641,12 @@ var oo = /* @__PURE__ */ function() {
641
641
  const re = (e) => async (n) => {
642
642
  var t, r;
643
643
  try {
644
- (r = (t = n.formCallbacks.get).onCheckoutStarted) == null || r.call(t), h("checkout_started");
644
+ (r = (t = n.formCallbacks.get).onCheckoutStarted) == null || r.call(t), h("checkout_started", {
645
+ cpm: n.checkoutPaymentMethod
646
+ });
645
647
  const s = await e(n);
646
648
  if (h("checkout_success", {
649
+ cpm: n.checkoutPaymentMethod,
647
650
  ...s
648
651
  }), s.mode === "setup")
649
652
  n.formCallbacks.get.onSetupPaymentMethodSuccess(s.result.payment_method_id);
@@ -658,7 +661,7 @@ const re = (e) => async (n) => {
658
661
  throw new Error(`Unhandled mode: ${s}`);
659
662
  } catch (s) {
660
663
  const i = V(s), a = await yn(n.context.anyCdeConnection, i);
661
- n.formCallbacks.get.onCheckoutError(i, a), h("checkout_error", { errorMessage: i, errorCode: a });
664
+ n.formCallbacks.get.onCheckoutError(i, a), h("checkout_error", { cpm: n.checkoutPaymentMethod, errorMessage: i, errorCode: a });
662
665
  }
663
666
  }, pe = (e) => async (n) => {
664
667
  try {
@@ -4404,20 +4407,23 @@ const la = (e, n, t) => {
4404
4407
  (i = I()) == null || i.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), as(), this.registeredElements = null, delete window.ojs, h("form_destroyed");
4405
4408
  }, this.updateCallbacks = (i) => {
4406
4409
  this.formCallbacks.setCallbacks(i);
4407
- }, te.assignAsSingleton(this), this.ojsVersion = "0.2.29", this.ojsReleaseVersion = "0.2.29-alpha.5211859", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = st.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${Ve()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ca(), this.deviceToken = ta(), is();
4410
+ }, te.assignAsSingleton(this), this.ojsVersion = "0.2.30", this.ojsReleaseVersion = "0.2.30", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = st.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${Ve()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ca(), this.deviceToken = ta(), is();
4408
4411
  const { framework: t, version: r } = sa();
4409
4412
  ts(this.baseUrl).then((i) => {
4410
- ot.current.isSuccess || ot.set({
4411
- checkoutSecureToken: this.config.checkoutSecureToken,
4412
- deviceToken: this.deviceToken,
4413
- environment: i,
4414
- framework: t,
4415
- frameworkVersion: r,
4416
- ojsVersion: this.ojsVersion,
4417
- ojsReleaseVersion: this.ojsReleaseVersion,
4418
- referrer: this.referrer,
4419
- baseUrl: this.baseUrl
4420
- });
4413
+ if (!ot.current.isSuccess) {
4414
+ const a = {
4415
+ checkoutSecureToken: this.config.checkoutSecureToken,
4416
+ deviceToken: this.deviceToken,
4417
+ environment: i,
4418
+ framework: t,
4419
+ frameworkVersion: r,
4420
+ ojsVersion: this.ojsVersion,
4421
+ ojsReleaseVersion: this.ojsReleaseVersion,
4422
+ referrer: this.referrer,
4423
+ baseUrl: this.baseUrl
4424
+ };
4425
+ ot.set(a);
4426
+ }
4421
4427
  }), h("form_init"), this.eventHandler = new ia(this.formId, this.baseUrl, this.formCallbacks, {
4422
4428
  setFormHeight: this.setFormHeight,
4423
4429
  onCdeLoaded: this.onCdeLoaded,
@@ -4448,4 +4454,4 @@ export {
4448
4454
  ya as SubmitMethod,
4449
4455
  G as SubmitMethods
4450
4456
  };
4451
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbmNvbnN0IFN1Ym1pdE1ldGhvZCA9IHoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6LmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xuY29uc3QgRWxlbWVudEV2ZW50ID0gei5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnouZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiBpbnB1dC52YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6YCwgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UgPSB6Lm9iamVjdCh7fSk7XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIik7XG4gICAgICBjb25zdCBmbG93UmVzdWx0ID0gYXdhaXQgc2ltcGxlT2pzRmxvdyhwYXJhbXMpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7Zmxvd1Jlc3VsdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUgfSk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBnZXRDdXJyZW50RW52ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGJhc2VVcmwpKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpO1xuICAgIHJldHVybiBPanNFbnZpcm9ubWVudC5wYXJzZShyZXNwb25zZS5lbnZpcm9ubWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJGggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRoKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRoKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kaChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJGgoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuY29uc3QgdHJhY2sgPSAoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5hZGRFdmVudChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpO1xufTtcbmNvbnN0IG9uVW5oYW5kZWxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5jb25zdCBhdHRhY2hFcnJvckxpc3RlbmVycyA9ICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kZWxlZFJlamVjdGlvbkVycm9yKTtcbn07XG5jb25zdCBkZXRhY2hFcnJvckxpc3RlbmVycyA9ICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kZWxlZFJlamVjdGlvbkVycm9yKTtcbn07XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgIC4uLmRhdGFcbiAgICB9KTtcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNkZUNvbm4uc2VuZChkYXRhKTtcbiAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICB9XG4gIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgLi4ucmVzcG9uc2VcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnBheWxvYWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4ucmVzdWx0XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3QgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LFxuICAgIFNldHVwQ2hlY2tvdXRSZXNwb25zZSxcbiAgICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiAgKTtcbn07XG5jb25zdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UsXG4gICAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLFxuICAgIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4gICk7XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UsIFwic2V0dXBfY2hlY2tvdXRcIik7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLCBcInBlcmZvcm1fY2hlY2tvdXRcIik7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJGcoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIG5ld19jdXN0b21lcl9lbWFpbDogZmllbGRzLmVtYWlsLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICB6aXBfY29kZTogZmllbGRzLnppcENvZGUsXG4gICAgICBjb3VudHJ5OiBmaWVsZHMuY291bnRyeVxuICAgIH0sXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZmllbGRzLmxhc3ROYW1lXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMpID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJGYoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdEZpZWxkVmFsdWVzKSkge1xuICAgICAgaWYgKCFub25DZGVGb3JtSW5wdXRzW2tleV0pIHtcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRmKGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBmb3IgKGNvbnN0IHRva2VuaXplUmVzdWx0IG9mIHRva2VuaXplUmVzdWx0cykge1xuICAgIGlmICh0b2tlbml6ZVJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEFsbEZpZWxkTmFtZXMuc2FmZVBhcnNlKGVycm9yLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGVycl9fJGYoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGYoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kZShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kZShgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyRlKGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJGUoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kZShgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRlKGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyRlKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kZShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kZShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyRlKFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZShgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBsb2dfXyRlKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyRlKGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRlKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kZShgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCBzdHlsZXMgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1lLCNhZHllbi1jb250YWluZXIsI2FkeWVuLWNvbnRhaW5lcj4qe21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiO1xuXG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXN9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yM2RzU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4pO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwgfSA9IHBhcmFtcztcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGQsIGVycl9fOiBlcnJfXyRkIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1jY1wiKTtcbmNvbnN0IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQyID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGQoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGQoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRkKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcGFyc2VBcmdGcm9tSHJlZiA9IChocmVmLCBhcmdOYW1lKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zLmdldChhcmdOYW1lKTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1wb2NreXQtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1blBvY2t5dDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCB2YXVsdElkID0gcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYocmVzdWx0LmhyZWYgPz8gXCJcIik7XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IHZhdWx0SWQsXG4gICAgICB0cmFuc2FjdGlvbl9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYywgZXJyX186IGVycl9fJGMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kYyhkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRjKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRjKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJGMoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kYihgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBkZWNvZGVBZHllbkFjdGlvbiA9IChhY3Rpb24pID0+IHtcbiAgY29uc3QgZGVzZXJpYWxpemVkID0gSlNPTi5wYXJzZShhY3Rpb24pO1xuICByZXR1cm4gZGVzZXJpYWxpemVkO1xufTtcbmNvbnN0IGlzQWR5ZW5BdmFpbGFibGUgPSAoKSA9PiB7XG4gIHJldHVybiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvd1tcIkFkeWVuV2ViXCJdO1xufTtcbmNvbnN0IGdldEFkeWVuQ2hlY2tvdXQgPSBhc3luYyAoKSA9PiB7XG4gIGxvZ19fJGIoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgZXJyX18kYihcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgbG9nX18kYihcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICByZXR1cm4gd2luZG93W1wiQWR5ZW5XZWJcIl1bXCJBZHllbkNoZWNrb3V0XCJdO1xufTtcbmNvbnN0IGhhbmRsZUFkeWVuM2RzID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IGhlYWRlcnMsIGxvY2FsZSwgY291bnRyeUNvZGUsIGNvbXBvbmVudCwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFjdGlvbiA9IGRlY29kZUFkeWVuQWN0aW9uKGhlYWRlcnNbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICBsb2dfXyRiKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX1gKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGIoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uUGF5bWVudEZhaWxlZCA9IChzdGF0ZSkgPT4ge1xuICAgICAgZXJyX18kYihcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBzdGF0ZSk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBlcnJfXyRiKFwiQWR5ZW4gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBvbkFkZGl0aW9uYWxEZXRhaWxzID0gKHN0YXRlLCBfLCBfXykgPT4ge1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IHN0YXRlLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgZ2V0QWR5ZW5DaGVja291dCgpLnRoZW4oXG4gICAgICAoYWR5ZW5DaGVja291dCkgPT4gYWR5ZW5DaGVja291dCh7XG4gICAgICAgIGNsaWVudEtleTogaGVhZGVyc1tcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBoZWFkZXJzW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgY291bnRyeUNvZGUsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHMsXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZCxcbiAgICAgICAgb25FcnJvclxuICAgICAgfSlcbiAgICApLnRoZW4oKGNoZWNrb3V0KSA9PiB7XG4gICAgICBjaGVja291dC5jcmVhdGVGcm9tQWN0aW9uKGFjdGlvbiwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoY29tcG9uZW50KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZGV0ZXJtaW5lTG9jYWxlID0gKHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgYnJvd3NlckxvY2FsZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlO1xuICBjb25zdCBsb2NhbGUgPSBwcmVmaWxsTG9jYWxlID8/IGJyb3dzZXJMb2NhbGU7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW5Mb2NhbGUuc2FmZVBhcnNlKGxvY2FsZSk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGIoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke2xvY2FsZX0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCk7XG4gICAgcmV0dXJuIFwiZW4tVVNcIjtcbiAgfVxuICBsb2dfXyRiKGBSZXNvbHZlZCBsb2NhbGU6ICR7cGFyc2VSZXN1bHQuZGF0YX1gKTtcbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1hZHllbi1hY3Rpb25cIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5BZHllbjNkc0Zsb3cgPSBhc3luYyAoY291bnRyeUNvZGUsIGVycm9yUmVzcG9uc2VIZWFkZXJzLCBwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyhlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IGNvbXBvbmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbXBvbmVudC5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSA9IGNyZWF0ZUFuZE9wZW5GcmFtZShcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgaWZyYW1lLnJlcGxhY2VXaXRoKGNvbXBvbmVudCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUFkeWVuM2RzKHtcbiAgICBoZWFkZXJzLFxuICAgIGxvY2FsZTogZGV0ZXJtaW5lTG9jYWxlKHByZWZpbGxMb2NhbGUpLFxuICAgIGNvdW50cnlDb2RlLFxuICAgIGNvbXBvbmVudCxcbiAgICBob3N0LFxuICAgIGNhbmNlbEJ1dHRvblxuICB9KTtcbiAgcmVzdWx0LmNsZWFudXAoKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgaWYgKCFyZXN1bHQuYWRkaXRpb25hbERldGFpbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICB9XG4gICAgbG9nX18kYihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IHJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJGEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgeyBsb2dfXzogc3RyaXBlTG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRhKGDilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJhY2soXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgICBsb2dfXyRhKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyRhKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY3VzdG9tUGFyYW1zLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kYShg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGEoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kYShg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kYShg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICAgIGxvZ19fJGEoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyRhKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHRyYWNrKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICAgIC4uLmVycm9yLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWR5ZW4zZHMgPSBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBZHllbjNkcykge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFkeWVuXCJdID0gYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyRhKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VTdHJpcGVGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgaWYgKCFyZXF1aXJlc1BvY2t5dDNkcykge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2dfXyRhKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjY1BtSWQgPSBzdGFydFBmUmVzdWx0LmNjX3BtX2lkO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtjY1BtSWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHshc2hvdWxkVXNlU3RyaXBlRmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWQsXG4gICAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHNob3VsZFVzZVN0cmlwZUZsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYShg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kYShg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyRhKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbjNEU0FjdGlvblR5cGVzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdO1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gY29tbW9uM0RTQWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYShg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYShg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGEoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgdHJhY2soXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgdHJhY2soXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOSwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLXByXCIpO1xuY29uc3QgU3RyaXBlUHJDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgaW5pdFN0cmlwZVByRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDkoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZVByQ3BtKTtcbiAgICBsb2dfXyQ5KGBJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kOShgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcHIgPSBhd2FpdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdChcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tLFxuICAgICAgaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBpc1NldHVwTW9kZVxuICAgICk7XG4gICAgbG9nX18kOShgQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudGApO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAoY2FuTWFrZVBheW1lbnQgPT09IG51bGwpIHtcbiAgICAgIGVycl9fJDkoYGNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIH1cbiAgICBsb2dfXyQ5KGBTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRgLCBjYW5NYWtlUGF5bWVudCk7XG4gICAgY29uc3QgcnVuU3RyaXBlUHJGbG93MiA9IChwcm92aWRlciwgcGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgICBwcixcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LCBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheSB9LFxuICAgICAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHByLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlUHJGbG93JDEgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGluaXRSZXN1bHRcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDkoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBpZiAoY3VzdG9tUGFyYW1zLnByb3ZpZGVyICE9PSBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kOShgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nLCBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBvdmVycmlkZS5sYWJlbCk7XG4gICAgfVxuICAgIGxvZ19fJDkoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQ5KGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQ5KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kOShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDkoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ5KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDkoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQucGF5bWVudE1ldGhvZD8uYmlsbGluZ19kZXRhaWxzPy5hZGRyZXNzO1xuICBjb25zdCBzaGlwcGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IHNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IHNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kOShgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nLCBzdHJpcGVBcHBsZVBheSwgbGFiZWwpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBsYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ4KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDgoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmIChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG4gIH1cbiAgcmV0dXJuIGJhc2VSZXF1ZXN0O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgaXNQcm9kdWN0aW9uID0gYmFzZVVybCA9PT0gRlJBTUVfQkFTRV9VUkwgfHwgYmFzZVVybCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgcmV0dXJuIGlzUHJvZHVjdGlvbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gPSBpbnB1dHNbRmllbGROYW1lLkFERFJFU1NdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNywgZXJyX186IGVycl9fJDcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQ3KFwiR29vZ2xlIFBheSBDUE1cIiwgZ29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgZXJyX18kNyhcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDcoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGdldEdvb2dsZVBheUVudmlyb25tZW50KGNvbnRleHQuYmFzZVVybCk7XG4gICAgaWYgKGVudmlyb25tZW50ID09PSBcIlBST0RVQ1RJT05cIiAmJiAhcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkKSB7XG4gICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNyhcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpLmlzUmVhZHlUb1BheShcbiAgICAgICAgcGF5bWVudERhdGFSZXF1ZXN0XG4gICAgICApO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kNyhcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDcoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyQ3KFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJDcoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDcoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJDcoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDcoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyQ3KFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kNyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgbG9hZEFwcGxlUGF5U2NyaXB0ID0gKCkgPT4ge1xuICByZXR1cm4gbG9hZFNjcmlwdCh7XG4gICAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gICAgY2hlY2tMb2FkZWRGbjogKCkgPT4gISF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICEhd2luZG93LkFwcGxlUGF5U0RLXG4gIH0pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkgPSAoZm9ybUlucHV0cywgYXBwbGVQYXlQYXltZW50KSA9PiB7XG4gIGNvbnN0IHBtQmlsbGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3QgYmlsbGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IHNoaXBwaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5zaGlwcGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBpZiAocG1CaWxsaW5nQ29udGFjdCB8fCBiaWxsaW5nQ29udGFjdCB8fCBzaGlwcGluZ0NvbnRhY3QpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBiaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IHNoaXBwaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgcG1CaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBiaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IGJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IGJpbGxpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBcIlwiO1xuICAgIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnB1dHM7XG59O1xuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IGNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0ID0gKHtcbiAgdG90YWwsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGJpbGxpbmcgcG9ydGFsIHVybFxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vcGFzc2tpdC9wa3JlY3VycmluZ3BheW1lbnRyZXF1ZXN0L21hbmFnZW1lbnR1cmwjRGlzY3Vzc2lvblxuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB1c2VkIHdoZW4gdXNlciByZW1vdmUgYSBjYXJkIGZyb20gdGhlaXIgQXBwbGVQYXkgd2FsbGV0LlxuICAgICAgLy8gQ3VycmVudHkgc2V0IHRvIGNoZWNrb3V0IHNlc3Npb24gdXJsIHRvIHNhdGlzZnkgQXBwbGVQYXkgdHlwZXNcbiAgICAgIG1hbmFnZW1lbnRVUkw6IG5ldyBVUkwoYC9wYXkvJHtwcmVmaWxsLnRva2VufWAsIEZSQU1FX0JBU0VfVVJMKS50b1N0cmluZygpXG4gICAgfTtcbiAgfVxuICBjb25zdCBsaW5lSXRlbSA9IHByZWZpbGwubGluZV9pdGVtcz8uWzBdO1xuICBpZiAoIWxpbmVJdGVtKSByZXR1cm4gdm9pZCAwO1xuICByZXR1cm4ge1xuICAgIHBheW1lbnREZXNjcmlwdGlvbjogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgbGFiZWw6IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWxfY291bnQgPz8gdm9pZCAwLFxuICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgIH0sXG4gICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke3ByZWZpbGwudG9rZW59YFxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZUFwcGxlUGF5VG90YWwgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBhbW91bnRBdG9tID0gb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5hbW91bnRBdG9tID8/IGluaXRpYWxQcmV2aWV3Py5hbW91bnRBdG9tID8/IDA7XG4gIGNvbnN0IGFtb3VudCA9IChhbW91bnRBdG9tIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmxhYmVsID8/IGRlZmF1bHRMYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnRcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJDYoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJDYoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJDYoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIGZvcm1JbnB1dHMsXG4gICAgICBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29udGV4dC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVpcmVkVXNlckFjdGlvbnMgPSBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIWNvbnNlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kNihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kNShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kNShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ2KFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgeyBjdXJyZW5jeUNvZGUsIHRvdGFsIH0gPSBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWwsXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgICB0b3RhbCxcbiAgICAgICAgcHJlZmlsbFxuICAgICAgfSksXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID8/IHt9XG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGFwcGxlUGF5Q3BtLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyQ1KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyQ2KFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgTE9PUF9DUllQVE9fTUlOX1VTRF9DSEFSR0VfQU1PVU5UX0FUT00gPSAxO1xuY29uc3QgTG9vcENyeXB0b0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDQsIGVycl9fOiBlcnJfXyQ1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImxvb3AtY3J5cHRvXCIpO1xuY29uc3QgTG9vcFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wibG9vcEZpcnN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BMYXN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BFbWFpbFwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBMb29wT3B0aW9uYWxGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJsb29wRmlyc3ROYW1lXCJdOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibG9vcExhc3ROYW1lXCJdOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibG9vcEVtYWlsXCJdOiBPcHRpb25hbFN0cmluZyxcbiAgW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV06IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgbW9kZWwsIGRlZmF1bHRGaWVsZFZhbHVlcykgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gbW9kZWwuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQ1KGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCBpbml0TG9vcEZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQ0KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExvb3BDcnlwdG9DcG0pO1xuICAgIGxvZ19fJDQoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeShjaGVja291dFBheW1lbnRNZXRob2QpfWApO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5gKTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgaWYgKHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSBMT09QX0NSWVBUT19NSU5fVVNEX0NIQVJHRV9BTU9VTlRfQVRPTTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20gKiBwYXltZW50U2V0dXBJbmZvW1widG9rZW5fcHJpY2VcIl07XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRVc2RBbW91bnQgPSBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGNvbnN0IHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBwYXltZW50U2V0dXBJbmZvW1wiYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgY3VzdG9tZXJSZWZJZCA9IHY0KCk7XG4gICAgY29uc3Qgd2lkZ2V0UHJvcHMgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50LFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCxcbiAgICAgIGN1c3RvbWVyUmVmSWRcbiAgICB9O1xuICAgIGNvbnN0IGluaXRMb29wQ29ubmVjdFByb3BzID0ge1xuICAgICAgYXBpS2V5OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyQ0KFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyQ0KFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kNChcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kNChcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kNChcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGxldCBub25DZGVGb3JtRmllbGRzO1xuICAgIGlmIChjdXN0b21QYXJhbXM/LnN1Y2Nlc3MpIHtcbiAgICAgIG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMoXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBMb29wUmVxdWlyZWRGb3JtRmllbGRzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgTG9vcE9wdGlvbmFsRm9ybUZpZWxkc1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCI7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHMubG9vcEVtYWlsLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHMubG9vcEZpcnN0TmFtZSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHMubG9vcExhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdWNjZXNzID8gY3VzdG9tUGFyYW1zLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCIgPyBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBjdXN0b21QYXJhbXMuc3VjY2VzcyA/IGN1c3RvbVBhcmFtcy5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogY3VzdG9tUGFyYW1zLnN1Y2Nlc3MgPyBjdXN0b21QYXJhbXMucGF5aW4gOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfZmFpbHVyZV9kZXRhaWxzOiAhY3VzdG9tUGFyYW1zLnN1Y2Nlc3MgPyBjdXN0b21QYXJhbXMuZmFpbHVyZURldGFpbHMgOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogIWN1c3RvbVBhcmFtcy5zdWNjZXNzID8gY3VzdG9tUGFyYW1zLmRlYnVnSW5mbyA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBjdXN0b21QYXJhbXMuc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJDQoYENvbmZpcm0gcmVzdWx0OiAke2NvbmZpcm1SZXN1bHR9YCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBsb2dfXyQ0KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIGxvZ19fJDQoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ1KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhmb3JtSW5wdXRzLCBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBtb2JpbGVXYWxsZXRQYXltZW50RGF0YSA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IG1vYmlsZVdhbGxldFBheW1lbnREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCBBcHBsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1hcHBsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kMyhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kMyhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kMyhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ0KFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWwsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IGNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0KHtcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHByZWZpbGxcbiAgICAgIH0pLFxuICAgICAgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCA/PyB7fVxuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJDMoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBwYXltZW50UmVxdWVzdC50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJDQoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWdvb2dsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDIoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQyKFwiR29vZ2xlIFBheSBDUE1cIiwgZ29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgZXJyX18kMyhcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDIoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJDMoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQyKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkuaXNSZWFkeVRvUGF5KFxuICAgICAgICBwYXltZW50RGF0YVJlcXVlc3RcbiAgICAgICk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyQyKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDMoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJDMoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQyKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShlbmNyeXB0ZWRQYXltZW50VG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDMoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVQckZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVQckZsb3ckMVxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUxpbmtGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogcnVuUG9ja3l0UGF5cGFsRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBpbml0TG9vcEZsb3csXG4gICAgcnVuOiBydW5Mb29wRmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0R29vZ2xlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQxKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDIoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICAgIGFpcndhbGxleEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgICBhaXJ3YWxsZXhBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gTG9vcFxuICAgIGxvb3A6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiTG9vcFwiLCBPanNGbG93cy5sb29wQ3J5cHRvLmluaXQpLFxuICAgIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgQ0FURUdPUllfRVJST1IgPSBcImVycm9yXCI7XG5jb25zdCBDQVRFR09SWV9ERUJVRyA9IFwiZGVidWdcIjtcbmNvbnN0IF9lcnJvciA9IGNvbnNvbGUuZXJyb3I7XG5jb25zdCBfZGVidWcgPSBjb25zb2xlLmRlYnVnO1xuY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbmlmIChzYWZlV2luZG93KSB7XG4gIHNhZmVXaW5kb3cuX29qc19jb25zb2xlX2NhbGxiYWNrcyA9IFtdO1xufVxuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgX2Vycm9yLmNhbGwoY29uc29sZSwgLi4uYXJncyk7XG4gIHNhZmVXaW5kb3c/Ll9vanNfY29uc29sZV9jYWxsYmFja3M/LmZvckVhY2goKGNiKSA9PiBjYihDQVRFR09SWV9FUlJPUiwgLi4uYXJncykpO1xufTtcbmNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gIF9kZWJ1Zy5jYWxsKGNvbnNvbGUsIC4uLmFyZ3MpO1xuICBzYWZlV2luZG93Py5fb2pzX2NvbnNvbGVfY2FsbGJhY2tzPy5mb3JFYWNoKChjYikgPT4gY2IoQ0FURUdPUllfREVCVUcsIC4uLmFyZ3MpKTtcbn07XG5cbi8vIFRoZXNlIHZhbHVlcyBzaG91bGQgTkVWRVIgY2hhbmdlLiBUaGUgdmFsdWVzIGFyZSBwcmVjaXNlbHkgZm9yXG4vLyBnZW5lcmF0aW5nIFVMSURzLlxuY29uc3QgRU5DT0RJTkcgPSBcIjAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaXCI7IC8vIENyb2NrZm9yZCdzIEJhc2UzMlxuY29uc3QgRU5DT0RJTkdfTEVOID0gMzI7IC8vIGZyb20gRU5DT0RJTkcubGVuZ3RoO1xuY29uc3QgUkFORE9NX0xFTiA9IDE2O1xuY29uc3QgVElNRV9MRU4gPSAxMDtcbmNvbnN0IFRJTUVfTUFYID0gMjgxNDc0OTc2NzEwNjU1OyAvLyBmcm9tIE1hdGgucG93KDIsIDQ4KSAtIDE7XG5cbnZhciBVTElERXJyb3JDb2RlO1xuKGZ1bmN0aW9uIChVTElERXJyb3JDb2RlKSB7XG4gICAgVUxJREVycm9yQ29kZVtcIkJhc2UzMkluY29ycmVjdEVuY29kaW5nXCJdID0gXCJCMzJfRU5DX0lOVkFMSURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRGVjb2RlVGltZUludmFsaWRDaGFyYWN0ZXJcIl0gPSBcIkRFQ19USU1FX0NIQVJcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkXCJdID0gXCJERUNfVElNRV9NQUxGT1JNRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZU5lZ2F0aXZlXCJdID0gXCJFTkNfVElNRV9ORUdcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZVNpemVFeGNlZWRlZFwiXSA9IFwiRU5DX1RJTUVfU0laRV9FWENFRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkXCJdID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiUFJOR0RldGVjdEZhaWx1cmVcIl0gPSBcIlBSTkdfREVURUNUXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVMSURJbnZhbGlkXCJdID0gXCJVTElEX0lOVkFMSURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVW5leHBlY3RlZFwiXSA9IFwiVU5FWFBFQ1RFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVVUlESW52YWxpZFwiXSA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShVTElERXJyb3JDb2RlIHx8IChVTElERXJyb3JDb2RlID0ge30pKTtcbmNsYXNzIFVMSURFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoYCR7bWVzc2FnZX0gKCR7ZXJyb3JDb2RlfSlgKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gZXJyb3JDb2RlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmFuZG9tQ2hhcihwcm5nKSB7XG4gICAgbGV0IHJhbmQgPSBNYXRoLmZsb29yKHBybmcoKSAqIEVOQ09ESU5HX0xFTik7XG4gICAgaWYgKHJhbmQgPT09IEVOQ09ESU5HX0xFTikge1xuICAgICAgICByYW5kID0gRU5DT0RJTkdfTEVOIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIEVOQ09ESU5HLmNoYXJBdChyYW5kKTtcbn1cbi8qKlxuICogRGV0ZWN0IHRoZSBiZXN0IFBSTkcgKHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcilcbiAqIEBwYXJhbSByb290IFRoZSByb290IHRvIGNoZWNrIGZyb20gKGdsb2JhbC93aW5kb3cpXG4gKiBAcmV0dXJucyBUaGUgUFJORyBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBkZXRlY3RQUk5HKHJvb3QpIHtcbiAgICBjb25zdCByb290TG9va3VwID0gZGV0ZWN0Um9vdCgpO1xuICAgIGNvbnN0IGdsb2JhbENyeXB0byA9IChyb290TG9va3VwICYmIChyb290TG9va3VwLmNyeXB0byB8fCByb290TG9va3VwLm1zQ3J5cHRvKSkgfHxcbiAgICAgICAgKG51bGwpO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5nZXRSYW5kb21WYWx1ZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICAgICAgICBnbG9iYWxDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ1ZmZlcik7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyWzBdIC8gMHhmZjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8ucmFuZG9tQnl0ZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKCkgPT4gZ2xvYmFsQ3J5cHRvLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMHhmZjtcbiAgICB9XG4gICAgZWxzZSA7XG4gICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIGRldGVjdFJvb3QoKSB7XG4gICAgaWYgKGluV2ViV29ya2VyKCkpXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBlbmNvZGVSYW5kb20obGVuLCBwcm5nKSB7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yICg7IGxlbiA+IDA7IGxlbi0tKSB7XG4gICAgICAgIHN0ciA9IHJhbmRvbUNoYXIocHJuZykgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG4vKipcbiAqIEVuY29kZSB0aGUgdGltZSBwb3J0aW9uIG9mIGEgVUxJRFxuICogQHBhcmFtIG5vdyBUaGUgY3VycmVudCB0aW1lc3RhbXBcbiAqIEBwYXJhbSBsZW4gTGVuZ3RoIHRvIGdlbmVyYXRlXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCB0aW1lXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVRpbWUobm93LCBsZW4gPSBUSU1FX0xFTikge1xuICAgIGlmIChpc05hTihub3cpKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPiBUSU1FX01BWCkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7VElNRV9NQVh9OiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzSW50ZWdlcihub3cpID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7bm93fWApO1xuICAgIH1cbiAgICBsZXQgbW9kLCBzdHIgPSBcIlwiO1xuICAgIGZvciAobGV0IGN1cnJlbnRMZW4gPSBsZW47IGN1cnJlbnRMZW4gPiAwOyBjdXJyZW50TGVuLS0pIHtcbiAgICAgICAgbW9kID0gbm93ICUgRU5DT0RJTkdfTEVOO1xuICAgICAgICBzdHIgPSBFTkNPRElORy5jaGFyQXQobW9kKSArIHN0cjtcbiAgICAgICAgbm93ID0gKG5vdyAtIG1vZCkgLyBFTkNPRElOR19MRU47XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiBpbldlYldvcmtlcigpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgVUxJRFxuICogQHBhcmFtIHNlZWRUaW1lIE9wdGlvbmFsIHRpbWUgc2VlZFxuICogQHBhcmFtIHBybmcgT3B0aW9uYWwgUFJORyBmdW5jdGlvblxuICogQHJldHVybnMgQSBVTElEIHN0cmluZ1xuICogQGV4YW1wbGVcbiAqICB1bGlkKCk7IC8vIFwiMDFITlpYRDA3TTVDRU41WEE2NkVNWlNSWldcIlxuICovXG5mdW5jdGlvbiB1bGlkKHNlZWRUaW1lLCBwcm5nKSB7XG4gICAgY29uc3QgY3VycmVudFBSTkcgPSBkZXRlY3RQUk5HKCk7XG4gICAgY29uc3Qgc2VlZCA9IERhdGUubm93KCkgO1xuICAgIHJldHVybiBlbmNvZGVUaW1lKHNlZWQsIFRJTUVfTEVOKSArIGVuY29kZVJhbmRvbShSQU5ET01fTEVOLCBjdXJyZW50UFJORyk7XG59XG5cbmNvbnN0IENPT0tJRV9OQU1FID0gXCJvcF9hbmFseXRpY3NfZGV2aWNlX3Rva2VuXCI7XG5jb25zdCBnZXREZXZpY2VUb2tlbiA9ICgpID0+IHtcbiAgY29uc3QgZXhpc3RpbmdDb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKGNvb2tpZSkgPT4gY29va2llLmluY2x1ZGVzKENPT0tJRV9OQU1FKSk7XG4gIGlmIChleGlzdGluZ0Nvb2tpZSkge1xuICAgIHJldHVybiBleGlzdGluZ0Nvb2tpZS5zcGxpdChcIj1cIilbMV07XG4gIH1cbiAgY29uc3QgdG9rZW4gPSB1bGlkKCk7XG4gIHNldERldmljZVRva2VuKHRva2VuKTtcbiAgcmV0dXJuIHRva2VuO1xufTtcbmNvbnN0IHNldERldmljZVRva2VuID0gKHRva2VuKSA9PiB7XG4gIGNvbnN0IG9uZVllYXJGcm9tTm93ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG9uZVllYXJGcm9tTm93LnNldEZ1bGxZZWFyKG9uZVllYXJGcm9tTm93LmdldEZ1bGxZZWFyKCkgKyAxKTtcbiAgZG9jdW1lbnQuY29va2llID0gYCR7Q09PS0lFX05BTUV9PSR7dG9rZW59OyBwYXRoPS87IGV4cGlyZXM9JHtvbmVZZWFyRnJvbU5vdy50b1VUQ1N0cmluZygpfWA7XG59O1xuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbmV4dFdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAobmV4dFdpbmRvdz8ubmV4dCB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKSB7XG4gICAgICByZXR1cm4gXCJuZXh0anNcIiAvKiBOZXh0SlMgKi87XG4gICAgfVxuICAgIGNvbnN0IG51eHRXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKG51eHRXaW5kb3c/Ll9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKSB7XG4gICAgICByZXR1cm4gXCJudXh0XCIgLyogTnV4dCAqLztcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChrZXkpID0+IGtleS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKChub2RlKSA9PiBub2RlLl9yZWFjdFJvb3RDb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gXCJyZWFjdFwiIC8qIFJlYWN0ICovO1xuICAgIH1cbiAgICBjb25zdCB2dWVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHZ1ZVdpbmRvdz8uVnVlIHx8IHZ1ZVdpbmRvdz8uX19WVUVfXykge1xuICAgICAgcmV0dXJuIFwidnVlXCIgLyogVnVlICovO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSkge1xuICAgICAgcmV0dXJuIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi87XG4gICAgfVxuICAgIHJldHVybiBcInZhbmlsbGFcIiAvKiBWYW5pbGxhICovO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcInVua25vd25cIiAvKiBVbmtub3duICovO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yaykge1xuICB0cnkge1xuICAgIHN3aXRjaCAoZnJhbWV3b3JrKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIiAvKiBSZWFjdCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJuZXh0anNcIiAvKiBOZXh0SlMgKi86IHtcbiAgICAgICAgY29uc3QgbmV4dFdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICAgICAgcmV0dXJuIG5leHRXaW5kb3c/Lm5leHQ/LnZlcnNpb24gfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXz8uYnVpbGRJZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIiAvKiBOdXh0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcInZ1ZVwiIC8qIFZ1ZSAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLzoge1xuICAgICAgICBjb25zdCBkb2N1bWVudDIgPSBnZXRXaW5kb3dTYWZlKCk/LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBuZ1ZlcnNpb25FbCA9IGRvY3VtZW50Mj8ucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIG5nVmVyc2lvbkVsID8gbmdWZXJzaW9uRWwuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya0luZm8oKSB7XG4gIGNvbnN0IGZyYW1ld29yayA9IGRldGVjdEZyYW1ld29yaygpO1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0RnJhbWV3b3JrVmVyc2lvbihmcmFtZXdvcmspO1xuICByZXR1cm4geyBmcmFtZXdvcmssIHZlcnNpb24gfTtcbn1cblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gZXZlbnQuc291cmNlO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBldmVudFR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBldmVudERhdGEuZm9ybUlkKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBmb3JtQ2FsbGJhY2tzO1xuICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpbnRlcm5hbENhbGxiYWNrcztcbiAgfVxufVxuY29uc3QgZ2V0Q2xlYW5PcmlnaW4gPSAodXJsKSA9PiB7XG4gIHJldHVybiBuZXcgVVJMKHVybCkub3JpZ2luO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzID0gKGluaXRQckZsb3dzLCBjb250ZXh0LCBjYWxsYmFja3MpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUiB9ID0gaW5pdFByRmxvd3M7XG4gIHN0cmlwZVBSLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gcmVzdWx0LmxvYWRlZFZhbHVlO1xuICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjYWxsYmFja3MuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGZpbmFsU3RhdHVzKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgY29udGV4dCwgZm9ybUNhbGxiYWNrcywgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICBpbml0UmVzdWx0XG4gIH0pO1xufTtcblxuY29uc3QgR0VORVJJQ19DT05OX0VSUiA9IGBUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5gO1xuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtZm9ybVwiKTtcbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmluaXRGbG93cyA9IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMoKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjZGVCcmlkZ2VJZnJhbWUgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpO1xuICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCI7XG4gICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIjtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjZGVCcmlkZ2VJZnJhbWUubm9kZS5zdHlsZSwge1xuICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICB9KTtcbiAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm1vdW50KFwiYm9keVwiKTtcbiAgICAgICAgbG9nX18oXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKTtcbiAgICAgICAgbG9nX18oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKTtcbiAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBhbnlDZGVDb25uID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgIGF3YWl0IHNldFVzZXJEZXZpY2VUb2tlbihhbnlDZGVDb25uLCB0aGlzLmRldmljZVRva2VuKTtcbiAgICAgICAgbG9nX18oXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGNkZUxvYWRlZCxcbiAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgIHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgbG9nX18oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIik7XG4gICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjZGVMb2FkZWQudG90YWxBbW91bnRBdG9tcywgY2RlTG9hZGVkLmN1cnJlbmN5KTtcbiAgICAgICAgbG9nX18oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgICAgdHJhY2soXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRyYWNrKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyTXNnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpO1xuICAgICAgICAgIHRyYWNrKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogdHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogZWxlbWVudC50eXBlLCBub2RlOiBlbGVtZW50Lm5vZGUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgICBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSkudGhlbigoY29ubikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkge1xuICAgICAgICAgIHRoaXMuYW55Q2RlQ29ubi5zZXQoY29ubik7XG4gICAgICAgIH1cbiAgICAgIH0pLmNhdGNoKChlcnIpID0+IGVycl9fKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBlcnIpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9O1xuICAgIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIHRyYWNrKFwic3VibWl0X2NhcmRcIik7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIGVycl9fKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5pdEZsb3dOYW1lTWFwID0ge1xuICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgIH07XG4gICAgICBjb25zdCBhdmFpbGFibGVQYXltZW50TWV0aG9kcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiAoe1xuICAgICAgICBuYW1lOiBpbml0Rmxvd05hbWVNYXBba2V5XSA/PyBrZXksXG4gICAgICAgIC4uLmZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgICB0cmFjayhcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsIHtcbiAgICAgICAgYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kczogYXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZVBheW1lbnRNZXRob2RzO1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmFsU3VibWl0ID0gKG1ldGhvZCwgc2V0dGluZ3MpID0+IHtcbiAgICAgIHRyYWNrKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnROZXZlcihtZXRob2QpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQ7XG4gICAgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgZGV0YWNoRXJyb3JMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICAgIGRlbGV0ZSB3aW5kb3dbXCJvanNcIl07XG4gICAgICB0cmFjayhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobmV3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKG5ld0NhbGxiYWNrcyk7XG4gICAgfTtcbiAgICBPcGVuUGF5Rm9ybS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKTtcbiAgICB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi4yOVwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuMi4yOS1hbHBoYS41MjExODU5XCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZGV2aWNlVG9rZW4gPSBnZXREZXZpY2VUb2tlbigpO1xuICAgIGF0dGFjaEVycm9yTGlzdGVuZXJzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcmssIHZlcnNpb24gfSA9IGdldEZyYW1ld29ya0luZm8oKTtcbiAgICBnZXRDdXJyZW50RW52KHRoaXMuYmFzZVVybCkudGhlbigoZW52aXJvbm1lbnQpID0+IHtcbiAgICAgIGlmICghbWV0cmljc1B1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBtZXRyaWNzUHVibGlzaGVyLnNldCh7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICBmcmFtZXdvcmssXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyYWNrKFwiZm9ybV9pbml0XCIpO1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IHsgRmllbGROYW1lLCBPcGVuUGF5Rm9ybSwgU3VibWl0TWV0aG9kLCBTdWJtaXRNZXRob2RzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFBQSxTQUFTO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFXO0FBRWxCLE1BQU1DLEtBQWlCLDhCQUVqQkMsS0FBNEJMLEVBQUUsT0FBTztB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QU87QUFBQSxFQUM1QixTQUFTLElBQUksSUFBSUEsRUFBTyxXQUFXNmYsRUFBYyxFQUFFO0FBQUEsRUFDbkQsU0FBQW9OO0FBQUEsRUFDQSxtQkFBbUJELEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBMVo7QUFBQSxFQUNBLGtCQUFrQnRULEVBQU8sb0JBQW9CLENBQUM7QUFDaEQ7QUF0Vk4sSUFBTWt0QixLQUFONUI7IiwKICAibmFtZXMiOiBbInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRlJBTUVfQkFTRV9VUkwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZm4iLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlN1Ym1pdE1ldGhvZCIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgInZhbHVlIiwgImZpZWxkTmFtZSIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgInJlc29sdmUiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAicmVqZWN0IiwgImV2dCIsICJlIiwgImNvbmZpcm1TdHJpcGVQclBNIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbSIsICJjb25maXJtUmVzdWx0IiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAicmVzdWx0U3RhdHVzIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAiaW5wdXQiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgInN1bSIsICJhcnIiLCAiYSIsICJiIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJzaW1wbGVPanNGbG93IiwgInBhcmFtcyIsICJ0cmFjayIsICJmbG93UmVzdWx0IiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAiT2pzRW52aXJvbm1lbnQiLCAieiIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldEN1cnJlbnRFbnYiLCAiYmFzZVVybCIsICJyZXNwb25zZSIsICJyZXMiLCAiZXhjbHVkZVByb3BzIiwgInByb3BzIiwgImtleSIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18kaCIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgInRyYWNrIiwgIm9uVW5oYW5kZWxlZFJlamVjdGlvbkVycm9yIiwgImVycm9yTWVzc2FnZSIsICJnZXRFcnJvck1lc3NhZ2UiLCAib25VbmNhdWdodEVycm9yIiwgImF0dGFjaEVycm9yTGlzdGVuZXJzIiwgImRldGFjaEVycm9yTGlzdGVuZXJzIiwgIkNkZUVycm9yIiwgIkN1c3RvbUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInJlc3VsdCIsICJzY2hlbWEiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJnZXRQcmVmaWxsIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInBheWxvYWQiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJjdXJyZW5jeSIsICJhbW91bnRBdG9tIiwgInN1bSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yM2RzU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJwcmVwYXJlUGF5bWVudEZsb3ciLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgInNldFVzZXJEZXZpY2VUb2tlbiIsICJkZXZpY2VUb2tlbiIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJsb2dfXyRnIiwgImVycl9fJGciLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAiY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSIsICJmaWVsZHMiLCAicGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCIsICJsb2dfXzIiLCAicHJlZmlsbCIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJjaGVja291dFJlcXVlc3QiLCAiRmllbGROYW1lIiwgImxvZ19fJGYiLCAiZXJyX18kZiIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiZmllbGROYW1lIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIkFsbEZpZWxkTmFtZXMiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyRlIiwgImVycl9fJGUiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJmb3JtQ2FsbGJhY2tzIiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJhbnlDZGVDb25uZWN0aW9uIiwgImluaXRpYWxQcmV2aWV3IiwgImVsZW1lbnRzIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgIk9qc0Zsb3dzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNvbmZpcm1SZXN1bHQiLCAiZm9ybUlucHV0cyIsICJzdHJpcGVQbSIsICJfZSIsICJpbnB1dHMiLCAicGF5ZXJGaXJzdE5hbWUiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAiZmlyc3ROYW1lIiwgImxhc3ROYW1lIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJzdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAiVGhyZWVEU1N0YXR1cyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJwYXJhbXMiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgImVycl9fIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImxvZ19fJGQiLCAiZXJyX18kZCIsICJQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJocmVmIiwgInZhdWx0SWQiLCAicGFyc2VBcmdGcm9tSHJlZiIsICJhcmdOYW1lIiwgImNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyIsICJydW5Qb2NreXQzZHNGbG93IiwgImhlYWRlcnMiLCAibG9nX18kYyIsICJlcnJfXyRjIiwgIkFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiQWR5ZW5Mb2NhbGUiLCAibG9nX18kYiIsICJlcnJfXyRiIiwgIkFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJzbGVlcCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgImNsZWFudXAiLCAib25DYW5jZWwiLCAib25QYXltZW50RmFpbGVkIiwgIm9uQWRkaXRpb25hbERldGFpbHMiLCAiXyIsICJfXyIsICJhZHllbkNoZWNrb3V0IiwgImNoZWNrb3V0IiwgImRldGVybWluZUxvY2FsZSIsICJwcmVmaWxsTG9jYWxlIiwgImJyb3dzZXJMb2NhbGUiLCAiY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMiLCAicnVuQWR5ZW4zZHNGbG93IiwgImxvZ19fJGEiLCAiZXJyX18kYSIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgInN0YXJ0UGZSZXN1bHQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJzdHJpcGVDQzNEU0Zsb3ciLCAiY29tbW9uQ0MzRFNGbG93IiwgImNjUG1JZCIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVBY3Rpb24iLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbW1vbkFjdGlvbiIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2FkU2NyaXB0IiwgInNjcmlwdElkIiwgInNyYyIsICJjaGVja0xvYWRlZEZuIiwgImV2ZW50TGlzdGVuZXJDb250cm9sbGVyIiwgInNjcmlwdCIsICJleGlzdGluZ1NjcmlwdCIsICJsb2dfXyQ5IiwgImVycl9fJDkiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgInByb3ZpZGVyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJjb25maXJtU3RyaXBlUHJQTSIsICJzdHJpcGVQbUV2dCIsICJiaWxsaW5nQWRkcmVzcyIsICJzaGlwcGluZ0FkZHJlc3MiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJsb2dfXyQ4IiwgImVycl9fJDgiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAibmV3Q3VzdG9tZXJGaWVsZHMiLCAiZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyIsICJpc1BheUZpcnN0RmxvdyIsICJzdGFydFBheW1lbnRGbG93UmVxdWVzdCIsICJwcmVBY3Rpb25VcmwiLCAiZW5jb2RlZFJlcXVlc3QiLCAic2VhcmNoUGFyYW1zIiwgInJlZGlyZWN0VXJsIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgIkZSQU1FX0JBU0VfVVJMIiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAicGF5bWVudERhdGEiLCAibGFzdE5hbWVQYXJ0cyIsICJsb2dfXyQ3IiwgImVycl9fJDciLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAidW5hdmFpbGFibGVSZXN1bHQiLCAiZ29vZ2xlUGF5Q3BtIiwgInByb2Nlc3NvckFjY291bnQiLCAiaXNSZWFkeVRvUGF5IiwgIm9uR29vZ2xlUGF5U3RhcnRGbG93IiwgInJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAiX2YiLCAiX2ciLCAiY2xpZW50IiwgImVuY3J5cHRlZFBheW1lbnRUb2tlbiIsICJzdGFydEZsb3dOZXh0QWN0aW9ucyIsICJvdXJQbUlkIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJsb2dfXyQ2IiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMSIsICJwYXltZW50U2Vzc2lvblJlc3BvbnNlIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImNvbnNlbnRJZCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJwYXltZW50UmVxdWVzdCIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgInVwZGF0ZSIsICJMT09QX0NSWVBUT19NSU5fVVNEX0NIQVJHRV9BTU9VTlRfQVRPTSIsICJMb29wQ3J5cHRvQ3BtIiwgImxvZ19fJDQiLCAiZXJyX18kNSIsICJMb29wUmVxdWlyZWRGb3JtRmllbGRzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIkxvb3BPcHRpb25hbEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm1vZGVsIiwgImluaXRMb29wRmxvdyIsICJwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIiwgInBheW1lbnRTZXR1cEluZm8iLCAiY2hhcmdlQW1vdW50VXNkQXRvbSIsICJwYXltZW50VXNkQW1vdW50IiwgInN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgIm1vYmlsZVdhbGxldFBheW1lbnREYXRhIiwgIkFwcGxlUGF5Q3BtIiwgIkdvb2dsZVBheUNwbSIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiaW5pdEF1dGhuZXRBcHBsZVBheUZsb3ciLCAicnVuQXV0aG5ldEFwcGxlUGF5RmxvdyIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRHb29nbGVQYXlGbG93IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJsb2dfXyQxIiwgImVycl9fJDIiLCAiY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAicHVibGlzaGVyIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImZsb3ciLCAiY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyIsICJlcnJfXyQxIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJDQVRFR09SWV9FUlJPUiIsICJDQVRFR09SWV9ERUJVRyIsICJfZXJyb3IiLCAiX2RlYnVnIiwgIkVOQ09ESU5HIiwgIkVOQ09ESU5HX0xFTiIsICJSQU5ET01fTEVOIiwgIlRJTUVfTEVOIiwgIlRJTUVfTUFYIiwgIlVMSURFcnJvckNvZGUiLCAiVUxJREVycm9yIiwgImVycm9yQ29kZSIsICJtZXNzYWdlIiwgInJhbmRvbUNoYXIiLCAicHJuZyIsICJyYW5kIiwgImRldGVjdFBSTkciLCAicm9vdCIsICJyb290TG9va3VwIiwgImRldGVjdFJvb3QiLCAiZ2xvYmFsQ3J5cHRvIiwgImJ1ZmZlciIsICJpbldlYldvcmtlciIsICJlbmNvZGVSYW5kb20iLCAibGVuIiwgInN0ciIsICJlbmNvZGVUaW1lIiwgIm1vZCIsICJjdXJyZW50TGVuIiwgInVsaWQiLCAic2VlZFRpbWUiLCAiY3VycmVudFBSTkciLCAic2VlZCIsICJDT09LSUVfTkFNRSIsICJnZXREZXZpY2VUb2tlbiIsICJleGlzdGluZ0Nvb2tpZSIsICJjb29raWUiLCAidG9rZW4iLCAic2V0RGV2aWNlVG9rZW4iLCAib25lWWVhckZyb21Ob3ciLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIm5leHRXaW5kb3ciLCAibnV4dFdpbmRvdyIsICJub2RlIiwgInZ1ZVdpbmRvdyIsICJnZXRGcmFtZXdvcmtWZXJzaW9uIiwgImZyYW1ld29yayIsICJkb2N1bWVudDIiLCAibmdWZXJzaW9uRWwiLCAiZ2V0RnJhbWV3b3JrSW5mbyIsICJ2ZXJzaW9uIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJpbnRlcm5hbENhbGxiYWNrcyIsICJnZXRDbGVhbk9yaWdpbiIsICJldmVudERhdGEiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZWxlbWVudElkIiwgImV2ZW50VHlwZSIsICJjcmVhdGVDb25uZWN0aW9uIiwgImlzVmFsaWRPYmplY3QiLCAiY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCIsICJpc1Jlc3VsdFZhbGlkIiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgImNvbm5lY3Rpb24iLCAic2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzIiwgImluaXRQckZsb3dzIiwgImNhbGxiYWNrcyIsICJzdHJpcGVQUiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlQnJpZGdlSWZyYW1lIiwgIkVsZW1lbnRUeXBlRW51bSIsICJjZGVMb2FkZWQiLCAiYW55Q2RlQ29ubiIsICJvanNDb250ZXh0IiwgImhlaWdodCIsICJlbGVtZW50VmFsdWUiLCAib3B0aW9ucyIsICJ0eXBlIiwgIkVsZW1lbnRUeXBlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiaW5pdEZsb3dOYW1lTWFwIiwgIlN1Ym1pdE1ldGhvZHMiLCAiYXZhaWxhYmxlUGF5bWVudE1ldGhvZHMiLCAibWV0aG9kIiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAibmV3Q2FsbGJhY2tzIiwgImZvcm0iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJmb3JtRGl2IiwgIk9wZW5QYXlGb3JtIl0KfQo=
4457
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbmNvbnN0IFN1Ym1pdE1ldGhvZCA9IHoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6LmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xuY29uc3QgRWxlbWVudEV2ZW50ID0gei5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnouZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiBpbnB1dC52YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6YCwgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UgPSB6Lm9iamVjdCh7fSk7XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7Zmxvd1Jlc3VsdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSB9KTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgZXJyX18oZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgIHRyYWNrKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUgfSk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGlzTG9hZGluZzogZmFsc2UgfTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IE9qc0Vudmlyb25tZW50ID0gei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcbmNvbnN0IGdldEN1cnJlbnRFbnYgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LnBhcnNlKHJlc3BvbnNlLmVudmlyb25tZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gT2pzRW52aXJvbm1lbnQuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBleGNsdWRlUHJvcHMgPSAob2JqLCBwcm9wcykgPT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuZmlsdGVyKChba2V5XSkgPT4gIXByb3BzLmluY2x1ZGVzKGtleSkpKTtcbn07XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kaCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGgoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGgoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyRoKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kaChcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5jb25zdCB0cmFjayA9IChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpID0+IHtcbiAgbWV0cmljc1F1ZXVlLmFkZEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcyk7XG59O1xuY29uc3Qgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQucmVhc29uKTtcbiAgdHJhY2soXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQucmVhc29uXG4gIH0pO1xufTtcbmNvbnN0IG9uVW5jYXVnaHRFcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IpO1xuICB0cmFjayhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQuZXJyb3I/Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IGV2ZW50LmVycm9yPy5zdGFjayxcbiAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBldmVudC5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZXZlbnQuY29sbm9cbiAgfSk7XG59O1xuY29uc3QgYXR0YWNoRXJyb3JMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbn07XG5jb25zdCBkZXRhY2hFcnJvckxpc3RlbmVycyA9ICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xufTtcbmdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn0pO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hLCB0cmFja2luZ0tleSkgPT4ge1xuICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgLi4uZGF0YVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gIH1cbiAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgcmVzcG9uc2VTY2hlbWEsIFwiQWN0dWFsOlwiLCByZXNwb25zZSk7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9XG4gIGlmICh0cmFja2luZ0tleSkge1xuICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAuLi5yZXNwb25zZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3IzZHNTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbikgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIFBpbmczRFNTdGF0dXNSZXNwb25zZSk7XG4gIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBwcmVwYXJlUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIFByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSA9IGFzeW5jIChjZGVDb25uLCBlcnJvck1lc3NhZ2UpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0geyBtZXNzYWdlOiBlcnJvck1lc3NhZ2UgfTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHF1ZXJ5Q0RFKFxuICAgICAgY2RlQ29ubixcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZCB9LFxuICAgICAgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgcmV0dXJuIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59O1xuY29uc3Qgc2V0VXNlckRldmljZVRva2VuID0gYXN5bmMgKGNkZUNvbm4sIGRldmljZVRva2VuKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IGRldmljZVRva2VuIH0gfSxcbiAgICBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZVxuICApO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZywgZXJyX186IGVycl9fJGcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuY29uc3QgcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufTtcbmNvbnN0IGZpbmRDcG1NYXRjaGluZ1R5cGUgPSAoYWxsQ1BNcywgem9kTW9kZWwpID0+IHtcbiAgY29uc3QgY3BtID0gYWxsQ1BNcy5maW5kKChjcG0yKSA9PiB6b2RNb2RlbC5zYWZlUGFyc2UoY3BtMikuc3VjY2Vzcyk7XG4gIGlmICghY3BtKSB7XG4gICAgZXJyX18kZyhgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6YCwgYWxsQ1BNcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbGApO1xuICB9XG4gIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xufTtcbmNvbnN0IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0gPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBmaWVsZHMuZW1haWwsXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgIHppcF9jb2RlOiBmaWVsZHMuemlwQ29kZSxcbiAgICAgIGNvdW50cnk6IGZpZWxkcy5jb3VudHJ5XG4gICAgfSxcbiAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZmllbGRzLmZpcnN0TmFtZSxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWVcbiAgfTtcbn07XG5jb25zdCBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogbG9nX18yIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhhcmdzLmxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbik7XG4gIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBsb2dfXzIoYFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5gKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGF3YWl0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogYXJncy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZiwgZXJyX186IGVycl9fJGYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcykgPT4ge1xuICBpZiAoZGVmYXVsdEZpZWxkVmFsdWVzKSB7XG4gICAgbG9nX18kZihgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdEZpZWxkVmFsdWVzKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0RmllbGRWYWx1ZXMpKSB7XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IFJlcXVpcmVkRm9ybUZpZWxkcy5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcGF5bG9hZC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJGYoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZC5kYXRhO1xufTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kZihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kZihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBPSlNfU1RSSVBFX0xJTktfQlROX0lEID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCI7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRlLCBlcnJfXzogZXJyX18kZSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbmNvbnN0IFN0cmlwZUxpbmtDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVMaW5rRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IGluaXRQYXJhbXMgPSBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBsb2dfXyRlKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlTGlua0NwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVMaW5rQ3BtKTtcbiAgICBsb2dfXyRlKGBTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJGUoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kZShgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWApO1xuICAgIH07XG4gICAgY29uc3QgZGlzbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50LnVubW91bnQoKTtcbiAgICB9O1xuICAgIGlmIChpbml0UGFyYW1zPy5kb05vdE1vdW50T25Jbml0KSB7XG4gICAgICBsb2dfXyRlKGBOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGUoYE1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLmApO1xuICAgICAgbW91bnRCdXR0b24oKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kZShcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJGUoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyRlKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyRlKFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGUoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbixcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGdldEVsZW1lbnRCeUlkQXN5bmMoT0pTX1NUUklQRV9MSU5LX0JUTl9JRClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRlKGBSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGxvZ19fJGUoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNKG5vbkNkZUZvcm1JbnB1dHMsIGN1c3RvbVBhcmFtcy5zdHJpcGVQTSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyRlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGUoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGUoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyRlKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IGdldEVsZW1lbnRCeUlkQXN5bmMgPSAoaWQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGNvbnN0IGdldEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVzb2x2ZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGdldEVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbiAgZ2V0RWxlbWVudCgpO1xufSk7XG5cbmNvbnN0IHN0eWxlcyA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWUsI2FkeWVuLWNvbnRhaW5lciwjYWR5ZW4tY29udGFpbmVyPip7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCI7XG5cbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwpID0+IHtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke3N0eWxlc31cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG59O1xuXG5mdW5jdGlvbiBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGhhbmRsZVBvbGxpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHBpbmdDZGVGb3IzZHNTdGF0dXMoaWZyYW1lLCBjaGlsZE9yaWdpbik7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICAgICAgb25TdWNjZXNzKHN0YXR1cyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB9XG4gIH07XG4gIGhhbmRsZVBvbGxpbmcoKTtcbiAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlUG9sbGluZywgQ0RFX1BPTExJTkdfSU5URVJWQUwpO1xuICByZXR1cm4gcG9sbGluZ0ludGVydmFsO1xufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzKHtcbiAgZWxlbWVudHMsXG4gIHBvbGxpbmdJbnRlcnZhbCxcbiAgcmVzb2x2ZVxufSkge1xuICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgfTtcbiAgcmV0dXJuIGNsZWFudXBFdmVudExpc3RlbmVycztcbn1cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcykge1xuICBjb25zdCB7IHVybCwgYmFzZVVybCB9ID0gcGFyYW1zO1xuICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyk7XG4gICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGVsZW1lbnRzLmlmcmFtZSwgb25TdWNjZXNzLCBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbik7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzICE9PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGhyZWY6IHJlc3VsdC5ocmVmXG4gIH07XG59O1xuY29uc3Qgb3BlblBvcHVwV2luZG93ID0gKHBvcHVwTmFtZSwgdXJsKSA9PiB7XG4gIGNvbnN0IHBvcHVwV2luZG93ID0gd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcbiAgaWYgKCFwb3B1cFdpbmRvdykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIH1cbiAgcmV0dXJuIHBvcHVwV2luZG93O1xufTtcbmNvbnN0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocG9wdXBOYW1lLCBjZGVDb25uLCBleHBlY3RlZFZlcmlmeVRva2VuLCB1cmwpID0+IHtcbiAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcG9wdXBXaW5kb3cgPSBvcGVuUG9wdXBXaW5kb3cocG9wdXBOYW1lLCB1cmwpO1xuICAgIGNvbnN0IHBvbGxpbmcgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2ZXJpZnlSZXN1bHQgPSBhd2FpdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZChjZGVDb25uLCBleHBlY3RlZFZlcmlmeVRva2VuKTtcbiAgICAgICAgaWYgKHZlcmlmeVJlc3VsdC5wcmVzZW50KSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nKTtcbiAgICAgICAgICBwb3B1cFdpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgIHJlc29sdmUoeyBocmVmOiB2ZXJpZnlSZXN1bHQuaHJlZiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3B1cFdpbmRvdy5jbG9zZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyhnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nKTtcbiAgICAgICAgcmVqZWN0KGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZCwgZXJyX186IGVycl9fJGQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kZChkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kZChgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dmF1bHRJZH1dYCk7XG4gICAgcmV0dXJuIHZhdWx0SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGQoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBwYXJzZUFyZ0Zyb21IcmVmID0gKGhyZWYsIGFyZ05hbWUpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KGFyZ05hbWUpO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMihlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdmF1bHRJZCxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhaXJ3YWxsZXgtY2NcIik7XG5jb25zdCBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyRjKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaW50ZW50SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInBheW1lbnRfaW50ZW50X2lkXCIpO1xuICAgIGlmICghaW50ZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGludGVudCBJRCBmb3VuZCBpbiBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGMoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7aW50ZW50SWR9XWApO1xuICAgIHJldHVybiBpbnRlbnRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGMoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBydW5BaXJ3YWxsZXgzZHNGbG93ID0gYXN5bmMgKGJhc2VVcmwsIGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQxKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgaW50ZW50SWQgPSBwYXJzZUludGVudElkRnJvbTNkc0hyZWYocmVzdWx0LmhyZWYgPz8gXCJcIik7XG4gIGNvbnN0IGluaXRpYWxJbnRlbnRJZCA9IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChpbml0aWFsSW50ZW50SWQgIT09IGludGVudElkKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEludGVudCBJRCBmcm9tIGNhbGxiYWNrICgke2ludGVudElkfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke2luaXRpYWxJbnRlbnRJZH0pLmA7XG4gICAgZXJyX18kYyhkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICBpbml0aWFsX2ludGVudF9pZDogaW50ZW50SWQsXG4gICAgICBjb25zZW50X2lkOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuY29uc3QgQXBwbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG5jb25zdCBBZHllbkxvY2FsZSA9IHouZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRiIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWNjXCIpO1xuY29uc3QgQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRiKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kYihcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRiKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRiKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJGIoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kYihcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRiKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJGIoXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kYihgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJGIoYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29tcG9uZW50LmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBpZnJhbWUucmVwbGFjZVdpdGgoY29tcG9uZW50KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQWR5ZW4zZHMoe1xuICAgIGhlYWRlcnMsXG4gICAgbG9jYWxlOiBkZXRlcm1pbmVMb2NhbGUocHJlZmlsbExvY2FsZSksXG4gICAgY291bnRyeUNvZGUsXG4gICAgY29tcG9uZW50LFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBpZiAoIXJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIH1cbiAgICBsb2dfXyRiKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRhLCBlcnJfXzogZXJyX18kYSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB7IGxvZ19fOiBzdHJpcGVMb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGEoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGxvZ19fJGEoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJGEoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCB0b2tlbml6ZUNhcmRSZXN1bHRzID0gYXdhaXQgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyhjdXN0b21QYXJhbXMuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzKHRva2VuaXplQ2FyZFJlc3VsdHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBsb2dfXyRhKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3ByZWZpbGwudG9rZW59XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXR1cENoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kYShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3Jlc3VsdC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyRhKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRhKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2RlRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgICAgbG9nX18kYShg4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd2ApO1xuICAgICAgICAgIGxvZ19fJGEoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdHJhY2soXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAgICAgLi4uZXJyb3IucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzUG9ja3l0M2RzID0gY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc1BvY2t5dDNkcykge1xuICAgICAgICAgICAgbG9nX18kYShg4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuUG9ja3l0M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJwb2NreXRcIl0gPSBwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FpcndhbGxleDNkcyA9IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBaXJ3YWxsZXgzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiYWlyd2FsbGV4XCJdID0gYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBZHllbjNkcyA9IGNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FkeWVuM2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BZHllbjNkc0Zsb3coXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgICBwcmVmaWxsLmxvY2FsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiYWR5ZW5cIl0gPSBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0YXJ0UGZSZXN1bHQgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICAgIGxvZ19fJGEoYOKUnCBQYXltZW50IGZsb3cgcmVzdWx0OmAsIHN0YXJ0UGZSZXN1bHQpO1xuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyRhKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNjUG1JZCA9IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQ7XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2NjUG1JZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJGEoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kYShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyRhKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAkeyFzaG91bGRVc2VTdHJpcGVGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcyxcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogc2hvdWxkVXNlU3RyaXBlRmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyRhKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyRhKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJGEoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uM0RTQWN0aW9uVHlwZXMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl07XG5jb25zdCBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBsb2dfXyRhKGDilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgIHRyYWNrKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dfXyRhKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybH1dYCk7XG4gIHRyYWNrKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7IHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCwgYmFzZVVybCB9KTtcbiAgbG9nX18kYShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0cmFjayhcIjNkc19jYW5jZWxsZWRcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdHJhY2soXCIzZHNfZmFpbHVyZVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxufTtcbmNvbnN0IHN0cmlwZUNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0KSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcbmNvbnN0IGxvYWRTY3JpcHQgPSAoe1xuICBzY3JpcHRJZCxcbiAgc3JjLFxuICBjaGVja0xvYWRlZEZuXG59KSA9PiB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHNjcmlwdC5zcmMgPSBzcmM7XG4gICAgc2NyaXB0LmlkID0gc2NyaXB0SWQ7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBjb25zdCBleGlzdGluZ1NjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdElkKTtcbiAgICBpZiAoY2hlY2tMb2FkZWRGbigpKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSBlbHNlIGlmIChleGlzdGluZ1NjcmlwdCkge1xuICAgICAgc2NyaXB0ID0gZXhpc3RpbmdTY3JpcHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9XG4gICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ5LCBlcnJfXzogZXJyX18kOSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kOShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDkoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ5KGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQ5KGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kOShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDkoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICBjb25zdCBydW5TdHJpcGVQckZsb3cyID0gKHByb3ZpZGVyLCBwYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICAgIHByLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5IH0sXG4gICAgICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3ckMSA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kOShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHIgPSBpbml0UmVzdWx0LnByO1xuICAgIGlmIChjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBsb2dfXyQ5KGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgdXBkYXRlUHJXaXRoQW1vdW50KHByLCBvdmVycmlkZS5hbW91bnQsIG92ZXJyaWRlLnBlbmRpbmcsIG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QsIG92ZXJyaWRlLmxhYmVsKTtcbiAgICB9XG4gICAgbG9nX18kOShgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDkoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDkoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ5KGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kOShgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDkoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOShgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBiaWxsaW5nQWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQ5KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5LCBsYWJlbCkgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGxhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LXBheXBhbFwiKTtcbmNvbnN0IFBvY2t5dFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kOChgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgc2V0dGluZ3M/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGxvZ19fJDgoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgfSxcbiAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgfTtcbiAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICBsb2dfXyQ4KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgIGxvZ19fJDgoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgcmVkaXJlY3RVcmxcbiAgICApO1xuICAgIGxvZ19fJDgoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICAgIGVycl9fJDgoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgfVxuICAgIGxvZ19fJDgoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGxvZ19fJDgoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kOChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHsgLi4uYmFzZVJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgfTtcbiAgfVxuICByZXR1cm4gYmFzZVJlcXVlc3Q7XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBpc1Byb2R1Y3Rpb24gPSBiYXNlVXJsID09PSBGUkFNRV9CQVNFX1VSTCB8fCBiYXNlVXJsID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICByZXR1cm4gaXNQcm9kdWN0aW9uID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIjtcbn07XG5jb25zdCBnZXRHb29nbGVQYXltZW50c0NsaWVudCA9IChiYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpID0+IHtcbiAgY29uc3QgZW52aXJvbm1lbnQgPSBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChiYXNlVXJsKTtcbiAgaWYgKHBheW1lbnRzQ2xpZW50ID09PSBudWxsKSB7XG4gICAgcGF5bWVudHNDbGllbnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBtZXJjaGFudEluZm86IHBheW1lbnREYXRhUmVxdWVzdC5tZXJjaGFudEluZm9cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF5bWVudHNDbGllbnQ7XG59O1xuY29uc3QgcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkgPSAoZm9ybUlucHV0cywgcGF5bWVudERhdGEpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LmluZm8/LmJpbGxpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5BRERSRVNTXSA9IGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSB8fCBiaWxsaW5nQWRkcmVzcy5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICAgIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnB1dHM7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ3LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDcoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQ3KFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNyhcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kNyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQ3KFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkuaXNSZWFkeVRvUGF5KFxuICAgICAgICBwYXltZW50RGF0YVJlcXVlc3RcbiAgICAgICk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyQ3KFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDcoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJDcoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNyhcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJDcoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kNyhcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBlbmNyeXB0ZWRQYXltZW50VG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kNyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kNyhcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNyhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDcoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgISF3aW5kb3cuQXBwbGVQYXlTREtcbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/PyB2b2lkIDAsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCkge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIH1cbiAgbG9nX18kNihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICB9KTtcbiAgbG9nX18kNihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgbG9nX18kNihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgY29uc2VudElkID0gcmVxdWlyZWRVc2VyQWN0aW9ucy5jb25zZW50X2lkO1xuICAgIGlmICghY29uc2VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyQ2KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YT8ucmVkaXJlY3RfdXJsICYmIG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkICYmIG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCkge1xuICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpO1xuICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIH1cbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQ1KFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyQ1KFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kNShcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyQ1KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJDYoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LCBpbml0aWFsUHJldmlldyB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBwcmVmaWxsXG4gICAgICB9KSxcbiAgICAgIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPz8ge31cbiAgICB9O1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJDUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJDYoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCBMT09QX0NSWVBUT19NSU5fVVNEX0NIQVJHRV9BTU9VTlRfQVRPTSA9IDE7XG5jb25zdCBMb29wQ3J5cHRvQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwibG9vcC1jcnlwdG9cIik7XG5jb25zdCBMb29wUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJsb29wRmlyc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcExhc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcEVtYWlsXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV06IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IExvb3BPcHRpb25hbEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBtb2RlbCwgZGVmYXVsdEZpZWxkVmFsdWVzKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBtb2RlbC5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcGF5bG9hZC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJDUoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZC5kYXRhO1xufTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJDQoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kNChgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBpZiAocHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCIgJiYgIWNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhwcmVmaWxsLmN1cnJlbmN5KSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3ByZWZpbGwuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSB8fCAhcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbmVjZXNzYXJ5IHNldHVwIGRhdGEgZm9yIExvb3BcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRTZXR1cEluZm8gPSBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IExPT1BfQ1JZUFRPX01JTl9VU0RfQ0hBUkdFX0FNT1VOVF9BVE9NO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSAqIHBheW1lbnRTZXR1cEluZm9bXCJ0b2tlbl9wcmljZVwiXTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudFVzZEFtb3VudCA9IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgY29uc3Qgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZFxuICAgIH07XG4gICAgY29uc3QgaW5pdExvb3BDb25uZWN0UHJvcHMgPSB7XG4gICAgICBhcGlLZXk6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHdpZGdldFByb3BzLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuTG9vcEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIExvb3AgZmxvdy4uLmApO1xuICAgIGxvZ19fJDQoXCJjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgIGxvZ19fJDQoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ0KFwibm9uQ2RlRm9ybUlucHV0c1wiLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICBsb2dfXyQ0KFwiZmxvd0NhbGxiYWNrc1wiLCBmb3JtQ2FsbGJhY2tzKTtcbiAgICBsb2dfXyQ0KFwiY3VzdG9tUGFyYW1zXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgbGV0IG5vbkNkZUZvcm1GaWVsZHM7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc3VjY2Vzcykge1xuICAgICAgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIExvb3BSZXF1aXJlZEZvcm1GaWVsZHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMoXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBMb29wT3B0aW9uYWxGb3JtRmllbGRzXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkcy5sb29wRW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkcy5sb29wRmlyc3ROYW1lLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkcy5sb29wTGFzdE5hbWUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcykge1xuICAgICAgdGhyb3cgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnN1Y2Nlc3MgPyBjdXN0b21QYXJhbXMucGF5aW4ucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQgOiB2b2lkIDAsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIiA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5zdWNjZXNzID8gY3VzdG9tUGFyYW1zLmN1c3RvbWVyIDogdm9pZCAwLFxuICAgICAgICBsb29wX3BheWluOiBjdXN0b21QYXJhbXMuc3VjY2VzcyA/IGN1c3RvbVBhcmFtcy5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6ICFjdXN0b21QYXJhbXMuc3VjY2VzcyA/IGN1c3RvbVBhcmFtcy5mYWlsdXJlRGV0YWlscyA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9kZWJ1Z19pbmZvOiAhY3VzdG9tUGFyYW1zLnN1Y2Nlc3MgPyBjdXN0b21QYXJhbXMuZGVidWdJbmZvIDogdm9pZCAwLFxuICAgICAgICBsb29wX3N1Y2Nlc3M6IGN1c3RvbVBhcmFtcy5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kNChgQ29uZmlybSByZXN1bHQ6ICR7Y29uZmlybVJlc3VsdH1gKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDQoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGxvZ19fJDQoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbG9nX18kNChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDUoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IEFwcGxlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWFwcGxlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyQzKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyQzKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyQzKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJDQoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbCxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1wic3VwcG9ydHMzRFNcIiwgXCJzdXBwb3J0c0NyZWRpdFwiLCBcInN1cHBvcnRzRGViaXRcIl0sXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgICB0b3RhbCxcbiAgICAgICAgcHJlZmlsbFxuICAgICAgfSksXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID8/IHt9XG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kMyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHBheW1lbnRSZXF1ZXN0LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kNChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMihcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQzKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kMihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kMyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIHBheW1lbnREYXRhUmVxdWVzdFxuICAgICAgKTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJDIoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kMyhcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kMyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kMihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDIoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kMyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIgPSAoZmxvd05hbWUsIGluaXRGbG93KSA9PiB7XG4gIGNvbnN0IHB1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChpbml0UGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgaW5pdEZsb3coaW5pdFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDEoYOKclCAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGluaXRSZXN1bHQpO1xuICAgICAgICBwdWJsaXNoZXIuc2V0KGluaXRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMihg8J2ZrSAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgXCJEZXRhaWxzOlwiLCBlcnJvcik7XG4gICAgICAgIHB1Ymxpc2hlci50aHJvdyhlcnJvciwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWxsSW5pdEZsb3dzID0gYXN5bmMgKGZsb3dzLCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZmxvd3MpLm1hcCgoZmxvdykgPT4gZmxvdy5pbml0aWFsaXplKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSkpO1xufTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAgIC8vIFN0cmlwZSBQUlxuICAgIHN0cmlwZVBSOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KSxcbiAgICAvLyBTdHJpcGUgTGlua1xuICAgIHN0cmlwZUxpbms6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIExpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgICBhdXRob3JpemVOZXRBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQxKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCBDQVRFR09SWV9FUlJPUiA9IFwiZXJyb3JcIjtcbmNvbnN0IENBVEVHT1JZX0RFQlVHID0gXCJkZWJ1Z1wiO1xuY29uc3QgX2Vycm9yID0gY29uc29sZS5lcnJvcjtcbmNvbnN0IF9kZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XG5jb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuaWYgKHNhZmVXaW5kb3cpIHtcbiAgc2FmZVdpbmRvdy5fb2pzX2NvbnNvbGVfY2FsbGJhY2tzID0gW107XG59XG5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oLi4uYXJncykge1xuICBfZXJyb3IuY2FsbChjb25zb2xlLCAuLi5hcmdzKTtcbiAgc2FmZVdpbmRvdz8uX29qc19jb25zb2xlX2NhbGxiYWNrcz8uZm9yRWFjaCgoY2IpID0+IGNiKENBVEVHT1JZX0VSUk9SLCAuLi5hcmdzKSk7XG59O1xuY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgX2RlYnVnLmNhbGwoY29uc29sZSwgLi4uYXJncyk7XG4gIHNhZmVXaW5kb3c/Ll9vanNfY29uc29sZV9jYWxsYmFja3M/LmZvckVhY2goKGNiKSA9PiBjYihDQVRFR09SWV9ERUJVRywgLi4uYXJncykpO1xufTtcblxuLy8gVGhlc2UgdmFsdWVzIHNob3VsZCBORVZFUiBjaGFuZ2UuIFRoZSB2YWx1ZXMgYXJlIHByZWNpc2VseSBmb3Jcbi8vIGdlbmVyYXRpbmcgVUxJRHMuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIjsgLy8gQ3JvY2tmb3JkJ3MgQmFzZTMyXG5jb25zdCBFTkNPRElOR19MRU4gPSAzMjsgLy8gZnJvbSBFTkNPRElORy5sZW5ndGg7XG5jb25zdCBSQU5ET01fTEVOID0gMTY7XG5jb25zdCBUSU1FX0xFTiA9IDEwO1xuY29uc3QgVElNRV9NQVggPSAyODE0NzQ5NzY3MTA2NTU7IC8vIGZyb20gTWF0aC5wb3coMiwgNDgpIC0gMTtcblxudmFyIFVMSURFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFVMSURFcnJvckNvZGUpIHtcbiAgICBVTElERXJyb3JDb2RlW1wiQmFzZTMySW5jb3JyZWN0RW5jb2RpbmdcIl0gPSBcIkIzMl9FTkNfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlclwiXSA9IFwiREVDX1RJTUVfQ0hBUlwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lTmVnYXRpdmVcIl0gPSBcIkVOQ19USU1FX05FR1wiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkXCJdID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJQUk5HRGV0ZWN0RmFpbHVyZVwiXSA9IFwiUFJOR19ERVRFQ1RcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVUxJREludmFsaWRcIl0gPSBcIlVMSURfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVbmV4cGVjdGVkXCJdID0gXCJVTkVYUEVDVEVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVVSURJbnZhbGlkXCJdID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFVMSURFcnJvckNvZGUgfHwgKFVMSURFcnJvckNvZGUgPSB7fSkpO1xuY2xhc3MgVUxJREVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihgJHttZXNzYWdlfSAoJHtlcnJvckNvZGV9KWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiO1xuICAgICAgICB0aGlzLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByYW5kb21DaGFyKHBybmcpIHtcbiAgICBsZXQgcmFuZCA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKTtcbiAgICBpZiAocmFuZCA9PT0gRU5DT0RJTkdfTEVOKSB7XG4gICAgICAgIHJhbmQgPSBFTkNPRElOR19MRU4gLSAxO1xuICAgIH1cbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmQpO1xufVxuLyoqXG4gKiBEZXRlY3QgdGhlIGJlc3QgUFJORyAocHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKVxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgdG8gY2hlY2sgZnJvbSAoZ2xvYmFsL3dpbmRvdylcbiAqIEByZXR1cm5zIFRoZSBQUk5HIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBSTkcocm9vdCkge1xuICAgIGNvbnN0IHJvb3RMb29rdXAgPSBkZXRlY3RSb290KCk7XG4gICAgY29uc3QgZ2xvYmFsQ3J5cHRvID0gKHJvb3RMb29rdXAgJiYgKHJvb3RMb29rdXAuY3J5cHRvIHx8IHJvb3RMb29rdXAubXNDcnlwdG8pKSB8fFxuICAgICAgICAobnVsbCk7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LmdldFJhbmRvbVZhbHVlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgICAgIGdsb2JhbENyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJbMF0gLyAweGZmO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5yYW5kb21CeXRlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBnbG9iYWxDcnlwdG8ucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAweGZmO1xuICAgIH1cbiAgICBlbHNlIDtcbiAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZGV0ZWN0Um9vdCgpIHtcbiAgICBpZiAoaW5XZWJXb3JrZXIoKSlcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGVuY29kZVJhbmRvbShsZW4sIHBybmcpIHtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHtcbiAgICAgICAgc3RyID0gcmFuZG9tQ2hhcihwcm5nKSArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogRW5jb2RlIHRoZSB0aW1lIHBvcnRpb24gb2YgYSBVTElEXG4gKiBAcGFyYW0gbm93IFRoZSBjdXJyZW50IHRpbWVzdGFtcFxuICogQHBhcmFtIGxlbiBMZW5ndGggdG8gZ2VuZXJhdGVcbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIHRpbWVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlVGltZShub3csIGxlbiA9IFRJTUVfTEVOKSB7XG4gICAgaWYgKGlzTmFOKG5vdykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA+IFRJTUVfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtUSU1FX01BWH06ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5vdykgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGxldCBtb2QsIHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgY3VycmVudExlbiA9IGxlbjsgY3VycmVudExlbiA+IDA7IGN1cnJlbnRMZW4tLSkge1xuICAgICAgICBtb2QgPSBub3cgJSBFTkNPRElOR19MRU47XG4gICAgICAgIHN0ciA9IEVOQ09ESU5HLmNoYXJBdChtb2QpICsgc3RyO1xuICAgICAgICBub3cgPSAobm93IC0gbW9kKSAvIEVOQ09ESU5HX0xFTjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIGluV2ViV29ya2VyKCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBVTElEXG4gKiBAcGFyYW0gc2VlZFRpbWUgT3B0aW9uYWwgdGltZSBzZWVkXG4gKiBAcGFyYW0gcHJuZyBPcHRpb25hbCBQUk5HIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBBIFVMSUQgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogIHVsaWQoKTsgLy8gXCIwMUhOWlhEMDdNNUNFTjVYQTY2RU1aU1JaV1wiXG4gKi9cbmZ1bmN0aW9uIHVsaWQoc2VlZFRpbWUsIHBybmcpIHtcbiAgICBjb25zdCBjdXJyZW50UFJORyA9IGRldGVjdFBSTkcoKTtcbiAgICBjb25zdCBzZWVkID0gRGF0ZS5ub3coKSA7XG4gICAgcmV0dXJuIGVuY29kZVRpbWUoc2VlZCwgVElNRV9MRU4pICsgZW5jb2RlUmFuZG9tKFJBTkRPTV9MRU4sIGN1cnJlbnRQUk5HKTtcbn1cblxuY29uc3QgQ09PS0lFX05BTUUgPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIjtcbmNvbnN0IGdldERldmljZVRva2VuID0gKCkgPT4ge1xuICBjb25zdCBleGlzdGluZ0Nvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgoY29va2llKSA9PiBjb29raWUuaW5jbHVkZXMoQ09PS0lFX05BTUUpKTtcbiAgaWYgKGV4aXN0aW5nQ29va2llKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ29va2llLnNwbGl0KFwiPVwiKVsxXTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IHVsaWQoKTtcbiAgc2V0RGV2aWNlVG9rZW4odG9rZW4pO1xuICByZXR1cm4gdG9rZW47XG59O1xuY29uc3Qgc2V0RGV2aWNlVG9rZW4gPSAodG9rZW4pID0+IHtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgb25lWWVhckZyb21Ob3cuc2V0RnVsbFllYXIob25lWWVhckZyb21Ob3cuZ2V0RnVsbFllYXIoKSArIDEpO1xuICBkb2N1bWVudC5jb29raWUgPSBgJHtDT09LSUVfTkFNRX09JHt0b2tlbn07IHBhdGg9LzsgZXhwaXJlcz0ke29uZVllYXJGcm9tTm93LnRvVVRDU3RyaW5nKCl9YDtcbn07XG5cbmZ1bmN0aW9uIGRldGVjdEZyYW1ld29yaygpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuZXh0V2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChuZXh0V2luZG93Py5uZXh0IHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpIHtcbiAgICAgIHJldHVybiBcIm5leHRqc1wiIC8qIE5leHRKUyAqLztcbiAgICB9XG4gICAgY29uc3QgbnV4dFdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAobnV4dFdpbmRvdz8uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpIHtcbiAgICAgIHJldHVybiBcIm51eHRcIiAvKiBOdXh0ICovO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAhIUFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCBuZXh0V2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgICAgICByZXR1cm4gbmV4dFdpbmRvdz8ubmV4dD8udmVyc2lvbiB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fPy5idWlsZElkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiIC8qIE51eHQgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwidnVlXCIgLyogVnVlICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovOiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50MiA9IGdldFdpbmRvd1NhZmUoKT8uZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IG5nVmVyc2lvbkVsID0gZG9jdW1lbnQyPy5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbmdWZXJzaW9uRWwgPyBuZ1ZlcnNpb25FbC5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrSW5mbygpIHtcbiAgY29uc3QgZnJhbWV3b3JrID0gZGV0ZWN0RnJhbWV3b3JrKCk7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yayk7XG4gIHJldHVybiB7IGZyYW1ld29yaywgdmVyc2lvbiB9O1xufVxuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNkZUJyaWRnZUlmcmFtZSA9IHRoaXMuY3JlYXRlRWxlbWVudChFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSk7XG4gICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIjtcbiAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiO1xuICAgICAgICBPYmplY3QuYXNzaWduKGNkZUJyaWRnZUlmcmFtZS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgIH0pO1xuICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubW91bnQoXCJib2R5XCIpO1xuICAgICAgICBsb2dfXyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpO1xuICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgY2RlTG9hZGVkID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKTtcbiAgICAgICAgYXdhaXQgc2V0VXNlckRldmljZVRva2VuKGFueUNkZUNvbm4sIHRoaXMuZGV2aWNlVG9rZW4pO1xuICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgICB0cmFjayhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdHJhY2soXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChoZWlnaHQpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZGVkXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlcnJNc2cpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGVyck1zZyksIGVyck1zZyk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJNc2dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZWxlbWVudFZhbHVlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke2ZyYW1lLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nLnRvU3RyaW5nKCk7XG4gICAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFbGVtZW50ID0gdGhpcy5yZWdpc3RlcklmcmFtZSh0eXBlLCBmcmFtZSk7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZEVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKHR5cGUsIGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlOiBmcmFtZSxcbiAgICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSk7XG4gICAgICAgICAgdHJhY2soXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICAgIGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKS50aGVuKChjb25uKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlbGVtZW50LnR5cGUsIGNvbm4pO1xuICAgICAgICBpZiAoIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSB7XG4gICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgdHJhY2soXCJzdWJtaXRfY2FyZFwiKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgZXJyX18oXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIGVycl9fKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbml0Rmxvd05hbWVNYXAgPSB7XG4gICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2tleSwgZmxvd10pID0+ICh7XG4gICAgICAgIG5hbWU6IGluaXRGbG93TmFtZU1hcFtrZXldID8/IGtleSxcbiAgICAgICAgLi4uZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICAgIHRyYWNrKFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIiwge1xuICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBhdmFpbGFibGVQYXltZW50TWV0aG9kc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXZhaWxhYmxlUGF5bWVudE1ldGhvZHM7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgdHJhY2soXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBzZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIGVycl9fKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYWlyd2FsbGV4R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgYGFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhHb29nbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhBcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWFpcndhbGxleEFwcGxlUGF5KSB7XG4gICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgYGFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFpcndhbGxleEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRHb29nbGVQYXkpIHtcbiAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhdXRob3JpemVOZXRHb29nbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRBcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEFwcGxlUGF5KSB7XG4gICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhdXRob3JpemVOZXRBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvOiB7XG4gICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyeXB0b1wiLCBcImxvb3BcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKSB7XG4gICAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG4gICAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgICBkZXRhY2hFcnJvckxpc3RlbmVycygpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICAgIHRyYWNrKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChuZXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MobmV3Q2FsbGJhY2tzKTtcbiAgICB9O1xuICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjMwXCI7XG4gICAgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwiMC4yLjMwXCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZGV2aWNlVG9rZW4gPSBnZXREZXZpY2VUb2tlbigpO1xuICAgIGF0dGFjaEVycm9yTGlzdGVuZXJzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcmssIHZlcnNpb24gfSA9IGdldEZyYW1ld29ya0luZm8oKTtcbiAgICBnZXRDdXJyZW50RW52KHRoaXMuYmFzZVVybCkudGhlbigoZW52aXJvbm1lbnQpID0+IHtcbiAgICAgIGlmICghbWV0cmljc1B1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICAgIGZyYW1ld29yayxcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgbWV0cmljc1B1Ymxpc2hlci5zZXQobWV0cmljc0NvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyYWNrKFwiZm9ybV9pbml0XCIpO1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IHsgRmllbGROYW1lLCBPcGVuUGF5Rm9ybSwgU3VibWl0TWV0aG9k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LElBQUksc0JBQXNCO0FBQ3hCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFjRjtBQS9CSThzQixHQUFLLFdBQVd4WCxHQUdoQndYLEdBQUssb0JBQW9CLENBQUMwQixNQUFTO0FBQ2pDLE1BQUkxQixHQUFZLFlBQVk7QUFDMUIsVUFBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBRWxGLFNBQU8sTUFBUzBCO0FBQ2xCLEdBR0ExQixHQUFLLGNBQWMsTUFDVixPQUFPLE9BQVUsTUFPMUJBLEdBQUssc0JBQXNCLENBQUN0ckIsR0FBUWl0QixHQUFrQjNaLEdBQWtCNFosT0FDL0Q7QUFBQSxFQUNMLHFCQUFxQmx0QixFQUFPO0FBQUEsRUFDNUIsU0FBUyxJQUFJLElBQUlBLEVBQU8sV0FBVzZmLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUFxTjtBQUFBLEVBQ0EsbUJBQW1CRCxFQUFpQjtBQUFBLEVBQ3BDLHdCQUF3QkEsRUFBaUI7QUFBQSxFQUN6QyxrQkFBQTNaO0FBQUEsRUFDQSxrQkFBa0J0VCxFQUFPLG9CQUFvQixDQUFDO0FBQ2hEO0FBdlZOLElBQU1tdEIsS0FBTjdCOyIsCiAgIm5hbWVzIjogWyJ6IiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgImNoYWxrIiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJTdWJtaXRNZXRob2QiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiZSIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJzdW0iLCAiYXJyIiwgImEiLCAiYiIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJwYXJhbXMiLCAidHJhY2siLCAiZmxvd1Jlc3VsdCIsICJlcnJvck1lc3NhZ2UiLCAiZXJyb3JDb2RlIiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgInJlamVjdGVkIiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJpIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgIk9qc0Vudmlyb25tZW50IiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRDdXJyZW50RW52IiwgImJhc2VVcmwiLCAicmVzcG9uc2UiLCAicmVzIiwgImV4Y2x1ZGVQcm9wcyIsICJwcm9wcyIsICJrZXkiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJGgiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJ0cmFjayIsICJvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yIiwgImVycm9yTWVzc2FnZSIsICJnZXRFcnJvck1lc3NhZ2UiLCAib25VbmNhdWdodEVycm9yIiwgImF0dGFjaEVycm9yTGlzdGVuZXJzIiwgImRldGFjaEVycm9yTGlzdGVuZXJzIiwgIkNkZUVycm9yIiwgIkN1c3RvbUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInJlc3VsdCIsICJzY2hlbWEiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJnZXRQcmVmaWxsIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInBheWxvYWQiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJjdXJyZW5jeSIsICJhbW91bnRBdG9tIiwgInN1bSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yM2RzU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJwcmVwYXJlUGF5bWVudEZsb3ciLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgInNldFVzZXJEZXZpY2VUb2tlbiIsICJkZXZpY2VUb2tlbiIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJsb2dfXyRnIiwgImVycl9fJGciLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAiY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSIsICJmaWVsZHMiLCAicGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCIsICJsb2dfXzIiLCAicHJlZmlsbCIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJjaGVja291dFJlcXVlc3QiLCAiRmllbGROYW1lIiwgImxvZ19fJGYiLCAiZXJyX18kZiIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiZmllbGROYW1lIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIkFsbEZpZWxkTmFtZXMiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyRlIiwgImVycl9fJGUiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJmb3JtQ2FsbGJhY2tzIiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJhbnlDZGVDb25uZWN0aW9uIiwgImluaXRpYWxQcmV2aWV3IiwgImVsZW1lbnRzIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgIk9qc0Zsb3dzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNvbmZpcm1SZXN1bHQiLCAiZm9ybUlucHV0cyIsICJzdHJpcGVQbSIsICJfZSIsICJpbnB1dHMiLCAicGF5ZXJGaXJzdE5hbWUiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAiZmlyc3ROYW1lIiwgImxhc3ROYW1lIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJzdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAiVGhyZWVEU1N0YXR1cyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJwYXJhbXMiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgImVycl9fIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImxvZ19fJGQiLCAiZXJyX18kZCIsICJQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJocmVmIiwgInZhdWx0SWQiLCAicGFyc2VBcmdGcm9tSHJlZiIsICJhcmdOYW1lIiwgImNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyIsICJydW5Qb2NreXQzZHNGbG93IiwgImhlYWRlcnMiLCAibG9nX18kYyIsICJlcnJfXyRjIiwgIkFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiQWR5ZW5Mb2NhbGUiLCAibG9nX18kYiIsICJlcnJfXyRiIiwgIkFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJzbGVlcCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgImNsZWFudXAiLCAib25DYW5jZWwiLCAib25QYXltZW50RmFpbGVkIiwgIm9uQWRkaXRpb25hbERldGFpbHMiLCAiXyIsICJfXyIsICJhZHllbkNoZWNrb3V0IiwgImNoZWNrb3V0IiwgImRldGVybWluZUxvY2FsZSIsICJwcmVmaWxsTG9jYWxlIiwgImJyb3dzZXJMb2NhbGUiLCAiY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMiLCAicnVuQWR5ZW4zZHNGbG93IiwgImxvZ19fJGEiLCAiZXJyX18kYSIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgInN0YXJ0UGZSZXN1bHQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJzdHJpcGVDQzNEU0Zsb3ciLCAiY29tbW9uQ0MzRFNGbG93IiwgImNjUG1JZCIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVBY3Rpb24iLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbW1vbkFjdGlvbiIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2FkU2NyaXB0IiwgInNjcmlwdElkIiwgInNyYyIsICJjaGVja0xvYWRlZEZuIiwgImV2ZW50TGlzdGVuZXJDb250cm9sbGVyIiwgInNjcmlwdCIsICJleGlzdGluZ1NjcmlwdCIsICJsb2dfXyQ5IiwgImVycl9fJDkiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgInByb3ZpZGVyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJjb25maXJtU3RyaXBlUHJQTSIsICJzdHJpcGVQbUV2dCIsICJiaWxsaW5nQWRkcmVzcyIsICJzaGlwcGluZ0FkZHJlc3MiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJsb2dfXyQ4IiwgImVycl9fJDgiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAibmV3Q3VzdG9tZXJGaWVsZHMiLCAiZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyIsICJpc1BheUZpcnN0RmxvdyIsICJzdGFydFBheW1lbnRGbG93UmVxdWVzdCIsICJwcmVBY3Rpb25VcmwiLCAiZW5jb2RlZFJlcXVlc3QiLCAic2VhcmNoUGFyYW1zIiwgInJlZGlyZWN0VXJsIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgIkZSQU1FX0JBU0VfVVJMIiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAicGF5bWVudERhdGEiLCAibGFzdE5hbWVQYXJ0cyIsICJsb2dfXyQ3IiwgImVycl9fJDciLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAidW5hdmFpbGFibGVSZXN1bHQiLCAiZ29vZ2xlUGF5Q3BtIiwgInByb2Nlc3NvckFjY291bnQiLCAiaXNSZWFkeVRvUGF5IiwgIm9uR29vZ2xlUGF5U3RhcnRGbG93IiwgInJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAiX2YiLCAiX2ciLCAiY2xpZW50IiwgImVuY3J5cHRlZFBheW1lbnRUb2tlbiIsICJzdGFydEZsb3dOZXh0QWN0aW9ucyIsICJvdXJQbUlkIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJsb2dfXyQ2IiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMSIsICJwYXltZW50U2Vzc2lvblJlc3BvbnNlIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImNvbnNlbnRJZCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJwYXltZW50UmVxdWVzdCIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgInVwZGF0ZSIsICJMT09QX0NSWVBUT19NSU5fVVNEX0NIQVJHRV9BTU9VTlRfQVRPTSIsICJMb29wQ3J5cHRvQ3BtIiwgImxvZ19fJDQiLCAiZXJyX18kNSIsICJMb29wUmVxdWlyZWRGb3JtRmllbGRzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIkxvb3BPcHRpb25hbEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm1vZGVsIiwgImluaXRMb29wRmxvdyIsICJwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIiwgInBheW1lbnRTZXR1cEluZm8iLCAiY2hhcmdlQW1vdW50VXNkQXRvbSIsICJwYXltZW50VXNkQW1vdW50IiwgInN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgIm1vYmlsZVdhbGxldFBheW1lbnREYXRhIiwgIkFwcGxlUGF5Q3BtIiwgIkdvb2dsZVBheUNwbSIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiaW5pdEF1dGhuZXRBcHBsZVBheUZsb3ciLCAicnVuQXV0aG5ldEFwcGxlUGF5RmxvdyIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRHb29nbGVQYXlGbG93IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJsb2dfXyQxIiwgImVycl9fJDIiLCAiY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAicHVibGlzaGVyIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImZsb3ciLCAiY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyIsICJlcnJfXyQxIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJDQVRFR09SWV9FUlJPUiIsICJDQVRFR09SWV9ERUJVRyIsICJfZXJyb3IiLCAiX2RlYnVnIiwgIkVOQ09ESU5HIiwgIkVOQ09ESU5HX0xFTiIsICJSQU5ET01fTEVOIiwgIlRJTUVfTEVOIiwgIlRJTUVfTUFYIiwgIlVMSURFcnJvckNvZGUiLCAiVUxJREVycm9yIiwgImVycm9yQ29kZSIsICJtZXNzYWdlIiwgInJhbmRvbUNoYXIiLCAicHJuZyIsICJyYW5kIiwgImRldGVjdFBSTkciLCAicm9vdCIsICJyb290TG9va3VwIiwgImRldGVjdFJvb3QiLCAiZ2xvYmFsQ3J5cHRvIiwgImJ1ZmZlciIsICJpbldlYldvcmtlciIsICJlbmNvZGVSYW5kb20iLCAibGVuIiwgInN0ciIsICJlbmNvZGVUaW1lIiwgIm1vZCIsICJjdXJyZW50TGVuIiwgInVsaWQiLCAic2VlZFRpbWUiLCAiY3VycmVudFBSTkciLCAic2VlZCIsICJDT09LSUVfTkFNRSIsICJnZXREZXZpY2VUb2tlbiIsICJleGlzdGluZ0Nvb2tpZSIsICJjb29raWUiLCAidG9rZW4iLCAic2V0RGV2aWNlVG9rZW4iLCAib25lWWVhckZyb21Ob3ciLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIm5leHRXaW5kb3ciLCAibnV4dFdpbmRvdyIsICJub2RlIiwgInZ1ZVdpbmRvdyIsICJnZXRGcmFtZXdvcmtWZXJzaW9uIiwgImZyYW1ld29yayIsICJkb2N1bWVudDIiLCAibmdWZXJzaW9uRWwiLCAiZ2V0RnJhbWV3b3JrSW5mbyIsICJ2ZXJzaW9uIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJpbnRlcm5hbENhbGxiYWNrcyIsICJnZXRDbGVhbk9yaWdpbiIsICJldmVudERhdGEiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZWxlbWVudElkIiwgImV2ZW50VHlwZSIsICJjcmVhdGVDb25uZWN0aW9uIiwgImlzVmFsaWRPYmplY3QiLCAiY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCIsICJpc1Jlc3VsdFZhbGlkIiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgImNvbm5lY3Rpb24iLCAic2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzIiwgImluaXRQckZsb3dzIiwgImNhbGxiYWNrcyIsICJzdHJpcGVQUiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlQnJpZGdlSWZyYW1lIiwgIkVsZW1lbnRUeXBlRW51bSIsICJjZGVMb2FkZWQiLCAiYW55Q2RlQ29ubiIsICJvanNDb250ZXh0IiwgImhlaWdodCIsICJlbGVtZW50VmFsdWUiLCAib3B0aW9ucyIsICJ0eXBlIiwgIkVsZW1lbnRUeXBlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiaW5pdEZsb3dOYW1lTWFwIiwgIlN1Ym1pdE1ldGhvZHMiLCAiYXZhaWxhYmxlUGF5bWVudE1ldGhvZHMiLCAibWV0aG9kIiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAibmV3Q2FsbGJhY2tzIiwgIm1ldHJpY3NDb250ZXh0IiwgImZvcm0iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJmb3JtRGl2IiwgIk9wZW5QYXlGb3JtIl0KfQo=